Diff for /loncom/interface/lonmsgdisplay.pm between versions 1.164 and 1.181.2.4

version 1.164, 2013/07/19 18:24:16 version 1.181.2.4, 2019/08/13 21:03:34
Line 102  use HTML::TokeParser(); Line 102  use HTML::TokeParser();
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
   use Apache::longroup;
   use Apache::lonnavmaps;
 use Apache::lontexconvert();  use Apache::lontexconvert();
 use HTML::Entities();  use HTML::Entities();
 use Apache::lonlocal;  use Apache::lonlocal;
Line 120  my $startdis=''; Line 122  my $startdis='';
   
 sub folderlist {  sub folderlist {
     my ($folder,$msgstatus) = @_;      my ($folder,$msgstatus) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %html_lt = &Apache::lonlocal::texthash(
                 actn => 'Action',                  actn => 'Action',
                 fold => 'Folder',                  fold => 'Folder',
                 show => 'Show',                  show => 'Show',
                 status => 'Message Status',                  status => 'Message Status',
                 go   => 'Go',                  go   => 'Go',
   
       );
       &html_escape(\%html_lt);
       my %js_lt = &Apache::lonlocal::texthash(
                 nnff => 'New Name for Folder',                  nnff => 'New Name for Folder',
                 newn => 'New Name',                  newn => 'New Name',
                 thfm => 'The folder may not be renamed',                  fmnb => 'Folder may not be renamed as it is a folder provided by the system.',
                 fmnb => 'folder may not be renamed as it is a folder provided by the system.',                  asth => 'Requested name already in use for a system-provided or user-defined folder.',
                 asth => 'as this name is already in use for a system-provided or user-defined folder.',  
                 the => 'The',  
                 tnfm => 'The new folder may not be named',  
   
     );      );
       &js_escape(\%js_lt);
   
  # set se lastvisit for the new mail check in the toplevel menu   # set se lastvisit for the new mail check in the toplevel menu
  &Apache::lonnet::appenv({'user.mailcheck.lastvisit'=>time});   &Apache::lonnet::appenv({'user.mailcheck.lastvisit'=>time});
Line 182  function folder_choice(targetform,caller Line 186  function folder_choice(targetform,caller
         if (targetform.folderaction.options[targetform.folderaction.selectedIndex].value == 'rename') {          if (targetform.folderaction.options[targetform.folderaction.selectedIndex].value == 'rename') {
             for (var i=0; i<permfolders_keys.length; i++) {              for (var i=0; i<permfolders_keys.length; i++) {
                 if (permfolders_keys[i] == targetform.folder.value) {                  if (permfolders_keys[i] == targetform.folder.value) {
                     alert("$lt{'the'} '"+permfolders_vals[i]+"' $lt{'fmnb'}");                      alert("'"+permfolders_vals[i]+"' -- $js_lt{'fmnb'}");
                     return;                      return;
                 }                  }
             }              }
             var foldername=prompt('$lt{'nnff'}','$lt{'newn'}');              var foldername=prompt('$js_lt{'nnff'}','$js_lt{'newn'}');
             if (foldername) {              if (foldername) {
                 targetform.renamed.value=foldername;                  targetform.renamed.value=foldername;
                 for (var i=0; i<allfolders.length; i++) {                  for (var i=0; i<allfolders.length; i++) {
                     if (allfolders[i] == foldername) {                      if (allfolders[i] == foldername) {
                         alert("$lt{'thfm'} '"+foldername+"' $lt{'asth'}");                          alert("'"+foldername+"' $js_lt{'asth'}");
                         return;                          return;
                     }                      }
                 }                  }
Line 207  function folder_choice(targetform,caller Line 211  function folder_choice(targetform,caller
         if (newname) {          if (newname) {
             for (var i=0; i<allfolders.length; i++) {              for (var i=0; i<allfolders.length; i++) {
                 if (allfolders[i] == newname) {                  if (allfolders[i] == newname) {
                     alert("$lt{'tnfm'} '"+newname+"' $lt{'asth'}");                      alert("'"+newname+"' -- $js_lt{'asth'}");
                     return;                      return;
                 }                  }
             }              }
Line 226  function folder_choice(targetform,caller Line 230  function folder_choice(targetform,caller
    <legend>'.&mt('Folder Actions').'</legend>     <legend>'.&mt('Folder Actions').'</legend>
    <table border="0" cellspacing="2" cellpadding="8">     <table border="0" cellspacing="2" cellpadding="8">
     <tr>      <tr>
      <td><b>'.$lt{'fold'}.'</b><br />'."\n".       <td><b>'.$html_lt{'fold'}.'</b><br />'."\n".
          &Apache::loncommon::select_form($folder,'folder',\%formhash).'           &Apache::loncommon::select_form($folder,'folder',\%formhash).'
      </td>       </td>
      <td><b>'.$lt{'show'}.'</b><br />'."\n".       <td><b>'.$html_lt{'show'}.'</b><br />'."\n".
          &Apache::loncommon::select_form($env{'form.interdis'},'interdis',           &Apache::loncommon::select_form($env{'form.interdis'},'interdis',
  \%show).'   \%show).'
      </td>       </td>
      <td><b>'.$lt{'status'}.'</b><br />'."\n".       <td><b>'.$html_lt{'status'}.'</b><br />'."\n".
        &Apache::loncommon::select_form($msgstatus,'msgstatus',\%statushash).'         &Apache::loncommon::select_form($msgstatus,'msgstatus',\%statushash).'
      </td>       </td>
      <td><b>'.$lt{'actn'}.'</b><br />'."\n".'       <td style="padding-right: 40px;">
            <b>'.$html_lt{'actn'}.'</b><br />'."\n".'
          <span class="LC_nobreak">'.           <span class="LC_nobreak">'.
          &Apache::loncommon::select_form('view','folderaction',\%actions).           &Apache::loncommon::select_form('view','folderaction',\%actions).
          ' <input type="button" value="'.$lt{'go'}.           ' <input type="button" value="'.$html_lt{'go'}.
          '" onclick="javascript:folder_choice(this.form,'."'change'".');" />           '" onclick="javascript:folder_choice(this.form,'."'change'".');" />
          </span>           </span>
      </td>       </td>
     </tr>       <td style="border-left: 1px solid;padding-left: 40px;">
     <tr>           <b>'.&mt('New Folder').'</b><br />'."\n".'
      <td colspan="4"><b>'.&mt('New Folder').'</b><br />'."\n".'  
          <span class="LC_nobreak">           <span class="LC_nobreak">
          <input type="text" size="15" name="newfolder" value="" />           <input type="text" size="15" name="newfolder" value="" />
          <input type="button" value="'.$lt{'go'}.           <input type="button" value="'.$html_lt{'go'}.
          '" onclick="javascript:folder_choice(this.form,'."'new'".');" />           '" onclick="javascript:folder_choice(this.form,'."'new'".');" />
          </span>           </span>
      </td>       </td>
Line 266  sub get_permanent_folders { Line 270  sub get_permanent_folders {
     my %permfolders =       my %permfolders = 
  &Apache::lonlocal::texthash(''         => 'INBOX',   &Apache::lonlocal::texthash(''         => 'INBOX',
     'trash'    => 'TRASH',      'trash'    => 'TRASH',
     'critical' => 'Critical',      'critical' => 'CRITICAL',
     'sent'     => 'Sent Messages',      'sent'     => 'SENT MESSAGES',
     );      );
     return %permfolders;      return %permfolders;
 }  }
Line 383  sub deletefolder { Line 387  sub deletefolder {
     my ($folder)=@_;      my ($folder)=@_;
     my %permfolders = &get_permanent_folders();      my %permfolders = &get_permanent_folders();
     if (defined($permfolders{$folder})) {      if (defined($permfolders{$folder})) {
         return &mt('The folder "[_1]" may not be deleted.',$folder);           return &mt('The folder "[_1]" may not be deleted.',$permfolders{$folder}); 
     }      }
     my %userfolders = &Apache::lonmsg::get_user_folders();      my %userfolders = &Apache::lonmsg::get_user_folders();
     if (!defined($userfolders{$folder})) {      if (!defined($userfolders{$folder})) {
Line 771  sub groupmail_header { Line 775  sub groupmail_header {
               text=>"Groups",                text=>"Groups",
               title=>$brtitle});                title=>$brtitle});
     }      }
       my $view_permission =
             &Apache::lonnet::allowed('vcg',$env{'request.course.id'}.($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''));
       my $navmap=Apache::lonnavmaps::navmap->new();
       my $grouppagelink = &Apache::longroup::get_group_link($cdom,$cnum,$group,$navmap,$view_permission,$refarg);
       if ($grouppagelink) {
           &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>$grouppagelink,
                 text=>"Group: $description",
                 title=>"Go to group's home page"},);
       } else {
           &Apache::lonhtmlcommon::add_breadcrumb
               ({text=>"Group: $description",});
       }
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"/adm/$cdom/$cnum/$group/smppg?$refarg",           ({href=>"/adm/email?compose=group&amp;group=".
           text=>"Group: $description",                   "$env{'form.group'}&amp;$refarg",
           title=>"Go to group's home page"},             text=>"Send a Message in a Group",
          {href=>"/adm/email?compose=group&amp;group=".             title=>"Compose Group Message"},);
                 "$env{'form.group'}&amp;$refarg",  
           text=>"Send a Message in a Group",  
           title=>"Compose Group Message"},);  
     if ($action eq 'sending') {      if ($action eq 'sending') {
             &Apache::lonhtmlcommon::add_breadcrumb              &Apache::lonhtmlcommon::add_breadcrumb
                          ({text=>"Messages being sent.",                           ({text=>"Messages being sent.",
Line 816  sub discrit { Line 830  sub discrit {
                 .'<input type="hidden" name="confirm" value="true" />';                  .'<input type="hidden" name="confirm" value="true" />';
     my %what=&Apache::lonnet::dump('critical');      my %what=&Apache::lonnet::dump('critical');
     my $result = '';      my $result = '';
     foreach my $key (sort(keys(%what))) {      # Sort by date in descending order
       foreach my $key (sort{$b <=> $a}(keys(%what))) {    
         my %content=&Apache::lonmsg::unpackagemsg($what{$key});          my %content=&Apache::lonmsg::unpackagemsg($what{$key});
         next if ($content{'senderdomain'} eq '');          next if ($content{'senderdomain'} eq '');
         my $description;          my $description;
Line 1026  sub disall { Line 1041  sub disall {
     &Apache::loncommon::store_settings('user','mail',\%saveable);      &Apache::loncommon::store_settings('user','mail',\%saveable);
     &Apache::loncommon::restore_settings('user','mail',\%saveable);      &Apache::loncommon::restore_settings('user','mail',\%saveable);
     $folder    ||= $env{'form.folder'};      $folder    ||= $env{'form.folder'};
       # Always show critical messages if present
       my @what=&Apache::lonnet::dump('critical',$env{'user.domain'},$env{'user.name'});
       if ($what[0]) {
    if (($what[0] ne 'con_lost') && ($what[0]!~/^error\:/)) {
               $folder = 'critical';
           }
       }
     $msgstatus ||= $env{'form.msgstatus'};      $msgstatus ||= $env{'form.msgstatus'};
     $env{'form.interdis'} ||= 20;      $env{'form.interdis'} ||= 20;
   
Line 1046  sub disfolder { Line 1068  sub disfolder {
     my %setters = ();      my %setters = ();
     my $numblocked = 0;      my $numblocked = 0;
     my ($startblock,$endblock) = &Apache::loncommon::blockcheck(\%setters,'com');      my ($startblock,$endblock) = &Apache::loncommon::blockcheck(\%setters,'com');
     my %lt = &Apache::lonlocal::texthash(      my %js_lt = &Apache::lonlocal::texthash(
                       sede => 'Select a destination folder to which the messages will be moved.',                        sede => 'Select a destination folder to which the messages will be moved.',
                       nome => 'No messages have been selected to apply this action to.',                        nome => 'No messages have been selected to apply this action to.',
                       chec => 'Check the checkbox for at least one message.',                          chec => 'Check the checkbox for at least one message.',  
     );      );
       &js_escape(\%js_lt);
     my $jscript = &Apache::loncommon::check_uncheck_jscript();      my $jscript = &Apache::loncommon::check_uncheck_jscript();
     $r->print(<<ENDDISHEADER);      $r->print(<<ENDDISHEADER);
 <script type="text/javascript">  <script type="text/javascript">
Line 1061  sub disfolder { Line 1084  sub disfolder {
         document.disall.markedaction.value = document.disall.checkedaction.options[document.disall.checkedaction.selectedIndex].value;          document.disall.markedaction.value = document.disall.checkedaction.options[document.disall.checkedaction.selectedIndex].value;
         if (document.disall.checkedaction.options[document.disall.checkedaction.selectedIndex].value == 'markedmove') {          if (document.disall.checkedaction.options[document.disall.checkedaction.selectedIndex].value == 'markedmove') {
             if (document.disall.movetofolder.options[document.disall.movetofolder.selectedIndex].value == "") {              if (document.disall.movetofolder.options[document.disall.movetofolder.selectedIndex].value == "") {
                 alert("$lt{'sede'}");                  alert("$js_lt{'sede'}");
                 return;                  return;
             }               } 
         }          }
Line 1078  sub disfolder { Line 1101  sub disfolder {
             }              }
         }             }   
         if (checktotal == 0) {          if (checktotal == 0) {
             alert("$lt{'nome'}\\n$lt{'chec'}");              alert("$js_lt{'nome'}\\n$js_lt{'chec'}");
             return;              return;
         }          }
         document.disall.submit();          document.disall.submit();
Line 1207  ENDDISHEADER Line 1230  ENDDISHEADER
             foreach my $item ($localsenttime,$dis_name,$dis_domain,$shortsubj) {              foreach my $item ($localsenttime,$dis_name,$dis_domain,$shortsubj) {
                 $r->print('<td>'.(($status eq 'new')?'<b>':'').                  $r->print('<td>'.(($status eq 'new')?'<b>':'').
                           '<a href="/adm/email?display='.$origID.$sqs.'">'.                            '<a href="/adm/email?display='.$origID.$sqs.'">'.
                           $item.(($status eq 'new')?'</b>':'').'</a></td>');                            $item.'</a>'.(($status eq 'new')?'</b>':'').'</td>');
             }              }
             # Description and Status              # Description and Status
             my $showstatus;              my $showstatus;
Line 1257  ENDDISHEADER Line 1280  ENDDISHEADER
         $r->print('    <option value="markeddel">'.&mt('Delete').'</option>'."\n");          $r->print('    <option value="markeddel">'.&mt('Delete').'</option>'."\n");
     }      }
     if ($msgstatus ne 'read') {      if ($msgstatus ne 'read') {
         $r->print('    <option value="markedread">'.&mt('Mark Read').'</option>."\n"');          $r->print('    <option value="markedread">'.&mt('Mark Read').'</option>'."\n");
     }      }
     if ($msgstatus ne 'unread') {      if ($msgstatus ne 'unread') {
         $r->print('    <option value="markedunread">'.&mt('Mark Unread').'</option>'."\n");          $r->print('    <option value="markedunread">'.&mt('Mark Unread').'</option>'."\n");
Line 1389  sub compout { Line 1412  sub compout {
                                        'to'   => 'To:',                                         'to'   => 'To:',
                                       );                                        );
     my %attachmax = (      my %attachmax = (
                      text => &mt('(128 KB max size)'),                       text => &mt('(1 MB max size)'),
                      num  => 131072,                       num  => 1048576,
                     );                      );
     if (!$forwarding && !$multiforward) {      if (!$forwarding && !$multiforward) {
         $attachrow = '<tr><td colspan="3"><b>'.$lt{'atta'}.'</b> '.$attachmax{'text'}.': <input type="file" name="attachment" /></td></tr>';          $attachrow = '<tr><td colspan="3"><b>'.$lt{'atta'}.'</b> '.$attachmax{'text'}
               .': <input type="file" name="attachment" class="LC_flUpload" />'
               .'<input type="hidden" id="LC_free_space" value="'.$attachmax{'num'}.'" />'
               .'</td></tr>';
     }      }
     if (&Apache::lonnet::allowed('srm',$env{'request.course.id'})      if (&Apache::lonnet::allowed('srm',$env{'request.course.id'})
  || &Apache::lonnet::allowed('srm',$env{'request.course.id'}.   || &Apache::lonnet::allowed('srm',$env{'request.course.id'}.
Line 1665  ENDREPSCRIPT Line 1691  ENDREPSCRIPT
         $r->print(&additional_rec_row(\%lt));          $r->print(&additional_rec_row(\%lt));
         $r->print('<tr><td colspan="2">'.          $r->print('<tr><td colspan="2">'.
                   &mt('Unless you choose otherwise:').'<ul><li>'.                    &mt('Unless you choose otherwise:').'<ul><li>'.
         &mt("The subject in each forwarded message will be <i>'Forwarding:'</i> followed by the original subject.").'</li><li>'.          &mt("The subject in each forwarded message will be [_1]'Forwarding:'[_2] followed by the original subject.",'<i>','</i>').'</li><li>'.
         &mt("The message itself will begin with a first line: <i>'Forwarded message from'</i> followed by the original sender's name.").'</li></ul></td></tr>');          &mt("The message itself will begin with a first line: [_1]'Forwarded message from'[_2] followed by the original sender's name.",'<i>','</i>').'</li></ul></td></tr>');
         $func1='Forward'; # do not translate here!          $func1='Forward'; # do not translate here!
         $dissub = &mt('Forwarding').': ';          $dissub = &mt('Forwarding').': ';
         $subj_size = '10';          $subj_size = '10';
Line 1895  sub disfacetoface { Line 1921  sub disfacetoface {
  $env{'course.'.$env{'request.course.id'}.'.domain'},   $env{'course.'.$env{'request.course.id'}.'.domain'},
  $env{'course.'.$env{'request.course.id'}.'.num'},   $env{'course.'.$env{'request.course.id'}.'.num'},
                          '%255b'.$user.'%253a'.$domain.'%255d');                           '%255b'.$user.'%253a'.$domain.'%255d');
     my $result='<div>';      my $result='';
     foreach my $key (sort(keys(%records))) {      foreach my $key (sort(keys(%records))) {
         my %content=&Apache::lonmsg::unpackagemsg($records{$key});          my %content=&Apache::lonmsg::unpackagemsg($records{$key});
         next if ($content{'senderdomain'} eq '');          next if ($content{'senderdomain'} eq '');
Line 1927  sub disfacetoface { Line 1953  sub disfacetoface {
             } else {              } else {
                 %content=&Apache::lonmsg::unpackagemsg($content{'message'});                  %content=&Apache::lonmsg::unpackagemsg($content{'message'});
                 $content{'message'} =                  $content{'message'} =
                 '<b>'.&mt('Subject').': '.$content{'subject'}.'</b><br                  '<b>'.&mt('Subject').': '.$content{'subject'}.'</b><br />'.
 '.  
                 $content{'message'};                  $content{'message'};
             }              }
         } else {          } else {
Line 1957  $content{'sendername'}.':'. Line 1982  $content{'sendername'}.':'.
     if ($result eq '') {      if ($result eq '') {
         my $lctype = &mt(lc(&Apache::loncommon::course_type()));          my $lctype = &mt(lc(&Apache::loncommon::course_type()));
  if ($target ne 'tex') {    if ($target ne 'tex') { 
     $r->print("<p><b>".&mt('No notes, face-to-face discussion records, critical messages, or broadcast messages in this [_1].',$lctype)."</b></p>");      $r->print("<p><b>".&mt('No notes, face-to-face discussion records, critical messages or broadcast messages in this '.$lctype.'.')."</b></p>");
  } else {   } else {
     $r->print('\textbf{'.&mt('No notes, face-to-face discussion records, critical messages or broadcast messages in this [_1].',$lctype).'}\\\\');      $r->print('\textbf{'.&mt('No notes, face-to-face discussion records, critical messages or broadcast messages in this '.$lctype.'.').'}\\\\');
  }   }
     } elsif ($target ne 'tex') {      } elsif ($target eq 'tex') {
        $r->print($result.'</div>');          $r->print(&Apache::lonxml::xmlparse($r,$target,$result));
     } else {      } else {
  $r->print(&Apache::lonxml::xmlparse($r, 'tex', $result));          $r->print('<div>'.$result.'</div>');
  }      }
 }  }
   
 sub general_message {  sub general_message {
Line 2164  sub displaymessage { Line 2189  sub displaymessage {
     my @actionlist;      my @actionlist;
     if ($env{'user.adv'}) {      if ($env{'user.adv'}) {
   
  if (&Apache::lonnet::allowed('vgr',$env{'request.course.id'})) {   if (($env{'request.course.id'}) && ($from_student) &&
               (&Apache::lonnet::allowed('vgr',$env{'request.course.id'}))) {
  push(@actionlist,&Apache::loncommon::track_student_link(   push(@actionlist,&Apache::loncommon::track_student_link(
                                       &mt('View recent activity')                                        'View recent activity'
                                      ,$content{'sendername'}                                       ,$content{'sendername'}
                                      ,$content{'senderdomain'}                                       ,$content{'senderdomain'}
                                      ,'check'));                                       ,'check'));
Line 2657  sub header { Line 2683  sub header {
     if ($baseurl) {      if ($baseurl) {
  $extra .= "<base href=\"".&Apache::lonnet::absolute_url()."/$baseurl\" />";   $extra .= "<base href=\"".&Apache::lonnet::absolute_url()."/$baseurl\" />";
     }      }
       $extra .= '<script type="text/javascript"
                   src="/res/adm/includes/file_upload.js"></script>';
     $r->print(&Apache::loncommon::start_page('Messages',      $r->print(&Apache::loncommon::start_page('Messages',
   $extra));    $extra));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs      $r->print(&Apache::lonhtmlcommon::breadcrumbs
Line 2694  sub storedcommentlisting { Line 2722  sub storedcommentlisting {
        '^'.&escape(&escape($env{'form.showcommentbaseurl'})));         '^'.&escape(&escape($env{'form.showcommentbaseurl'})));
     $r->print(&Apache::loncommon::start_page('Saved Comment Listing',undef,      $r->print(&Apache::loncommon::start_page('Saved Comment Listing',undef,
      {'onlybody' => 1}));       {'onlybody' => 1}));
     if ((keys %msgs)[0]=~/^error\:/) {      if ((keys(%msgs))[0]=~/^error\:/) {
  $r->print(&mt('No saved comments yet.'));   $r->print(&mt('No saved comments yet.'));
     } else {      } else {
  my $found=0;   my $found=0;
Line 2897  sub sendoffmail { Line 2925  sub sendoffmail {
             &Apache::lonnet::logthis('Failed to store To, Bcc and Cc recipients for '.$env{'user.name'}.':'.$env{'user.domain'});              &Apache::lonnet::logthis('Failed to store To, Bcc and Cc recipients for '.$env{'user.name'}.':'.$env{'user.domain'});
         }          }
         if ($env{'form.attachment'}) {          if ($env{'form.attachment'}) {
             if (length($env{'form.attachment'})<131072) {              if (length($env{'form.attachment'}) <= 1048576) {
                 $attachmenturl=&Apache::lonnet::userfileupload('attachment',undef,'feedback/'.$now);                  $attachmenturl=&Apache::lonnet::userfileupload('attachment',undef,'feedback/'.$now);
             } else {              } else {
                 $r->print('<p><span class="LC_warning">'.&mt('Attachment not included - exceeded permitted length').'</span><br /></p>');                  $r->print('<p><span class="LC_warning">'.&mt('Attachment not included - exceeded permitted length').'</span><br /></p>');
Line 2909  sub sendoffmail { Line 2937  sub sendoffmail {
         }          }
         my @recusers;          my @recusers;
         my @recudoms;          my @recudoms;
           my %permresults;
  foreach my $address (sort(keys(%toaddr))) {   foreach my $address (sort(keys(%toaddr))) {
     my ($recuname,$recdomain)=split(/\:/,$address);      my ($recuname,$recdomain)=split(/\:/,$address);
             my $msgtxt = $savemsg;              my $msgtxt = $savemsg;
Line 2925  sub sendoffmail { Line 2954  sub sendoffmail {
    $env{'form.sendbck'},     $env{'form.sendbck'},
    $env{'form.permanent'},     $env{'form.permanent'},
    \$sentmessage{$address},     \$sentmessage{$address},
                                                    $nosentstore,$recipid);                                                     $nosentstore,$recipid,
                                                      $attachmenturl,\%permresults);
     } else {      } else {
  $r->print(&mt('Sending').' '.$recuname.':'.$recdomain.': ');   $r->print(&mt('Sending').' '.$recuname.':'.$recdomain.': ');
  @thismsg=   @thismsg=
Line 2936  sub sendoffmail { Line 2966  sub sendoffmail {
      $env{'form.permanent'},       $env{'form.permanent'},
      \$sentmessage{$address},       \$sentmessage{$address},
                                                      undef,undef,undef,                                                       undef,undef,undef,
                                                      $nosentstore,$recipid);                                                       $nosentstore,$recipid,
                                                        \%permresults);
             }              }
     $msg_status{$recuname.':'.$recdomain}=join(' ',@thismsg);      $msg_status{$recuname.':'.$recdomain}=join(' ',@thismsg);
     if ($msg_status{$recuname.':'.$recdomain} =~ /(ok|con_delayed)/) {        if ($msg_status{$recuname.':'.$recdomain} =~ /(ok|con_delayed)/) {  
         $numsent++;          $numsent++;
                 push(@recusers,$recuname);                  push(@recusers,$recuname);
                 push(@recudoms,$recdomain);                  push(@recudoms,$recdomain);
                   if ($1 eq 'ok') {
                       $r->print('ok ');
                   }
                   if ($permresults{$recuname.':'.$recdomain}) {
                       $r->print(' (email) ');
                   }
     }      }
     $sendstatus.=' '.join(' ',@thismsg);      $sendstatus.=' '.join(' ',@thismsg);
  }   }

Removed from v.1.164  
changed lines
  Added in v.1.181.2.4


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