--- loncom/interface/lonpreferences.pm 2007/05/02 01:33:49 1.101
+++ loncom/interface/lonpreferences.pm 2007/05/08 18:26:54 1.103
@@ -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.103 2007/05/08 18:26:54 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
+$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';