');
+}
+
+################################################################
+# 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(<
+$message
+ENDVCSCREEN
+}
+
+################################################################
+# Roles Page Preference Change Subroutines #
+################################################################
+sub rolesprefchanger {
+ my $r = shift;
+ my $user = $ENV{'user.name'};
+ my $domain = $ENV{'user.domain'};
+ my %userenv = &Apache::lonnet::get
+ ('environment',['recentroles','recentrolesn']);
+ my $hotlist_flag=$userenv{'recentroles'};
+ my $hotlist_n=$userenv{'recentrolesn'};
+ my $checked;
+ if ($hotlist_flag) {
+ $checked = 'checked="checked"';
+ }
+
+ if (!$hotlist_n) { $hotlist_n=3; }
+ my $options;
+ for (my $i=1; $i<10; $i++) {
+ my $select;
+ if ($hotlist_n == $i) { $select = 'selected="selected"'; }
+ $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.
+
+
+
+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(<
+$message
+ENDRPSCREEN
+}
+
+
+
+################################################################
+# Anonymous Discussion Name Change Subroutines #
+################################################################
+sub screennamechanger {
+ my $r = shift;
+ my $user = $ENV{'user.name'};
+ my $domain = $ENV{'user.domain'};
+ my %userenv = &Apache::lonnet::get
+ ('environment',['screenname','nickname']);
+ my $screenname=$userenv{'screenname'};
+ my $nickname=$userenv{'nickname'};
+ $r->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';
+ }
+
+ $r->print(<
+$message
+ENDVCSCREEN
+}
+
+################################################################
+# Message Forward #
+################################################################
+
+sub msgforwardchanger {
+ my $r = shift;
+ my $user = $ENV{'user.name'};
+ my $domain = $ENV{'user.domain'};
+ my %userenv = &Apache::lonnet::get('environment',['msgforward','notification','critnotification']);
+ my $msgforward=$userenv{'msgforward'};
+ 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(<
+
+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(<
+$message
+ENDVCMSG
+}
+################################################################
+# Colors #
+################################################################
+
+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 $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 $chtable='';
+ foreach my $item (sort(keys(%colortypes))) {
+ my $curcol=&Apache::loncommon::designparm($function.'.'.$item,$domain);
+ $chtable.='
';
+ }
+ 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='';
+ }
+ }
+
+
+
+
+
+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(<
+$message
+
+ENDVCCOL
+}
+
+######################################################
+# password handler subroutines #
+######################################################
+sub passwordchanger {
+ # This function is a bit of a mess....
+ # Passwords are encrypted using londes.js (DES encryption)
+ my $r = shift;
+ my $errormessage = shift;
+ $errormessage = ($errormessage || '');
+ 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):/);
+ #
+ # Generate keys
+ my ($lkey_cpass ,$ukey_cpass ) = &des_keys();
+ my ($lkey_npass1,$ukey_npass1) = &des_keys();
+ my ($lkey_npass2,$ukey_npass2) = &des_keys();
+ # Store the keys in the log files
+ my $lonhost = $r->dir_config('lonHostID');
+ my $logtoken=Apache::lonnet::reply('tmpput:'
+ .$ukey_cpass . $lkey_cpass .'&'
+ .$ukey_npass1 . $lkey_npass1.'&'
+ .$ukey_npass2 . $lkey_npass2,
+ $lonhost);
+ # Hexify the keys for output as javascript variables
+ $ukey_cpass = hex($ukey_cpass);
+ $lkey_cpass = hex($lkey_cpass);
+ $ukey_npass1= hex($ukey_npass1);
+ $lkey_npass1= hex($lkey_npass1);
+ $ukey_npass2= hex($ukey_npass2);
+ $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>);
+ }
+ $r->print(<
+
+ function send() {
+ uextkey=this.document.client.elements.ukey_cpass.value;
+ lextkey=this.document.client.elements.lkey_cpass.value;
+ initkeys();
+
+ this.document.server.elements.currentpass.value
+ =crypted(this.document.client.elements.currentpass.value);
+
+ uextkey=this.document.client.elements.ukey_npass1.value;
+ lextkey=this.document.client.elements.lkey_npass1.value;
+ initkeys();
+ this.document.server.elements.newpass_1.value
+ =crypted(this.document.client.elements.newpass_1.value);
+
+ uextkey=this.document.client.elements.ukey_npass2.value;
+ lextkey=this.document.client.elements.lkey_npass2.value;
+ initkeys();
+ this.document.server.elements.newpass_2.value
+ =crypted(this.document.client.elements.newpass_2.value);
+
+ this.document.server.submit();
+ }
+
+
+$errormessage
+
+
+
+
+
+
+
+
+ENDFORM
+ #
+ return;
+}
+
+sub verify_and_change_password {
+ my $r = shift;
+ 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'};
+ # Check for empty data
+ unless (defined($currentpass) &&
+ defined($newpass1) &&
+ defined($newpass2) ){
+ &passwordchanger($r,"
\nERROR".
+ "Password data was blank.\n
");
+ return;
+ }
+ # Get the keys
+ my $lonhost = $r->dir_config('lonHostID');
+ 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
+ $r->print(<
+ERROR: Unable to retrieve stored token for
+password decryption. Please log out and try again.
+
+ENDERROR
+ # Probably should log an error here
+ return;
+ }
+ my ($ckey,$n1key,$n2key)=split(/&/,$tmpinfo);
+ #
+ $currentpass = &des_decrypt($ckey ,$currentpass);
+ $newpass1 = &des_decrypt($n1key,$newpass1);
+ $newpass2 = &des_decrypt($n2key,$newpass2);
+ #
+ if ($newpass1 ne $newpass2) {
+ &passwordchanger($r,
+ 'ERROR:'.
+ 'The new passwords you entered do not match. '.
+ 'Please try again.');
+ return;
+ }
+ if (length($newpass1) < 7) {
+ &passwordchanger($r,
+ 'ERROR:'.
+ 'Passwords must be a minimum of 7 characters long. '.
+ 'Please try again.');
+ return;
+ }
+ #
+ # Check for bad characters
+ my $badpassword = 0;
+ foreach (split(//,$newpass1)) {
+ $badpassword = 1 if ((ord($_)<32)||(ord($_)>126));
+ }
+ 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
+
+ENDERROR
+ }
+ #
+ # Change the password (finally)
+ my $result = &Apache::lonnet::changepass
+ ($user,$domain,$currentpass,$newpass1,$homeserver);
+ # Inform the user the password has (not?) been changed
+ if ($result =~ /^ok$/) {
+ $r->print(<<"ENDTEXT");
+
The password for $user was successfully changed
+ENDTEXT
+ } 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
+ }
+ 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");
+
+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(<
+$message
+ENDVCSCREEN
+}
+
+######################################################
+# other handler subroutines #
+######################################################
+
+################################################################
+# Main handler #
+################################################################
sub handler {
my $r = shift;
- $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;
+ #
+ &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',
+ }));
-# --------------------------------------------------- Print login screen header
- $r->print(< 'debugtoggle',
+ printmenu => 'yes',
+ subroutine => \&toggle_debug,
+ }));
+ }
+ $r->print(<
-The LearningOnline Network with CAPA
+LON-CAPA Preferences
-
-
Preferences
-
+ENDHEADER
+ 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);
+ }
+ if (($printmenu eq 'yes') && (!$ENV{'form.returnurl'})) {
+ my $optionlist = '
';
+ if ($ENV{'user.name'} =~
+ /^(albertel|kortemey|korte|hallmat3|turtle)$/
+ ) {
+ 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 .= '