--- loncom/interface/lonpreferences.pm 2009/02/10 09:30:16 1.135 +++ loncom/interface/lonpreferences.pm 2016/09/14 17:59:30 1.196.4.20 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.135 2009/02/10 09:30:16 schafran Exp $ +# $Id: lonpreferences.pm,v 1.196.4.20 2016/09/14 17:59:30 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,58 +36,13 @@ 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; 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 # ################################################################ @@ -101,7 +56,7 @@ sub wysiwygchanger { Apache::lonhtmlcommon::add_breadcrumb( { href => '/adm/preferences?action=changewysiwyg', text => 'Change WYSIWYG Preferences'}); - $r->print(Apache::loncommon::start_page('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 @@ -116,7 +71,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(< @@ -126,7 +81,7 @@ $warning
ENDLSCREEN - $r->print('
'); + $r->print('
'); } @@ -135,9 +90,9 @@ sub verify_and_change_wysiwyg { my $newsetting=$env{'form.wysiwyg'}; &Apache::lonnet::put('environment',{'wysiwygeditor' => $newsetting}); &Apache::lonnet::appenv({'environment.wysiwygeditor' => $newsetting}); -# $r->print('

'.&mt('Setting WYSIWYG editor to:').' '.&mt($newsetting).'

'); - print_main_menu($r,'

'.&mt('Setting WYSIWYG editor to:').' ' - .&mt($newsetting).'

'); + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('WYSIWYG Editor').'',''.&mt($newsetting).'')); + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r,$message); } ################################################################ @@ -149,30 +104,18 @@ sub languagechanger { Apache::lonhtmlcommon::add_breadcrumb( { href => '/adm/preferences?action=changelanguages', text => 'Change Language'}); - $r->print(Apache::loncommon::start_page('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 - ('environment',['languages']); + my %userenv = &Apache::lonnet::get('environment',['languages']); my $language=$userenv{'languages'}; - 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($_); - } - } - my $selectionbox=&Apache::loncommon::select_form($language,'language', - %langchoices); - $r->print(< - -
$pref: $selectionbox -ENDLSCREEN - $r->print('
'); + $r->print( + '
'."\n". + ''. + '
'.&mt('Preferred language').': '. + &Apache::loncommon::select_language('language',$language,1).''."\n". + '
' + ); } @@ -187,17 +130,20 @@ sub verify_and_change_languages { if ($newlanguage) { &Apache::lonnet::put('environment',{'languages' => $newlanguage}); &Apache::lonnet::appenv({'environment.languages' => $newlanguage}); - $message=&mt('Set new preferred languages to ').'"'.$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'); - $message=&mt('Reset preferred language.'); + &Apache::lonnet::delenv('environment.languages'); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Preferred language').'')); } + $message=&Apache::loncommon::confirmwrapper($message); &Apache::loncommon::flush_langs_cache($user,$domain); - print_main_menu($r, $message); -# $r->print(< '/adm/preferences?action=changetexenginepref', - text => 'Change How Math Equations Are Displayed'}); - $r->print(Apache::loncommon::start_page('Change How Math Equations Are Displayed')); - $r->print(Apache::lonhtmlcommon::breadcrumbs('Change How Math Equations Are Displayed')); + 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']); my $texengine=$userenv{'texengine'}; + if (lc($texengine) eq 'jsmath') { + $texengine = 'MathJax'; + } my %mathchoices=('' => 'Default', 'tth' => 'tth (TeX to HTML)', #'ttm' => 'TeX to MathML', - 'jsMath' => 'jsMath', - 'mimetex' => 'mimetex (Convert to Images)' + 'MathJax' => 'MathJax', + 'mimetex' => 'mimetex (Convert to Images)', + 'raw' => 'Raw (Screen Reader)' ); - my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine', - %mathchoices); - my $jsMath_start=&Apache::lontexconvert::jsMath_header(); + %mathchoices = &Apache::lonlocal::texthash(%mathchoices); + my $selectionbox= + &Apache::loncommon::select_form( + $texengine, + 'texengine', + \%mathchoices); + my $MathJax_start=&Apache::lontexconvert::MathJax_header(); my %lt=&Apache::lonlocal::texthash( - 'headline' => 'Change Math Preferences', - 'preftxt' => 'Preferred method to display Math', - 'change' => 'Change', + 'headline' => 'Change how math is displayed', + 'preftxt' => 'Preferred method to display math', + 'change' => 'Save', 'exmpl' => 'Examples', - 'jsmath' => 'jsMath:', + 'mathjax' => 'MathJax:', + 'mathjaxinfo' => 'MathJax provides rendered equations whose source code can be extracted in TeX and MathML formats by right clicking the equation.', 'tth' => 'tth (TeX to HTML):', 'mimetex' => 'mimetex (Convert to Images):', ); @@ -239,49 +194,33 @@ sub texenginechanger {

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



$lt{'exmpl'} -

$lt{'jsmath'}

-

-$jsMath_start - - + +

+

+$lt{'mathjaxinfo'}

$lt{'mimetex'}

- +

$lt{'tth'}

- +

ENDLSCREEN - if ($env{'environment.texengine'} ne 'jsMath') { - $r->print(''); - } } @@ -292,6 +231,9 @@ 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 { @@ -303,18 +245,14 @@ sub verify_and_change_texengine { if ($newtexengine) { &Apache::lonnet::put('environment',{'texengine' => $newtexengine}); &Apache::lonnet::appenv({'environment.texengine' => $newtexengine}); - $message=&mt('Set new preferred math display to ').'"'.$newtexengine.'".'; + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Preferred method to display Math').'','"'.$newtexengine.'"')); } else { &Apache::lonnet::del('environment',['texengine']); - &Apache::lonnet::delenv('environment\.texengine'); - $message=&mt('Reset preferred math display.'); + &Apache::lonnet::delenv('environment.texengine'); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Preferred method to display Math').'')); } - - -# $r->print(< '/adm/preferences?action=changerolespref', - text => 'Change '.$role.' Page Pref'}); - $r->print(Apache::loncommon::start_page('Change '.$role.' Page Pref')); - $r->print(Apache::lonhtmlcommon::breadcrumbs('Change '.$role.' Page Pref')); + 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; } @@ -364,7 +311,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; @@ -372,13 +319,13 @@ sub rolesprefchanger { my $checked = ""; my $value = $recent_roles{$role_key}; if ($frozen_roles{$role_key}) { - $checked = "checked=\"checked\""; + $checked = ' checked="checked"'; } $count++; $roles_check_list .= &Apache::loncommon::start_data_table_row(). ''. - "". "". @@ -387,22 +334,52 @@ 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 '.$lc_role.'s 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(' +
+
'); } @@ -448,19 +425,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'); + &Apache::lonnet::delenv('environment.recentroles'); + $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 @@ -481,7 +454,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 .= "
".&mt('Unfreezing '.$role.': [_1]',$role_text{$role_key})."\n"; + $message .= "
".&Apache::lonhtmlcommon::confirm_success(&mt('Unfreezing '.$role.': [_1]',''.$role_text{$role_key}.'')); &Apache::lonhtmlcommon::store_recent('roles',$role_key,' ',0); } } @@ -489,17 +462,18 @@ sub verify_and_change_rolespref { # Freeze selected roles foreach my $role_key (@freeze_list) { if (!$frozen_roles{$role_key}) { - $message .= "
".&mt('Freezing '.$role.': [_1]',$role_text{$role_key})."\n"; + $message .= "
". + &Apache::lonhtmlcommon::confirm_success(&mt('Freezing '.$role.': [_1]',''.$role_text{$role_key}.'')); &Apache::lonhtmlcommon::store_recent('roles', $role_key,' ',1); } } - $message .= "

\n"; - -# $r->print(< '/adm/preferences?action=changescreenname', text => 'Change Screen Name'}); - $r->print(Apache::loncommon::start_page('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.') @@ -527,10 +501,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() @@ -552,11 +526,11 @@ sub verify_and_change_screenname { if ($newscreen) { &Apache::lonnet::put('environment',{'screenname' => $newscreen}); &Apache::lonnet::appenv({'environment.screenname' => $newscreen}); - $message=&mt('Set new screenname to ').'"'.$newscreen.'.".'; + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Screenname').'','"'.$newscreen.'"')); } else { &Apache::lonnet::del('environment',['screenname']); - &Apache::lonnet::delenv('environment\.screenname'); - $message=&mt('Reset screenname.'); + &Apache::lonnet::delenv('environment.screenname'); + $message=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Screenname').'')); } # Nickname $message.='
'; @@ -565,17 +539,15 @@ sub verify_and_change_screenname { if ($newscreen) { &Apache::lonnet::put('environment',{'nickname' => $newscreen}); &Apache::lonnet::appenv({'environment.nickname' => $newscreen}); - $message.=&mt('Set new nickname to ').'"'.$newscreen.'".'; + $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Nickname').'','"'.$newscreen.'"')); } else { &Apache::lonnet::del('environment',['nickname']); - &Apache::lonnet::delenv('environment\.nickname'); - $message.=&mt('Reset nickname.'); + &Apache::lonnet::delenv('environment.nickname'); + $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Reset [_1]',''.&mt('Nickname').'')); } &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); -# $r->print(< '/adm/preferences?action=changeicons', - text => 'Change Main Menu'}); - $r->print(Apache::loncommon::start_page('Change Main Menu')); - $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Main Menu')); + &Apache::lonhtmlcommon::add_breadcrumb( + { href => '/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('Change'); + 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 @@ -623,12 +609,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}); -# $r->print(&mt('Set menu mode to [_1].',$newicons)); - print_main_menu($r, &mt('Set menu mode to [_1].',$newicons)); + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Menu Display').'',''.$newchoice.'')); + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r, $message); +} + +sub icon_options { + return &Apache::lonlocal::texthash( + iconic => '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); } ################################################################ @@ -637,10 +656,10 @@ sub verify_and_change_icons { sub clickerchanger { my $r = shift; - Apache::lonhtmlcommon::add_breadcrumb( + &Apache::lonhtmlcommon::add_breadcrumb( { href => '/adm/preferences?action=changeclicker', text => 'Register Clicker'}); - $r->print(Apache::loncommon::start_page('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'}; @@ -649,14 +668,15 @@ 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(< -
    ENDLSCREEN - $r->print('

    + $r->print('

    '); } @@ -1767,7 +1829,7 @@ sub verify_and_change_coursepage { 'ywbt' => 'you will be taken to the start of the course.', 'apwb' => 'a page will be displayed that lists items in the course that may require action from you.', 'gtts' => 'Go to the start of the course', - 'dasp' => "Display the What's New page listing course action items", + 'dasp' => "Display the What's New Page", ); my $newdisp = $env{'form.newdisp'}; $message = ''.$lt{'defs'}.': '.$lt{'when'}.', '; @@ -1778,7 +1840,7 @@ sub verify_and_change_coursepage { } else { $message .= $lt{'apwb'}.'
    '; &Apache::lonnet::del('environment',['course_init_display']); - &Apache::lonnet::delenv('environment\.course_init_display'); + &Apache::lonnet::delenv('environment.course_init_display'); } my $refpage = $env{'form.refpage'}; if (($env{'request.course.fn'}) && ($env{'request.course.id'})) { @@ -1787,17 +1849,154 @@ sub verify_and_change_coursepage { my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); - $message .= '
    '.$lt{'gtts'}.' '.&mt('now').''; + $message .= '
    '.$lt{'gtts'}.' '.&mt('now').''; + } else { + $message .= '
    '.$lt{'dasp'}.''; + } + } + $message = &Apache::lonhtmlcommon::confirm_success($message); + $message = &Apache::loncommon::confirmwrapper($message); + &print_main_menu($r,$message); +} + +sub author_space_settings { + my $r = shift; + &Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=authorsettings', + text => 'Authoring Space Settings'}); + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au','ca','aa']); + if (keys(%author_roles) > 0) { + $r->print(Apache::loncommon::start_page('Authoring Space Settings')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Authoring Space Settings')); + my %userenv = &Apache::lonnet::get('environment',['nocodemirror']); + my $constchecked=''; + if ($env{'environment.nocodemirror'}) { + $constchecked=' checked="checked"'; + } + my $text=&mt('By default, CodeMirror an editor with advanced functionality for editing code is activated for authors.'); + my $cmoff=&mt('Deactivate CodeMirror. This can improve performance on slow computers and accessibility.'); + my $change=&mt('Save'); + $r->print(< + + $text
    +
    + + +ENDSCREEN + } +} + +sub change_authoring_settings { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au','ca','aa']); + if (keys(%author_roles) > 0) { + my %ausettings=('environment.nocodemirror' => ''); + if ($env{'form.cmoff'}) { $ausettings{'environment.nocodemirror'}='yes'; } + &Apache::lonnet::put('environment',\%ausettings); + &Apache::lonnet::appenv({'environment.nocodemirror' => $ausettings{'environment.nocodemirror'}}); + my $status=''; + if ($ausettings{'environment.nocodemirror'} eq 'yes') { + $status=&mt('on'); + } else { + $status=&mt('off'); + } + my $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Deactivate CodeMirror in Authoring Space').'',''.$status.'')); + $message=&Apache::loncommon::confirmwrapper($message); + &print_main_menu($r,$message); + } +} + +sub lockednameschanger { + my $r = shift; + &Apache::lonhtmlcommon::add_breadcrumb( + { href => '/adm/preferences?action=changelockednames', + text => 'Automatic name changes'}); + $r->print(Apache::loncommon::start_page('Automatic name changes')); + $r->print(Apache::lonhtmlcommon::breadcrumbs('Allow/disallow name updates')); + my %userenv = &Apache::lonnet::get('environment',['lockedname']); + my $lockedname=''; + if (&can_toggle_namelocking()) { + if ($userenv{'lockedname'}) { + $lockedname = ' checked="checked"'; + } + my %updateable; + my %domconfig = + &Apache::lonnet::get_dom('configuration',['autoupdate'],$env{'user.domain'}); + if (ref($domconfig{'autoupdate'}) eq 'HASH') { + if ($domconfig{'autoupdate'}{'run'}) { + my @inststatuses = split(':',$env{'environment.inststatus'}); + unless (@inststatuses) { + @inststatuses = ('default'); + } + %updateable = &updateable_userinfo($domconfig{'autoupdate'},\@inststatuses); + } + } + if (keys(%updateable)) { + my %longnames = &Apache::lonlocal::texthash ( + firstname => 'First Name', + middlename => 'Middle Name', + lastname => 'Last Name', + ); + my $text=&mt('By default, based on your institutional affiliation, your LON-CAPA account can be automatically updated nightly based on directory information from your institution.').'
    '.&mt('The following may be updated, unless you disallow updates:'). + '
      '; + foreach my $item ('firstname','middlename','lastname') { + if ($updateable{$item}) { + $text .= '
    • '.$longnames{$item}.'
    • '; + } + } + $text .= '
    '; + my $locking=&mt('Disallow automatic updates to name information for your LON-CAPA account'); + my $change=&mt('Save'); + $r->print(< + +$text
    +
    + + +ENDSCREEN } else { - $message .= '
    '.$lt{'dasp'}.''; + my $message = &mt('Based on your institutional affiliation no name information is automatically updated for your LON-CAPA account.'); + &print_main_menu($r,$message); } + } else { + my $message = &mt('You are not permitted to set a user preference for automatic name updates for your LON-CAPA account.'); + &print_main_menu($r,$message); } -# $r->print(<
    -#ENDVCSCREEN - print_main_menu($r, $message); +} + +sub verify_and_change_lockednames { + my $r = shift; + my $message; + if (&can_toggle_namelocking()) { + my $newlockedname = $env{'form.lockednames'}; + $newlockedname =~ s/\D//g; + my $currlockedname = $env{'environment.lockedname'}; + if ($newlockedname ne $currlockedname) { + if ($newlockedname) { + if (&Apache::lonnet::put('environment',{lockedname => $newlockedname}) eq 'ok') { + &Apache::lonnet::appenv({'environment.lockedname' => $newlockedname}); + } + } elsif (&Apache::lonnet::del('environment',['lockedname']) eq 'ok') { + &Apache::lonnet::delenv('environment.lockedname'); + } + } + my $status=''; + if ($newlockedname) { + $status=&mt('disallowed'); + } else { + $status=&mt('allowed'); + } + $message=&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]',''.&mt('Automatic update of first, middle and last names if institutional directory information indicates changes').'',''.$status.'')); + $message=&Apache::loncommon::confirmwrapper($message); + } + &print_main_menu($r,$message); } sub print_main_menu { @@ -1817,7 +2016,7 @@ if (&Apache::lonnet::usertools_access($u my @menu= ({ categorytitle=>'Personal Data', items =>[ - { linktext => 'About Me', + { linktext => 'Personal Information Page', url => $aboutmeurl, permission => $permissions{'aboutme'}, #help => 'Prefs_About_Me', @@ -1833,25 +2032,6 @@ my @menu= }, ] }, - { categorytitle=>'Page Display Settings', - items =>[ - { linktext => 'Color Scheme', - url => '/adm/preferences?action=changecolors', - permission => 'F', - #help => 'Change_Colors', - icon => 'preferences-desktop-theme.png', - linktitle => 'Change LON-CAPA default colors.' - }, - { linktext => 'Menu Display', - url => '/adm/preferences?action=changeicons', - permission => 'F', - #help => '', - icon => 'preferences-system-windows.png', - linktitle => 'Change whether the menus are displayed with buttons, icons or icons and text.' - } - - ] - }, { categorytitle=>'Content Display Settings', items =>[ { linktext => 'Language', @@ -1861,32 +2041,43 @@ my @menu= icon => 'preferences-desktop-locale.png', linktitle => 'Choose the default language for this user.' }, - { linktext => 'WYSIWYG Editor', - url => '/adm/preferences?action=changewysiwyg', - permission => 'F', - #help => '', - icon => 'edit-select-all.png', - linktitle => 'Enable or disable the WYSIWYG-Editor.' - }, { linktext => $role.' Page', url => '/adm/preferences?action=changerolespref', permission => 'F', #help => '', - icon => 'sctr.png', + icon => 'role_hotlist.png', linktitle => 'Configure the roles hotlist.' }, - { linktext => 'Display of Scientific Equations', + { linktext => 'Math display settings', url => '/adm/preferences?action=changetexenginepref', permission => 'F', #help => '', - icon => 'stat.png', - linktitle => 'Change how Scientific Equations are displayed.' + icon => 'dismath.png', + linktitle => 'Change how math is displayed.' + }, + ] + }, + { categorytitle=>'Page Display Settings', + items =>[ + { linktext => 'Color Scheme', + url => '/adm/preferences?action=changecolors', + permission => 'F', + #help => 'Change_Colors', + icon => 'preferences-desktop-theme.png', + linktitle => 'Change LON-CAPA default colors.' }, + { linktext => 'Menu Display', + url => '/adm/preferences?action=changeicons', + permission => 'F', + #help => '', + icon => 'preferences-system-windows.png', + linktitle => 'Change whether the menus are displayed with icons or icons and text.' + } ] }, - { categorytitle=>'Message Management', + { categorytitle=>'Messages & Notifications', items =>[ - { linktext => 'Messages & Notifications', + { linktext => 'Messages & Notifications', url => '/adm/preferences?action=changemsgforward', permission => 'F', #help => 'Prefs_Messages', @@ -1897,14 +2088,14 @@ my @menu= url => '/adm/preferences?action=changediscussions', permission => 'F', #help => 'Change_Discussion_Display', - icon => 'mail-message-new.png', + icon => 'chat.png', linktitle => 'Set display preferences for discussion posts for both discussion boards and individual resources in all your courses.' }, ] }, { categorytitle=>'Other', items =>[ - { linktext => 'Register Response Devices ("Clickers")', + { linktext => 'Register Response Devices ("Clickers")', url => '/adm/preferences?action=changeclicker', permission => 'F', #help => '', @@ -1927,23 +2118,35 @@ push(@{ $menu[0]->{items} }, { } if ($env{'environment.remote'} eq 'off') { push(@{ $menu[1]->{items} }, { - linktext => 'Launch Remote Control', - url => '/adm/remote?url=/adm/preferences?action=launch', - permission => 'F', - #help => '', - icon => 'network-wireless.png', - linktitle => 'Launch the remote control for LON-CAPA.', - }); + linktext => 'Launch Remote Control', + url => '/adm/remote?url=/adm/preferences&action=launch', + permission => 'F', + #help => '', + icon => 'remotecontrol.png', + linktitle => 'Launch the remote control for LON-CAPA.', + }); }else{ push(@{ $menu[1]->{items} }, { - linktext => 'Collapse Remote Control', - url => '/adm/remote?url=/adm/preferences?action=collapse', - permission => 'F', - #help => '', - icon => 'network-wireless.png', - linktitle => 'Collapse the remote control for LON-CAPA.', - }); + linktext => 'Collapse Remote Control', + url => '/adm/remote?url=/adm/preferences&action=collapse', + permission => 'F', + #help => '', + icon => 'remotecontrol.png', + linktitle => 'Collapse the remote control for LON-CAPA.', + }); + } + + if (&can_toggle_namelocking()) { + push(@{ $menu[0]->{items} }, { + linktext => 'Automatic name changes', + url => '/adm/preferences?action=changelockednames', + permission => 'F', + #help => '', + icon => 'system-lock-screen.png', + linktitle => 'Allow/disallow propagation of name changes from institutional directory service', + }); } + my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']); if (keys(%author_roles) > 0) { push(@{ $menu[4]->{items} }, { @@ -1964,23 +2167,23 @@ push(@{ $menu[4]->{items} }, { url => '/adm/preferences?action=changecourseinit', permission => 'F', #help => '', - icon => 'edit-copy.png', + icon => 'course_ini.png', linktitle => 'Set the default page to be displayed when you select a course role.', }); } - if ($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/) { + if (&can_toggle_debug()) { push(@{ $menu[4]->{items} }, { - linktext => 'Toggle Debug Messages (Current:'.$env{'user.debug'}.')', + linktext => 'Toggle Debug Messages (Currently '.($env{'user.debug'} ? 'on)' : 'off)'), url => '/adm/preferences?action=debugtoggle', permission => 'F', #help => '', icon => 'blog.png', linktitle => 'Toggle Debug Messages.', }); - } + } - $r->print(&Apache::loncommon::start_page('Change Preferences')); + $r->print(&Apache::loncommon::start_page('My Space')); $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Preferences')); $r->print($message); $r->print(Apache::lonhtmlcommon::generate_menu(@menu)); @@ -2006,15 +2209,25 @@ sub handler { ['action','wysiwyg','returnurl','refpage']); # Apache::lonhtmlcommon::clear_breadcrumbs(); + my ($brlink,$brtxt,$brhelp); + if (($env{'form.action'} eq 'changerolespref') && ($env{'form.returnurl'} eq '/adm/roles')) { + $brlink ='/adm/roles'; + $brtxt = 'User Roles'; + } else { + $brlink ='/adm/preferences'; + $brtxt = 'Set User Preferences'; + $brhelp = 'Prefs_About_Me,Prefs_Language,Prefs_Screen_Name_Nickname,Change_Colors,Change_Password,Prefs_Messages,Change_Discussion_Display'; + } Apache::lonhtmlcommon::add_breadcrumb - ({href => '/adm/preferences', - text => 'Set User Preferences'}); + ({href => $brlink, + text => $brtxt, + help => $brhelp,}); if(!exists $env{'form.action'}) { - &print_main_menu($r); + &print_main_menu($r); }elsif($env{'form.action'} eq 'changepass'){ &passwordchanger($r); }elsif($env{'form.action'} eq 'verify_and_change_pass'){ - &verify_and_change_password($r); + &verify_and_change_password($r,'preferences'); }elsif($env{'form.action'} eq 'changescreenname'){ &screennamechanger($r); }elsif($env{'form.action'} eq 'verify_and_change_screenname'){ @@ -2067,374 +2280,96 @@ sub handler { &coursedisplaychanger($r); }elsif($env{'form.action'} eq 'verify_and_change_coursepage'){ &verify_and_change_coursepage($r); + }elsif($env{'form.action'} eq 'authorsettings'){ + &author_space_settings($r); + }elsif($env{'form.action'} eq 'change_authoring_settings'){ + &change_authoring_settings($r); }elsif($env{'form.action'} eq 'debugtoggle'){ - toggle_debug(); - print_main_menu($r); + if (&can_toggle_debug()) { + &toggle_debug(); + } + &print_main_menu($r); + } elsif ($env{'form.action'} eq 'changelockednames') { + &lockednameschanger($r); + } elsif ($env{'form.action'} eq 'verify_and_change_lockednames') { + &verify_and_change_lockednames($r); } - return OK; - + # Properly end the HTML page of all preference pages + # started in each sub routine + # Exception: print_main_menu has its own end_page call + unless (!exists $env{'form.action'} || + $env{'form.action'} eq 'debugtoggle') { + $r->print(&Apache::loncommon::end_page()); + } + return OK; } -#remove when done -#old handler routine -sub handler2 { - my $r = shift; - my $user = $env{'user.name'}; - my $domain = $env{'user.domain'}; - &Apache::loncommon::content_type($r,'text/html'); - # Some pages contain DES keys and should not be cached. - &Apache::loncommon::no_cache($r); - $r->send_http_header; - return OK if $r->header_only; - # - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['action','wysiwyg','returnurl','refpage']); - # - &Apache::lonhtmlcommon::clear_breadcrumbs(); - &Apache::lonhtmlcommon::add_breadcrumb - ({href => '/adm/preferences', - text => 'Set User Preferences'}); - - my @Options; - # Determine current authentication method - my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); - if ($currentauth =~ /^(unix|internal):/) { - push (@Options,({ action => 'changepass', - linktext => 'Change Password', - href => '/adm/preferences', - help => 'Change_Password', - subroutine => \&passwordchanger, - breadcrumb => - { href => '/adm/preferences?action=changepass', - text => 'Change Password'}, - }, - { action => 'verify_and_change_pass', - subroutine => \&verify_and_change_password, - breadcrumb => - { href =>'/adm/preferences?action=changepass', - text => 'Change Password'}, - printmenu => 'not_on_error', - })); - } - push (@Options,({ action => 'changescreenname', - linktext => 'Change Screen Name', - href => '/adm/preferences', - help => 'Prefs_Screen_Name_Nickname', - subroutine => \&screennamechanger, - breadcrumb => - { href => '/adm/preferences?action=changescreenname', - text => 'Change Screen Name'}, - }, - { action => 'verify_and_change_screenname', - subroutine => \&verify_and_change_screenname, - breadcrumb => - { href => '/adm/preferences?action=changescreenname', - text => 'Change Screen Name'}, - printmenu => 'yes', - })); - - push (@Options,({ action => 'changemsgforward', - linktext => 'Change Message Forwarding and Notification E-mail Addresses', - href => '/adm/preferences', - help => 'Prefs_Messages', - breadcrumb => - { href => '/adm/preferences?action=changemsgforward', - text => 'Change Message Forwarding/Notification'}, - subroutine => \&msgforwardchanger, - }, - { action => 'verify_and_change_msgforward', - help => 'Prefs_Messages', - breadcrumb => - { href => '/adm/preferences?action=changemsgforward', - text => 'Change Message Forwarding/Notification'}, - printmenu => 'yes', - subroutine => \&verify_and_change_msgforward })); - my $aboutmeaction= - '/adm/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/aboutme'; - push (@Options,{ action => 'none', - linktext => - q{Edit the 'About Me' Personal Information Screen}, - help => 'Prefs_About_Me', - href => $aboutmeaction}); - push (@Options,({ action => 'changecolors', - linktext => 'Change Color Scheme', - href => '/adm/preferences', - help => 'Change_Colors', - breadcrumb => - { href => '/adm/preferences?action=changecolors', - text => 'Change Colors'}, - subroutine => \&colorschanger, - }, - { action => 'verify_and_change_colors', - breadcrumb => - { href => '/adm/preferences?action=changecolors', - text => 'Change Colors'}, - printmenu => 'yes', - subroutine => \&verify_and_change_colors, - })); - push (@Options,({ action => 'changelanguages', - linktext => 'Change Language Preferences', - href => '/adm/preferences', - help => 'Prefs_Language', - breadcrumb=> - { href => '/adm/preferences?action=changelanguages', - text => 'Change Language'}, - subroutine => \&languagechanger, - }, - { action => 'verify_and_change_languages', - breadcrumb=> - {href => '/adm/preferences?action=changelanguages', - text => 'Change Language'}, - printmenu => 'yes', - subroutine=>\&verify_and_change_languages, } - )); - push (@Options,({ action => 'changewysiwyg', - linktext => 'Change WYSIWYG Editor Preferences', - href => '/adm/preferences', - breadcrumb => - { href => '/adm/preferences?action=changewysiwyg', - text => 'Change WYSIWYG Preferences'}, - subroutine => \&wysiwygchanger, - }, - { action => 'set_wysiwyg', - breadcrumb => - { href => '/adm/preferences?action=changewysiwyg', - text => 'Change WYSIWYG Preferences'}, - printmenu => 'yes', - subroutine => \&verify_and_change_wysiwyg, } - )); - push (@Options,({ action => 'changediscussions', - linktext => 'Change Discussion Display Preferences', - href => '/adm/preferences', - help => 'Change_Discussion_Display', - breadcrumb => - { href => '/adm/preferences?action=changediscussions', - text => 'Change Discussion Preferences'}, - subroutine => \&discussionchanger, - }, - { action => 'verify_and_change_discussion', - breadcrumb => - { href => '/adm/preferences?action=changediscussions', - text => 'Change Discussion Preferences'}, - printmenu => 'yes', - subroutine => \&verify_and_change_discussion, } - )); - - my $role = ($env{'user.adv'} ? 'Roles' : 'Course'); - push (@Options,({ action => 'changerolespref', - linktext => 'Change '.$role.' Page Preferences', - href => '/adm/preferences', - subroutine => \&rolesprefchanger, - breadcrumb => - { href => '/adm/preferences?action=changerolespref', - text => 'Change '.$role.' Page Pref'}, - }, - { action => 'verify_and_change_rolespref', - subroutine => \&verify_and_change_rolespref, - breadcrumb => - { href => '/adm/preferences?action=changerolespref', - text => 'Change '.$role.' Page Preferences'}, - printmenu => 'yes', - })); - - push (@Options,({ action => 'changetexenginepref', - linktext => 'Change How Math Equations Are Displayed', - href => '/adm/preferences', - subroutine => \&texenginechanger, - breadcrumb => - { href => '/adm/preferences?action=changetexenginepref', - text => 'Change Math Pref'}, - }, - { action => 'verify_and_change_texengine', - subroutine => \&verify_and_change_texengine, - breadcrumb => - { href => '/adm/preferences?action=changetexenginepref', - text => 'Change Math Preferences'}, - printmenu => 'yes', - })); - - if ($env{'environment.remote'} eq 'off') { - push (@Options,({ action => 'launch', - linktext => 'Launch Remote Control', - href => '/adm/remote?url=/adm/preferences', - })); - } else { - push (@Options,({ action => 'collapse', - linktext => 'Collapse Remote Control', - href => '/adm/remote?url=/adm/preferences', - })); - } - - push (@Options,({ action => 'changeicons', - linktext => 'Change How Menus are Displayed', - href => '/adm/preferences', - subroutine => \&iconchanger, - breadcrumb => - { href => '/adm/preferences?action=changeicons', - text => 'Change Main Menu'}, - }, - { action => 'verify_and_change_icons', - subroutine => \&verify_and_change_icons, - breadcrumb => - { href => '/adm/preferences?action=changeicons', - text => 'Change Main Menu'}, - printmenu => 'yes', - })); - - push (@Options,({ action => 'changeclicker', - linktext => 'Register Response Devices ("Clickers")', - href => '/adm/preferences', - subroutine => \&clickerchanger, - breadcrumb => - { href => '/adm/preferences?action=changeclicker', - text => 'Register Clicker'}, - }, - { action => 'verify_and_change_clicker', - subroutine => \&verify_and_change_clicker, - breadcrumb => - { href => '/adm/preferences?action=changeclicker', - text => 'Register Clicker'}, - printmenu => 'yes', - })); - my %author_roles = &Apache::lonnet::get_my_roles($user,$domain,'userroles','',['au']); - if (keys(%author_roles) > 0) { - push (@Options,({ action => 'changedomcoord', - linktext => 'Restrict Domain Coordinator Access', - href => '/adm/preferences', - subroutine => \&domcoordchanger, - breadcrumb => - { href => '/adm/preferences?action=changedomcoord', - text => 'Restrict Domain Coordinator Access'}, - }, - { action => 'verify_and_change_domcoord', - subroutine => \&verify_and_change_domcoord, - breadcrumb => - { href => '/adm/preferences?action=changedomcoord', - text => 'Restrict Domain Coordinator Access'}, - printmenu => 'yes', - })); - } - - push (@Options,({ action => 'lockwarning', - subroutine => \&lockwarning, - breadcrumb => - { href => '/adm/preferences?action=lockwarning', - text => 'Lock Warnings'}, - }, - { action => 'verify_and_change_locks', - subroutine => \&verify_and_change_lockwarning, - breadcrumb => - { href => '/adm/preferences?action=lockwarning', - text => 'Lockwarnings'}, - printmenu => 'yes', - })); +sub toggle_debug { + if ($env{'user.debug'}) { + &Apache::lonnet::delenv('user.debug'); + } else { + &Apache::lonnet::appenv({'user.debug' => 1}); + } +} - if (&Apache::lonnet::allowed('whn',$env{'request.course.id'}) - || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/' - .$env{'request.course.sec'})) { - push (@Options,({ action => 'changecourseinit', - linktext => 'Change Course Initialization Preference', - href => '/adm/preferences', - subroutine => \&coursedisplaychanger, - breadcrumb => - { href => '/adm/preferences?action=changecourseinit', - text => 'Change Course Init. Pref.'}, - }, - { action => 'verify_and_change_coursepage', - breadcrumb => - { href => '/adm/preferences?action=changecourseinit', text => 'Change Course Initialization Preference'}, - printmenu => 'yes', - subroutine => \&verify_and_change_coursepage, - })); - } - - if ($env{'user.name'} =~ /^(albertel|fox|foxr|kortemey|korte|raeburn)$/) { - push (@Options,({ action => 'debugtoggle', - printmenu => 'yes', - subroutine => \&toggle_debug, - })); - } - - $r->print(&Apache::loncommon::start_page('Change Preferences')); - - my $call = undef; - my $help = undef; - my $printmenu = 'yes'; - foreach my $option (@Options) { - if ($option->{'action'} eq $env{'form.action'}) { - $call = $option->{'subroutine'}; - $printmenu = $option->{'printmenu'}; - if (exists($option->{'breadcrumb'})) { - &Apache::lonhtmlcommon::add_breadcrumb - ($option->{'breadcrumb'}); - } - $help=$option->{'help'}; - } - } - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Change Preferences',$help)); - my $error; - if (defined($call)) { - $error = $call->($r); - } - if ( ( ($printmenu eq 'yes') - || ($printmenu eq 'not_on_error' && !$error) ) - && (!$env{'form.returnurl'})) { - my $optionlist = ''; - if ($env{'user.name'} =~ - /^(albertel|kortemey|fox|foxr|korte|hallmat3|turtle|raeburn)$/ - ) { - push (@Options,({ action => 'debugtoggle', - linktext => 'Toggle Debug Messages', - text => 'Current Debug status is -'. - $env{'user.debug'}.'-.', - href => '/adm/preferences', - printmenu => 'yes', - subroutine => \&toggle_debug, - })); - } - foreach my $option(@Options) { - my $optiontext = ''; - if (exists($option->{'href'})) { - $option->{'href_args'}{'action'}=$option->{'action'}; - $optiontext .= - ''. - &mt($option->{'linktext'}).''; - } - if (exists($option->{'text'})) { - $optiontext .= ' '.&mt($option->{'text'}); - } - if ($optiontext ne '') { - $optiontext = ''.$optiontext.''; - my $helplink = ' '; - if (exists($option->{'help'})) { - $helplink = &Apache::loncommon::help_open_topic - ($option->{'help'}); +sub can_toggle_debug { + my $can_toggle = 0; + my $page = 'toggledebug'; + if (&LONCAPA::lonauthcgi::can_view($page)) { + $can_toggle = 1; + } elsif (&LONCAPA::lonauthcgi::check_ipbased_access($page)) { + $can_toggle = 1; + } + return $can_toggle; +} + +sub can_toggle_namelocking { + my $lockablenames; + my %domconfig = + &Apache::lonnet::get_dom('configuration',['autoupdate'],$env{'user.domain'}); + if (ref($domconfig{'autoupdate'}) eq 'HASH') { + if ($domconfig{'autoupdate'}{'run'}) { + my @inststatuses = split(':',$env{'environment.inststatus'}); + unless (@inststatuses) { + @inststatuses = ('default'); + } + my %updateable = &updateable_userinfo($domconfig{'autoupdate'},\@inststatuses); + if ($updateable{'lastname'} || $updateable{'firstname'} || + $updateable{'middlename'}) { + if (ref($domconfig{'autoupdate'}{'lockablenames'}) eq 'ARRAY') { + unless (@inststatuses) { + @inststatuses = ('default'); + } + foreach my $status (@inststatuses) { + if (grep(/^\Q$status\E$/,@{$domconfig{'autoupdate'}{'lockablenames'}})) { + $lockablenames = 1; + last; + } + } } - $optionlist .= ''. - ''. - ''. - ''; } } - $optionlist .= '
    '.$helplink.''.$optiontext.'
    '; - $r->print($optionlist); - } elsif ($env{'form.returnurl'}) { - $r->print('
    '. - &mt('Return').''); } - $r->print(&Apache::loncommon::end_page()); - return OK; + return $lockablenames; } -sub toggle_debug { - if ($env{'user.debug'}) { - &Apache::lonnet::delenv('user\.debug'); - } else { - &Apache::lonnet::appenv({'user.debug' => 1}); +sub updateable_userinfo { + my ($autoupdate,$inststatuses) = @_; + my %updateable; + return %updateable unless ((ref($autoupdate) eq 'HASH') && + (ref($inststatuses) eq 'ARRAY')); + if (ref($autoupdate->{'fields'}) eq 'HASH') { + foreach my $status (@{$inststatuses}) { + if (ref($autoupdate->{'fields'}{$status}) eq 'ARRAY') { + foreach my $field (@{$autoupdate->{'fields'}{$status}}) { + $updateable{$field} = 1; + } + } + } } + return %updateable; } 1;