--- loncom/interface/lonpreferences.pm 2007/05/02 01:33:49 1.101 +++ loncom/interface/lonpreferences.pm 2007/05/08 17:23:10 1.102 @@ -1,7 +1,7 @@ # The LearningOnline Network # Preferences # -# $Id: lonpreferences.pm,v 1.101 2007/05/02 01:33:49 albertel Exp $ +# $Id: lonpreferences.pm,v 1.102 2007/05/08 17:23:10 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -566,33 +566,162 @@ sub verify_and_change_icons { ################################################################ 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 you entered', + 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('Messages to forward').''. + &mt('Excerpt retains HTML tags included in message').''. + &Apache::loncommon::end_data_table_header_row(); + my $num = 0; + foreach my $item (@sortforwards) { + $output .= &Apache::loncommon::start_data_table_row(). + ''. + &mt('Delete').''. + ''; + 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 ++; + } + my %defchk = ( + all => 'checked="checked" ', + crit => '', + reg => '', + ); + $output .= &Apache::loncommon::start_data_table_row(). + ''. + &mt('Add').''. + ''; + 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 { @@ -609,7 +738,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.'
'; } } } @@ -617,37 +746,78 @@ 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 $critnotification; + my $notification; + my $notify_with_html; + my $lastnotify = $env{'form.numnotify'}-1; + for (my $i=0; $i<$env{'form.numnotify'}; $i++) { + if ((!defined($env{'form.del_notify_'.$i})) && + ((($i==$lastnotify) && (defined($env{'form.add_notify_'.$lastnotify}))) || + ($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}.','; + } + } + } } - my $notification=$env{'form.notification'}; + $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'); + $message.=&mt("Set all notification address(es) to receive excerpts with html stripped.").'
'; + } + } else { + &Apache::lonnet::del('environment',['notifywithhtml']); + &Apache::lonnet::delenv('environment\.notifywithhtml'); + } + if ($message) { + $message .= '

'; + } + &msgforwardchanger($r,$message); } ################################################################ @@ -1405,7 +1575,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';