--- loncom/interface/lonnotify.pm 2006/05/30 12:46:09 1.19
+++ loncom/interface/lonnotify.pm 2009/02/02 13:27:39 1.33
@@ -1,3 +1,7 @@
+# The LearningOnline Network with CAPA
+# Sending messages
+#
+# $Id: lonnotify.pm,v 1.33 2009/02/02 13:27:39 schafran Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -27,7 +31,7 @@ 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;
@@ -59,24 +63,21 @@ sub handler {
&Apache::lonhtmlcommon::clear_breadcrumbs();
- my $function = &Apache::loncommon::get_users_function();
- my $tablecolor = &Apache::loncommon::designparm($function.'.tabbg');
-
&Apache::lonhtmlcommon::add_breadcrumb
({href=>'/adm/notify',
text=>"Broadcast E-mail"});
if ($command eq 'process') {
- &print_request_receipt($r,$command,$cdom,$tablecolor);
+ &print_request_receipt($r,$command,$cdom);
} elsif ($command eq 'compose') {
- &print_composition_form($r,$command,$cdom,$tablecolor);
+ &print_composition_form($r,$command,$cdom);
} elsif ($command eq 'pick_target') {
- &print_selection_form($r,$command,$cdom,$tablecolor);
+ &print_selection_form($r,$command,$cdom);
} elsif ($command eq 'pick_display') {
- &print_display_option_form($r,$command,$cdom,$tablecolor);
+ &print_display_option_form($r,$command,$cdom);
} elsif ($command eq 'display') {
- &print_display($r,$command,$cdom,$tablecolor);
+ &print_display($r,$command,$cdom);
} else {
- &print_front_page($r,'front',$cdom,$tablecolor);
+ &print_front_page($r,'front',$cdom);
}
return OK;
}
@@ -128,7 +129,7 @@ sub end_page {
}
sub print_front_page {
- my ($r,$formname,$cdom,$tablecolor) = @_;
+ my ($r,$formname,$cdom) = @_;
my $jscript = qq|
function next_page(caller) {
@@ -146,14 +147,12 @@ function next_page(caller) {
'Broadcast e-mail to Domain', $formname);
$output .= '';
- $output .= &Apache::lonhtmlcommon::start_pick_box();
- $output .= '
'.
+ $output .= '';
- $output .= &Apache::lonhtmlcommon::end_pick_box();
$output .= &end_page();
$r->print($output);
@@ -161,11 +160,9 @@ function next_page(caller) {
}
sub print_display_option_form {
- my ($r,$formname,$cdom,$tablecolor) = @_;
+ my ($r,$formname,$cdom) = @_;
&Apache::lonhtmlcommon::add_breadcrumb({text=>"Display options"});
- my $table_width = '';
- my $col_width = '200';
my $cmd = 'display';
my $submit_text = 'Display e-mail';
my @roles = ('dc');
@@ -197,30 +194,28 @@ sub print_display_option_form {
my $output = &start_page(&add_script($jscript),
'Broadcast e-mail display options', $formname);
- $output .= &Apache::lonhtmlcommon::start_pick_box($table_width);
- $output .= &Apache::lonhtmlcommon::row_title($col_width,$tablecolor,&mt('Date range'));
- $output .= 'Earliest to display: | '.
+ $output .= &Apache::lonhtmlcommon::start_pick_box();
+ $output .= &Apache::lonhtmlcommon::row_title(&mt('Date range'));
+ $output .= ''.&mt('Earliest to display:').' | '.
$startdateform.' | ';
- $output .= 'Latest to display: | '.$enddateform.
- ' |
| ';
+ $output .= ' '.&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(\n).
&end_page();
@@ -229,17 +224,12 @@ sub print_display_option_form {
}
sub print_display {
- my ($r,$formname,$cdom,$tablecolor) = @_;
+ my ($r,$formname,$cdom) = @_;
&Apache::lonhtmlcommon::add_breadcrumb
({href=>"javascript:goBack('pick_display')",
text=>"Display options"},
{text=>"E-mail display"});
- 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');
@@ -277,24 +267,18 @@ ENDSCRIPT
}
}
}
- $output .= &Apache::lonhtmlcommon::start_pick_box();
+ $output .= &Apache::loncommon::start_data_table();
if ($msgcount > 0) {
- my $rowNum = 0;
- $output .= '
-
- Date |
- Subject |
- Sender |
- Message |
- Recipients |
- ';
+ $output .= &Apache::loncommon::start_data_table_header_row().
+ 'Date | '.
+ 'Subject | '.
+ 'Sender | '.
+ 'Message | '.
+ 'Recipients | '.
+ &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,undef,$sname,$sdom) =
&Apache::lonmsg::unpackmsgid($msgid,undef,1);
@@ -303,8 +287,12 @@ ENDSCRIPT
$recipients .= $dcmail{$msgid}{recipient}{$user}.', ';
}
$recipients =~ s/,\s$//;
- $output .= ''.$date.' | '.&cr_to_br($dcmail{$msgid}{subject}).' | '.$sname.':'.$sdom.' | '.&cr_to_br($dcmail{$msgid}{message}).' | '.$recipients.' | '."\n";
- $rowNum ++;
+ $output .= &Apache::loncommon::start_data_table_row().
+ ''.$date.' | '.
+ ''.&cr_to_br($dcmail{$msgid}{subject}).' | '.
+ ''.$sname.':'.$sdom.' | '.&cr_to_br($dcmail{$msgid}{message}).' | '.
+ ''.$recipients.' | '."\n".
+ &Apache::loncommon::end_data_table_row();
}
} else {
foreach my $msgid (sort(keys(%dcmail))) {
@@ -329,11 +317,6 @@ ENDSCRIPT
}
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;
@@ -346,16 +329,22 @@ ENDSCRIPT
my ($date,undef,$sname,$sdom) =
&Apache::lonmsg::unpackmsgid($msgid,undef,1);
$date = &Apache::lonlocal::locallocaltime($date);
- $output .= ''.$date.' | '.&cr_to_br($dcmail{$msgid}{subject}).' | '.$sname.':'.$sdom.' | '.&cr_to_br($dcmail{$msgid}{message}).' | '.$recipients.' | '."\n";
- $rowNum ++;
+ $output .= &Apache::loncommon::start_data_table_row().
+ ''.$date.' | '.
+ ''.&cr_to_br($dcmail{$msgid}{subject}).' | '.
+ ''.$sname.':'.$sdom.' | '.
+ ''.&cr_to_br($dcmail{$msgid}{message}).' | '.
+ ''.$recipients.' | '."\n".
+ &Apache::loncommon::end_data_table_row();
}
}
}
- $output .= ' |
';
} 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'})) {
@@ -372,7 +361,7 @@ ENDSCRIPT
}
sub print_selection_form {
- my ($r,$formname,$cdom,$tablecolor) = @_;
+ my ($r,$formname,$cdom) = @_;
my %coursecodes = ();
my %codes = ();
my @codetitles = ();
@@ -385,24 +374,27 @@ 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(
'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);
}
}
@@ -418,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);
@@ -460,7 +452,7 @@ function setCourseCat(formname) {
my $output = &start_page(&add_script($jscript).$cb_jscript,
'Choose e-mail audience', $formname);
- $output .= &Apache::lonhtmlcommon::start_pick_box($table_width);
+ $output .= &Apache::lonhtmlcommon::start_pick_box();
my @roles = ('ow','cc','in','ta','ep','st','cr');
my %longtypes = ();
my %authtypes = ();
@@ -472,11 +464,11 @@ function setCourseCat(formname) {
'."\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::role_select_row(\@roles,&mt('Roles'));
+ $output .= &Apache::lonhtmlcommon::course_select_row(&mt('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 -> E-mail conversion'),$descrip);
+ $output .= &Apache::lonhtmlcommon::submit_row(&mt('Submit'),$cmd,$submit_text);
$output .= &Apache::lonhtmlcommon::end_pick_box();
$output .= &end_page();
$r->print($output);
@@ -484,11 +476,11 @@ function setCourseCat(formname) {
}
sub print_composition_form {
- my ($r,$formname,$cdom,$tablecolor) = @_;
+ 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) {
@@ -513,9 +505,10 @@ function goBack(target) {
'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');
@@ -529,12 +522,13 @@ function goBack(target) {
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'}} = '';
@@ -547,8 +541,6 @@ function goBack(target) {
my %longtypes = ();
my %authtypes = ();
my %email_defaults = ();
- my $table_width = '100%';
- my $col_width = '200';
&form_elements(\%longtypes,\%authtypes);
foreach my $auth (keys(%authtypes)) {
@@ -589,7 +581,10 @@ function goBack(target) {
$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)) {
@@ -607,30 +602,35 @@ function goBack(target) {
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=&escape($username).':'.&escape($recipients{$username});
- $output .= ' | '.$username.' | | '.$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) {
@@ -638,12 +638,11 @@ function goBack(target) {
}
$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".
@@ -658,7 +657,7 @@ function goBack(target) {
sub print_request_receipt {
- my ($r,$formname,$dom,$tablecolor) =@_;
+ my ($r,$formname,$dom) =@_;
my @recipients = &Apache::loncommon::get_env_multiple('form.recipient');
my $subject = $env{'form.subject'};
my $message = $env{'form.message'};
@@ -675,7 +674,7 @@ ENDSCRIPT
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"});
@@ -684,39 +683,34 @@ ENDSCRIPT
my $output = &start_page(&add_script($jscript), 'E-mail Delivery',
$formname);
- $output .= &Apache::lonhtmlcommon::start_pick_box();
+
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 .= '
-
-
-
- Status |
- Subject |
- Message |
- Recipients |
-
-
- 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').' | '.
+ &Apache::loncommon::end_data_table_header_row();
+ $output .= &Apache::loncommon::start_data_table_row().
+ ''.&mt('Sent').' | '.
+ ''.&cr_to_br($subject).' | '.
+ ''.&cr_to_br($message).' | '.
+ '';
foreach my $person (@deliveries) {
my ($username,$email) = split(/:/,$person);
$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']);
@@ -748,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};
@@ -775,16 +769,16 @@ sub get_user_info {
sub form_elements {
my ($longtypes,$authtypes) = @_;
%{$longtypes} = (
- active => 'Currently has access',
- previous => 'Previously had access',
- future => 'Will have future access',
+ active => &mt('Currently has access'),
+ previous => &mt('Previously had access'),
+ future => &mt('Will have future access'),
);
%{$authtypes} = (
krb4 => 'Kerberos 4',
krb5 => 'Kerberos 5',
internal => 'Internal (LON-CAPA)',
unix => 'Filesystem (UNIX)',
- local => 'Local/Customized',
+ localauth => 'Local/Customized',
);
return;
}
@@ -796,7 +790,7 @@ sub store_mail {
$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') {