--- loncom/interface/lonpreferences.pm 2002/12/03 19:57:26 1.17 +++ loncom/interface/lonpreferences.pm 2006/05/08 22:25:17 1.86 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.17 2002/12/03 19:57:26 matthew Exp $ +# $Id: lonpreferences.pm,v 1.86 2006/05/08 22:25:17 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,18 +25,6 @@ # # http://www.lon-capa.org/ # -# (Internal Server Error Handler -# -# (Login Screen -# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14, -# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer) -# -# 3/1/1 Gerd Kortemeyer) -# -# 3/1 Gerd Kortemeyer -# -# 2/13/02 2/14 2/15 Matthew Hall -# # This package uses the "londes.js" javascript code. # # TODOs that have to be completed: @@ -45,11 +33,15 @@ package Apache::lonpreferences; 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; # # Write lonnet::passwd to do the call below. @@ -61,7 +53,7 @@ use Apache::loncommon(); ################################################## sub des_keys { # Make a new key for DES encryption. - # Each key has two parts which are returned seperately. + # 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. @@ -100,23 +92,278 @@ sub des_decrypt { ################################################################ ################################################################ +# Language Change Subroutines # +################################################################ + +sub wysiwygchanger { + my $r = shift; + my %userenv = &Apache::lonnet::get + ('environment',['wysiwygeditor']); + my $onselect='checked="checked"'; + my $offselect=''; + if ($userenv{'wysiwygeditor'} eq 'on') { + $onselect=''; + $offselect='checked="checked"'; + } + my $switchoff=&mt('Disable WYSIWYG editor'); + my $switchon=&mt('Enable WYSIWYG editor'); + $r->print(< + +
+
+ +ENDLSCREEN + $r->print('
'); +} + + +sub verify_and_change_wysiwyg { + my $r = shift; + 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).'

'); +} + +################################################################ +# Language Change Subroutines # +################################################################ +sub languagechanger { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + 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('
'); +} + + +sub verify_and_change_languages { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; +# Screenname + my $newlanguage = $env{'form.language'}; + $newlanguage=~s/[^\-\w]//g; + my $message=''; + if ($newlanguage) { + &Apache::lonnet::put('environment',{'languages' => $newlanguage}); + &Apache::lonnet::appenv('environment.languages' => $newlanguage); + $message='Set new preferred languages to '.$newlanguage; + } else { + &Apache::lonnet::del('environment',['languages']); + &Apache::lonnet::delenv('environment\.languages'); + $message='Reset preferred language'; + } + $r->print(< 'Default', + 'tth' => 'TeX to HTML', + #'ttm' => 'TeX to MathML', + 'jsMath' => 'jsMath', + 'mimetex' => 'Convert to Images' + ); + my $selectionbox=&Apache::loncommon::select_form($texengine,'texengine', + %mathchoices); + my $jsMath_start=&Apache::lontexconvert::jsMath_header(); + my $change=&mt('Change'); + $r->print(< + +
+ +

$pref: $selectionbox

+

+
+Examples: +

TeX to HTML
+ +

+

jsMath
+$jsMath_start + + + +

+

Convert to Images
+
+ +

+ENDLSCREEN + if ($env{'environment.texengine'} ne 'jsMath') { + $r->print(''); + } +} + + +sub verify_and_change_texengine { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; +# Screenname + my $newtexengine = $env{'form.texengine'}; + $newtexengine=~s/[^\-\w]//g; + if ($newtexengine eq 'ttm') { + &Apache::lonnet::appenv('browser.mathml' => 1); + } else { + if ($env{'environment.texengine'} eq 'ttm') { + &Apache::lonnet::appenv('browser.mathml' => 0); + } + } + my $message=''; + if ($newtexengine) { + &Apache::lonnet::put('environment',{'texengine' => $newtexengine}); + &Apache::lonnet::appenv('environment.texengine' => $newtexengine); + $message='Set new preferred math display to '.$newtexengine; + } else { + &Apache::lonnet::del('environment',['texengine']); + &Apache::lonnet::delenv('environment\.texengine'); + $message='Reset preferred math display.'; + } + + + $r->print(<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. +

+ +
+ +
+
Number of roles in Hotlist: + +
+ +
+ENDSCREEN +} + +sub verify_and_change_rolespref { + my $r = shift; + 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=''; + if ($hotlist_flag) { + &Apache::lonnet::put('environment',{'recentroles' => $hotlist_flag}); + &Apache::lonnet::appenv('environment.recentroles' => $hotlist_flag); + $message='Recent Roles Hotlist is Enabled'; + } else { + &Apache::lonnet::del('environment',['recentroles']); + &Apache::lonnet::delenv('environment\.recentroles'); + $message='Recent Roles 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"; + } + } + + $r->print(<print(< -$bodytag - -
+
New screenname (shown if you post anonymously): @@ -124,17 +371,15 @@ $bodytag
- - ENDSCREEN } sub verify_and_change_screenname { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; # Screenname - my $newscreen = $ENV{'form.screenname'}; + my $newscreen = $env{'form.screenname'}; $newscreen=~s/[^ \w]//g; my $message=''; if ($newscreen) { @@ -148,7 +393,7 @@ sub verify_and_change_screenname { } # Nickname $message.='
'; - $newscreen = $ENV{'form.nickname'}; + $newscreen = $env{'form.nickname'}; $newscreen=~s/[^ \w]//g; if ($newscreen) { &Apache::lonnet::put('environment',{'nickname' => $newscreen}); @@ -159,15 +404,9 @@ sub verify_and_change_screenname { &Apache::lonnet::delenv('environment\.nickname'); $message.='Reset nickname'; } - - my $bodytag=&Apache::loncommon::bodytag( - 'Change Your Nickname and Anonymous Screen Name'); + &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); $r->print(< -$bodytag -

$message - ENDVCSCREEN } @@ -177,34 +416,41 @@ ENDVCSCREEN sub msgforwardchanger { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; - my %userenv = &Apache::lonnet::get('environment',['msgforward']); + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get('environment',['msgforward','notification','critnotification']); my $msgforward=$userenv{'msgforward'}; - my $bodytag=&Apache::loncommon::bodytag( - 'Change Your Message Forwarding'); - $r->print(< -$bodytag + my $notification=$userenv{'notification'}; + my $critnotification=$userenv{'critnotification'}; + my $forwardingHelp = Apache::loncommon::help_open_topic("Prefs_Forwarding", + "What are forwarding ". + "and notification ". + "addresses"); + my $criticalMessageHelp = Apache::loncommon::help_open_topic("Course_Critical_Message", + "What are critical messages"); -
+ $r->print(< + New Forwarding Address(es) (user:domain,user:domain,...): - +
+New Message Notification Email Address(es) (joe\@doe.com,jane\@doe.edu,...): +
+New Critical Message Notification Email Address(es) (joe\@doe.com,jane\@doe.edu,...): +$criticalMessageHelp
- - ENDMSG } sub verify_and_change_msgforward { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; my $newscreen = ''; my $message=''; - foreach (split(/\,/,$ENV{'form.msgforward'})) { + foreach (split(/\,/,$env{'form.msgforward'})) { my ($msuser,$msdomain)=split(/[\@\:]/,$_); $msuser=~s/\W//g; $msdomain=~s/\W//g; @@ -220,23 +466,153 @@ sub verify_and_change_msgforward { if ($newscreen) { &Apache::lonnet::put('environment',{'msgforward' => $newscreen}); &Apache::lonnet::appenv('environment.msgforward' => $newscreen); - $message.='Set new message forwarding to '.$newscreen; + $message.='Set new message forwarding to '.$newscreen.'
'; } else { &Apache::lonnet::del('environment',['msgforward']); &Apache::lonnet::delenv('environment\.msgforward'); - $message.='Reset message forwarding'; + $message.='Reset message forwarding
'; + } + my $notification=$env{'form.notification'}; + $notification=~s/\s//gs; + if ($notification) { + &Apache::lonnet::put('environment',{'notification' => $notification}); + &Apache::lonnet::appenv('environment.notification' => $notification); + $message.='Set message notification address to '.$notification.'
'; + } else { + &Apache::lonnet::del('environment',['notification']); + &Apache::lonnet::delenv('environment\.notification'); + $message.='Reset message notification
'; + } + my $critnotification=$env{'form.critnotification'}; + $critnotification=~s/\s//gs; + if ($critnotification) { + &Apache::lonnet::put('environment',{'critnotification' => $critnotification}); + &Apache::lonnet::appenv('environment.critnotification' => $critnotification); + $message.='Set critical message notification address to '.$critnotification; + } else { + &Apache::lonnet::del('environment',['critnotification']); + &Apache::lonnet::delenv('environment\.critnotification'); + $message.='Reset critical message notification
'; } - my $bodytag=&Apache::loncommon::bodytag( - 'Change Your Message Forwarding'); $r->print(< -$bodytag -

$message - ENDVCMSG } +################################################################ +# Colors # +################################################################ + +sub colorschanger { + my $r = shift; +# figure out colors + my $function=&Apache::loncommon::get_users_function(); + my $domain=&Apache::loncommon::determinedomain(); + my %colortypes=('pgbg' => 'Page Background', + 'tabbg' => 'Header Background', + 'sidebg'=> 'Header Border', + 'font' => 'Font', + '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.=&Apache::loncommon::start_data_table_row(). + ''.$colortypes{$item}.'      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(< + + function pclose() { + parmwin=window.open("/adm/rat/empty.html","LONCAPAparms", + "height=350,width=350,scrollbars=no,menubar=no"); + parmwin.close(); + } + + $pjump_def + + function psub() { + pclose(); + if (document.parmform.pres_marker.value!='') { + if (document.parmform.pres_type.value!='') { + eval('document.prefs.'+ + document.parmform.pres_marker.value+ + '.value=document.parmform.pres_value.value;'); + } + } else { + document.parmform.pres_value.value=''; + document.parmform.pres_marker.value=''; + } + } + + + +
+ + + +
+
+ +$start_data_table +$chtable +$end_data_table + + + +
+ENDCOL +} + +sub verify_and_change_colors { + my $r = shift; +# figure out colors + my $function=&Apache::loncommon::get_users_function(); + my $domain=&Apache::loncommon::determinedomain(); + my %colortypes=('pgbg' => 'Page Background', + 'tabbg' => 'Header Background', + 'sidebg'=> 'Header Border', + 'font' => 'Font', + 'link' => 'Un-Visited Link', + 'vlink' => 'Visited Link', + 'alink' => 'Active Link'); + + my $message=''; + foreach my $item (keys %colortypes) { + my $color=$env{'form.'.$item}; + my $entry='color.'.$function.'.'.$item; + if (($color=~/^\#[0-9A-Fa-f]{6}$/) && (!$env{'form.resetall'})) { + &Apache::lonnet::put('environment',{$entry => $color}); + &Apache::lonnet::appenv('environment.'.$entry => $color); + $message.='Set '.$colortypes{$item}.' to '.$color.'
'; + } else { + &Apache::lonnet::del('environment',[$entry]); + &Apache::lonnet::delenv('environment\.'.$entry); + $message.='Reset '.$colortypes{$item}.'
'; + } + } + my $now = time; + &Apache::lonnet::put('environment',{'color.timestamp' => $now}); + &Apache::lonnet::appenv('environment.color.timestamp' => $now); + + $r->print(< + + +ENDVCCOL +} + ###################################################### # password handler subroutines # ###################################################### @@ -246,9 +622,9 @@ sub passwordchanger { my $r = shift; my $errormessage = shift; $errormessage = ($errormessage || ''); - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; - my $homeserver = $ENV{'user.home'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $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):/); @@ -273,18 +649,12 @@ sub passwordchanger { $lkey_npass2= hex($lkey_npass2); # Output javascript to deal with passwords # Output DES javascript - $r->print(""); { my $include = $r->dir_config('lonIncludes'); my $jsh=Apache::File->new($include."/londes.js"); $r->print(<$jsh>); } - my $bodytag=&Apache::loncommon::bodytag('Change Password','', - 'onLoad="init();"'); $r->print(< -$bodytag - $errormessage

- -

+ @@ -352,24 +722,17 @@ ENDFORM sub verify_and_change_password { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; - my $homeserver = $ENV{'user.home'}; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $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):/); # - $r->print(< - -LON-CAPA Preferences: Change password for $user - -ENDHEADER - # - my $currentpass = $ENV{'form.currentpass'}; - my $newpass1 = $ENV{'form.newpass_1'}; - my $newpass2 = $ENV{'form.newpass_2'}; - my $logtoken = $ENV{'form.logtoken'}; + my $currentpass = $env{'form.currentpass'}; + my $newpass1 = $env{'form.newpass_1'}; + my $newpass2 = $env{'form.newpass_2'}; + my $logtoken = $env{'form.logtoken'}; # Check for empty data unless (defined($currentpass) && defined($newpass1) && @@ -390,7 +753,7 @@ password decryption. Please log out and

ENDERROR # Probably should log an error here - return; + return 1; } my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo); # @@ -403,14 +766,14 @@ ENDERROR 'ERROR:'. 'The new passwords you entered do not match. '. 'Please try again.'); - return; + return 1; } if (length($newpass1) < 7) { &passwordchanger($r, 'ERROR:'. 'Passwords must be a minimum of 7 characters long. '. 'Please try again.'); - return; + return 1; } # # Check for bad characters @@ -445,10 +808,230 @@ ENDTEXT

The password for $user was not changed

Please make sure your old password was entered correctly. ENDERROR + return 1; } return; } +################################################################ +# discussion display subroutines +################################################################ +sub discussionchanger { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['discdisplay','discmarkread']); + my $discdisp = 'allposts'; + my $discmark = 'onmark'; + + if (defined($userenv{'discdisplay'})) { + unless ($userenv{'discdisplay'} eq '') { + $discdisp = $userenv{'discdisplay'}; + } + } + if (defined($userenv{'discmarkread'})) { + unless ($userenv{'discdisplay'} eq '') { + $discmark = $userenv{'discmarkread'}; + } + } + + my $newdisp = 'unread'; + my $newmark = 'ondisp'; + + my $function = &Apache::loncommon::get_users_function(); + my $color = &Apache::loncommon::designparm($function.'.tabbg', + $env{'user.domain'}); + my %lt = &Apache::lonlocal::texthash( + 'pref' => 'Display Preference', + 'curr' => 'Current setting ', + 'actn' => 'Action', + 'sdpf' => 'Set display preferences for discussion posts for both bulletin boards and individual resources in all your courses.', + 'prca' => 'Preferences can be set that determine', + 'whpo' => 'Which posts are displayed when you display a bulletin board or resource, and', + 'unwh' => 'Under what circumstances posts are identfied as "New"', + 'allposts' => 'All posts', + 'unread' => 'New posts only', + 'ondisp' => 'Once displayed', + 'onmark' => 'Once marked as read', + 'disa' => 'Posts displayed?', + 'npmr' => 'New posts cease to be identified as "New"?', + 'thde' => 'The preferences you set here can be overridden within each individual discussion.', + 'chgt' => 'Change to ' + ); + my $dispchange = $lt{'unread'}; + my $markchange = $lt{'ondisp'}; + my $currdisp = $lt{'allposts'}; + my $currmark = $lt{'onmark'}; + + if ($discdisp eq 'unread') { + $dispchange = $lt{'allposts'}; + $currdisp = $lt{'unread'}; + $newdisp = 'allposts'; + } + + if ($discmark eq 'ondisp') { + $markchange = $lt{'onmark'}; + $currmark = $lt{'ondisp'}; + $newmark = 'onmark'; + } + + $r->print(<<"END"); + + +
+$lt{'sdpf'}
$lt{'prca'}
  1. $lt{'whpo'}
  2. $lt{'unwh'}
+
+
+END + $r->print(&Apache::loncommon::start_data_table()); + $r->print(<<"END"); + + $lt{'pref'} + $lt{'curr'} + $lt{'actn'}? + +END + $r->print(&Apache::loncommon::start_data_table_row()); + $r->print(<<"END"); + $lt{'disa'} + $lt{$discdisp} + +END + $r->print(&Apache::loncommon::end_data_table_row(). + &Apache::loncommon::start_data_table_row()); + $r->print(<<"END"); + $lt{'npmr'} + $lt{$discmark} + + +END + $r->print(&Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table()); + $r->print(<<"END"); +
+
+ +
+
+Note: $lt{'thde'} + +END +} + +sub verify_and_change_discussion { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $message=''; + if (defined($env{'form.discdisp'}) ) { + my $newdisp = $env{'form.newdisp'}; + if ($newdisp eq 'unread') { + $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.
'; + &Apache::lonnet::del('environment',['discdisplay']); + &Apache::lonnet::delenv('environment\.discdisplay'); + } + } + 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.
'; + &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.
'; + &Apache::lonnet::del('environment',['discmarkread']); + &Apache::lonnet::delenv('environment\.discmarkread'); + } + } + $r->print(< '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 # ###################################################### @@ -458,92 +1041,295 @@ ENDERROR ################################################################ sub handler { my $r = shift; - my $user = $ENV{'user.name'}; - my $domain = $ENV{'user.domain'}; - $r->content_type('text/html'); + 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; # - if ($ENV{'form.action'} eq 'changepass') { - &passwordchanger($r); - } elsif ($ENV{'form.action'} eq 'verify_and_change_pass') { - &verify_and_change_password($r); - } elsif ($ENV{'form.action'} eq 'changescreenname') { - &screennamechanger($r); - } elsif ($ENV{'form.action'} eq 'verify_and_change_screenname') { - &verify_and_change_screenname($r); - } elsif ($ENV{'form.action'} eq 'changemsgforward') { - &msgforwardchanger($r); - } elsif ($ENV{'form.action'} eq 'verify_and_change_msgforward') { - &verify_and_change_msgforward($r); - } elsif ($ENV{'form.action'} eq 'debugtoggle') { - if ($ENV{'user.name'} eq 'albertel' ) { - if ($ENV{'user.debug'}) { - &Apache::lonnet::delenv('user\.debug'); - } else { - &Apache::lonnet::appenv('user.debug' => 1); - } - } + &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 Addresses', + href => '/adm/preferences', + help => 'Prefs_Forwarding', + breadcrumb => + { href => '/adm/preferences?action=changemsgforward', + text => 'Change Message Forwarding'}, + subroutine => \&msgforwardchanger, + }, + { action => 'verify_and_change_msgforward', + breadcrumb => + { href => '/adm/preferences?action=changemsgforward', + text => 'Change Message Forwarding'}, + 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, } + )); + + push (@Options,({ action => 'changerolespref', + linktext => 'Change Roles Page Preferences', + href => '/adm/preferences', + subroutine => \&rolesprefchanger, + breadcrumb => + { href => '/adm/preferences?action=changerolespref', + text => 'Change Roles Pref'}, + }, + { action => 'verify_and_change_rolespref', + subroutine => \&verify_and_change_rolespref, + breadcrumb => + { href => '/adm/preferences?action=changerolespref', + text => 'Change Roles 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 { - $r->print(< - -LON-CAPA Preferences - -ENDHEADER - $r->print(&Apache::loncommon::bodytag('Change Your Preferences')); - # Determine current authentication method - my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); - if ($currentauth =~ /^(unix|internal):/) { - $r->print(< - - - -ENDPASSWORDFORM + push (@Options,({ action => 'collapse', + linktext => 'Collapse Remote Control', + href => '/adm/remote?url=/adm/preferences', + })); + } + + 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|koretemey|korte|hallmat3|turtle|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'}; } -# Change screen name - $r->print(< - - - -ENDSCREENNAMEFORM - $r->print(< - - - -ENDMSGFORWARDFORM -# The "about me" page - my $aboutmeaction= - '/adm/'.$ENV{'user.domain'}.'/'.$ENV{'user.name'}.'/aboutme'; - $r->print(< - - - -ENDABOUTME - if ($ENV{'user.name'} eq 'albertel') { - $r->print(< - - -Current Debug status is -$ENV{'user.debug'}-. - -ENDDEBUG - } - # Other preference setting code should be added here } - $r->print(< - -ENDFOOTER + $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'}); + } + $optionlist .= ''. + ''. + ''. + ''; + } + } + $optionlist .= '
'.$helplink.''.$optiontext.'
'; + $r->print($optionlist); + } elsif ($env{'form.returnurl'}) { + $r->print('
'. + &mt('Return').''); + } + $r->print(&Apache::loncommon::end_page()); return OK; } +sub toggle_debug { + if ($env{'user.debug'}) { + &Apache::lonnet::delenv('user\.debug'); + } else { + &Apache::lonnet::appenv('user.debug' => 1); + } +} + 1; __END__