Diff for /loncom/interface/lonnotify.pm between versions 1.6 and 1.11

version 1.6, 2005/10/14 19:10:20 version 1.11, 2005/12/10 00:46:34
Line 53  sub handler { Line 53  sub handler {
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['command']);                                              ['command']);
     my $command = $env{'form.command'};      my $command = $env{'form.command'};
       my $origin = $env{'form.origin'};
   
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     my %ltext=&Apache::lonlocal::texthash(      my %ltext=&Apache::lonlocal::texthash(
                'note' => 'Notification E-mail',                 'note' => 'Notification E-mail',
     );      );
     my $function = &Apache::loncommon::get_users_function();      my $function = &Apache::loncommon::get_users_function();
       my $loadcode;
     my $tablecolor = &Apache::loncommon::designparm($function.'.tabbg');      my $tablecolor = &Apache::loncommon::designparm($function.'.tabbg');
     my $bodytag = &Apache::loncommon::bodytag('Broadcast e-mail to users');      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();      my $html=&Apache::lonxml::xmlbegin();
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>'/adm/notify',          ({href=>'/adm/notify',
           text=>"Broadcast E-mail"});            text=>"Broadcast E-mail"});
     if ($command eq 'process') {      if ($command eq 'process') {
         &print_request_receipt($r,$cdom,$tablecolor,$bodytag,$html,\%ltext);          &print_request_receipt($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext);
     } elsif ($command eq 'compose') {      } elsif ($command eq 'compose') {
         &print_composition_form($r,$cdom,$tablecolor,$bodytag,$html,\%ltext);          &print_composition_form($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext);
     } elsif ($command eq 'pick_target') {      } elsif ($command eq 'pick_target') {
         &print_selection_form($r,$cdom,$tablecolor,$bodytag,$html,\%ltext);          &print_selection_form($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext);
     } elsif ($command eq 'pick_display') {      } elsif ($command eq 'pick_display') {
         &print_display_option_form($r,$cdom,$tablecolor,$bodytag,$html,\%ltext);          &print_display_option_form($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext);
     } elsif ($command eq 'display') {      } elsif ($command eq 'display') {
         &print_display($r,$cdom,$tablecolor,$bodytag,$html,\%ltext);          &print_display($r,$command,$cdom,$tablecolor,$bodytag,$html,\%ltext);
     } else {      } else {
         &print_front_page($r,$cdom,$tablecolor,$bodytag,$html,\%ltext);          &print_front_page($r,'front',$cdom,$tablecolor,$bodytag,$html,\%ltext);
     }      }
     return OK;      return OK;
 }  }
   
 sub print_front_page {  sub print_front_page {
     my ($r,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;      my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs
             (undef,'Broadcast e-mail to Domain','Broadcast_system_email');              (undef,'Broadcast e-mail to Domain','Broadcast_system_email');
     my $jscript = qq|      my $jscript = qq|
Line 110  $bodytag Line 125  $bodytag
 $breadcrumbs  $breadcrumbs
 <br />  <br />
 ENDONE  ENDONE
     $output .= '<form name="front" method="post">'.      $output .= '<form name="'.$formname.'" method="post">'.
               '<input type="hidden" name="command" />';                '<input type="hidden" name="command" />';
     $output .= &Apache::lonhtmlcommon::start_pick_box();      $output .= &Apache::lonhtmlcommon::start_pick_box();
     $output .= '<table cellspacing="8" cellpadding="8">'.      $output .= '<table cellspacing="8" cellpadding="8">'.
Line 129  ENDONE Line 144  ENDONE
 }  }
   
 sub print_display_option_form {  sub print_display_option_form {
     my ($r,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;      my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
          ({text=>"Display options"});           ({text=>"Display options"});
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs
             (undef,'Broadcast e-mail display options','Broadcast_system_email');              (undef,'Broadcast e-mail display options','Broadcast_system_email');
     my $table_width = '';      my $table_width = '';
     my $col_width = '200';      my $col_width = '200';
     my $formname = 'display_options';  
     my $cmd = 'display';      my $cmd = 'display';
     my $submit_text = 'Display e-mail';      my $submit_text = 'Display e-mail';
     my @roles = ('dc');      my @roles = ('dc');
Line 150  sub print_display_option_form { Line 164  sub print_display_option_form {
     my $enddateform = &Apache::lonhtmlcommon::date_setter($formname,      my $enddateform = &Apache::lonhtmlcommon::date_setter($formname,
                                                           'enddate',                                                            'enddate',
                                                           $now);                                                            $now);
     my $jscript;      my %elements = (
           startdate_month => 'selectbox',
           startdate_hour => 'selectbox',
           enddate_month => 'selectbox',
           enddate_hour => 'selectbox',
           startdate_day => 'text',
           startdate_year => 'text',
           startdate_minute => 'text',
           startdate_second => 'text',
           enddate_day => 'text',
           enddate_year => 'text',
           enddate_minute => 'text',
           enddate_second => 'text',
           sender => 'checkbox',
       );
       my $jscript = &Apache::lonhtmlcommon::set_form_elements(\%elements);
     my $output = <<"ENDONE";      my $output = <<"ENDONE";
 $html  $html
 <head>  <head>
Line 199  ENDONE Line 228  ENDONE
 }  }
   
 sub print_display {  sub print_display {
     my ($r,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;      my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
          ({href=>'/adm/notify?command=pick_display',           ({href=>"javascript:goBack('pick_display')",
           text=>"Display options"},            text=>"Display options"},
          {text=>"E-mail display"});           {text=>"E-mail display"});
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs
Line 212  sub print_display { Line 241  sub print_display {
     my $rowColor2 = "#eeeeee";      my $rowColor2 = "#eeeeee";
     my $rowColor;      my $rowColor;
     my $msgcount = 0;      my $msgcount = 0;
     my $formname = 'display_sent';  
     my $start = &Apache::lonhtmlcommon::get_date_from_form('startdate');      my $start = &Apache::lonhtmlcommon::get_date_from_form('startdate');
     my $end = &Apache::lonhtmlcommon::get_date_from_form('enddate');      my $end = &Apache::lonhtmlcommon::get_date_from_form('enddate');
     my @senders = &Apache::loncommon::get_env_multiple('form.sender');      my @senders = &Apache::loncommon::get_env_multiple('form.sender');
Line 221  sub print_display { Line 249  sub print_display {
     my %Sortby = ();      my %Sortby = ();
     my $jscript = <<"ENDSCRIPT";      my $jscript = <<"ENDSCRIPT";
 function changeSort(caller) {  function changeSort(caller) {
       document.$formname.command.value = '$formname';
     document.$formname.sortby.value = caller;      document.$formname.sortby.value = caller;
     document.$formname.submit();         document.$formname.submit();
 }  }
   function goBack(target) {
       document.$formname.command.value = target;
       document.$formname.submit();
   }
   
 ENDSCRIPT  ENDSCRIPT
     my $output = <<"ENDONE";      my $output = <<"ENDONE";
 $html  $html
Line 239  $breadcrumbs Line 273  $breadcrumbs
 <form method="post" name="$formname">  <form method="post" name="$formname">
 ENDONE  ENDONE
   
     foreach my $server (keys(%sentmail)) {      foreach my $msgid (keys(%sentmail)) {
         foreach my $msgid (keys(%{$sentmail{$server}})) {          my %content = &Apache::lonmsg::unpackagemsg($sentmail{$msgid});
             my %content = &unpackagemail($sentmail{$server}{$msgid});          $msgcount ++;
             if (defined($dcmail{$msgid})) {          %{$dcmail{$msgid}} = ();
                 foreach my $user (keys(%{$content{'recipients'}})) {          foreach my $item (keys(%content)) {
                     $dcmail{$msgid}{recipients}{$user} = $content{recipients}{$user};              if ($item eq 'recipient') {
                   foreach my $user (keys(%{$content{recipient}})) {
                       $dcmail{$msgid}{recipient}{$user} = $content{recipient}{$user};
                 }                  }
             } else {              } else {
                 $msgcount ++;                  $dcmail{$msgid}{$item} = $content{$item};
                 %{$dcmail{$msgid}} = ();  
                 foreach my $item (keys(%content)) {  
                     if ($item eq 'recipients') {  
                         foreach my $user (keys(%{$content{recipients}})) {  
                             $dcmail{$msgid}{recipients}{$user} = $content{recipients}{$user};  
                         }  
                     } else {  
                         $dcmail{$msgid}{$item} = $content{$item};  
                     }  
                 }  
             }              }
         }          }
     }      }
Line 280  ENDONE Line 306  ENDONE
                     $rowColor = $rowColor2;                      $rowColor = $rowColor2;
                 }                  }
                 my $recipients = '';                  my $recipients = '';
                 my ($date,$subj,$sname,$sdom,$cdom) = split(/:/,$msgid,5);                  my ($date,$subj,$sname,$sdom) =
                                     &Apache::lonmsg::unpackmsgid($msgid,undef,1);
                   $subj = &Apache::lonnet::escape($subj);
                 $date = &Apache::lonlocal::locallocaltime($date);                  $date = &Apache::lonlocal::locallocaltime($date);
                 foreach my $user (sort(keys(%{$dcmail{$msgid}{recipients}}))) {                  foreach my $user (sort(keys(%{$dcmail{$msgid}{recipient}}))) {
                     $recipients .= $dcmail{$msgid}{recipients}{$user}.', ';                      $recipients .= $dcmail{$msgid}{recipient}{$user}.', ';
                 }                  }
                 $recipients =~ s/,\s$//;                  $recipients =~ s/,\s$//;
                 $output .= '<tr bgcolor="'.$rowColor.'"><td><small>'.$date.'</small></td><td><small>'.&cr_to_br($dcmail{$msgid}{subject}).'</small></td><td><small>'.$sname.':'.$sdom.'</small></td><td><small>'.&cr_to_br($dcmail{$msgid}{message}).'</small></td><td><small>'.$recipients.'</small></td></tr>'."\n";                  $output .= '<tr bgcolor="'.$rowColor.'"><td><small>'.$date.'</small></td><td><small>'.&cr_to_br($dcmail{$msgid}{subject}).'</small></td><td><small>'.$sname.':'.$sdom.'</small></td><td><small>'.&cr_to_br($dcmail{$msgid}{message}).'</small></td><td><small>'.$recipients.'</small></td></tr>'."\n";
Line 291  ENDONE Line 319  ENDONE
             }              }
         } else {          } else {
             foreach my $msgid (sort(keys(%dcmail))) {              foreach my $msgid (sort(keys(%dcmail))) {
                 my ($date,$subj,$sname,$sdom,$cdom) = split(/:/,$msgid,5);                  my ($date,$subj,$sname,$sdom) =
                                      &Apache::lonmsg::unpackmsgid($msgid,undef,1);
                   $subj = &Apache::lonnet::escape($subj);
                 if ($env{'form.sortby'} eq 'subject') {                  if ($env{'form.sortby'} eq 'subject') {
                     push @{$Sortby{$dcmail{$msgid}{subject}}},$msgid;                      push @{$Sortby{$dcmail{$msgid}{subject}}},$msgid;
                 } elsif ($env{'form.sortby'} eq 'message') {                  } elsif ($env{'form.sortby'} eq 'message') {
                     push @{$Sortby{$dcmail{$msgid}{message}}},$msgid;                      push @{$Sortby{$dcmail{$msgid}{message}}},$msgid;
                 } elsif ($env{'form.sortby'} eq 'recipients') {                  } elsif ($env{'form.sortby'} eq 'recipients') {
                     my $recipients ='';                      my $recipients ='';
                     foreach my $user (sort(keys(%{$dcmail{$msgid}{recipients}}))) {                      foreach my $user (sort(keys(%{$dcmail{$msgid}{recipient}}))) {
                         $recipients .= $dcmail{$msgid}{recipients}{$user}.', ';                          $recipients .= $dcmail{$msgid}{recipient}{$user}.', ';
                     }                      }
                     $recipients =~ s/,\s$//;                      $recipients =~ s/,\s$//;
                     push @{$Sortby{$recipients}},$msgid;                      push @{$Sortby{$recipients}},$msgid;
Line 320  ENDONE Line 350  ENDONE
                     if ($env{'form.sortby'} eq 'recipients') {                      if ($env{'form.sortby'} eq 'recipients') {
                         $recipients = $key;                          $recipients = $key;
                     } else {                      } else {
                         foreach my $user (sort(keys(%{$dcmail{$msgid}{recipients}}))) {                          foreach my $user (sort(keys(%{$dcmail{$msgid}{recipient}}))) {
                             $recipients .= $dcmail{$msgid}{recipients}{$user}.', ';                              $recipients .= $dcmail{$msgid}{recipient}{$user}.', ';
                         }                          }
                         $recipients =~ s/,\s$//;                          $recipients =~ s/,\s$//;
                     }                      }
                       my ($date,$subj,$sname,$sdom) =
                     my ($date,$subj,$sname,$sdom,$cdom) = split(/:/,$msgid,5);                                     &Apache::lonmsg::unpackmsgid($msgid,undef,1);
                       $subj = &Apache::lonnet::escape($subj);
                     $date = &Apache::lonlocal::locallocaltime($date);                      $date = &Apache::lonlocal::locallocaltime($date);
                     $output .=  '<tr bgcolor="'.$rowColor.'"><td><small>'.$date.'</small></td><td><small>'.&cr_to_br($dcmail{$msgid}{subject}).'</small></td><td><small>'.$sname.':'.$sdom.'</small></td><td><small>'.&cr_to_br($dcmail{$msgid}{message}).'</small></td><td><small>'.$recipients.'</small></td></tr>'."\n";                      $output .=  '<tr bgcolor="'.$rowColor.'"><td><small>'.$date.'</small></td><td><small>'.&cr_to_br($dcmail{$msgid}{subject}).'</small></td><td><small>'.$sname.':'.$sdom.'</small></td><td><small>'.&cr_to_br($dcmail{$msgid}{message}).'</small></td><td><small>'.$recipients.'</small></td></tr>'."\n";
                     $rowNum ++;                      $rowNum ++;
Line 338  ENDONE Line 369  ENDONE
         $output .= '<tr bgcolor="#ffffff"><td>&nbsp;</td><td><br><center><i><b><small>&nbsp;&nbsp;No mail sent matching supplied criteria&nbsp;&nbsp;</small><br><br></b></i></td><td>&nbsp;</td></tr>';          $output .= '<tr bgcolor="#ffffff"><td>&nbsp;</td><td><br><center><i><b><small>&nbsp;&nbsp;No mail sent matching supplied criteria&nbsp;&nbsp;</small><br><br></b></i></td><td>&nbsp;</td></tr>';
     }      }
     $output .= &Apache::lonhtmlcommon::end_pick_box();      $output .= &Apache::lonhtmlcommon::end_pick_box();
     $output .= &echo_form_input();      $output .= &Apache::lonhtmlcommon::echo_form_input(['sortby','command','origin']);
     unless (defined($env{'form.sortby'})) {      my $curr_sortby;
         $output .= qq(<input type="hidden" name="sortby" value="date" />\n);      if (defined($env{'form.sortby'})) {
     }           $curr_sortby = $env{'form.sortby'};
       } else {
           $curr_sortby = 'date';
       }
       $output .= qq(<input type="hidden" name="origin" value="$formname" />\n);
       $output .= qq(<input type="hidden" name="command" />\n);
       $output .= qq(<input type="hidden" name="sortby" value="$curr_sortby" />\n);
     $output .= qq(      $output .= qq(
 </form>  </form>
 </body>  </body
 </html>);  </html>);
     $r->print($output);      $r->print($output);
     return;      return;
 }  }
   
 sub print_selection_form {  sub print_selection_form {
     my ($r,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;      my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;
     my %coursecodes = ();      my %coursecodes = ();
     my %codes = ();      my %codes = ();
     my @codetitles = ();      my @codetitles = ();
Line 364  sub print_selection_form { Line 401  sub print_selection_form {
     my $totcodes = 0;      my $totcodes = 0;
     my $format_reply;      my $format_reply;
     my $jscript = '';      my $jscript = '';
     my $formname = 'rolefilter';  
     my $table_width = '100%';      my $table_width = '100%';
     my $col_width = '200';      my $col_width = '200';
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
Line 374  sub print_selection_form { Line 410  sub print_selection_form {
                'infs' => 'Internal, Filesystem and Local authentication: enter single default.',                 'infs' => 'Internal, Filesystem and Local authentication: enter single default.',
                'comp' => 'Compose Message'                 'comp' => 'Compose Message'
            );             );
     my $loaditems = qq|  
 function initialize_codes() {  
     return;  
 }  
     |;  
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
           ({text=>"Select Audience"});            ({text=>"Select Audience"});
   
Line 389  function initialize_codes() { Line 420  function initialize_codes() {
             my $numtypes = @codetitles;              my $numtypes = @codetitles;
             &Apache::lonsupportreq::build_code_selections(\%codes,\@codetitles,\%cat_titles,\%cat_order,\%idlist,\%idnums,\%idlist_titles);              &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::lonsupportreq::javascript_code_selections($formname,$numtypes,\%cat_titles,\$jscript,\%idlist,\%idnums,\%idlist_titles,\@codetitles);
             $loaditems = '';  
         }          }
     }      }
   
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs
             (undef,'Choose e-mail audience','Broadcast_system_email');              (undef,'Choose e-mail audience','Broadcast_system_email');
     my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($cdom);      my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($cdom);
   
       my %elements = (
                        roles => 'selectbox',
                        types => 'selectbox',
                        Year => 'selectbox',
                        coursepick => 'radio',
                        coursetotal => 'text',
                        courselist => 'text',
                        internal => 'text',
                        krb4 => 'text',
                        krb5 => 'text',
                        local => 'text',
                        unix => 'text',
                      );
       $jscript .= &Apache::lonhtmlcommon::set_form_elements(\%elements);
       if ($env{'form.coursepick'} eq 'category') {
           $jscript .= qq|
   function setCourseCat(formname) {
       if (formname.Year.options[formname.Year.selectedIndex].value == -1) {
           return;
       }
       courseSet('Year');
       for (var j=0; j<formname.Semester.length; j++) {
           if (formname.Semester.options[j].value == "$env{'form.Semester'}") {
               formname.Semester.options[j].selected = true;
           }
       }
       if (formname.Semester.options[formname.Semester.selectedIndex].value == -1) {
           return;
       }
       courseSet('Semester');
       for (var j=0; j<formname.Department.length; j++) {
           if (formname.Department.options[j].value == "$env{'form.Department'}") {
               formname.Department.options[j].selected = true;
           }
       }
       if (formname.Department.options[formname.Department.selectedIndex].value == -1) {
           return;
       }
       courseSet('Department');
       for (var j=0; j<formname.Number.length; j++) {
           if (formname.Number.options[j].value == "$env{'form.Number'}") {
               formname.Number.options[j].selected = true;
           }
       }
   }
   |; 
       }
     my $output = <<"ENDONE";      my $output = <<"ENDONE";
 $html  $html
 <head>  <head>
Line 411  $breadcrumbs Line 489  $breadcrumbs
 <form method="post" name="$formname">  <form method="post" name="$formname">
 ENDONE  ENDONE
    $output .= &Apache::lonhtmlcommon::start_pick_box($table_width);     $output .= &Apache::lonhtmlcommon::start_pick_box($table_width);
    my @roles = ('ow','cc','in','ta','ep','ad','st','cr');     my @roles = ('ow','cc','in','ta','ep','st','cr');
    my %longtypes = ();     my %longtypes = ();
    my %authtypes = ();     my %authtypes = ();
    &form_elements(\%longtypes,\%authtypes);     &form_elements(\%longtypes,\%authtypes);
Line 437  ENDONE Line 515  ENDONE
 }  }
   
 sub print_composition_form {  sub print_composition_form {
     my ($r,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;      my ($r,$formname,$cdom,$tablecolor,$bodytag,$html,$ltext) = @_;
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>'/adm/notify?command=pick_target',          ({href=>"javascript:goBack('pick_target')",
           text=>"Select Audience"},            text=>"Select Audience"},
          {text=>"Compose Message"});           {text=>"Compose Message"});
     my $jscript = &Apache::loncommon::check_uncheck_jscript();      my $jscript = &Apache::loncommon::check_uncheck_jscript();
       $jscript .= qq|
   function goBack(target) {
       document.$formname.command.value = target;
       document.$formname.submit();
   }
   |;
     my $breadcrumbs = (&Apache::lonhtmlcommon::breadcrumbs      my $breadcrumbs = (&Apache::lonhtmlcommon::breadcrumbs
         (undef,'Broadcast e-mail to users','Broadcast_system_email'));          (undef,'Broadcast e-mail to users','Broadcast_system_email'));
   
Line 451  sub print_composition_form { Line 535  sub print_composition_form {
                       'nore' => 'No recipients identified',                        'nore' => 'No recipients identified',
                       'emad' => 'e-mail address',                        'emad' => 'e-mail address',
                    );                     );
       my %elements = (
                        subject => 'text',
                        message => 'text',
                        sender => 'text',
                        recipient => 'checkbox',
                      );
       $jscript .= &Apache::lonhtmlcommon::set_form_elements(\%elements);
   
     $r->print(<<ENDONE);      $r->print(<<ENDONE);
 $html  $html
 <head>  <head>
  <title>LON-CAPA $lt{'note'}</title>   <title>LON-CAPA $lt{'note'}</title>
 <script type"text/javascript">  <script type="text/javascript">
 $jscript  $jscript
 </script>  </script>
 </head>  </head>
Line 529  ENDONE Line 621  ENDONE
     my %recipients = ();      my %recipients = ();
     my %users = ();      my %users = ();
     my %access = ();      my %access = ();
       my @sections = ();
     my $totalrecip = 0;      my $totalrecip = 0;
     my @unmatched = ();      my @unmatched = ();
     foreach my $role (@roles) {      foreach my $role (@roles) {
Line 539  ENDONE Line 632  ENDONE
     }      }
     foreach my $course_id (keys(%courses)) {      foreach my $course_id (keys(%courses)) {
         my ($cdom,$cnum) = split(/_/,$course_id);          my ($cdom,$cnum) = split(/_/,$course_id);
         &Apache::loncommon::get_course_users($cdom,$cnum,\%access,\@roles,\%users);          &Apache::loncommon::get_course_users($cdom,$cnum,\%access,\@roles,\@sections,\%users);
     }      }
     foreach my $role (keys(%users)) {      foreach my $role (keys(%users)) {
         foreach my $user (keys(%{$users{$role}})) {          foreach my $user (keys(%{$users{$role}})) {
Line 553  ENDONE Line 646  ENDONE
             }              }
         }          }
     }      }
     my $output  = '<form name="compose" method="post">'."\n";      my $output  = '<form name="'.$formname.'" method="post">'."\n";
       
     if ($totalrecip > 0) {      if ($totalrecip > 0) {
         $output .= &Apache::lonhtmlcommon::start_pick_box($table_width);          $output .= &Apache::lonhtmlcommon::start_pick_box($table_width);
Line 576  ENDONE Line 669  ENDONE
         foreach my $username (sort(keys(%recipients))) {          foreach my $username (sort(keys(%recipients))) {
             if ($recipients{$username} =~ /\@/) {              if ($recipients{$username} =~ /\@/) {
                 my $value=&Apache::lonnet::escape($username).':'.&Apache::lonnet::escape($recipients{$username});                  my $value=&Apache::lonnet::escape($username).':'.&Apache::lonnet::escape($recipients{$username});
                 $output .= '<tr><td><input type="checkbox" name="recipient" value="'.$value.'" checked="checked" /></td><td>'.$username.'</td><td>&nbsp;&nbsp;</td><td>'.$recipients{$username}.'</td></tr>';                  $output .= '<tr><td><input type="checkbox" name="recipient" value="'.$value.'" /></td><td>'.$username.'</td><td>&nbsp;&nbsp;</td><td>'.$recipients{$username}.'</td></tr>';
             }              }
         }          }
         $output .= '</table>';          $output .= '</table>';
Line 595  ENDONE Line 688  ENDONE
         $output .= &Apache::lonhtmlcommon::submit_row($col_width,$tablecolor,&mt('Submit'),'process',&mt('Send Message'));          $output .= &Apache::lonhtmlcommon::submit_row($col_width,$tablecolor,&mt('Submit'),'process',&mt('Send Message'));
         $output .= &Apache::lonhtmlcommon::end_pick_box();          $output .= &Apache::lonhtmlcommon::end_pick_box();
     } else {      } else {
         $output .= $lt{'nore'};          $output .= $lt{'nore'}."\n".
                      '<input type="hidden" name="command" value="" />'."\n";
     }      }
     $output .= &echo_form_input('command');      $output .= '<input type="hidden" name="origin" value="'.$formname.'" />'."\n";
       $output .= &Apache::lonhtmlcommon::echo_form_input(['command','origin','subject','message','recipient','sender'],);
     $output .= '</form></body></html>';      $output .= '</form></body></html>';
     $r->print($output);      $r->print($output);
     return;      return;
Line 605  ENDONE Line 700  ENDONE
   
   
 sub print_request_receipt {  sub print_request_receipt {
     my ($r,$dom,$tablecolor,$bodytag,$html,$ltext) =@_;      my ($r,$formname,$dom,$tablecolor,$bodytag,$html,$ltext) =@_;
     my @recipients = &Apache::loncommon::get_env_multiple('form.recipient');      my @recipients = &Apache::loncommon::get_env_multiple('form.recipient');
     my $subject = $env{'form.subject'};      my $subject = $env{'form.subject'};
     my $message = $env{'form.message'};      my $message = $env{'form.message'};
     my $from = $env{'form.sender'};      my $from = $env{'form.sender'};
     my $jscript = <<ENDSCRIPT;      my $jscript = <<ENDSCRIPT;
 function showCompose() {  function goBack(target) {
     document.goback.command.value = 'compose';      document.$formname.command.value = target;
     document.goback.submit();      document.$formname.submit();
 }  }
 ENDSCRIPT  ENDSCRIPT
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>'/adm/notify?command=pick_target',          ({href=>"javascript:goBack('pick_target')",
           text=>"Select audience"});            text=>"Select audience"});
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>'javascript:showCompose()',          ({href=>"javascript:goBack('compose')",
           text=>"Compose Message"});            text=>"Compose Message"});
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>'/adm/notify?command=process',          ({href=>"/adm/notify?command=process",
           text=>"Outcome"});            text=>"Outcome"});
     my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs      my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs
             (undef,'E-mail Delivery','Broadcast_system_email');              (undef,'E-mail Delivery','Broadcast_system_email');
Line 631  ENDSCRIPT Line 726  ENDSCRIPT
 $html  $html
 <head>  <head>
  <title>LON-CAPA Notification E-mail</title>   <title>LON-CAPA Notification E-mail</title>
 <script type"text/javascript">  <script type="text/javascript">
 $jscript  $jscript
 </script>  </script>
 </head>  </head>
 $bodytag  $bodytag
 $breadcrumbs  $breadcrumbs
 <br />  <br />
 <form name="goback" method="post">  <form name="$formname" method="post">
 ENDONE  ENDONE
     $output .= &Apache::lonhtmlcommon::start_pick_box();      $output .= &Apache::lonhtmlcommon::start_pick_box();
     my @deliveries = ();      my @deliveries = ();
Line 668  ENDONE Line 763  ENDONE
                   </table>                    </table>
                  </td>                   </td>
                 </tr>';                  </tr>';
         &store_mail($subject,$message,$dom,\@deliveries);  
     } else {      } else {
         $output .= 'No mail sent - no recipients identified';           $output .= 'No mail sent - no recipients identified'; 
     }      }
     $output .= &Apache::lonhtmlcommon::end_pick_box();      $output .= &Apache::lonhtmlcommon::end_pick_box();
     $output .= '<br /><a href="/adm/notify">Send another message?</a>'."\n";      $output .= '<br /><a href="/adm/notify">Send another message?</a>'."\n";
     $output .= &echo_form_input();      $output .= '<input type="hidden" name="command" />'."\n".
                  '<input type="hidden" name="origin" value="'.$formname.'" />'."\n";
       $output .= &Apache::lonhtmlcommon::echo_form_input(['command','origin']);
     $output .= '      $output .= '
 </form>  </form>
 </body>  </body>
Line 685  ENDONE Line 781  ENDONE
   
 sub broadcast_email {  sub broadcast_email {
     my ($recipients,$subject,$from,$message,$deliveries,$ltext)=@_;      my ($recipients,$subject,$from,$message,$deliveries,$ltext)=@_;
 # find some way to spread out delivery for large numbers of recipients.  # Should implement staggered delivery for large numbers of recipients?.
     foreach my $user (@{$recipients}) {      foreach my $user (@{$recipients}) {
         my $msg = new Mail::Send;          my $msg = new Mail::Send;
         my ($username,$to) = split(/:/,$user);          my ($username,$to) = split(/:/,$user);
Line 749  sub form_elements { Line 845  sub form_elements {
   
 sub store_mail {  sub store_mail {
     my ($subject,$message,$domain,$recipients,$attachmenturl,$ltext) = @_;      my ($subject,$message,$domain,$recipients,$attachmenturl,$ltext) = @_;
     my %servers = ();      my $msgid;
     my $msgid=&packagemail($subject,$message,$domain,      ($msgid,$message) = &Apache::lonmsg::packagemsg($subject,$message,undef,undef,
                            $recipients,\%servers,$attachmenturl);                          $attachmenturl,$recipients,undef,undef,'dcmail');
 # Store in dc email db files on appropriate servers.  
     foreach my $server (keys(%servers)) {  # Store in dc email db files on primary library server for domain.
         unless (&Apache::lonnet::dcmailput($domain,$msgid,\%servers,$server) eq 'ok') {      my $server = $Apache::lonnet::domain_primary{$domain};
             &Apache::lonnet::logthis('Storage of dc mail failed for domain'.$domain.' for server: '.      if (defined($server)) {
                       $server.'.  Message ID was '.$msgid);          unless (&Apache::lonnet::dcmailput($domain,$msgid,$message,$server) 
         }                                                              eq 'ok') {
     }              &Apache::lonnet::logthis('Storage of dc mail failed for domain'.
 }                   $domain.' for server: '. $server.'.  Message ID was '.$msgid);
   
 sub packagemail {  
     my ($subject,$message,$dom,$recipients,$servers,$attachmenturl,$ltext) = @_;  
     my %record = ();  
     my $partsubj=$subject;  
     $partsubj=&Apache::lonnet::escape($partsubj);  
     $message =&HTML::Entities::encode($message,'<>&"');  
     $subject =&HTML::Entities::encode($subject,'<>&"');  
     #remove machine specification  
     $attachmenturl =~ s|^http://[^/]+/|/|;  
     $attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"');  
     my $now=time;  
     my $msgid= &Apache::lonnet::escape($now).':'.$partsubj.':'.  
            &Apache::lonnet::escape($env{'user.name'}).':'.  
            &Apache::lonnet::escape($env{'user.domain'}).':'.  
            &Apache::lonnet::escape($dom).':'.$$;  
     my $result='<sendername>'.$env{'user.name'}.'</sendername>'.  
            '<senderdomain>'.$env{'user.domain'}.'</senderdomain>'.  
            '<time>'.&Apache::lonlocal::locallocaltime($now).'</time>'.  
            '<servername>'.$ENV{'SERVER_NAME'}.'</servername>'.  
            '<host>'.$ENV{'HTTP_HOST'}.'</host>'.  
            '<client>'.$ENV{'REMOTE_ADDR'}.'</client>'.  
            '<msgid>'.$msgid.'</msgid>'.  
            '<dcdomain>'.$dom.'</dcdomain>'.  
            '<subject>'.$subject.'</subject>'.  
            '<message>'.$message.'</message>'."\n";  
     if (defined($attachmenturl)) {  
         $result.= '<attachmenturl>'.$attachmenturl.'</attachmenturl>';  
     }  
     foreach my $recip (@{$recipients}) {  
         my ($username,$email) = split(/:/,$recip);  
         $username = &Apache::lonnet::unescape($username);  
         $email = &Apache::lonnet::unescape($email);  
         my ($uname,$udom) = split(/:/,$username);  
         my $uhom=&Apache::lonnet::homeserver($uname,$udom);  
         if ($uhom ne 'no_host') {  
             $username = &HTML::Entities::encode($username,'<>&"');  
             $email = &HTML::Entities::encode($email,'<>&"');  
             $record{$uhom} .= '<recipient username="'.$username.'">'.  
                               $email.'</recipient>';  
         }  
     }  
     foreach my $server (keys(%record)) {  
         $$servers{$server} = $result.$record{$server};  
     }  
     return $msgid;  
 }  
   
 sub unpackagemail {  
     my ($message,$notoken,$ltext)=@_;  
     my $parser=HTML::TokeParser->new(\$message);  
     my $token;  
     my %content=();  
     %{$content{recipients}} = ();  
     while ($token=$parser->get_token()) {  
         if ($token->[0] eq 'S') {  
             my $entry=$token->[1];  
             my $value=$parser->get_text('/'.$entry);  
             my ($username,$email);  
             if ($entry eq 'recipient') {  
                 $username = $token->[2]{'username'};  
                 $username = &HTML::Entities::decode($username,'<>&"');  
                 $content{recipients}{$username} =   
                       &HTML::Entities::decode($value,'<>&"');  
             } elsif ($entry eq 'subject' || $entry eq 'message') {  
                 $content{$entry}=&HTML::Entities::decode($value,'<>&"');  
             } else {  
                 $content{$entry}=$value;  
             }  
         }  
     }  
     if ($content{'attachmenturl'}) {  
         my ($fname)=($content{'attachmenturl'}=~m|/([^/]+)$|);  
         if ($notoken) {  
             $content{'message'}.='<p>'.&mt('Attachment').': <tt>'.$fname.'</tt>';       } else {  
             &Apache::lonnet::allowuploaded('/adm/notify',  
                                           $content{'attachmenturl'});  
             $content{'message'}.='<p>'.&mt('Attachment').  
                ': <a href="'.$content{'attachmenturl'}.'"><tt>'.  
                $fname.'</tt></a>';  
         }  
     }  
     return %content;  
 }  
   
 sub echo_form_input {  
     my (@excluded) = @_;  
     my $output = '';  
     foreach my $key (keys(%env)) {  
         if ($key =~ /^form\.(.+)$/) {  
             if ((!@excluded) || (!grep/^$1$/,@excluded)) {  
                 if (ref($env{$key})) {  
                     foreach my $value (@{$env{$key}}) {  
                         $output .= qq(<input type="hidden" name="$1" value="$value" />\n);  
                     }  
                 } else {  
                     $output .= qq(<input type="hidden" name="$1" value="$env{$key}" />\n);  
                 }  
             }  
         }          }
       } else {
           &Apache::lonnet::logthis('Storage of dc mail failed for domain'.
              $domain.' as no primary server identified. Message ID was '.$msgid);
     }      }
     return $output;  
 }  }
   
 sub cr_to_br {  sub cr_to_br {
Line 870  sub cr_to_br { Line 869  sub cr_to_br {
     return $incoming;      return $incoming;
 }  }
   
   
 1;  1;

Removed from v.1.6  
changed lines
  Added in v.1.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>