--- loncom/interface/lonpreferences.pm 2007/01/23 04:09:03 1.96 +++ loncom/interface/lonpreferences.pm 2007/05/20 21:10:53 1.105 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.96 2007/01/23 04:09:03 albertel Exp $ +# $Id: lonpreferences.pm,v 1.105 2007/05/20 21:10:53 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -516,37 +516,298 @@ ENDVCSCREEN } ################################################################ +# Icon Subroutines # +################################################################ +sub iconchanger { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['icons']); + my $iconic='checked="checked"'; + my $classic=''; + my $onlyicon=''; + if ($userenv{'icons'} eq 'classic') { + $classic='checked="checked"'; + $iconic=''; + } + if ($userenv{'icons'} eq 'iconsonly') { + $onlyicon='checked="checked"'; + $iconic=''; + } + my $useicons=&mt('Use icons and text'); + my $usebuttons=&mt('Use buttons and text'); + my $useicononly=&mt('Use icons only'); + my $change=&mt('Change'); + $r->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)); +} + +################################################################ +# Clicker Subroutines # +################################################################ + +sub clickerchanger { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my %userenv = &Apache::lonnet::get + ('environment',['clickers']); + my $clickers=$userenv{'clickers'}; + $clickers=~s/\,/\n/gs; + my $text=&mt('Enter response device ("clicker") numbers'); + my $change=&mt('Register'); + $r->print(< + + + + +ENDSCREEN +} + +sub verify_and_change_clicker { + my $r = shift; + my $user = $env{'user.name'}; + my $domain = $env{'user.domain'}; + my $newclickers = $env{'form.clickers'}; + $newclickers=~s/\W+/\,/gs; + $newclickers=~tr/a-z/A-Z/; + $newclickers=~s/^\,//; + $newclickers=~s/\,$//; + &Apache::lonnet::put('environment',{'clickers' => $newclickers}); + &Apache::lonnet::appenv('environment.clickers' => $newclickers); + $r->print(&mt('Registering clickers: [_1]',$newclickers)); +} + +################################################################ # Message Forward # ################################################################ sub msgforwardchanger { - my $r = shift; + my ($r,$message) = @_; my $user = $env{'user.name'}; my $domain = $env{'user.domain'}; - my %userenv = &Apache::lonnet::get('environment',['msgforward','notification','critnotification']); + my %userenv = &Apache::lonnet::get('environment',['msgforward','notification','critnotification','notifywithhtml']); my $msgforward=$userenv{'msgforward'}; - my $notification=$userenv{'notification'}; - my $critnotification=$userenv{'critnotification'}; + my %lt = &Apache::lonlocal::texthash( + all => 'All', + crit => 'Critical only', + reg => 'Non-critical only', + foad => 'Forwarding Address(es)', + mnot => 'Message Notification Email Address(es)', + chg => 'Change', + email => 'The e-mail address entered in row ', + notv => 'is not a valid e-mail address', + toen => "To enter multiple addresses, enter one address at a time, click 'Change' and then add the next one", + prme => 'Back to preferences menu', + ); 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"); + my @allow_html = split(/,/,$userenv{'notifywithhtml'}); + my %allnot = &get_notifications(\%userenv); + my $validatescript = &Apache::lonhtmlcommon::javascript_valid_email(); + my $jscript = qq| + +|; $r->print(< +$jscript +$message +$forwardingHelp
-New Forwarding Address(es) (user:domain,user:domain,...): +$lt{'foad'} (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
- -
+$criticalMessageHelp +$lt{'mnot'} (joe\@doe.com):
ENDMSG + my @sortforwards = sort (keys(%allnot)); + my $output = &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ' '. + ''.&mt('Action').''. + ''.&mt('Notification address').''. + &mt('Types of message to forward to this address').''. + &mt('Excerpt retains HTML tags in message').''. + &Apache::loncommon::end_data_table_header_row(); + my $num = 0; + my $counter = 1; + foreach my $item (@sortforwards) { + $output .= &Apache::loncommon::start_data_table_row(). + ''.$counter.''. + '   '. + ''. + ''; + my %chk; + if (defined($allnot{$item}{'crit'})) { + if (defined($allnot{$item}{'reg'})) { + $chk{'all'} = 'checked="checked" '; + } else { + $chk{'crit'} = 'checked="checked" '; + } + } else { + $chk{'reg'} = 'checked="checked" '; + } + foreach my $type ('all','crit','reg') { + $output .= ' '; + } + my $htmlon = ''; + my $htmloff = ''; + if (grep/^\Q$item\E/,@allow_html) { + $htmlon = 'checked="checked" '; + } else { + $htmloff = 'checked="checked" '; + } + $output .= ' '. + ''. + &Apache::loncommon::end_data_table_row(); + $num ++; + $counter ++; + } + my %defchk = ( + all => 'checked="checked" ', + crit => '', + reg => '', + ); + $output .= &Apache::loncommon::start_data_table_row(). + ''.$counter.''. + ''. + ''; + foreach my $type ('all','crit','reg') { + $output .= ' '; + } + $output .= ' '. + ''. + &Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table(); + $num ++; + $r->print($output); + $r->print(qq| +
+ + + + +|); + +} + +sub get_notifications { + my ($userenv) = @_; + my %allnot; + my @critnot = split(/,/,$userenv->{'critnotification'}); + my @regnot = split(/,/,$userenv->{'notification'}); + foreach my $item (@critnot) { + $allnot{$item}{crit} = 1; + } + foreach my $item (@regnot) { + $allnot{$item}{reg} = 1; + } + return %allnot; } sub verify_and_change_msgforward { @@ -563,7 +824,7 @@ sub verify_and_change_msgforward { if (&Apache::lonnet::homeserver($msuser,$msdomain) ne 'no_host') { $newscreen.=$msuser.':'.$msdomain.','; } else { - $message.='No such user: '.$msuser.':'.$msdomain.'
'; + $message.= &mt('No such user: ').$msuser.':'.$msdomain.'
'; } } } @@ -571,37 +832,84 @@ 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 .= &mt('Set message forwarding to: ').''.$newscreen. + '
'; } else { &Apache::lonnet::del('environment',['msgforward']); &Apache::lonnet::delenv('environment\.msgforward'); - $message.='Reset message forwarding
'; + $message.= &mt("Set message forwarding to 'off'.").'
'; } - my $notification=$env{'form.notification'}; + my $critnotification; + my $notification; + my $notify_with_html; + my $lastnotify = $env{'form.numnotify'}-1; + my $totaladdresses = 0; + for (my $i=0; $i<$env{'form.numnotify'}; $i++) { + if ((!defined($env{'form.del_notify_'.$i})) && + ((($i==$lastnotify) && ($env{'form.add_notify_'.$lastnotify} == 1)) || + ($i<$lastnotify))) { + if (defined($env{'form.address_'.$i})) { + if ($env{'form.notify_type_'.$i} eq 'all') { + $critnotification .= $env{'form.address_'.$i}.','; + $notification .= $env{'form.address_'.$i}.','; + } elsif ($env{'form.notify_type_'.$i} eq 'crit') { + $critnotification .= $env{'form.address_'.$i}.','; + } elsif ($env{'form.notify_type_'.$i} eq 'reg') { + $notification .= $env{'form.address_'.$i}.','; + } + if ($env{'form.html_'.$i} eq '1') { + $notify_with_html .= $env{'form.address_'.$i}.','; + } + $totaladdresses ++; + } + } + } + $critnotification =~ s/,$//; + $critnotification=~s/\s//gs; + $notification =~ s/,$//; $notification=~s/\s//gs; + $notify_with_html =~ s/,$//; + $notify_with_html =~ s/\s//gs; if ($notification) { &Apache::lonnet::put('environment',{'notification' => $notification}); &Apache::lonnet::appenv('environment.notification' => $notification); - $message.='Set message notification address to '.$notification.'
'; + $message.=&mt('Set non-critical message notification address(es) to: ').''.$notification.'
'; } else { &Apache::lonnet::del('environment',['notification']); &Apache::lonnet::delenv('environment\.notification'); - $message.='Reset message notification
'; + $message.=&mt("Non-critical message notification set to 'off'.").'
'; } - 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; + $message.=&mt('Set critical message notification address(es) to: ').''.$critnotification.'
'; } else { &Apache::lonnet::del('environment',['critnotification']); &Apache::lonnet::delenv('environment\.critnotification'); - $message.='Reset critical message notification
'; + $message.=&mt("Critical message notification set to 'off'.").'
'; } - $r->print(< $notify_with_html}); + &Apache::lonnet::appenv('environment.notifywithhtml' => $notify_with_html); + $message.=&mt('Set address(es) to receive excerpts with html retained: ').''.$notify_with_html.''; + } else { + &Apache::lonnet::del('environment',['notifywithhtml']); + &Apache::lonnet::delenv('environment\.notifywithhtml'); + if ($totaladdresses == 1) { + $message.=&mt("Set notification address to receive excerpts with html stripped."); + } else { + $message.=&mt("Set all notification addresses to receive excerpts with html stripped."); + } + } + } else { + &Apache::lonnet::del('environment',['notifywithhtml']); + &Apache::lonnet::delenv('environment\.notifywithhtml'); + } + if ($message) { + $message .= '

'; + } + &msgforwardchanger($r,$message); } ################################################################ @@ -845,20 +1153,29 @@ sub jscript_send { 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| - - - + + + - + + |; } $output .= <<"ENDFORM"; - + - +
E-mail address:
Username:
:
: - +
Domain:
: |; $output .= &Apache::loncommon::select_dom_form($defdom,'udom').' @@ -867,17 +1184,17 @@ sub client_form { '; } else { $output .= qq| -
Current password:
New password:
Confirm password:
- +
@@ -928,14 +1245,14 @@ sub verify_and_change_password { if ($user ne '' && $domain ne '') { $homeserver = &Apache::lonnet::homeserver($user,$domain); if ($homeserver eq 'no_host') { - &passwordchanger($r,"

\nERROR". - "Invalid username and/or domain .\n

", + &passwordchanger($r,"

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

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

\nERROR". - "Username and Domain were blank.\n

", + &passwordchanger($r,"

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

", $caller,$mailtoken); return 1; } @@ -948,8 +1265,9 @@ sub verify_and_change_password { # Check for authentication types that allow changing of the password. if ($currentauth !~ /^(unix|internal):/) { if ($caller eq 'reset_by_email') { - &passwordchanger($r,"

\nERROR". - "Authentication type for this user can not be changed by this mechanism..\n

", + &passwordchanger($r,"

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

", $caller,$mailtoken); return 1; } else { @@ -965,8 +1283,9 @@ sub verify_and_change_password { unless (defined($currentpass) && defined($newpass1) && defined($newpass2) ){ - &passwordchanger($r,"

\nERROR". - "One or more password fields were blank.\n

",$caller,$mailtoken); + &passwordchanger($r,"

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

",$caller,$mailtoken); return; } # Get the keys @@ -978,10 +1297,10 @@ sub verify_and_change_password { if ($caller eq 'reset_by_email') { $tryagain_text = &mt('Please try again later.'); } + my $unable=&mt("Unable to retrieve saved token for password decryption"); $r->print(< -ERROR: Unable to retrieve stored token for -password decryption. $tryagain_text +$unable. $tryagain_text

ENDERROR # Probably should log an error here @@ -997,24 +1316,24 @@ ENDERROR my %data = &Apache::lonnet::tmpget($mailtoken); if ($currentpass ne $data{'temppasswd'}) { &passwordchanger($r, - 'ERROR:'. - 'Could not verify current authentication. '. - 'Please try again.',$caller,$mailtoken); + ''. + &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.',$caller,$mailtoken); + ''. + &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.',$caller,$mailtoken); + ''. + &mt('Passwords must be a minimum of 7 characters long').'. '. + &mt('Please try again').'.',$caller,$mailtoken); return 1; } # @@ -1025,14 +1344,14 @@ ENDERROR } if ($badpassword) { # I can't figure out how to enter bad characters on my browser. - my $errormessage = <<"ENDERROR"; -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; @@ -1043,15 +1362,11 @@ ENDERROR ($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; @@ -1155,7 +1470,7 @@ END $r->print(<<"END");

- +

Note: $lt{'thde'} @@ -1340,7 +1655,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 => @@ -1352,7 +1667,7 @@ sub handler { breadcrumb => { href => '/adm/preferences?action=changemsgforward', text => 'Change Message Forwarding'}, - printmenu => 'yes', + printmenu => 'no', subroutine => \&verify_and_change_msgforward })); my $aboutmeaction= '/adm/'.$env{'user.domain'}.'/'.$env{'user.name'}.'/aboutme'; @@ -1470,6 +1785,39 @@ sub handler { })); } + push (@Options,({ action => 'changeicons', + linktext => 'Change How Menus are Displayed', + href => '/adm/preferences', + subroutine => \&iconchanger, + breadcrumb => + { href => '/adm/preferences?action=changeicons', + text => 'Change Main Menu'}, + }, + { action => 'verify_and_change_icons', + subroutine => \&verify_and_change_icons, + breadcrumb => + { href => '/adm/preferences?action=changeicons', + text => 'Change Main Menu'}, + printmenu => 'yes', + })); + +# push (@Options,({ action => 'changeclicker', +# linktext => 'Register Response Devices ("Clickers")', +# href => '/adm/preferences', +# subroutine => \&clickerchanger, +# breadcrumb => +# { href => '/adm/preferences?action=changeicons', +# text => 'Register Clicker'}, +# }, +# { action => 'verify_and_change_clicker', +# subroutine => \&verify_and_change_clicker, +# breadcrumb => +# { href => '/adm/preferences?action=changeclicker', +# text => 'Register Clicker'}, +# printmenu => 'yes', +# })); + + if (&Apache::lonnet::allowed('whn',$env{'request.course.id'}) || &Apache::lonnet::allowed('whn',$env{'request.course.id'}.'/' .$env{'request.course.sec'})) {