--- loncom/interface/lonnotify.pm 2005/10/05 18:50:08 1.3 +++ loncom/interface/lonnotify.pm 2005/10/14 19:10:20 1.6 @@ -151,8 +151,6 @@ sub print_display_option_form { 'enddate', $now); my $jscript; - my %totals = (); - my %personnel = (); my $output = <<"ENDONE"; $html @@ -174,14 +172,17 @@ ENDONE ''; $output .= &Apache::lonhtmlcommon::row_closure(); $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Choose sender(s)')); -# FIXME - need to complete work on domain_roles_get -# &Apache::lonnet::domain_roles_get($cdom,\@roles,\%personnel,%totals); + my %personnel = &Apache::lonnet::get_domain_roles($cdom,\@roles); $output .= ''; - if ($totals{'dc'} > 0) { - foreach my $user (sort(keys(%{$personnel{'dc'}}))) { - my ($uname,$udom) = split(/:/,$user); - my %userinfo = &Apache::lonnet::get('environment',['lastname','firstname'],$udom,$uname); - $output .= ' '.$userinfo{firstname}.' '.$userinfo{lastname}.'  ('.$user.')'; + my @domcc = (); + foreach my $server (keys %personnel) { + foreach my $user (sort(keys %{$personnel{$server}})) { + my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user); + unless (grep/^$uname:$udom$/,@domcc) { + my %userinfo = &Apache::lonnet::get('environment',['lastname','firstname'],$udom,$uname); + $output .= ' '.$userinfo{firstname}.' '.$userinfo{lastname}.'  ('.$uname.':'.$udom.')'; + push (@domcc,$uname.':'.$udom); + } } } $output .= ''; @@ -215,8 +216,7 @@ sub print_display { my $start = &Apache::lonhtmlcommon::get_date_from_form('startdate'); my $end = &Apache::lonhtmlcommon::get_date_from_form('enddate'); my @senders = &Apache::loncommon::get_env_multiple('form.sender'); - my $senderlist = join('&',@senders); - my %sentmail = &Apache::lonnet::dcmaildump($cdom,$start,$end,$senderlist); + my %sentmail = &Apache::lonnet::dcmaildump($cdom,$start,$end,\@senders); my %dcmail = (); my %Sortby = (); my $jscript = <<"ENDSCRIPT"; @@ -286,7 +286,7 @@ ENDONE $recipients .= $dcmail{$msgid}{recipients}{$user}.', '; } $recipients =~ s/,\s$//; - $output .= ''.$date.''.$dcmail{$msgid}{subject}.''.$sname.':'.$sdom.''.$dcmail{$msgid}{message}.''.$recipients.''."\n"; + $output .= ''.$date.''.&cr_to_br($dcmail{$msgid}{subject}).''.$sname.':'.$sdom.''.&cr_to_br($dcmail{$msgid}{message}).''.$recipients.''."\n"; $rowNum ++; } } else { @@ -325,9 +325,10 @@ ENDONE } $recipients =~ s/,\s$//; } + my ($date,$subj,$sname,$sdom,$cdom) = split(/:/,$msgid,5); $date = &Apache::lonlocal::locallocaltime($date); - $output .= ''.$date.''.$dcmail{$msgid}{subject}.''.$sname.':'.$sdom.''.$dcmail{$msgid}{message}.''.$recipients.''."\n"; + $output .= ''.$date.''.&cr_to_br($dcmail{$msgid}{subject}).''.$sname.':'.$sdom.''.&cr_to_br($dcmail{$msgid}{message}).''.$recipients.''."\n"; $rowNum ++; } } @@ -410,7 +411,7 @@ $breadcrumbs
ENDONE $output .= &Apache::lonhtmlcommon::start_pick_box($table_width); - my @roles = ('cc','in','ta','ep','ad','st','cr'); + my @roles = ('ow','cc','in','ta','ep','ad','st','cr'); my %longtypes = (); my %authtypes = (); &form_elements(\%longtypes,\%authtypes); @@ -578,7 +579,15 @@ ENDONE $output .= ''.$username.'  '.$recipients{$username}.''; } } - $output .= ''; + $output .= ''; + if (@unmatched) { + $output .= '

'.&mt('Could not determine e-mail addresses for the following users:').''; + } + $output .= ''; $output .= &Apache::lonhtmlcommon::row_closure(); $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Sender e-mail address')); $output .= ''; @@ -635,6 +644,7 @@ ENDONE my @deliveries = (); &broadcast_email(\@recipients,$subject,$from,$message,\@deliveries); if (@deliveries > 0) { + &store_mail($subject,$message,$dom,\@deliveries); $output .= ' @@ -646,8 +656,8 @@ ENDONE - - + +
Sent'.$subject.''.$message.''.&cr_to_br($subject).''.&cr_to_br($message).' '; foreach my $person (@deliveries) { my ($username,$email) = split(/:/,$person); @@ -693,7 +703,7 @@ sub broadcast_email { } sub get_user_info { - my ($user,%email_defaults,$ltext) = @_; + my ($user,%email_defaults) = @_; my ($uname,$udom) = split(/:/,$user); my @emailtypes = ('permanentemail','critnotification','notification'); my %userinfo = &Apache::lonnet::get('environment',\@emailtypes,$udom,$uname); @@ -712,7 +722,7 @@ sub get_user_info { $email = $uname.'@'.$email_defaults{$authtype}{$autharg}; } } else { - if (defined($email_defaults{$authtype})) { + if ((defined($email_defaults{$authtype})) && ($email_defaults{$authtype} ne '')) { $email = $uname.'@'.$email_defaults{$authtype}; } } @@ -730,7 +740,7 @@ sub form_elements { %{$authtypes} = ( krb4 => 'Kerberos 4', krb5 => 'Kerberos 5', - int => 'Internal (LON-CAPA)', + internal => 'Internal (LON-CAPA)', unix => 'Filesystem (UNIX)', local => 'Local/Customized', ); @@ -739,16 +749,15 @@ sub form_elements { sub store_mail { my ($subject,$message,$domain,$recipients,$attachmenturl,$ltext) = @_; - my %status = (); my %servers = (); my $msgid=&packagemail($subject,$message,$domain, $recipients,\%servers,$attachmenturl); # Store in dc email db files on appropriate servers. foreach my $server (keys(%servers)) { -# FIXME This needs to be via a subroutine in lonnet - $status{$server} = &Apache::lonnet::critical( - 'dcmailput:'.$domain.':'.&Apache::lonnet::escape($msgid).'='. - &Apache::lonnet::escape($servers{$server}),$server); + unless (&Apache::lonnet::dcmailput($domain,$msgid,\%servers,$server) eq 'ok') { + &Apache::lonnet::logthis('Storage of dc mail failed for domain'.$domain.' for server: '. + $server.'. Message ID was '.$msgid); + } } } @@ -855,4 +864,11 @@ sub echo_form_input { return $output; } +sub cr_to_br { + my $incoming = shift; + $incoming =~ s/\n/\
/g; + return $incoming; +} + + 1;