--- loncom/interface/lonpreferences.pm 2005/06/06 02:29:46 1.60 +++ loncom/interface/lonpreferences.pm 2007/04/17 18:28:44 1.99 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.60 2005/06/06 02:29:46 albertel Exp $ +# $Id: lonpreferences.pm,v 1.99 2007/04/17 18:28:44 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,6 +33,7 @@ package Apache::lonpreferences; use strict; +use LONCAPA; use Apache::Constants qw(:common); use Apache::File; use Crypt::DES; @@ -41,6 +42,7 @@ use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonlocal; use Apache::lonnet; +use LONCAPA(); # # Write lonnet::passwd to do the call below. @@ -98,20 +100,20 @@ sub wysiwygchanger { my $r = shift; my %userenv = &Apache::lonnet::get ('environment',['wysiwygeditor']); + my $onselect='checked="checked"'; my $offselect=''; - my $onselect='checked="1"'; - if ($userenv{'wysiwygeditor'}) { + if ($userenv{'wysiwygeditor'} eq 'on') { $onselect=''; - $offselect='checked="1"'; + $offselect='checked="checked"'; } my $switchoff=&mt('Disable WYSIWYG editor'); my $switchon=&mt('Enable WYSIWYG editor'); $r->print(< +

- $switchoff
- $switchon +
+ ENDLSCREEN $r->print('
'); } @@ -147,7 +149,7 @@ sub languagechanger { my $selectionbox=&Apache::loncommon::select_form($language,'language', %langchoices); $r->print(< +
$pref: $selectionbox ENDLSCREEN @@ -188,33 +190,30 @@ sub texenginechanger { my $texengine=$userenv{'texengine'}; my $pref=&mt('Preferred method to display Math'); - my %mathchoices=('' => 'No Preference', + my %mathchoices=('' => 'Default', 'tth' => 'TeX to HTML', - 'ttm' => 'TeX to MathML', + #'ttm' => 'TeX to MathML', 'jsMath' => 'jsMath', 'mimetex' => 'Convert to Images' ); my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine', %mathchoices); - my $mathexample='$$\int\left(\frac{a+b}{c^6*d}\right)$$'; - my $jsMath_example=&Apache::lontexconvert::jsMath_converted(\$mathexample); - $mathexample='$$\int\left(\frac{a+b}{c^6*d}\right)$$'; - my $tth_example=&Apache::lontexconvert::tth_converted(\$mathexample); - $mathexample='$$\int\left(\frac{a+b}{c^6*d}\right)$$'; - my $mimetex_example=&Apache::lontexconvert::mimetex_converted(\$mathexample); + my $jsMath_start=&Apache::lontexconvert::jsMath_header(); my $change=&mt('Change'); $r->print(< +
+ +

$pref: $selectionbox

Examples: -

TeX to HTML
$tth_example

- - +

TeX to HTML
+ +

jsMath
- +$jsMath_start + -$jsMath_example

-

Convert to Images
$mimetex_example

+

+

Convert to Images
+
+ +

ENDLSCREEN if ($env{'environment.texengine'} ne 'jsMath') { $r->print(''); @@ -277,6 +280,8 @@ ENDVCSCREEN ################################################################ sub rolesprefchanger { my $r = shift; + my $role = ($env{'user.adv'} ? 'Role' : 'Course'); + my $lc_role = ($env{'user.adv'} ? 'role' : 'course'); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; my %userenv = &Apache::lonnet::get @@ -296,52 +301,154 @@ sub rolesprefchanger { $options .= "\n"; } - $r->print(<Some LON-CAPA users have a long list of roles. The Recent Roles Hotlist -feature keeps track of the last N roles which have been -visited and places a table of these at the top of the roles page. -People with very few roles should leave this feature disabled. -

+# Get list of recent roles and display with checkbox in front + my $roles_check_list = ''; + my $role_key=''; + if ($env{'environment.recentroles'}) { + my %recent_roles = + &Apache::lonhtmlcommon::get_recent('roles',$env{'environment.recentrolesn'}); + my %frozen_roles = + &Apache::lonhtmlcommon::get_recent_frozen('roles',$env{'environment.recentrolesn'}); + + my %role_text = &rolespref_get_role_text([keys(%recent_roles)]); + my @sorted_roles = sort {$role_text{$a} cmp $role_text{$b}} keys(%role_text); + + $roles_check_list .= + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + "".&mt('Freeze '.$role)."". + "".&mt($role)."". + &Apache::loncommon::end_data_table_header_row(). + "\n"; + my $count; + foreach $role_key (@sorted_roles) { + my $checked = ""; + my $value = $recent_roles{$role_key}; + if ($frozen_roles{$role_key}) { + $checked = "checked=\"checked\""; + } + $count++; + $roles_check_list .= + &Apache::loncommon::start_data_table_row(). + ''. + "". + "". + &Apache::loncommon::end_data_table_row(). "\n"; + } + $roles_check_list .= "\n"; + } -
+ $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.').' +

+ -
Enable Recent Roles Hotlist: - -
Number of roles in Hotlist: +
+
'.&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.').' +

+'.$roles_check_list.'
- -
-ENDSCREEN + +'); +} + +sub rolespref_get_role_text { +# Get a line of text for each role + my ($roles) = @_; + my %roletext = (); + + foreach my $item (@$roles) { +# get course information + my ($role,$rest) = split(/\./, $item); + my $trole = ""; + $trole = &Apache::lonnet::plaintext($role); + my ($tdomain,$other,$tsection)= split(/\//,Apache::lonnet::declutter($rest)); + my $tother = '-'; + if ($role =~ /^(cc|st|in|ta|ep|cr)/ ) { + my %newhash=&Apache::lonnet::coursedescription($tdomain."_".$other); + $tother = " - ".$newhash{'description'}; + } elsif ($role =~ /dc/) { + $tother = ""; + } else { + $tother = " - $other"; + } + + my $section=""; + if ($tsection) { + $section = " - Section/Group: $tsection"; + } + $roletext{$item} = $tdomain." - ".$trole.$tother.$section; + } + return %roletext; } sub verify_and_change_rolespref { my $r = shift; + my $role = ($env{'user.adv'} ? 'Role' : 'Course'); my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; # Recent Roles Hotlist Flag my $hotlist_flag = $env{'form.recentroles'}; my $hotlist_n = $env{'form.recentrolesn'}; - my $message=''; + my $message='
'; if ($hotlist_flag) { &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag}); &Apache::lonnet::appenv('environment.recentroles' => $hotlist_flag); - $message='Recent Roles Hotlist is Enabled'; + $message=&mt('Recent '.$role.'s Hotlist is Enabled'); } else { &Apache::lonnet::del('environment',['recentroles']); &Apache::lonnet::delenv('environment\.recentroles'); - $message='Recent Roles Hotlist is Disabled'; + $message=&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.="
Display $hotlist_n Most Recent Roles\n"; + $message.="
". + &mt('Display [_1] Most Recent '.$role.'s',$hotlist_n)."\n"; + } + } + +# Get list of froze roles and list of recent roles + my @freeze_list = &Apache::loncommon::get_env_multiple('form.freezeroles'); + my %freeze = (); + my %roletext = (); + + foreach my $key (@freeze_list) { + $freeze{$key}='1'; + } + + my %recent_roles = + &Apache::lonhtmlcommon::get_recent('roles',$env{'environment.recentrolesn'}); + my %frozen_roles = + &Apache::lonhtmlcommon::get_recent_frozen('roles',$env{'environment.recentrolesn'}); + my %role_text = &rolespref_get_role_text([keys(%recent_roles)]); + +# 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"; + &Apache::lonhtmlcommon::store_recent('roles',$role_key,' ',0); } } +# Freeze selected roles + foreach my $role_key (@freeze_list) { + if (!$frozen_roles{$role_key}) { + $message .= "
".&mt('Freezing '.$role.': [_1]',$role_text{$role_key})."\n"; + &Apache::lonhtmlcommon::store_recent('roles', + $role_key,' ',1); + } + } + $message .= "

\n"; + $r->print(<print(< +

New screenname (shown if you post anonymously): @@ -402,13 +509,52 @@ sub verify_and_change_screenname { &Apache::lonnet::delenv('environment\.nickname'); $message.='Reset nickname'; } - + &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); $r->print(<print(< + +
+
+ + +ENDSCREEN +} + +sub verify_and_change_icons { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $newicons = $env{'form.menumode'}; + + &Apache::lonnet::put('environment',{'icons' => $newicons}); + &Apache::lonnet::appenv('environment.icons' => $newicons); + $r->print(&mt('Set menu mode to [_1].',$newicons)); +} + +################################################################ # Message Forward # ################################################################ @@ -429,7 +575,7 @@ sub msgforwardchanger { $r->print(< -
+ New Forwarding Address(es) (user:domain,user:domain,...):
@@ -450,8 +596,8 @@ sub verify_and_change_msgforward { my $message=''; foreach (split(/\,/,$env{'form.msgforward'})) { my ($msuser,$msdomain)=split(/[\@\:]/,$_); - $msuser=~s/\W//g; - $msdomain=~s/\W//g; + $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.','; @@ -504,17 +650,7 @@ ENDVCMSG sub colorschanger { my $r = shift; # figure out colors - my $function='student'; - if ($env{'request.role'}=~/^(cc|in|ta|ep)/) { - $function='coordinator'; - } - if ($env{'request.role'}=~/^(su|dc|ad|li)/) { - $function='admin'; - } - if (($env{'request.role'}=~/^(au|ca)/) || - ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) { - $function='author'; - } + my $function=&Apache::loncommon::get_users_function(); my $domain=&Apache::loncommon::determinedomain(); my %colortypes=('pgbg' => 'Page Background', 'tabbg' => 'Header Background', @@ -523,19 +659,23 @@ sub colorschanger { 'link' => 'Un-Visited Link', 'vlink' => 'Visited Link', 'alink' => 'Active Link'); + my $start_data_table = &Apache::loncommon::start_data_table(); my $chtable=''; foreach my $item (sort(keys(%colortypes))) { my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain); - $chtable.=''.$colortypes{$item}.'      Select'; + .$item."','parmform.pres','psub'".');">Select'. + &Apache::loncommon::end_data_table_row()."\n"; } + my $end_data_table = &Apache::loncommon::end_data_table(); my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); $r->print(< + -$errormessage - -

- +|; +} - - - - - - -

+sub client_form { + my ($caller,$hexkey,$currentpass,$defdom) = @_; + my %lt=&Apache::lonlocal::texthash( + 'email' => 'EMail Address', + 'username' => 'Username', + 'domain' => 'Domain', + 'currentpass' => 'Current Password', + 'newpass' => 'New Password', + 'confirmpass' => 'Confirm Password', + 'changepass' => 'Change Password'); + my $output = qq|
- +|; + if ($caller eq 'reset_by_email') { + $output .= qq| + + + + + + + +'; + } else { + $output .= qq| + - +|; + } + $output .= <<"ENDFORM"; + - +
Current password:
:
: + + +
: +|; + $output .= &Apache::loncommon::select_dom_form($defdom,'udom').' +
New password:
Confirm password:
- +
- - - - - - + + + + + +

ENDFORM - # - return; + return $output; +} + +sub server_form { + my ($logtoken,$caller,$mailtoken) = @_; + my $action = '/adm/preferences'; + if ($caller eq 'reset_by_email') { + $action = '/adm/resetpw'; + } + my $output = qq| +
+ + + + + |; + if ($caller eq 'reset_by_email') { + $output .= qq| + + + + +|; + } + $output .= qq| + +
+|; + return $output; } sub verify_and_change_password { - my $r = shift; - my $user = $env{'user.name'}; - my $domain = $env{'user.domain'}; - my $homeserver = $env{'user.home'}; + my ($r,$caller,$mailtoken) = @_; + my ($user,$domain,$homeserver); + if ($caller eq 'reset_by_email') { + $user = $env{'form.uname'}; + $domain = $env{'form.udom'}; + if ($user ne '' && $domain ne '') { + $homeserver = &Apache::lonnet::homeserver($user,$domain); + if ($homeserver eq 'no_host') { + &passwordchanger($r,"

\n". + &mt("Invalid username and/or domain")."\n

", + $caller,$mailtoken); + return 1; + } + } else { + &passwordchanger($r,"

\n". + &mt("Username and domain were blank")."\n

", + $caller,$mailtoken); + return 1; + } + } else { + $user = $env{'user.name'}; + $domain = $env{'user.domain'}; + $homeserver = $env{'user.home'}; + } my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); # Check for authentication types that allow changing of the password. - return if ($currentauth !~ /^(unix|internal):/); - # - my $html=&Apache::lonxml::xmlbegin(); - $r->print(< -LON-CAPA Preferences: Change password for $user - -ENDHEADER + if ($currentauth !~ /^(unix|internal):/) { + if ($caller eq 'reset_by_email') { + &passwordchanger($r,"

\n". + &mt("Authentication type for this user can not be changed by this mechanism"). + "\n

", + $caller,$mailtoken); + return 1; + } else { + return; + } + } # my $currentpass = $env{'form.currentpass'}; my $newpass1 = $env{'form.newpass_1'}; @@ -756,8 +1014,9 @@ ENDHEADER unless (defined($currentpass) && defined($newpass1) && defined($newpass2) ){ - &passwordchanger($r,"

\nERROR". - "Password data was blank.\n

"); + &passwordchanger($r,"

\n". + &mt("One or more password fields were blank"). + "\n

",$caller,$mailtoken); return; } # Get the keys @@ -765,34 +1024,48 @@ ENDHEADER my $tmpinfo = Apache::lonnet::reply('tmpget:'.$logtoken,$lonhost); if (($tmpinfo=~/^error/) || ($tmpinfo eq 'con_lost')) { # I do not a have a better idea about how to handle this + my $tryagain_text = &mt('Please log out and try again.'); + if ($caller eq 'reset_by_email') { + $tryagain_text = &mt('Please try again later.'); + } + my $unable=&mt("Unable to retrieve stored token for password decryption"); $r->print(< -ERROR: Unable to retrieve stored token for -password decryption. Please log out and try again. +$unable. $tryagain_text

ENDERROR # Probably should log an error here - return; + return 1; } my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo); # $currentpass = &des_decrypt($ckey ,$currentpass); $newpass1 = &des_decrypt($n1key,$newpass1); $newpass2 = &des_decrypt($n2key,$newpass2); - # + # + if ($caller eq 'reset_by_email') { + my %data = &Apache::lonnet::tmpget($mailtoken); + if ($currentpass ne $data{'temppasswd'}) { + &passwordchanger($r, + ''. + &mt('Could not verify current authentication').'. '. + &mt('Please try again').'.',$caller,$mailtoken); + return 1; + } + } if ($newpass1 ne $newpass2) { &passwordchanger($r, - 'ERROR:'. - 'The new passwords you entered do not match. '. - 'Please try again.'); - return; + ''. + &mt('The new passwords you entered do not match').'. '. + &mt('Please try again').'.',$caller,$mailtoken); + return 1; } if (length($newpass1) < 7) { &passwordchanger($r, - 'ERROR:'. - 'Passwords must be a minimum of 7 characters long. '. - 'Please try again.'); - return; + ''. + &mt('Passwords must be a minimum of 7 characters long').'. '. + &mt('Please try again').'.',$caller,$mailtoken); + return 1; } # # Check for bad characters @@ -802,31 +1075,30 @@ ENDERROR } if ($badpassword) { # I can't figure out how to enter bad characters on my browser. - &passwordchanger($r,<ERROR: -The password you entered contained illegal characters.
-Valid characters are: space and
+ my $errormessage =''. + &mt('The password you entered contained illegal characters').'.
'. + &mt('Valid characters are').(<<"ENDERROR"); +: space and
 !"\#$%&\'()*+,-./0123456789:;<=>?\@
 ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_\`abcdefghijklmnopqrstuvwxyz{|}~
-
+
ENDERROR + &passwordchanger($r,$errormessage,$caller,$mailtoken); + return 1; } # # Change the password (finally) my $result = &Apache::lonnet::changepass - ($user,$domain,$currentpass,$newpass1,$homeserver); + ($user,$domain,$currentpass,$newpass1,$homeserver,$caller); # Inform the user the password has (not?) been changed if ($result =~ /^ok$/) { - $r->print(<<"ENDTEXT"); -

The password for $user was successfully changed

-ENDTEXT + $r->print("

".&mt('The password for [_1] was successfully changed',$user)."

"); } else { # error error: run in circles, scream and shout - $r->print(<The password for $user was not changed -Please make sure your old password was entered correctly. -ENDERROR + $r->print("

".&mt("The password for [_1] was not changed",$user)."

". + &mt('Please make sure your old password was entered correctly').'.'); + return 1; } return; } @@ -895,40 +1167,38 @@ sub discussionchanger { } $r->print(<<"END"); -
+
-$lt{'sdpf'}
$lt{'prca'}
  1. $lt{'whpo'}
  2. $lt{'unwh'}
+$lt{'sdpf'}
$lt{'prca'}
  1. $lt{'whpo'}
  2. $lt{'unwh'}


- - - - -
- - - - -
- - - - - +END + $r->print(&Apache::loncommon::start_data_table()); + $r->print(<<"END"); + + + + - +END + $r->print(&Apache::loncommon::start_data_table_row()); + $r->print(<<"END"); - - + +END + $r->print(&Apache::loncommon::end_data_table_row(). + &Apache::loncommon::start_data_table_row()); + $r->print(<<"END"); - + -
$lt{'pref'}$lt{'curr'}$lt{'actn'}?
$lt{'pref'}$lt{'curr'}$lt{'actn'}?
$lt{'disa'} $lt{$discdisp} $lt{'chgt'} "$dispchange"
$lt{'npmr'} $lt{$discmark} $lt{'chgt'} "$markchange"
-
-
+END + $r->print(&Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table()); + $r->print(<<"END");

@@ -947,11 +1217,11 @@ sub verify_and_change_discussion { if (defined($env{'form.discdisp'}) ) { my $newdisp = $env{'form.newdisp'}; if ($newdisp eq 'unread') { - $message .='In discussions: only new posts will be displayed.
'; + $message .='In discussions: only new posts will be displayed.
'; &Apache::lonnet::put('environment',{'discdisplay' => $newdisp}); &Apache::lonnet::appenv('environment.discdisplay' => $newdisp); } else { - $message .= 'In discussions: all posts will be displayed.
'; + $message .= 'In discussions: all posts will be displayed.
'; &Apache::lonnet::del('environment',['discdisplay']); &Apache::lonnet::delenv('environment\.discdisplay'); } @@ -959,11 +1229,11 @@ sub verify_and_change_discussion { if (defined($env{'form.discmark'}) ) { my $newmark = $env{'form.newmark'}; if ($newmark eq 'ondisp') { - $message.='In discussions: new posts will be cease to be identified as "new" after display.
'; + $message.='In discussions: new posts will be cease to be identified as "new" after display.
'; &Apache::lonnet::put('environment',{'discmarkread' => $newmark}); &Apache::lonnet::appenv('environment.discmarkread' => $newmark); } else { - $message.='In discussions: posts will be identified as "new" until marked as read by the reader.
'; + $message.='In discussions: posts will be identified as "new" until marked as read by the reader.
'; &Apache::lonnet::del('environment',['discmarkread']); &Apache::lonnet::delenv('environment\.discmarkread'); } @@ -973,6 +1243,85 @@ $message ENDVCSCREEN } +################################################################ +# Subroutines for page display on course access (Course Coordinators) +################################################################ +sub coursedisplaychanger { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get('environment',['course_init_display']); + my $currvalue = 'whatsnew'; + my $firstselect = ''; + my $whatsnewselect = 'checked="checked"'; + if (exists($userenv{'course_init_display'})) { + if ($userenv{'course_init_display'} eq 'firstres') { + $currvalue = 'firstres'; + $firstselect = 'checked="checked"'; + $whatsnewselect = ''; + } + } + my %pagenames = ( + firstres => 'First resource', + whatsnew => "What's new page", + ); + my $whatsnew_off=&mt('Display the [_1] in the course.','first resource'); + my $whatsnew_on=&mt('Display the "[_1]" page - a summary of items in the course which require attention.',"What's New"); + + $r->print('
'.&mt('Set the default page to be displayed when you select a course role').' '.&mt('(Currently: [_1])',$pagenames{$currvalue}).'
'.&mt('The global user preference you set for your courses can be overridden in an individual course by setting a course specific setting via the "[_1]" page in the course',"What's New").'

'); + $r->print(< + +
+
+ +ENDLSCREEN + $r->print('

+'); +} + +sub verify_and_change_coursepage { + my $r = shift; + my $message=''; + my %lt = &Apache::lonlocal::texthash( + 'defs' => 'Default now set', + 'when' => 'when you select a course role from the roles screen', + '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", + ); + my $newdisp = $env{'form.newdisp'}; + $message = ''.$lt{'defs'}.': '.$lt{'when'}.', '; + if ($newdisp eq 'firstres') { + $message .= $lt{'ywbt'}.'
'; + &Apache::lonnet::put('environment',{'course_init_display' => $newdisp}); + &Apache::lonnet::appenv('environment.course_init_display' => $newdisp); + } else { + $message .= $lt{'apwb'}.'
'; + &Apache::lonnet::del('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'})) { + if ($newdisp eq 'firstres') { + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my ($furl,$ferr)= + &Apache::lonuserstate::readmap($cdom.'/'.$cnum); + $message .= '
'.$lt{'gtts'}.' '.&mt('now').''; + } else { + $message .= '
'.$lt{'dasp'}.''; + } + } + $r->print(<
+ENDVCSCREEN +} + + ###################################################### # other handler subroutines # ###################################################### @@ -991,7 +1340,7 @@ sub handler { return OK if $r->header_only; # &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['action','wysiwyg','returnurl']); + ['action','wysiwyg','returnurl','refpage']); # &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb @@ -1016,7 +1365,7 @@ sub handler { breadcrumb => { href =>'/adm/preferences?action=changepass', text => 'Change Password'}, - printmenu => 'yes', + printmenu => 'not_on_error', })); } push (@Options,({ action => 'changescreenname', @@ -1037,7 +1386,7 @@ sub handler { })); push (@Options,({ action => 'changemsgforward', - linktext => 'Change Message Forwarding and Notification Addresses', + linktext => 'Change Message Forwarding and Notification Email Addresses', href => '/adm/preferences', help => 'Prefs_Forwarding', breadcrumb => @@ -1121,20 +1470,21 @@ sub handler { printmenu => 'yes', subroutine => \&verify_and_change_discussion, } )); - + + my $role = ($env{'user.adv'} ? 'Roles' : 'Course'); push (@Options,({ action => 'changerolespref', - linktext => 'Change Roles Page Preferences', + linktext => 'Change '.$role.' Page Preferences', href => '/adm/preferences', subroutine => \&rolesprefchanger, breadcrumb => { href => '/adm/preferences?action=changerolespref', - text => 'Change Roles Pref'}, + text => 'Change '.$role.' Page Pref'}, }, { action => 'verify_and_change_rolespref', subroutine => \&verify_and_change_rolespref, breadcrumb => { href => '/adm/preferences?action=changerolespref', - text => 'Change Roles Preferences'}, + text => 'Change '.$role.' Page Preferences'}, printmenu => 'yes', })); @@ -1154,20 +1504,62 @@ sub handler { 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 Main Menu is 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', + })); + + 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'} =~ /^(megan|albertel|fox|foxr|koretemey|korte|hallmat3|turtle)$/) { + if ($env{'user.name'} =~ /^(albertel|fox|foxr|koretemey|korte|hallmat3|turtle|raeburn)$/) { push (@Options,({ action => 'debugtoggle', printmenu => 'yes', subroutine => \&toggle_debug, })); } - my $html=&Apache::lonxml::xmlbegin(); - $r->print(< -LON-CAPA Preferences - -ENDHEADER + + $r->print(&Apache::loncommon::start_page('Change Preferences')); + my $call = undef; my $help = undef; my $printmenu = 'yes'; @@ -1182,16 +1574,17 @@ ENDHEADER $help=$option->{'help'}; } } - $r->print(&Apache::loncommon::bodytag('Change Preferences')); - $r->print(&Apache::lonhtmlcommon::breadcrumbs - (undef,'Change Preferences',$help)); + $r->print(&Apache::lonhtmlcommon::breadcrumbs('Change Preferences',$help)); + my $error; if (defined($call)) { - $call->($r); + $error = $call->($r); } - if (($printmenu eq 'yes') && (!$env{'form.returnurl'})) { + if ( ( ($printmenu eq 'yes') + || ($printmenu eq 'not_on_error' && !$error) ) + && (!$env{'form.returnurl'})) { my $optionlist = ''; if ($env{'user.name'} =~ - /^(megan|albertel|kortemey|fox|foxr|korte|hallmat3|turtle)$/ + /^(albertel|kortemey|fox|foxr|korte|hallmat3|turtle|raeburn)$/ ) { push (@Options,({ action => 'debugtoggle', linktext => 'Toggle Debug Messages', @@ -1205,9 +1598,10 @@ ENDHEADER foreach my $option(@Options) { my $optiontext = ''; if (exists($option->{'href'})) { - $optiontext .= - ''. + $option->{'href_args'}{'action'}=$option->{'action'}; + $optiontext .= + ''. &mt($option->{'linktext'}).''; } if (exists($option->{'text'})) { @@ -1232,7 +1626,7 @@ ENDHEADER $r->print('
'. &mt('Return').''); } - $r->print(&Apache::loncommon::endbodytag().''); + $r->print(&Apache::loncommon::end_page()); return OK; }