--- loncom/interface/lonpreferences.pm 2009/05/05 16:01:50 1.158 +++ loncom/interface/lonpreferences.pm 2010/03/12 15:09:23 1.186 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.158 2009/05/05 16:01:50 bisitz Exp $ +# $Id: lonpreferences.pm,v 1.186 2010/03/12 15:09:23 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(); # @@ -116,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(< @@ -165,8 +166,11 @@ sub languagechanger { = &Apache::loncommon::plainlanguagedescription($_); } } - my $selectionbox=&Apache::loncommon::select_form($language,'language', - %langchoices); + my $selectionbox= + &Apache::loncommon::select_form( + $language, + 'language', + &Apache::lonlocal::texthash(%langchoices)); $r->print(< @@ -187,7 +191,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'); @@ -205,9 +214,9 @@ sub texenginechanger { my $r = shift; Apache::lonhtmlcommon::add_breadcrumb( { href => '/adm/preferences?action=changetexenginepref', - text => 'Change How Math Equations Are Displayed'}); + text => 'Math display settings'}); $r->print(Apache::loncommon::start_page('Content Display Settings')); - $r->print(Apache::lonhtmlcommon::breadcrumbs('Change How Math Equations Are Displayed')); + $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']); @@ -217,14 +226,18 @@ sub texenginechanger { 'tth' => 'tth (TeX to HTML)', #'ttm' => 'TeX to MathML', 'jsMath' => 'jsMath', - 'mimetex' => 'mimetex (Convert to Images)' + 'mimetex' => 'mimetex (Convert to Images)', + 'raw' => 'Raw (Screen Reader)' ); - my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine', - %mathchoices); + my $selectionbox= + &Apache::loncommon::select_form( + $texengine, + 'texengine', + &Apache::lonlocal::texthash(%mathchoices)); 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', 'jsmath' => 'jsMath:', @@ -232,6 +245,21 @@ sub texenginechanger { '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'}
@@ -251,18 +279,7 @@ $lt{'exmpl'} $jsMath_start @@ -275,7 +292,7 @@ if (jsMath.nofonts == 1) {

$lt{'tth'}

- +

ENDLSCREEN if ($env{'environment.texengine'} ne 'jsMath') { @@ -367,13 +384,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(). ''. - "". "". @@ -385,15 +402,22 @@ sub rolesprefchanger { $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('Recent '.$role.'s Hotlist').'

'. +&Apache::lonhtmlcommon::start_pick_box(). +&Apache::lonhtmlcommon::row_title(''). +''. +&Apache::lonhtmlcommon::row_closure(). +&Apache::lonhtmlcommon::row_title(''). +''. +&Apache::lonhtmlcommon::row_closure(1). +&Apache::lonhtmlcommon::end_pick_box(). +'

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

'. +'

'.&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.').'

'.$roles_check_list.'
@@ -443,19 +467,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 @@ -544,7 +564,7 @@ sub verify_and_change_screenname { if ($newscreen) { &Apache::lonnet::put('environment',{'screenname' => $newscreen}); &Apache::lonnet::appenv({'environment.screenname' => $newscreen}); - $message=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Screenname').'','"'.$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'); @@ -557,7 +577,7 @@ sub verify_and_change_screenname { if ($newscreen) { &Apache::lonnet::put('environment',{'nickname' => $newscreen}); &Apache::lonnet::appenv({'environment.nickname' => $newscreen}); - $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set [_1] to [_2]',''.&mt('Nickname').'','"'.$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'); @@ -689,7 +709,7 @@ sub domcoordchanger { ('environment',['domcoord.author']); my $constchecked=''; if ($userenv{'domcoord.author'} eq 'blocked') { - $constchecked='checked="checked"'; + $constchecked=' checked="checked"'; } my $text=&mt('By default, the Domain Coordinator can enter your construction space.'); my $construction=&mt('Block access to construction space'); @@ -698,7 +718,7 @@ sub domcoordchanger { $text
-
+
ENDSCREEN @@ -773,11 +793,11 @@ sub msgforwardchanger { all => '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', - # old: 'Message Notification Email Address(es)', + 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 ', @@ -787,9 +807,9 @@ sub msgforwardchanger { ); Apache::lonhtmlcommon::add_breadcrumb( { href => '/adm/preferences?action=changemsgforward', - text => 'Change Message Forwarding/Notification'}); - $r->print(Apache::loncommon::start_page('Message Management')); - $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Message Forwarding/Notification')); + 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"); @@ -855,11 +875,12 @@ $validatescript $r->print(<$lt{'foad'} $forwardingHelp +

$lt{'fwdm'} $forwardingHelp

$lt{'foad'} ($lt{'foad_exmpl'}): -
+ +

$lt{'noti'} $notificationHelp

$lt{'mnot'} ($lt{'mnot_exmpl'}):
ENDMSG @@ -904,7 +925,7 @@ ENDMSG ''. - $lt{$type}.' '; + $lt{$type}.''.(' ' x4); } my $htmlon = ''; my $htmloff = ''; @@ -916,7 +937,7 @@ ENDMSG $output .= ' '. + &mt('Yes').''.(' ' x3). ''.(' ' x4); } $output .= ' '. + '" value="1" />'.&mt('Yes').''.(' ' x3). ''. @@ -982,28 +1003,32 @@ sub verify_and_change_msgforward { my $domain = $env{'user.domain'}; my $newscreen = ''; my $message=''; - foreach (split(/\,/,$env{'form.msgforward'})) { - my ($msuser,$msdomain)=split(/[\@\:]/,$_); + foreach my $recip (split(/\,/,$env{'form.msgforward'})) { + my ($msuser,$msdomain); + if ($recip =~ /:/) { + ($msuser,$msdomain)=split(':',$recip); + } else { + ($msuser,$msdomain)=split(/\@/,$recip); + } $msuser = &LONCAPA::clean_username($msuser); $msdomain = &LONCAPA::clean_domain($msdomain); if (($msuser) && ($msdomain)) { if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') { - $newscreen.=$msuser.':'.$msdomain.','; - } else { - $message.= &mt('No such user: ').''.$msuser.':'.$msdomain.'
'; - } + $newscreen.=$msuser.':'.$msdomain.','; + } else { + $message.= &mt('No such user: ').''.$msuser.':'.$msdomain.'
'; + } } } $newscreen=~s/\,$//; if ($newscreen) { &Apache::lonnet::put('environment',{'msgforward' => $newscreen}); &Apache::lonnet::appenv({'environment.msgforward' => $newscreen}); - $message .= &mt('Set message forwarding to ').'"'.$newscreen.'".' - .'
'; + $message .= &Apache::lonhtmlcommon::confirm_success(&mt('Set message forwarding to ').'"'.$newscreen.'".
'); } else { &Apache::lonnet::del('environment',['msgforward']); &Apache::lonnet::delenv('environment.msgforward'); - $message.= &mt("Set message forwarding to 'off'.").'
'; + $message.= &Apache::lonhtmlcommon::confirm_success(&mt("Set message forwarding to 'off'.").'
'); } my $critnotification; my $notification; @@ -1039,43 +1064,41 @@ sub verify_and_change_msgforward { if ($notification) { &Apache::lonnet::put('environment',{'notification' => $notification}); &Apache::lonnet::appenv({'environment.notification' => $notification}); - $message.=&mt('Set non-critical message notification address(es) to ').'"'.$notification.'".
'; + $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set non-critical message notification address(es) to ').'"'.$notification.'".
'); } else { &Apache::lonnet::del('environment',['notification']); &Apache::lonnet::delenv('environment.notification'); - $message.=&mt("Set non-critical message notification to 'off'.").'
'; + $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set non-critical message notification to 'off'.").'
'); } if ($critnotification) { &Apache::lonnet::put('environment',{'critnotification' => $critnotification}); &Apache::lonnet::appenv({'environment.critnotification' => $critnotification}); - $message.=&mt('Set critical message notification address(es) to ').'"'.$critnotification.'".
'; + $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set critical message notification address(es) to ').'"'.$critnotification.'".
'); } else { &Apache::lonnet::del('environment',['critnotification']); &Apache::lonnet::delenv('environment.critnotification'); - $message.=&mt("Set critical message notification to 'off'.").'
'; + $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set critical message notification to 'off'.").'
'); } if ($critnotification || $notification) { if ($notify_with_html) { &Apache::lonnet::put('environment',{'notifywithhtml' => $notify_with_html}); &Apache::lonnet::appenv({'environment.notifywithhtml' => $notify_with_html}); - $message.=&mt('Set address(es) to receive excerpts with html retained ').'"'.$notify_with_html.'".'; + $message.=&Apache::lonhtmlcommon::confirm_success(&mt('Set address(es) to receive excerpts with html retained ').'"'.$notify_with_html.'".'); } else { &Apache::lonnet::del('environment',['notifywithhtml']); &Apache::lonnet::delenv('environment.notifywithhtml'); if ($totaladdresses == 1) { - $message.=&mt("Set notification address to receive excerpts with html stripped."); + $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set notification address to receive excerpts with html stripped.")); } else { - $message.=&mt("Set all notification addresses to receive excerpts with html stripped."); + $message.=&Apache::lonhtmlcommon::confirm_success(&mt("Set all notification addresses to receive excerpts with html stripped.")); } } } else { &Apache::lonnet::del('environment',['notifywithhtml']); &Apache::lonnet::delenv('environment.notifywithhtml'); } - if ($message) { - $message .= '

'; - } &Apache::loncommon::flush_email_cache($user,$domain); + $message=&Apache::loncommon::confirmwrapper($message); &msgforwardchanger($r,$message); } @@ -1333,6 +1356,8 @@ sub jscript_send { this.document.client.elements.uname.value; this.document.pserver.elements.udom.value = this.document.client.elements.udom.options[this.document.client.elements.udom.selectedIndex].value; + this.document.pserver.elements.email.value = + this.document.client.elements.email.value; |; } $ output .= qq| @@ -1351,42 +1376,42 @@ sub client_form { 'currentpass' => 'Current Password', 'newpass' => 'New Password', 'confirmpass' => 'Confirm Password', - 'changepass' => 'Save'); + 'changepass' => 'Save', + ); - my $output = qq| - - -|; + my $output = '' + .&Apache::lonhtmlcommon::start_pick_box(); if ($caller eq 'reset_by_email') { - $output .= qq| - - - - - - - -'; + $output .= &Apache::lonhtmlcommon::row_title( + '') + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title( + '') + .'' + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title( + '') + .&Apache::loncommon::select_dom_form($defdom,'udom') + .&Apache::lonhtmlcommon::row_closure(); } else { - $output .= qq| - - -|; - } - $output .= <<"ENDFORM"; - - - - -
:
: - - -
: -|; - $output .= &Apache::loncommon::select_dom_form($defdom,'udom').' -
- -
+ $output .= &Apache::lonhtmlcommon::row_title( + '') + .'' + .&Apache::lonhtmlcommon::row_closure(); + } + $output .= &Apache::lonhtmlcommon::row_title( + '') + .'' + .&Apache::lonhtmlcommon::row_closure() + .&Apache::lonhtmlcommon::row_title( + '') + .'' + .&Apache::lonhtmlcommon::row_closure(1) + .&Apache::lonhtmlcommon::end_pick_box(); + $output .= '

' + .qq| @@ -1395,7 +1420,7 @@ sub client_form {

-ENDFORM +|; return $output; } @@ -1417,6 +1442,7 @@ sub server_form { + |; } @@ -1561,7 +1587,8 @@ ENDERROR # Inform the user the password has (not?) been changed my $message; if ($result =~ /^ok$/) { - $message = &Apache::lonhtmlcommon::confirm_success(&mt('The password for user [_1] was successfully changed.',''.$user.'')); + $message = &Apache::lonhtmlcommon::confirm_success(&mt('The password for user [_1] was successfully changed.',''.$user.'')); + $message = &Apache::loncommon::confirmwrapper($message); if ($caller eq 'reset_by_email') { $r->print($message.'
'); } else { @@ -1569,13 +1596,18 @@ ENDERROR } } else { # error error: run in circles, scream and shout - $message = &Apache::lonhtmlcommon::confirm_success( - &mt("The password for user [_1] was not changed.",''.$user.'').' '.&mt('Please make sure your old password was entered correctly.'),1); - unless ($caller eq 'reset_by_email') { + if ($caller eq 'reset_by_email') { + if (!$result) { + return 1; + } else { + return $result; + } + } else { + $message = &Apache::lonhtmlcommon::confirm_success( + &mt("The password for user [_1] was not changed.",''.$user.'').' '.&mt('Please make sure your old password was entered correctly.'),1); $message=&Apache::loncommon::confirmwrapper($message); &print_main_menu($r, $message); } - return 1; } return; } @@ -1588,7 +1620,7 @@ sub discussionchanger { Apache::lonhtmlcommon::add_breadcrumb( { href => '/adm/preferences?action=changediscussions', text => 'Change Discussion Preferences'}); - $r->print(Apache::loncommon::start_page('Message Management')); + $r->print(Apache::loncommon::start_page('Change Discussion Preferences')); $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Discussion Preferences')); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; @@ -1603,7 +1635,7 @@ sub discussionchanger { } } if (defined($userenv{'discmarkread'})) { - unless ($userenv{'discdisplay'} eq '') { + unless ($userenv{'discmarkread'} eq '') { $discmark = $userenv{'discmarkread'}; } } @@ -1647,7 +1679,7 @@ sub discussionchanger { $currmark = $lt{'ondisp'}; $newmark = 'onmark'; } - + $r->print(<<"END");
@@ -1696,11 +1728,11 @@ sub verify_and_change_discussion { if (defined($env{'form.discdisp'}) ) { my $newdisp = $env{'form.newdisp'}; if ($newdisp eq 'unread') { - $message .=&mt('In discussions: only new posts will be displayed.').'
'; + $message .=&Apache::lonhtmlcommon::confirm_success(&mt('In discussions: only new posts will be displayed.')).'
'; &Apache::lonnet::put('environment',{'discdisplay' => $newdisp}); &Apache::lonnet::appenv({'environment.discdisplay' => $newdisp}); } else { - $message .= &mt('In discussions: all posts will be displayed.').'
'; + $message .= &Apache::lonhtmlcommon::confirm_success(&mt('In discussions: all posts will be displayed.')).'
'; &Apache::lonnet::del('environment',['discdisplay']); &Apache::lonnet::delenv('environment.discdisplay'); } @@ -1799,13 +1831,102 @@ 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 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 { + 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); + } +} + +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 { - $message .= '
'.$lt{'dasp'}.''; + $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, &Apache::lonhtmlcommon::confirm_success($message)); + &print_main_menu($r,$message); } sub print_main_menu { @@ -1841,25 +1962,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', @@ -1869,13 +1971,6 @@ 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', @@ -1883,16 +1978,35 @@ my @menu= icon => 'sctr.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.' + linktitle => 'Change how math is displayed.' }, ] }, - { categorytitle=>'Message Management', + { 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=>'Messages & Notifications', items =>[ { linktext => 'Messages & Notifications', url => '/adm/preferences?action=changemsgforward', @@ -1933,25 +2047,18 @@ push(@{ $menu[0]->{items} }, { linktitle => 'Change your password.', }); } - 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.', - }); - }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.', - }); + + 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} }, { @@ -1977,16 +2084,16 @@ push(@{ $menu[4]->{items} }, { }); } - 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('My Space')); $r->print(Apache::lonhtmlcommon::breadcrumbs('Change Preferences')); @@ -2078,374 +2185,91 @@ sub handler { }elsif($env{'form.action'} eq 'verify_and_change_coursepage'){ &verify_and_change_coursepage($r); }elsif($env{'form.action'} eq 'debugtoggle'){ - &toggle_debug(); + 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 Personal Information Page}, - 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', - })); +sub toggle_debug { + if ($env{'user.debug'}) { + &Apache::lonnet::delenv('user.debug'); } 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', - })); - - - 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)$/) - && ($env{'user.domain'} =~/^(msu|gerd)$/)){ - 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'}; - } + &Apache::lonnet::appenv({'user.debug' => 1}); } - $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'}); +} + +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'); } - if ($optiontext ne '') { - $optiontext = ''.$optiontext.''; - my $helplink = ' '; - if (exists($option->{'help'})) { - $helplink = &Apache::loncommon::help_open_topic - ($option->{'help'}); + 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;