--- loncom/interface/lonpreferences.pm 2009/09/23 15:12:54 1.125.8.1 +++ loncom/interface/lonpreferences.pm 2012/08/27 16:30:31 1.196.4.5 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.125.8.1 2009/09/23 15:12:54 gci Exp $ +# $Id: lonpreferences.pm,v 1.196.4.5 2012/08/27 16:30:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -42,6 +42,7 @@ use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonlocal; use Apache::lonnet; +use LONCAPA::lonauthcgi(); use LONCAPA(); # @@ -98,6 +99,12 @@ sub des_decrypt { sub wysiwygchanger { my $r = shift; + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changewysiwyg', + text => 'Change WYSIWYG Preferences'}); + $r->print(Apache::loncommon::start_page('Content Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change WYSIWYG Preferences')); + my %userenv = &Apache::lonnet::get ('environment',['wysiwygeditor']); my $onselect='checked="checked"'; @@ -110,7 +117,7 @@ sub wysiwygchanger { my $switchon=&mt('Enable WYSIWYG editor'); my $warning=''; if ($env{'user.adv'}) { - $warning.="

".&mt("The WYSIWYG editor only supports simple HTML and is in many cases unsuited for advanced authoring. In a number of cases, it may destroy advanced authoring involving LaTeX and script function calls.")."

"; + $warning.='

'.&mt("The WYSIWYG editor only supports simple HTML and is in many cases unsuited for advanced authoring. In a number of cases, it may destroy advanced authoring involving LaTeX and script function calls.")."

"; } $r->print(< @@ -131,9 +138,7 @@ sub verify_and_change_wysiwyg { &Apache::lonnet::appenv({'environment.wysiwygeditor' => $newsetting}); my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('WYSIWYG Editor').'',''.&mt($newsetting).'')); $message=&Apache::loncommon::confirmwrapper($message); - $r->print(< '/adm/preferences?action=changelanguages', + text => 'Change Language'}); + $r->print(Apache::loncommon::start_page('Content Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Language')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -155,8 +166,12 @@ sub languagechanger { = &Apache::loncommon::plainlanguagedescription($_); } } - my $selectionbox=&Apache::loncommon::select_form($language,'language', - %langchoices); + %langchoices = &Apache::lonlocal::texthash(%langchoices); + my $selectionbox= + &Apache::loncommon::select_form( + $language, + 'language', + \%langchoices); $r->print(< @@ -177,7 +192,12 @@ sub verify_and_change_languages { if ($newlanguage) { &Apache::lonnet::put('environment',{'languages' => $newlanguage}); &Apache::lonnet::appenv({'environment.languages' => $newlanguage}); - $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Preferred language').'','"'.$newlanguage.'".')); + $message=&Apache::lonhtmlcommon::confirm_success( + &mt('Set [_1] to [_2]', + ''.&mt('Preferred language').'', + '"'.$newlanguage.'".')) + .'
' + .&mt('The change will become active on the next page.'); } else { &Apache::lonnet::del('environment',['languages']); &Apache::lonnet::delenv('environment.languages'); @@ -185,9 +205,7 @@ sub verify_and_change_languages { } $message=&Apache::loncommon::confirmwrapper($message); &Apache::loncommon::flush_langs_cache($user,$domain); - $r->print(< '/adm/preferences?action=changetexenginepref', + text => 'Math display settings'}); + $r->print(Apache::loncommon::start_page('Content Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Math display settings')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get('environment',['texengine']); @@ -204,17 +227,24 @@ sub texenginechanger { 'tth' => 'tth (TeX to HTML)', #'ttm' => 'TeX to MathML', 'jsMath' => 'jsMath', + 'MathJax' => 'MathJax', 'mimetex' => 'mimetex (Convert to Images)', 'raw' => 'Raw (Screen Reader)' ); - my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine', - %mathchoices); + %mathchoices = &Apache::lonlocal::texthash(%mathchoices); + my $selectionbox= + &Apache::loncommon::select_form( + $texengine, + 'texengine', + \%mathchoices); + my $MathJax_start=&Apache::lontexconvert::MathJax_header(); my $jsMath_start=&Apache::lontexconvert::jsMath_header(); my %lt=&Apache::lonlocal::texthash( - 'headline' => 'Change Math Preferences', - 'preftxt' => 'Preferred method to display Math', + 'headline' => 'Change how math is displayed', + 'preftxt' => 'Preferred method to display math', 'change' => 'Save', 'exmpl' => 'Examples', + 'mathjax' => 'MathJax:', 'jsmath' => 'jsMath:', 'tth' => 'tth (TeX to HTML):', 'mimetex' => 'mimetex (Convert to Images):', @@ -240,7 +270,7 @@ sub texenginechanger {

-$lt{'preftxt'}: $selectionbox +$lt{'preftxt'}: $selectionbox

@@ -249,13 +279,22 @@ $lt{'preftxt'}: $selectionbox
$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'}

$jsMath_start -

@@ -267,11 +306,11 @@ if (jsMath.nofonts == 1) {

$lt{'tth'}

- +

ENDLSCREEN if ($env{'environment.texengine'} ne 'jsMath') { - $r->print(''); + $r->print(''); } } @@ -301,9 +340,7 @@ sub verify_and_change_texengine { $message=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Preferred method to display Math').'')); } $message=&Apache::loncommon::confirmwrapper($message); - $r->print(< '/adm/preferences?action=changerolespref', + text => $brtext}); + $r->print(Apache::loncommon::start_page('Content Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs($brtitle)); my $hotlist_flag=$userenv{'recentroles'}; my $hotlist_n=$userenv{'recentrolesn'}; - my $checked; + my ($checkedon,$checkedoff); if ($hotlist_flag) { - $checked = ' checked="checked"'; + $checkedon = 'checked="checked"'; + } else { + $checkedoff = 'checked="checked"'; } if (!$hotlist_n) { $hotlist_n=3; } @@ -348,7 +399,7 @@ sub rolesprefchanger { &Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row(). "".&mt('Freeze '.$role)."". - "".&mt($role)."". + "".&mt($role)."". &Apache::loncommon::end_data_table_header_row(). "\n"; my $count; @@ -371,21 +422,51 @@ sub rolesprefchanger { $roles_check_list .= "\n"; } + my $actionurl = '/adm/preferences'; + if ($env{'form.returnurl'} eq '/adm/roles') { + $actionurl = '/adm/roles'; + } + $r->print('

'.&mt('Recent Roles Hotlist').'

'); + unless ($checkedon) { + $r->print(&mt('LON-CAPA users with several '.$lc_role.'s may wish to enable the Hotlist.').'
'); + } $r->print(' -

'.&mt('Some LON-CAPA users have a long list of '.$lc_role.'s. The Recent '.$role.'s Hotlist feature keeps track of the last N '.$lc_role.'s which have been visited and places a table of these at the top of the '.$lc_role.'s page. People with very few '.$lc_role.'s should leave this feature disabled.').' -

- + -
-
'.&mt('Number of '.$role.'s in Hotlist:').' - -

'.&mt('This list below can be used to freeze '.$lc_role.'s on your screen. Those marked as frozen will not be removed from the list, even if they have not been used recently.').' + +

'.&mt('Hotlist options').'

+

'. +&mt('When enabled, the Hotlist keeps track of the last N '.$lc_role.'s visited.').'
'. +&mt('Those N '.$lc_role.'s are then shown in a table at the top of the '.$lc_role.'s page.').'

'. +&Apache::lonhtmlcommon::start_pick_box(). +&Apache::lonhtmlcommon::row_title(&mt('Use Recent '.$role.'s Hotlist')). +' +'. +(' 'x2). +' +'. +&Apache::lonhtmlcommon::row_closure(). +&Apache::lonhtmlcommon::row_title(''). +''. +&Apache::lonhtmlcommon::row_closure(1). +&Apache::lonhtmlcommon::end_pick_box().' +
'); + 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 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.')); + } + $r->print(' +
'); } @@ -432,19 +513,15 @@ sub verify_and_change_rolespref { if ($hotlist_flag) { &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag}); &Apache::lonnet::appenv({'environment.recentroles' => $hotlist_flag}); - $message=&mt('Recent '.$role.'s Hotlist is Enabled'); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Recent '.$role.'s Hotlist is Enabled.')." ".&mt('Display [_1] Most Recent '.$role.'s.',$hotlist_n)); } else { &Apache::lonnet::del('environment',['recentroles']); &Apache::lonnet::delenv('environment.recentroles'); - $message=&mt('Recent '.$role.'s Hotlist is Disabled'); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Recent '.$role.'s Hotlist is Disabled')); } if ($hotlist_n) { &Apache::lonnet::put('environment',{'recentrolesn' => $hotlist_n}); &Apache::lonnet::appenv({'environment.recentrolesn' => $hotlist_n}); - if ($hotlist_flag) { - $message.="
". - &mt('Display [_1] Most Recent '.$role.'s',$hotlist_n)."\n"; - } } # Get list of froze roles and list of recent roles @@ -465,7 +542,7 @@ sub verify_and_change_rolespref { # Unset any roles that were previously frozen but aren't in list foreach my $role_key (sort(keys(%recent_roles))) { if (($frozen_roles{$role_key}) && (!exists($freeze{$role_key}))) { - $message .= "
".&Apache::lonhtmlcommon::confirm_success(&mt('Unfreezing '.$role.': [_1]',''.$role_text{$role_key}.'')); + $message .= "
".&Apache::lonhtmlcommon::confirm_success(&mt('Unfreezing '.$role.': [_1]',''.$role_text{$role_key}.'')); &Apache::lonhtmlcommon::store_recent('roles',$role_key,' ',0); } } @@ -480,9 +557,11 @@ sub verify_and_change_rolespref { } } $message=&Apache::loncommon::confirmwrapper($message); - $r->print(< '/adm/preferences?action=changescreenname', + text => 'Change Screen Name'}); + $r->print(Apache::loncommon::start_page('Personal Data')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Screen Name')); $r->print('

' .&mt('Change the name that is displayed in your posts.') .'

' @@ -505,10 +589,10 @@ sub screennamechanger { $r->print('
' .'' .&Apache::lonhtmlcommon::start_pick_box() - .&Apache::lonhtmlcommon::row_title(&mt('New screenname (shown if you post anonymously)')) + .&Apache::lonhtmlcommon::row_title(&mt('Screenname').' '.&mt('(shown if you post anonymously)')) .'' .&Apache::lonhtmlcommon::row_closure() - .&Apache::lonhtmlcommon::row_title(&mt('New nickname (shown if you post non-anonymously)')) + .&Apache::lonhtmlcommon::row_title(&mt('Nickname').' '.&mt('(shown if you post non-anonymously)')) .'' .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title() @@ -551,9 +635,7 @@ sub verify_and_change_screenname { } &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); $message=&Apache::loncommon::confirmwrapper($message); - $r->print(< '/adm/preferences?action=changeicons', + text => 'Change Menu Display'}); + $r->print(Apache::loncommon::start_page('Page Display Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Menu Display')); + my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; - my %userenv = &Apache::lonnet::get - ('environment',['icons']); + my %userenv = &Apache::lonnet::get('environment',['icons']); my $iconic='checked="checked"'; - my $classic=''; - my $onlyicon=''; + my ($classic,$onlyicon,$iconic_preview,$iconsonly_preview); if ($userenv{'icons'} eq 'classic') { - $classic='checked="checked"'; - $iconic=''; + $iconic=''; + $classic='
'. + &mt('Your current selection: "Use buttons and text" is deprecated - it is recommended that you change this to "Use icons and text".').'
'; } if ($userenv{'icons'} eq 'iconsonly') { $onlyicon='checked="checked"'; $iconic=''; } - my $useicons=&mt('Use icons and text'); - my $usebuttons=&mt('Use buttons and text'); - my $useicononly=&mt('Use icons only'); my $change=&mt('Save'); + my %lt = &icon_options(); + my ($inlinetools,$toolsorder) = &icon_previews(); + if ((ref($inlinetools) eq 'HASH') && (ref($toolsorder) eq 'ARRAY')) { + foreach my $tool (@{$toolsorder}) { + my ($command,$row,$col,$img,$top,$bot,$act,$desc) = + split(/\&/,$inlinetools->{$tool}); + $iconic_preview .= '
  • '.$desc.''.$top.(' ' x 2).'
  • '; + $iconsonly_preview .= '
  • '.$desc.' 
  • '; + } + } + $iconsonly_preview = '
    • '. + '
        '. + $iconsonly_preview. + '
    '; + $iconic_preview = '
    • '. + '
        '. + $iconic_preview. + '
    '; $r->print(< -
    -
    -
    +$iconic_preview
    +$iconsonly_preview
    ENDSCREEN @@ -595,15 +697,45 @@ sub verify_and_change_icons { my $r = shift; my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; - my $newicons = $env{'form.menumode'}; - + my $newicons = $env{'form.menumode'}; + my %lt = &icon_options(); + my $newchoice = $newicons; + if ($lt{$newicons}) { + $newchoice = $lt{$newicons}; + } &Apache::lonnet::put('environment',{'icons' => $newicons}); &Apache::lonnet::appenv({'environment.icons' => $newicons}); - my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Menu Display').'',''.$newicons.'')); + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Menu Display').'',''.$newchoice.'')); $message=&Apache::loncommon::confirmwrapper($message); - $r->print(< 'Use icons and text', + iconsonly => 'Use icons only', + ); +} + +sub icon_previews { + my %icon_text = ( + annotate => 'Notes', + wishlist => 'Stored Links', + catalog => 'Info', + evaluate => 'Evaluate', + feedback => 'Communicate', + printout => 'Print', + ); + my %inlinetools = ( + printout => "s&8&3&prt.png&$icon_text{'printout'}&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document", + wishlist => "s&9&1&wishlist-link.png&$icon_text{'wishlist'}&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository", + evaluate => "s&8&1&eval.png&$icon_text{'evaluate'}&this[_1]&gopost('/adm/evaluate',currentURL,1)&Provide my evaluation of this resource", + feedback => "s&8&2&fdbk.png&$icon_text{'feedback'}&discuss[_1]&gopost('/adm/feedback',currentURL,1)&Provide feedback messages or contribute to the course discussion about this resource", + annotate => "s&9&3&anot.png&$icon_text{'annotate'}&tations[_1]&annotate()&Make notes and annotations about this resource", + catalog => "s&6&3&catalog.png&$icon_text{'catalog'}&info[_1]&catalog_info()&Show Metadata", + ); + my @toolsorder = qw(annotate wishlist evaluate feedback printout catalog); + return (\%inlinetools,\@toolsorder); } ################################################################ @@ -612,6 +744,11 @@ ENDVCSCREEN sub clickerchanger { my $r = shift; + &Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changeclicker', + text => 'Register Clicker'}); + $r->print(Apache::loncommon::start_page('Other')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Register Clicker')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -619,7 +756,7 @@ sub clickerchanger { my $clickers=$userenv{'clickers'}; $clickers=~s/\,/\n/gs; my $text=&mt('Enter response device ("clicker") numbers'); - my $change=&mt('Register'); + my $change=&mt('Save'); my $helplink=&Apache::loncommon::help_open_topic('Clicker_Registration',&mt('Locating your clicker ID')); $r->print(< @@ -648,9 +785,7 @@ sub verify_and_change_clicker { &Apache::lonnet::appenv({'environment.clickers' => $newclickers}); my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Registering clickers: [_1]',$newclickers)); $message=&Apache::loncommon::confirmwrapper($message); - $r->print(< '/adm/preferences?action=changedomcoord', + text => 'Restrict Domain Coordinator Access'}); + $r->print(Apache::loncommon::start_page('Restrict Domain Coordinator Access')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Restrict Domain Coordinator Access')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -696,9 +836,7 @@ sub verify_and_change_domcoord { } my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Block access to construction space').'',''.$status.'')); $message=&Apache::loncommon::confirmwrapper($message); - $r->print(< 'All', crit => 'Critical only', reg => 'Non-critical only', - foad => 'Forwarding Address(es)', - noti => 'Notification E-mail Address(es)', + 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 => '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 'Save' and then add the next one", + toen => "To enter multiple addresses, enter one address at a time, click 'Change' and then add the next one", prme => 'Back', ); + Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changemsgforward', + text => 'Messages & Notifications'}); + $r->print(Apache::loncommon::start_page('Messages & Notifications')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Messages & Notifications')); my $forwardingHelp = &Apache::loncommon::help_open_topic("Prefs_Forwarding"); my $notificationHelp = &Apache::loncommon::help_open_topic("Prefs_Notification"); my $criticalMessageHelp = &Apache::loncommon::help_open_topic("Course_Critical_Message"); @@ -769,7 +913,7 @@ sub msgforwardchanger { my %allnot = &get_notifications(\%userenv); my $validatescript = &Apache::lonhtmlcommon::javascript_valid_email(); my $jscript = qq| -