--- loncom/interface/lonpreferences.pm 2016/08/05 20:47:30 1.196.4.18 +++ loncom/interface/lonpreferences.pm 2012/10/04 13:41:10 1.199 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.196.4.18 2016/08/05 20:47:30 raeburn Exp $ +# $Id: lonpreferences.pm,v 1.199 2012/10/04 13:41:10 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,8 @@ use strict; use LONCAPA; use Apache::Constants qw(:common); use Apache::File; +use Crypt::DES; +use DynaLoader; # for Crypt::DES version use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonlocal; @@ -43,6 +45,50 @@ use Apache::lonnet; use LONCAPA::lonauthcgi(); use LONCAPA(); +# +# Write lonnet::passwd to do the call below. +# Use: +# my $answer=reply("encrypt:passwd:$udom:$uname:$upass",$tryserver); +# +################################################## +# password associated functions # +################################################## +sub des_keys { + # Make a new key for DES encryption. + # Each key has two parts which are returned separately. + # Please note: Each key must be passed through the &hex function + # before it is output to the web browser. The hex versions cannot + # be used to decrypt. + my @hexstr=('0','1','2','3','4','5','6','7', + '8','9','a','b','c','d','e','f'); + my $lkey=''; + for (0..7) { + $lkey.=$hexstr[rand(15)]; + } + my $ukey=''; + for (0..7) { + $ukey.=$hexstr[rand(15)]; + } + return ($lkey,$ukey); +} + +sub des_decrypt { + my ($key,$cyphertext) = @_; + my $keybin=pack("H16",$key); + my $cypher; + if ($Crypt::DES::VERSION>=2.03) { + $cypher=new Crypt::DES $keybin; + } else { + $cypher=new DES $keybin; + } + my $plaintext= + $cypher->decrypt(unpack("a8",pack("H16",substr($cyphertext,0,16)))); + $plaintext.= + $cypher->decrypt(unpack("a8",pack("H16",substr($cyphertext,16,16)))); + $plaintext=substr($plaintext,1,ord(substr($plaintext,0,1)) ); + return $plaintext; +} + ################################################################ # Handler subroutines # ################################################################ @@ -106,16 +152,32 @@ sub languagechanger { text => 'Change Language'}); $r->print(Apache::loncommon::start_page('Content Display Settings')); $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Language')); - my %userenv = &Apache::lonnet::get('environment',['languages']); + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['languages']); my $language=$userenv{'languages'}; - $r->print( - '
'."\n". - ''. - '
'.&mt('Preferred language').': '. - &Apache::loncommon::select_language('language',$language,1).''."\n". - '
' - ); + my $pref=&mt('Preferred language'); + my %langchoices=('' => 'No language preference'); + foreach (&Apache::loncommon::languageids()) { + if (&Apache::loncommon::supportedlanguagecode($_)) { + $langchoices{&Apache::loncommon::supportedlanguagecode($_)} + = &Apache::loncommon::plainlanguagedescription($_); + } + } + %langchoices = &Apache::lonlocal::texthash(%langchoices); + my $selectionbox= + &Apache::loncommon::select_form( + $language, + 'language', + \%langchoices); + $r->print(< + +
$pref: $selectionbox +ENDLSCREEN + $r->print('
'); } @@ -160,14 +222,12 @@ sub texenginechanger { my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get('environment',['texengine']); my $texengine=$userenv{'texengine'}; - if (lc($texengine) eq 'jsmath') { - $texengine = 'MathJax'; - } my %mathchoices=('' => 'Default', 'tth' => 'tth (TeX to HTML)', #'ttm' => 'TeX to MathML', - 'MathJax' => 'MathJax', + 'jsMath' => 'jsMath', + 'MathJax' => 'MathJax', 'mimetex' => 'mimetex (Convert to Images)', 'raw' => 'Raw (Screen Reader)' ); @@ -178,17 +238,33 @@ sub texenginechanger { 'texengine', \%mathchoices); my $MathJax_start=&Apache::lontexconvert::MathJax_header(); + my $jsMath_start=&Apache::lontexconvert::jsMath_header(); my %lt=&Apache::lonlocal::texthash( 'headline' => 'Change how math is displayed', 'preftxt' => 'Preferred method to display math', 'change' => 'Save', 'exmpl' => 'Examples', 'mathjax' => 'MathJax:', - 'mathjaxinfo' => 'MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.', + 'jsmath' => 'jsMath:', 'tth' => 'tth (TeX to HTML):', 'mimetex' => 'mimetex (Convert to Images):', ); + my $jsMathWarning='

' + .'

' + .&mt("It looks like you don't have the TeX math fonts installed.") + .'
' + .'
' + .&mt('The jsMath example on this page may not look right without them. ' + .'The [_1]jsMath Home Page[_2] has information on how to download the ' + .'needed fonts. In the meantime, jsMath will do the best it can ' + .'with the fonts you have, but it may not be pretty and some equations ' + .'may not be rendered correctly.' + ,'' + ,'') + .'
' + .'

'; + $r->print(<$lt{'headline'}
@@ -205,22 +281,37 @@ $lt{'exmpl'}

$lt{'mathjax'}

- + +

+

+MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.

+ +

$lt{'jsmath'}

-$lt{'mathjaxinfo'} +$jsMath_start + +

$lt{'mimetex'}

- +

$lt{'tth'}

- +

ENDLSCREEN + if ($env{'environment.texengine'} ne 'jsMath') { + $r->print(''); + } } @@ -231,9 +322,6 @@ sub verify_and_change_texengine { # Screenname my $newtexengine = $env{'form.texengine'}; $newtexengine=~s/[^\-\w]//g; - if (lc($newtexengine) eq 'jsmath') { - $newtexengine = 'MathJax'; - } if ($newtexengine eq 'ttm') { &Apache::lonnet::appenv({'browser.mathml' => 1}); } else { @@ -282,7 +370,7 @@ sub rolesprefchanger { my $hotlist_n=$userenv{'recentrolesn'}; my ($checkedon,$checkedoff); if ($hotlist_flag) { - $checkedon = 'checked="checked"'; + $checkedon = 'checked="checked"'; } else { $checkedoff = 'checked="checked"'; } @@ -365,17 +453,17 @@ $options.' &Apache::lonhtmlcommon::row_closure(1). &Apache::lonhtmlcommon::end_pick_box().' '); - if ($roles_check_list) { + if ($roles_check_list) { $r->print('

'.&mt('Freeze Roles').'

'.&mt('The table below can be used to [_1]freeze[_2] '.$lc_role.'s in the Hotlist.','','').'
'. -&mt('Those '.$lc_role.'s marked frozen will not be removed from the list, even if not recently used.').' +&mt('Those marked frozen will not be removed from the list, even if not recently used.').'

'.$roles_check_list.'
'); } else { $r->print('
'. - &mt('Once the Hotlist contains recently visited '.$lc_role.'s you can return to this page to also set frozen roles.')); + &mt('Once the Hotlist contains recently visited '.$lc_role.'s, you can return to this page to also set frozen roles.')); } $r->print('
@@ -719,8 +807,8 @@ sub domcoordchanger { if ($userenv{'domcoord.author'} eq 'blocked') { $constchecked=' checked="checked"'; } - my $text=&mt('By default, the Domain Coordinator can enter your Authoring Space.'); - my $construction=&mt('Block access to Authoring Space'); + my $text=&mt('By default, the Domain Coordinator can enter your construction space.'); + my $construction=&mt('Block access to construction space'); my $change=&mt('Save'); $r->print(< @@ -746,7 +834,7 @@ sub verify_and_change_domcoord { } else { $status=&mt('off'); } - my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Block access to Authoring Space').'',''.$status.'')); + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Block access to construction space').'',''.$status.'')); $message=&Apache::loncommon::confirmwrapper($message); &print_main_menu($r,$message); } @@ -762,7 +850,7 @@ sub lockwarning { my $textbottom=&mt('Changing roles or logging out may result in data corruption.'); my ($num,%which)=&Apache::lonnet::get_locks(); my $which=''; - foreach my $id (keys(%which)) { + foreach my $id (keys %which) { $which.='
  • '.$which{$id}.'
  • '; } my $change=&mt('Override'); @@ -804,15 +892,15 @@ sub msgforwardchanger { foad => 'Forward to account(s)', fwdm => 'Forward messages to other account(s) in LON-CAPA', noti => 'E-mail notification of LON-CAPA messages', + foad_exmpl => 'e.g. userA:domain1,userB:domain2,...', mnot => 'E-mail address(es) which should be notified about new LON-CAPA messages', + mnot_exmpl => 'e.g. joe@doe.com', chg => 'Save', email => 'The e-mail address entered in row ', notv => 'is not a valid e-mail address', toen => "To enter multiple addresses, enter one address at a time, click 'Change' and then add the next one", prme => 'Back', ); - $lt{'foad_exmpl'} = &mt('e.g. [_1]userA:domain1,userB:domain2,...[_2]','',''); - $lt{'mnot_exmpl'} = &mt('e.g. [_1]joe@doe.com[_2]','',''); Apache::lonhtmlcommon::add_breadcrumb( { href => '/adm/preferences?action=changemsgforward', text => 'Messages & Notifications'}); @@ -916,7 +1004,7 @@ ENDMSG '" onclick="javscript:delete_address('."'$num'".')" />'. &mt('Delete').''. ''; my %chk; if (defined($allnot{$item}{'crit'})) { @@ -965,7 +1053,7 @@ ENDMSG ''.&mt('Add new address').''. ''; + '" onFocus="javascript:new_address('."'$num'".')" />'; foreach my $type ('all','crit','reg') { $output .= '