--- loncom/interface/lonnotify.pm 2005/12/10 00:46:34 1.11 +++ loncom/interface/lonnotify.pm 2008/12/03 21:16:21 1.31 @@ -1,3 +1,7 @@ +# The LearningOnline Network with CAPA +# Sending messages +# +# $Id: lonnotify.pm,v 1.31 2008/12/03 21:16:21 schafran Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,13 +31,15 @@ package Apache::lonnotify; use strict; use Apache::lonnet; use Apache::loncommon; -use Apache::lonsupportreq; +use Apache::courseclassifier; use LONCAPA::Enrollment; use Apache::Constants qw(:common :http); use Apache::lonlocal; use Mail::Send; use HTML::TokeParser; use HTML::Entities; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; sub handler { my ($r) = @_; @@ -56,49 +62,75 @@ sub handler { my $origin = $env{'form.origin'}; &Apache::lonhtmlcommon::clear_breadcrumbs(); - my %ltext=&Apache::lonlocal::texthash( - 'note' => 'Notification E-mail', - ); - my $function = &Apache::loncommon::get_users_function(); - my $loadcode; - my $tablecolor = &Apache::loncommon::designparm($function.'.tabbg'); - if ((defined($env{'form.origin'})) && ($command eq 'compose' || $command eq 'pick_target' || $command eq 'pick_display')) { - unless ($env{'form.origin'} eq '') { - $loadcode = 'javascript:setFormElements(document.'.$env{'form.command'}.')'; - if (($command eq 'pick_target') && ( - ($origin eq 'compose') || ($origin eq 'process'))) { - if ($env{'form.coursepick'} eq 'category') { - $loadcode .= ';javascript:setCourseCat(document.'.$env{'form.command'}.')'; - } - } - } - } - my $loaditems = ' onLoad="'.$loadcode.'" '; - my $bodytag = &Apache::loncommon::bodytag('Broadcast e-mail to users',$function,$loaditems); - my $html=&Apache::lonxml::xmlbegin(); + &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/notify', text=>"Broadcast E-mail"}); if ($command eq 'process') { - &print_request_receipt($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext); + &print_request_receipt($r,$command,$cdom); } elsif ($command eq 'compose') { - &print_composition_form($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext); + &print_composition_form($r,$command,$cdom); } elsif ($command eq 'pick_target') { - &print_selection_form($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext); + &print_selection_form($r,$command,$cdom); } elsif ($command eq 'pick_display') { - &print_display_option_form($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext); + &print_display_option_form($r,$command,$cdom); } elsif ($command eq 'display') { - &print_display($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext); + &print_display($r,$command,$cdom); } else { - &print_front_page($r,'front',$cdom,$tablecolor,$bodytag,$html,\%ltext); + &print_front_page($r,'front',$cdom); } return OK; } +sub add_script { + my ($js) = @_; + return ''; +} + +sub start_page { + my ($jscript,$bread_title,$formname) = @_; + + my $loadcode; + if ((defined($env{'form.origin'})) + && ($env{'form.command'} eq 'compose' + || $env{'form.command'} eq 'pick_target' + || $env{'form.command'} eq 'pick_display')) { + if ($env{'form.origin'} ne '') { + $loadcode = 'javascript:setFormElements(document.'.$env{'form.command'}.')'; + if (($env{'form.command'} eq 'pick_target') + && (($env{'form.origin'} eq 'compose') + || ($env{'form.origin'} eq 'process'))) { + if ($env{'form.coursepick'} eq 'category') { + $loadcode .= ';javascript:setCourseCat(document.'.$env{'form.command'}.')'; + } + } + } + } + + my $start_page = + &Apache::loncommon::start_page('Broadcast e-mail to users', $jscript, + {'add_entries' => + {'onload' => $loadcode,},}); + my $breadcrumbs = + &Apache::lonhtmlcommon::breadcrumbs($bread_title, + 'Broadcast_system_email'); + my $output = <<"ENDONE"; +$start_page +$breadcrumbs +
+
+ENDONE + + return $output; +} + +sub end_page { + return '
'.&Apache::loncommon::end_page(); +} + sub print_front_page { - my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_; - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs - (undef,'Broadcast e-mail to Domain','Broadcast_system_email'); + my ($r,$formname,$cdom) = @_; + my $jscript = qq| function next_page(caller) { if (caller == 'view') { @@ -110,54 +142,32 @@ function next_page(caller) { document.front.submit() } |; - my %lt=&Apache::lonlocal::texthash( - 'note' => 'Notification E-mail', - ); - my $output = <<"ENDONE"; -$html - - LON-CAPA $lt{'note'} - - -$bodytag -$breadcrumbs -
-ENDONE - $output .= '
'. - ''; - $output .= &Apache::lonhtmlcommon::start_pick_box(); - $output .= ''. + + my $output = &start_page(&add_script($jscript), + 'Broadcast e-mail to Domain', $formname); + + $output .= ''; + $output .= '
'. ''. + &mt('Send a new e-mail to selected users from this domain').''. '
'. - 'Send a new e-mail message to selected users from this domain
'. - 'Display e-mail sent by Domain Coordinators in this domain'. + &mt('Display e-mail sent by Domain Coordinators in this domain'). '
'; - $output .= &Apache::lonhtmlcommon::end_pick_box(); - $output .= qq( -
- -); + $output .= &end_page(); + $r->print($output); return; } sub print_display_option_form { - my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_; - &Apache::lonhtmlcommon::add_breadcrumb - ({text=>"Display options"}); - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs - (undef,'Broadcast e-mail display options','Broadcast_system_email'); - my $table_width = ''; - my $col_width = '200'; + my ($r,$formname,$cdom) = @_; + &Apache::lonhtmlcommon::add_breadcrumb({text=>"Display options"}); + my $cmd = 'display'; my $submit_text = 'Display e-mail'; my @roles = ('dc'); my $now = time; - my %lt=&Apache::lonlocal::texthash( - 'note' => 'Notification E-mail', - ); + my $startdateform = &Apache::lonhtmlcommon::date_setter($formname, 'startdate', $now); @@ -180,66 +190,46 @@ sub print_display_option_form { sender => 'checkbox', ); my $jscript = &Apache::lonhtmlcommon::set_form_elements(\%elements); - my $output = <<"ENDONE"; -$html - - LON-CAPA $lt{'note'} - - -$bodytag -$breadcrumbs -
-
-ENDONE - $output .= &Apache::lonhtmlcommon::start_pick_box($table_width); - $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Date range')); - $output .= ''; + $output .= '
Earliest to display: '. + + my $output = &start_page(&add_script($jscript), + 'Broadcast e-mail display options', $formname); + + $output .= &Apache::lonhtmlcommon::start_pick_box(); + $output .= &Apache::lonhtmlcommon::row_title(&mt('Date range')); + $output .= ''; - $output .= '
'.&mt('Earliest to display:').' '. $startdateform.'
Latest to display: '.$enddateform. - '
'.&mt('Latest to display:').' '.$enddateform. + '
'; $output .= &Apache::lonhtmlcommon::row_closure(); - $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Choose sender(s)')); + $output .= &Apache::lonhtmlcommon::row_title(&mt('Choose sender(s)')); my %personnel = &Apache::lonnet::get_domain_roles($cdom,\@roles); - $output .= ''; 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.')'; + $output .= ' '.$userinfo{'firstname'}.' '.$userinfo{'lastname'}.'  ('.$uname.':'.$udom.')'; push (@domcc,$uname.':'.$udom); } } } - $output .= ''; $output .= &Apache::lonhtmlcommon::row_closure(); - $output .= &Apache::lonhtmlcommon::submit_row($col_width,$tablecolor,&mt('Submit'),$cmd,$submit_text); + $output .= &Apache::lonhtmlcommon::submit_row(&mt('Submit'),$cmd,$submit_text); $output .= &Apache::lonhtmlcommon::end_pick_box(); - $output .= qq( - -
- -); + $output .= qq(\n). + &end_page(); $r->print($output); return; } sub print_display { - my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_; + my ($r,$formname,$cdom) = @_; &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:goBack('pick_display')", text=>"Display options"}, {text=>"E-mail display"}); - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs - (undef,'Display Broadcast e-mail','Broadcast_system_email'); - my $table_width = ''; - my $col_width = '200'; - my $rowColor1 = "#ffffff"; - my $rowColor2 = "#eeeeee"; - my $rowColor; + my $msgcount = 0; my $start = &Apache::lonhtmlcommon::get_date_from_form('startdate'); my $end = &Apache::lonhtmlcommon::get_date_from_form('enddate'); @@ -259,19 +249,9 @@ function goBack(target) { } ENDSCRIPT - my $output = <<"ENDONE"; -$html - - LON-CAPA $$ltext{'note'} - - -$bodytag -$breadcrumbs -
-
-ENDONE + + my $output = &start_page(&add_script($jscript), + 'Display Broadcast e-mail', $formname); foreach my $msgid (keys(%sentmail)) { my %content = &Apache::lonmsg::unpackagemsg($sentmail{$msgid}); @@ -287,41 +267,37 @@ ENDONE } } } - $output .= &Apache::lonhtmlcommon::start_pick_box(); + $output .= &Apache::loncommon::start_data_table(); if ($msgcount > 0) { - my $rowNum = 0; - $output .= ' - - - - - - - '; + $output .= &Apache::loncommon::start_data_table_header_row(). + ''. + ''. + ''. + ''. + ''. + &Apache::loncommon::end_data_table_header_row(); + if (($env{'form.sortby'} eq 'date') || ($env{'form.sortby'} eq '') || (!defined($env{'form.sortby'})) || (($env{'form.sortby'} eq 'sender') && (@senders <= 1))) { foreach my $msgid (sort(keys(%dcmail))) { - if ($rowNum %2 == 1) { - $rowColor = $rowColor1; - } else { - $rowColor = $rowColor2; - } my $recipients = ''; - my ($date,$subj,$sname,$sdom) = + my ($date,undef,$sname,$sdom) = &Apache::lonmsg::unpackmsgid($msgid,undef,1); - $subj = &Apache::lonnet::escape($subj); $date = &Apache::lonlocal::locallocaltime($date); foreach my $user (sort(keys(%{$dcmail{$msgid}{recipient}}))) { $recipients .= $dcmail{$msgid}{recipient}{$user}.', '; } $recipients =~ s/,\s$//; - $output .= ''."\n"; - $rowNum ++; + $output .= &Apache::loncommon::start_data_table_row(). + ''. + ''. + ''. + ''."\n". + &Apache::loncommon::end_data_table_row(); } } else { foreach my $msgid (sort(keys(%dcmail))) { - my ($date,$subj,$sname,$sdom) = + my ($date,undef,$sname,$sdom) = &Apache::lonmsg::unpackmsgid($msgid,undef,1); - $subj = &Apache::lonnet::escape($subj); if ($env{'form.sortby'} eq 'subject') { push @{$Sortby{$dcmail{$msgid}{subject}}},$msgid; } elsif ($env{'form.sortby'} eq 'message') { @@ -341,11 +317,6 @@ ENDONE } foreach my $key (sort(keys(%Sortby))) { foreach my $msgid (@{$Sortby{$key}}) { - if ($rowNum %2 == 1) { - $rowColor = $rowColor1; - } else { - $rowColor = $rowColor2; - } my $recipients = ''; if ($env{'form.sortby'} eq 'recipients') { $recipients = $key; @@ -355,20 +326,25 @@ ENDONE } $recipients =~ s/,\s$//; } - my ($date,$subj,$sname,$sdom) = + my ($date,undef,$sname,$sdom) = &Apache::lonmsg::unpackmsgid($msgid,undef,1); - $subj = &Apache::lonnet::escape($subj); $date = &Apache::lonlocal::locallocaltime($date); - $output .= ''."\n"; - $rowNum ++; + $output .= &Apache::loncommon::start_data_table_row(). + ''. + ''. + ''. + ''. + ''."\n". + &Apache::loncommon::end_data_table_row(); } } } - $output .= '
DateSubjectSenderMessageRecipients
DateSubjectSenderMessageRecipients
'.$date.''.&cr_to_br($dcmail{$msgid}{subject}).''.$sname.':'.$sdom.''.&cr_to_br($dcmail{$msgid}{message}).''.$recipients.'
'.$date.''.&cr_to_br($dcmail{$msgid}{subject}).''.$sname.':'.$sdom.''.&cr_to_br($dcmail{$msgid}{message}).''.$recipients.'
'.$date.''.&cr_to_br($dcmail{$msgid}{subject}).''.$sname.':'.$sdom.''.&cr_to_br($dcmail{$msgid}{message}).''.$recipients.'
'.$date.''.&cr_to_br($dcmail{$msgid}{subject}).''.$sname.':'.$sdom.''.&cr_to_br($dcmail{$msgid}{message}).''.$recipients.'
'; } else { - $output .= ' 
  No mail sent matching supplied criteria  

 '; + $output .= &Apache::loncommon::start_data_table_empty_row(). + 'No mail sent matching supplied criteria'. + &Apache::loncommon::end_data_table_empty_row(); } - $output .= &Apache::lonhtmlcommon::end_pick_box(); + $output .= &Apache::loncommon::end_data_table(); $output .= &Apache::lonhtmlcommon::echo_form_input(['sortby','command','origin']); my $curr_sortby; if (defined($env{'form.sortby'})) { @@ -379,16 +355,13 @@ ENDONE $output .= qq(\n); $output .= qq(\n); $output .= qq(\n); - $output .= qq( - -); + $output .= &end_page(); $r->print($output); return; } sub print_selection_form { - my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_; + my ($r,$formname,$cdom) = @_; my %coursecodes = (); my %codes = (); my @codetitles = (); @@ -401,30 +374,30 @@ sub print_selection_form { my $totcodes = 0; my $format_reply; my $jscript = ''; - my $table_width = '100%'; - my $col_width = '200'; my %lt=&Apache::lonlocal::texthash( - 'note' => 'Notification E-mail', 'buil' => 'Building valid e-mail address from username, if missing from preferences:', 'kerb' => 'Kerberos: enter default for each realm used in the domain, with comma separation of entries', 'infs' => 'Internal, Filesystem and Local authentication: enter single default.', - 'comp' => 'Compose Message' + 'comp' => 'Compose E-mail' ); &Apache::lonhtmlcommon::add_breadcrumb ({text=>"Select Audience"}); - $totcodes = &Apache::lonsupportreq::retrieve_instcodes(\%coursecodes,$cdom,$totcodes); + $totcodes = &Apache::courseclassifier::retrieve_instcodes(\%coursecodes,$cdom,$totcodes); if ($totcodes > 0) { $format_reply = &Apache::lonnet::auto_instcode_format($caller,$cdom,\%coursecodes,\%codes,\@codetitles,\%cat_titles,\%cat_order); if ($format_reply eq 'ok') { my $numtypes = @codetitles; - &Apache::lonsupportreq::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); - &Apache::lonsupportreq::javascript_code_selections($formname,$numtypes,\%cat_titles,\$jscript,\%idlist,\%idnums,\%idlist_titles,\@codetitles); + &Apache::courseclassifier::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles); + my ($scripttext,$longtitles) = &Apache::courseclassifier::javascript_definitions(\@codetitles,\%idlist,\%idlist_titles,\%idnums,\%cat_titles); + my $longtitles_str = join('","',@{$longtitles}); + my $allidlist = $idlist{$codetitles[0]}; + $jscript .= &Apache::courseclassifier::courseset_js_start($formname,$longtitles_str,$allidlist); + $jscript .= $scripttext; + $jscript .= &Apache::courseclassifier::javascript_code_selections($formname,@codetitles); } } - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs - (undef,'Choose e-mail audience','Broadcast_system_email'); my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($cdom); my %elements = ( @@ -437,7 +410,7 @@ sub print_selection_form { internal => 'text', krb4 => 'text', krb5 => 'text', - local => 'text', + localauth => 'text', unix => 'text', ); $jscript .= &Apache::lonhtmlcommon::set_form_elements(\%elements); @@ -474,52 +447,40 @@ function setCourseCat(formname) { } |; } - my $output = <<"ENDONE"; -$html - - LON-CAPA $lt{'note'} - -$cb_jscript - -$bodytag -$breadcrumbs -
-
-ENDONE - $output .= &Apache::lonhtmlcommon::start_pick_box($table_width); - my @roles = ('ow','cc','in','ta','ep','st','cr'); - my %longtypes = (); - my %authtypes = (); - &form_elements(\%longtypes,\%authtypes); - my $descrip = $lt{'buil'}.' + + + my $output = &start_page(&add_script($jscript).$cb_jscript, + 'Choose e-mail audience', $formname); + + $output .= &Apache::lonhtmlcommon::start_pick_box(); + my @roles = ('ow','cc','in','ta','ep','st','cr'); + my %longtypes = (); + my %authtypes = (); + &form_elements(\%longtypes,\%authtypes); + my $descrip = $lt{'buil'}.'
  • '.$lt{'kerb'}.'
    (e.g., MSU.EDU=msu.edu, MSUE.EDU=msue.msu.edu).
  • '.$lt{'infs'}.'
'."\n"; - my $submit_text = $lt{'comp'}; - my $cmd = 'compose'; - $output .= &Apache::lonhtmlcommon::role_select_row(\@roles,$col_width,$tablecolor,'Roles'); - $output .= &Apache::lonhtmlcommon::course_select_row($col_width,$tablecolor,'Courses',$formname,$totcodes,\@codetitles,\%idlist,\%idlist_titles); - $output .= &Apache::lonhtmlcommon::status_select_row(\%longtypes,$col_width,$tablecolor,&mt('Access status')); - $output .= &Apache::lonhtmlcommon::email_default_row(\%authtypes,$col_width,$tablecolor,&mt('Username -> Email conversion'),$descrip); - $output .= &Apache::lonhtmlcommon::submit_row($col_width,$tablecolor,&mt('Submit'),$cmd,$submit_text); - $output .= &Apache::lonhtmlcommon::end_pick_box(); - $output .= qq( -
- -); + my $submit_text = $lt{'comp'}; + my $cmd = 'compose'; + $output .= &Apache::lonhtmlcommon::role_select_row(\@roles,'Roles'); + $output .= &Apache::lonhtmlcommon::course_select_row('Courses',$formname,$totcodes,\@codetitles,\%idlist,\%idlist_titles); + $output .= &Apache::lonhtmlcommon::status_select_row(\%longtypes,&mt('Access status')); + $output .= &Apache::lonhtmlcommon::email_default_row(\%authtypes,&mt('Username -> Email conversion'),$descrip); + $output .= &Apache::lonhtmlcommon::submit_row(&mt('Submit'),$cmd,$submit_text); + $output .= &Apache::lonhtmlcommon::end_pick_box(); + $output .= &end_page(); $r->print($output); return; } sub print_composition_form { - my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_; + my ($r,$formname,$cdom) = @_; &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:goBack('pick_target')", text=>"Select Audience"}, - {text=>"Compose Message"}); + {text=>"Compose E-mail"}); my $jscript = &Apache::loncommon::check_uncheck_jscript(); $jscript .= qq| function goBack(target) { @@ -527,11 +488,8 @@ function goBack(target) { document.$formname.submit(); } |; - my $breadcrumbs = (&Apache::lonhtmlcommon::breadcrumbs - (undef,'Broadcast e-mail to users','Broadcast_system_email')); my %lt=&Apache::lonlocal::texthash( - 'note' => 'Notification E-mail', 'nore' => 'No recipients identified', 'emad' => 'e-mail address', ); @@ -543,21 +501,14 @@ function goBack(target) { ); $jscript .= &Apache::lonhtmlcommon::set_form_elements(\%elements); - $r->print(< - LON-CAPA $lt{'note'} - - -$bodytag $breadcrumbs -
-ENDONE + $r->print(&start_page(&add_script($jscript), + 'Broadcast e-mail to users', $formname)); + my $coursefilter = $env{'form.coursepick'}; - my %courses = (); + my %courses; if ($coursefilter eq 'all') { - %courses = &Apache::lonnet::courseiddump($cdom,'.','.','.','.','.'); + %courses = &Apache::lonnet::courseiddump($cdom,'.','.','.','.','.', + undef,undef,'Course'); } elsif ($coursefilter eq 'category') { my $instcode = ''; my @cats = ('Semester','Year','Department','Number'); @@ -571,12 +522,13 @@ ENDONE if ($instcode eq '') { $instcode = '.'; } - %courses = &Apache::lonnet::courseiddump($cdom,'.','.',$instcode,'.','.'); + %courses = &Apache::lonnet::courseiddump($cdom,'.','.',$instcode,'.','.', + undef,undef,'Course'); } elsif ($coursefilter eq 'specific') { if ($env{'form.coursetotal'} > 1) { my @course_ids = split(/&&/,$env{'form.courselist'}); - foreach (@course_ids) { - $courses{$_} = ''; + foreach my $cid (@course_ids) { + $courses{$cid} = ''; } } else { $courses{$env{'form.courselist'}} = ''; @@ -589,8 +541,6 @@ ENDONE my %longtypes = (); my %authtypes = (); my %email_defaults = (); - my $table_width = '100%'; - my $col_width = '200'; &form_elements(\%longtypes,\%authtypes); foreach my $auth (keys(%authtypes)) { @@ -631,7 +581,10 @@ ENDONE $access{$type} = $type; } foreach my $course_id (keys(%courses)) { - my ($cdom,$cnum) = split(/_/,$course_id); + my %coursehash = + &Apache::lonnet::coursedescription($course_id,{'one_time' => 1}); + my $cdom = $coursehash{'domain'}; + my $cnum = $coursehash{'num'}; &Apache::loncommon::get_course_users($cdom,$cnum,\%access,\@roles,\@sections,\%users); } foreach my $role (keys(%users)) { @@ -646,33 +599,38 @@ ENDONE } } } - my $output = '
'."\n"; + my $output; if ($totalrecip > 0) { - $output .= &Apache::lonhtmlcommon::start_pick_box($table_width); - $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Subject')); - $output .= ' '; + $output .= &Apache::lonhtmlcommon::start_pick_box(); + $output .= &Apache::lonhtmlcommon::row_title(&mt('Subject')); + $output .= ''; $output .= &Apache::lonhtmlcommon::row_closure(); - $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Message')); - $output .= ' '; + $output .= &Apache::lonhtmlcommon::row_title(&mt('Message')); + $output .= ' '; $output .= &Apache::lonhtmlcommon::row_closure(); - $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Recipients')); - $output .= ''; + $output .= &Apache::loncommon::start_data_table(); if (keys(%recipients) > 0) { - $output .= ' username:domain  '.$lt{'emad'}.''; + $output .= &Apache::loncommon::start_data_table_header_row(); + $output .= ' username:domain'.$lt{'emad'}.''; + $output .= &Apache::loncommon::end_data_table_header_row(); } foreach my $username (sort(keys(%recipients))) { + $output .= &Apache::loncommon::start_data_table_row(); if ($recipients{$username} =~ /\@/) { - my $value=&Apache::lonnet::escape($username).':'.&Apache::lonnet::escape($recipients{$username}); - $output .= ''.$username.'  '.$recipients{$username}.''; + my $value=&escape($username).':'.&escape($recipients{$username}); + $output .= ''.$username.''.$recipients{$username}.''; } + $output .= &Apache::loncommon::end_data_table_row(); } - $output .= ''; + $output .= &Apache::loncommon::end_data_table(); if (@unmatched) { $output .= '

'.&mt('Could not determine e-mail addresses for the following users:').'
    '; foreach my $username (sort @unmatched) { @@ -680,12 +638,11 @@ ENDONE } $output .= '
'; } - $output .= ''; $output .= &Apache::lonhtmlcommon::row_closure(); - $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Sender e-mail address')); - $output .= ''; + $output .= &Apache::lonhtmlcommon::row_title(&mt('Sender e-mail address')); + $output .= ''; $output .= &Apache::lonhtmlcommon::row_closure(); - $output .= &Apache::lonhtmlcommon::submit_row($col_width,$tablecolor,&mt('Submit'),'process',&mt('Send Message')); + $output .= &Apache::lonhtmlcommon::submit_row(&mt('Submit'),'process',&mt('Send')); $output .= &Apache::lonhtmlcommon::end_pick_box(); } else { $output .= $lt{'nore'}."\n". @@ -693,14 +650,14 @@ ENDONE } $output .= ''."\n"; $output .= &Apache::lonhtmlcommon::echo_form_input(['command','origin','subject','message','recipient','sender'],); - $output .= '
'; + $output .= &end_page(); $r->print($output); return; } sub print_request_receipt { - my ($r,$formname,$dom,$tablecolor,$bodytag,$html,$ltext) =@_; + my ($r,$formname,$dom) =@_; my @recipients = &Apache::loncommon::get_env_multiple('form.recipient'); my $subject = $env{'form.subject'}; my $message = $env{'form.message'}; @@ -711,82 +668,65 @@ function goBack(target) { document.$formname.submit(); } ENDSCRIPT + &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:goBack('pick_target')", text=>"Select audience"}); &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:goBack('compose')", - text=>"Compose Message"}); + text=>"Compose E-mail"}); &Apache::lonhtmlcommon::add_breadcrumb ({href=>"/adm/notify?command=process", text=>"Outcome"}); - my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs - (undef,'E-mail Delivery','Broadcast_system_email'); - my $output = < - LON-CAPA Notification E-mail - - -$bodytag -$breadcrumbs -
-
-ENDONE - $output .= &Apache::lonhtmlcommon::start_pick_box(); + + + my $output = &start_page(&add_script($jscript), 'E-mail Delivery', + $formname); + + my @deliveries = (); &broadcast_email(\@recipients,$subject,$from,$message,\@deliveries); if (@deliveries > 0) { + $output .= &Apache::loncommon::start_data_table(); &store_mail($subject,$message,$dom,\@deliveries); - $output .= ' - - - - - - - - - - - - - '. + ''. + ''. + ''. + &Apache::loncommon::end_data_table_header_row(); + $output .= &Apache::loncommon::start_data_table_row(). + ''. + ''. + ''. + ' - -
StatusSubjectMessageRecipients
Sent'.&cr_to_br($subject).''.&cr_to_br($message).''; + $output .= &Apache::loncommon::start_data_table_header_row(). + ''.&mt('Status').''.&mt('Subject').''.&mt('Message').''.&mt('Recipents').''.&mt('Sent').''.&cr_to_br($subject).''.&cr_to_br($message).''; foreach my $person (@deliveries) { my ($username,$email) = split(/:/,$person); - $output .= &Apache::lonnet::unescape($email).' ('.&Apache::lonnet::unescape($username).')
'."\n"; + $output .= &unescape($email).' ('.&unescape($username).')
'."\n"; } - $output .= '
- - '; + $output .= ''. + &Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table(); } else { $output .= 'No mail sent - no recipients identified'; } - $output .= &Apache::lonhtmlcommon::end_pick_box(); - $output .= '
Send another message?'."\n"; + $output .= '
'.&mt('Send another e-mail').''."\n"; $output .= ''."\n". ''."\n"; $output .= &Apache::lonhtmlcommon::echo_form_input(['command','origin']); - $output .= ' -
- -'; + $output .= &end_page(); $r->print($output); return; } sub broadcast_email { - my ($recipients,$subject,$from,$message,$deliveries,$ltext)=@_; + my ($recipients,$subject,$from,$message,$deliveries)=@_; # Should implement staggered delivery for large numbers of recipients?. foreach my $user (@{$recipients}) { my $msg = new Mail::Send; my ($username,$to) = split(/:/,$user); - $username = &Apache::lonnet::unescape($username); - $to = &Apache::lonnet::unescape($to); + $username = &unescape($username); + $to = &unescape($to); $msg->to($to); $msg->subject($subject); $msg->add('From',"$from"); @@ -802,7 +742,7 @@ sub get_user_info { my ($user,%email_defaults) = @_; my ($uname,$udom) = split(/:/,$user); my @emailtypes = ('permanentemail','critnotification','notification'); - my %userinfo = &Apache::lonnet::get('environment',\@emailtypes,$udom,$uname); + my %userinfo = &Apache::loncommon::getemails($uname,$udom); my $email = ''; foreach my $type (@emailtypes) { $email = $userinfo{$type}; @@ -827,7 +767,7 @@ sub get_user_info { } sub form_elements { - my ($longtypes,$authtypes,$ltext) = @_; + my ($longtypes,$authtypes) = @_; %{$longtypes} = ( active => 'Currently has access', previous => 'Previously had access', @@ -838,19 +778,19 @@ sub form_elements { krb5 => 'Kerberos 5', internal => 'Internal (LON-CAPA)', unix => 'Filesystem (UNIX)', - local => 'Local/Customized', + localauth => 'Local/Customized', ); return; } sub store_mail { - my ($subject,$message,$domain,$recipients,$attachmenturl,$ltext) = @_; + my ($subject,$message,$domain,$recipients,$attachmenturl) = @_; my $msgid; ($msgid,$message) = &Apache::lonmsg::packagemsg($subject,$message,undef,undef, $attachmenturl,$recipients,undef,undef,'dcmail'); # Store in dc email db files on primary library server for domain. - my $server = $Apache::lonnet::domain_primary{$domain}; + my $server = &Apache::lonnet::domain($domain,'primary'); if (defined($server)) { unless (&Apache::lonnet::dcmailput($domain,$msgid,$message,$server) eq 'ok') {