--- loncom/interface/lonpreferences.pm 2002/02/19 21:50:40 1.4 +++ loncom/interface/lonpreferences.pm 2005/12/28 21:40:25 1.69.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.4 2002/02/19 21:50:40 matthew Exp $ +# $Id: lonpreferences.pm,v 1.69.2.1 2005/12/28 21:40:25 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: @@ -50,6 +38,9 @@ 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 +52,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. @@ -99,6 +90,539 @@ sub des_decrypt { # Handler subroutines # ################################################################ +################################################################ +# Language Change Subroutines # +################################################################ + +sub wysiwygchanger { + my $r = shift; + my %userenv = &Apache::lonnet::get + ('environment',['wysiwygeditor']); + my $offselect=''; + my $onselect='checked="1"'; + if ($userenv{'wysiwygeditor'}) { + $onselect=''; + $offselect='checked="1"'; + } + 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. +

+ +
+ +
Enable Recent Roles Hotlist: + +
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(< + +
New screenname (shown if you post anonymously): + +
New nickname (shown if you post non-anonymously): + + + +ENDSCREEN +} + +sub verify_and_change_screenname { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; +# Screenname + my $newscreen = $env{'form.screenname'}; + $newscreen=~s/[^ \w]//g; + my $message=''; + if ($newscreen) { + &Apache::lonnet::put('environment',{'screenname' => $newscreen}); + &Apache::lonnet::appenv('environment.screenname' => $newscreen); + $message='Set new screenname to '.$newscreen; + } else { + &Apache::lonnet::del('environment',['screenname']); + &Apache::lonnet::delenv('environment\.screenname'); + $message='Reset screenname'; + } +# Nickname + $message.='
'; + $newscreen = $env{'form.nickname'}; + $newscreen=~s/[^ \w]//g; + if ($newscreen) { + &Apache::lonnet::put('environment',{'nickname' => $newscreen}); + &Apache::lonnet::appenv('environment.nickname' => $newscreen); + $message.='Set new nickname to '.$newscreen; + } else { + &Apache::lonnet::del('environment',['nickname']); + &Apache::lonnet::delenv('environment\.nickname'); + $message.='Reset nickname'; + } + &Apache::lonnet::devalidate_cache_new('namescache',$user.':'.$domain); + $r->print(<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 $newscreen = ''; + my $message=''; + foreach (split(/\,/,$env{'form.msgforward'})) { + my ($msuser,$msdomain)=split(/[\@\:]/,$_); + $msuser=~s/\W//g; + $msdomain=~s/\W//g; + if (($msuser) && ($msdomain)) { + if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') { + $newscreen.=$msuser.':'.$msdomain.','; + } else { + $message.='No such user: '.$msuser.':'.$msdomain.'
'; + } + } + } + $newscreen=~s/\,$//; + if ($newscreen) { + &Apache::lonnet::put('environment',{'msgforward' => $newscreen}); + &Apache::lonnet::appenv('environment.msgforward' => $newscreen); + $message.='Set new message forwarding to '.$newscreen.'
'; + } else { + &Apache::lonnet::del('environment',['msgforward']); + &Apache::lonnet::delenv('environment\.msgforward'); + $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
'; + } + $r->print(< 'Page Background', + 'tabbg' => 'Header Background', + 'sidebg'=> 'Header Border', + 'font' => 'Font', + 'link' => 'Un-Visited Link', + 'vlink' => 'Visited Link', + 'alink' => 'Active Link'); + my $chtable=''; + foreach my $item (sort(keys(%colortypes))) { + my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain); + $chtable.=''.$colortypes{$item}.'      Select'; + } + 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.server.'+ + document.parmform.pres_marker.value+ + '.value=document.parmform.pres_value.value;'); + } + } else { + document.parmform.pres_value.value=''; + document.parmform.pres_marker.value=''; + } + } + + + +
+ + + +
+
+ + +$chtable +
+ + +
+ENDCOL +} + +sub verify_and_change_colors { + 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 $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}.'
'; + } + } + $r->print(< + + +ENDVCCOL +} + ###################################################### # password handler subroutines # ###################################################### @@ -108,9 +632,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):/); @@ -135,15 +659,14 @@ sub passwordchanger { $lkey_npass2= hex($lkey_npass2); # Output javascript to deal with passwords # Output DES javascript + my $html=&Apache::lonxml::xmlbegin(); + $r->print($html.""); { my $include = $r->dir_config('lonIncludes'); my $jsh=Apache::File->new($include."/londes.js"); $r->print(<$jsh>); } $r->print(< - -

Preferences for $user

-

$user is a member of domain $domain

$errormessage +

-Change password for $user -

-

- -

+ @@ -215,24 +734,25 @@ 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):/); # + my $html=&Apache::lonxml::xmlbegin(); $r->print(< +$html 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) && @@ -257,9 +777,9 @@ ENDERROR } my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo); # - my $currentpass = &des_decrypt($ckey ,$currentpass); - my $newpass1 = &des_decrypt($n1key,$newpass1); - my $newpass2 = &des_decrypt($n2key,$newpass2); + $currentpass = &des_decrypt($ckey ,$currentpass); + $newpass1 = &des_decrypt($n1key,$newpass1); + $newpass2 = &des_decrypt($n2key,$newpass2); # if ($newpass1 ne $newpass2) { &passwordchanger($r, @@ -300,69 +820,513 @@ ENDERROR # Inform the user the password has (not?) been changed if ($result =~ /^ok$/) { $r->print(<<"ENDTEXT"); -

Password for $user was successfully changed

+

The password for $user was successfully changed

ENDTEXT } else { # error error: run in circles, scream and shout $r->print(<Password for $user was not changed -There was an internal error when attempting to change your password. -Please contact your instructor or the domain coordinator. +

The password for $user was not changed

+Please make sure your old password was entered correctly. ENDERROR } 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'}
+
+
+ + + + +
+ + + + +
+ + + + + + + + + + + + + + + +
$lt{'pref'}$lt{'curr'}$lt{'actn'}?
$lt{'disa'}$lt{$discdisp} $lt{'chgt'} "$dispchange"
$lt{'npmr'}$lt{$discmark} $lt{'chgt'} "$markchange"
+
+
+
+
+ +
+
+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(<print('
'.&mt('Set the page to be displayed when you select the role of Course Coordinator').':'); + $r->print(< + +
+
+ +ENDLSCREEN + $r->print('
+'); +} + +sub verify_and_change_coursepage { + my $r = shift; + my $message=''; + my %lt = &Apache::lonlocal::texthash( + 'when' => 'Whenever you select the Course Coordinator 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 a summary page listing course action items', + ); + my $newdisp = $env{'form.newdisp'}; + if ($newdisp eq 'firstres') { + $message .= $lt{'when'}.', '.$lt{'ywbt'}.'
'; + &Apache::lonnet::put('environment',{'course_init_display' => $newdisp}); + &Apache::lonnet::appenv('environment.course_init_display' => $newdisp); + } else { + $message .= $lt{'when'}.', '.$lt{'apwb'}.'
'; + &Apache::lonnet::del('environment',['course_init_display']); + &Apache::lonnet::delenv('environment\.course_init_display'); + } + 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 # ###################################################### - ################################################################ # Main handler # ################################################################ 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; - # Spit out the header - if ($ENV{'form.action'} eq 'changepass') { - &passwordchanger($r); - } elsif ($ENV{'form.action'} eq 'verify_and_change_pass') { - &verify_and_change_password($r); - } else { - $r->print(< + # + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['action','wysiwyg','returnurl']); + # + &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 => 'yes', + })); + } + 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{'request.role'} =~ /^cc\.\//) { + 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, + })); + } + my $html=&Apache::lonxml::xmlbegin(); + $r->print(< LON-CAPA Preferences - -

Preferences for $user

-

$user is a member of domain $domain

ENDHEADER - # Determine current authentication method - my $currentauth=&Apache::lonnet::queryauthenticate($user,$domain); - if ($currentauth =~ /^(unix|internal):/) { - $r->print(< - - - -ENDPASSWORDFORM - # Other preference setting code should be added here - } + my $call = undef; + my $help = undef; + my $printmenu = 'yes'; + foreach my $option (@Options) { + if ($option->{'action'} eq $env{'form.action'}) { + $call = $option->{'subroutine'}; + $printmenu = $option->{'printmenu'}; + if (exists($option->{'breadcrumb'})) { + &Apache::lonhtmlcommon::add_breadcrumb + ($option->{'breadcrumb'}); + } + $help=$option->{'help'}; + } + } + $r->print(&Apache::loncommon::bodytag('Change Preferences')); + $r->print(&Apache::lonhtmlcommon::breadcrumbs + (undef,'Change Preferences',$help)); + if (defined($call)) { + $call->($r); } - $r->print(< - -ENDFOOTER + if (($printmenu eq 'yes') && (!$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'})) { + $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::endbodytag().''); return OK; -} +} + +sub toggle_debug { + if ($env{'user.debug'}) { + &Apache::lonnet::delenv('user\.debug'); + } else { + &Apache::lonnet::appenv('user.debug' => 1); + } +} 1; __END__