Diff for /loncom/interface/lonmsg.pm between versions 1.113 and 1.136

version 1.113, 2004/11/11 18:24:44 version 1.136, 2005/02/17 04:11:21
Line 90  also has a student role in the course, A Line 90  also has a student role in the course, A
   
 Users can ask LON-CAPA to forward messages to conventional e-mail  Users can ask LON-CAPA to forward messages to conventional e-mail
 addresses on their B<PREF> screen, but generally, LON-CAPA messages  addresses on their B<PREF> screen, but generally, LON-CAPA messages
 are much more useful then traditional email can be made to be, even  are much more useful than traditional email can be made to be, even
 with HTML support.  with HTML support.
   
 Right now, this document will cover just how to send a message, since  Right now, this document will cover just how to send a message, since
Line 239  sub sendemail { Line 239  sub sendemail {
 # ==================================================== Send notification emails  # ==================================================== Send notification emails
   
 sub sendnotification {  sub sendnotification {
     my ($to,$touname,$toudom,$subj,$crit)=@_;      my ($to,$touname,$toudom,$subj,$crit,$text)=@_;
     my $sender=$ENV{'environment.firstname'}.' '.$ENV{'environment.lastname'};      my $sender=$ENV{'environment.firstname'}.' '.$ENV{'environment.lastname'};
       unless ($sender=~/\w/) { 
    $sender=$ENV{'user.name'}.'@'.$ENV{'user.domain'};
       }
     my $critical=($crit?' critical':'');      my $critical=($crit?' critical':'');
       $text=~s/\&lt\;/\</gs;
       $text=~s/\&gt\;/\>/gs;
       $text=~s/\<\/*[^\>]+\>//gs;
     my $url='http://'.      my $url='http://'.
       $Apache::lonnet::hostname{&Apache::lonnet::homeserver($touname,$toudom)}.        $Apache::lonnet::hostname{&Apache::lonnet::homeserver($touname,$toudom)}.
       '/adm/email?username='.$touname.'&domain='.$toudom;        '/adm/email?username='.$touname.'&domain='.$toudom;
Line 250  You received a$critical message from $se Line 256  You received a$critical message from $se
   
  $subj   $subj
   
   === Excerpt ============================================================
   $text
   ========================================================================
   
 Use  Use
   
  $url   $url
   
 to access this message.  to access the full message.
 ENDMSG  ENDMSG
     &sendemail($to,'New'.$critical.' message from '.$sender,$body);      &sendemail($to,'New'.$critical.' message from '.$sender,$body);
 }  }
Line 346  sub all_url_author_res_msg { Line 356  sub all_url_author_res_msg {
 # ================================================== Critical message to a user  # ================================================== Critical message to a user
   
 sub user_crit_msg_raw {  sub user_crit_msg_raw {
     my ($user,$domain,$subject,$message,$sendback)=@_;      my ($user,$domain,$subject,$message,$sendback,$toperm)=@_;
 # Check if allowed missing  # Check if allowed missing
     my $status='';      my $status='';
     my $msgid='undefined';      my $msgid='undefined';
     unless (($message)&&($user)&&($domain)) { $status='empty'; };      unless (($message)&&($user)&&($domain)) { $status='empty'; };
       my $text=$message;
     my $homeserver=&Apache::lonnet::homeserver($user,$domain);      my $homeserver=&Apache::lonnet::homeserver($user,$domain);
     if ($homeserver ne 'no_host') {      if ($homeserver ne 'no_host') {
        ($msgid,$message)=&packagemsg($subject,$message);         ($msgid,$message)=&packagemsg($subject,$message);
Line 370  sub user_crit_msg_raw { Line 381  sub user_crit_msg_raw {
        $status='no_host';         $status='no_host';
     }      }
 # Notifications  # Notifications
     my %userenv = &Apache::lonnet::get('environment',['critnotification'],      my %userenv = &Apache::lonnet::get('environment',['critnotification',
                                                         'permanentemail'],
                                        $domain,$user);                                         $domain,$user);
     if ($userenv{'critnotification'}) {      if ($userenv{'critnotification'}) {
       &sendnotification($userenv{'critnotification'},$user,$domain,$subject,1);        &sendnotification($userenv{'critnotification'},$user,$domain,$subject,1,
    $text);
       }
       if ($toperm && $userenv{'permanentemail'}) {
         &sendnotification($userenv{'permanentemail'},$user,$domain,$subject,1,
    $text);
     }      }
 # Log this  # Log this
     &Apache::lonnet::logthis(      &Apache::lonnet::logthis(
Line 397  sub user_crit_msg_raw { Line 414  sub user_crit_msg_raw {
 =cut  =cut
   
 sub user_crit_msg {  sub user_crit_msg {
     my ($user,$domain,$subject,$message,$sendback)=@_;      my ($user,$domain,$subject,$message,$sendback,$toperm)=@_;
     my $status='';      my $status='';
     my %userenv = &Apache::lonnet::get('environment',['msgforward'],      my %userenv = &Apache::lonnet::get('environment',['msgforward'],
                                        $domain,$user);                                         $domain,$user);
Line 407  sub user_crit_msg { Line 424  sub user_crit_msg {
  my ($forwuser,$forwdomain)=split(/\:/,$_);   my ($forwuser,$forwdomain)=split(/\:/,$_);
          $status.=           $status.=
    &user_crit_msg_raw($forwuser,$forwdomain,$subject,$message,     &user_crit_msg_raw($forwuser,$forwdomain,$subject,$message,
                 $sendback).' ';                  $sendback,$toperm).' ';
        }         }
     } else {       } else { 
  $status=&user_crit_msg_raw($user,$domain,$subject,$message,$sendback);   $status=&user_crit_msg_raw($user,$domain,$subject,$message,$sendback,$toperm);
     }      }
     return $status;      return $status;
 }  }
Line 444  sub user_crit_received { Line 461  sub user_crit_received {
 # ======================================================== Normal communication  # ======================================================== Normal communication
   
 sub user_normal_msg_raw {  sub user_normal_msg_raw {
     my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl)=@_;      my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl,
    $toperm)=@_;
 # Check if allowed missing  # Check if allowed missing
     my $status='';      my $status='';
     my $msgid='undefined';      my $msgid='undefined';
       my $text=$message;
     unless (($message)&&($user)&&($domain)) { $status='empty'; };      unless (($message)&&($user)&&($domain)) { $status='empty'; };
     my $homeserver=&Apache::lonnet::homeserver($user,$domain);      my $homeserver=&Apache::lonnet::homeserver($user,$domain);
     if ($homeserver ne 'no_host') {      if ($homeserver ne 'no_host') {
Line 471  sub user_normal_msg_raw { Line 490  sub user_normal_msg_raw {
        $status='no_host';         $status='no_host';
     }      }
 # Notifications  # Notifications
     my %userenv = &Apache::lonnet::get('environment',['notification'],      my %userenv = &Apache::lonnet::get('environment',['notification',
                                                         'permanentemail'],
                                        $domain,$user);                                         $domain,$user);
     if ($userenv{'notification'}) {      if ($userenv{'notification'}) {
  &sendnotification($userenv{'notification'},$user,$domain,$subject,0);   &sendnotification($userenv{'notification'},$user,$domain,$subject,0,
     $text);
       }
       if ($toperm && $userenv{'permanentemail'}) {
         &sendnotification($userenv{'permanentemail'},$user,$domain,$subject,0,
    $text);
     }      }
     &Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'},      &Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'},
                          $ENV{'user.home'},                           $ENV{'user.home'},
Line 493  sub user_normal_msg_raw { Line 518  sub user_normal_msg_raw {
 =cut  =cut
   
 sub user_normal_msg {  sub user_normal_msg {
     my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl)=@_;      my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl,
    $toperm)=@_;
     my $status='';      my $status='';
     my %userenv = &Apache::lonnet::get('environment',['msgforward'],      my %userenv = &Apache::lonnet::get('environment',['msgforward'],
                                        $domain,$user);                                         $domain,$user);
Line 503  sub user_normal_msg { Line 529  sub user_normal_msg {
  my ($forwuser,$forwdomain)=split(/\:/,$_);   my ($forwuser,$forwdomain)=split(/\:/,$_);
          $status.=           $status.=
   &user_normal_msg_raw($forwuser,$forwdomain,$subject,$message,    &user_normal_msg_raw($forwuser,$forwdomain,$subject,$message,
        $citation,$baseurl,$attachmenturl).' ';         $citation,$baseurl,$attachmenturl,$toperm).' ';
        }         }
     } else {       } else { 
  $status=&user_normal_msg_raw($user,$domain,$subject,$message,   $status=&user_normal_msg_raw($user,$domain,$subject,$message,
      $citation,$baseurl,$attachmenturl);       $citation,$baseurl,$attachmenturl,$toperm);
     }      }
     return $status;      return $status;
 }  }
Line 523  sub folderlist { Line 549  sub folderlist {
  &mt('Folder').': '.   &mt('Folder').': '.
  &Apache::loncommon::select_form($folder,'folder',   &Apache::loncommon::select_form($folder,'folder',
      ('' => &mt('INBOX'),'trash' => &mt('TRASH'),       ('' => &mt('INBOX'),'trash' => &mt('TRASH'),
         'new' => &mt('New Messages Only'),
                               'critical' => &mt('Critical'),                                'critical' => &mt('Critical'),
       'sent' => &mt('Sent Messages'),        'sent' => &mt('Sent Messages'),
       map { $_ => $_ } @allfolders)).        map { $_ => $_ } @allfolders)).
       ' '.&mt('Show').' '.        ' '.&mt('Show').
     &Apache::loncommon::select_form($interdis,'interdis',        '<select name="interdis">'.
 (' 10' => '10', ' 20' => '20', ' 50' => '50', '100' => '100', '200' => '200')).        join("\n",map { '<option value="'.$_.'"'.
    ($_==$interdis?' selected="selected"':'').'>'.$_.'</option>' }
      (10,20,50,100,200)).'</select>'.
    '<input type="submit" value="'.&mt('View Folder').'" /><br />'.     '<input type="submit" value="'.&mt('View Folder').'" /><br />'.
       '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />'.
         ($folder=~/^(new|critical)/?'</form>':'');
   }
   
   sub scrollbuttons {
       my ($start,$maxdis,$first,$finish,$total)=@_;
       unless ($total>0) { return ''; }
       $start++; $maxdis++;$first++;$finish++;
       return 
    '<input type="submit" name="firstview" value="'.&mt('First').'" />'.     '<input type="submit" name="firstview" value="'.&mt('First').'" />'.
    '<input type="submit" name="prevview" value="'.&mt('Previous').'" />'.     '<input type="submit" name="prevview" value="'.&mt('Previous').'" />'.
    '<input type="text" size="5" name="startdis" value="'.$startdis.'" />'.     '<input type="text" size="5" name="startdis" value="'.$start.'" onChange="this.form.submit()" /> of '.$maxdis.
    '<input type="submit" name="nextview" value="'.&mt('Next').'" />'.     '<input type="submit" name="nextview" value="'.&mt('Next').'" />'.
    '<input type="submit" name="lastview" value="'.&mt('Last').'" />'.     '<input type="submit" name="lastview" value="'.&mt('Last').'" /><br />'.
  '<a href="/adm/email?critical=display'.$sqs.'">'.     &mt('Messages [_1] through [_2] of [_3]',$first,$finish,$total).'</form>';
     &mt('View Critical Messages').'</a>'.  
     '</form>';  
 }  }
   
 # =============================================================== Folder suffix  # =============================================================== Folder suffix
Line 571  sub makefolder { Line 607  sub makefolder {
     my ($newfolder)=@_;      my ($newfolder)=@_;
     if (($newfolder eq 'sent')      if (($newfolder eq 'sent')
      || ($newfolder eq 'critical')       || ($newfolder eq 'critical')
      || ($newfolder eq 'trash')) { return; }       || ($newfolder eq 'trash')
        || ($newfolder eq 'new')) { return; }
     &Apache::lonnet::put('email_folders',{$newfolder => time});      &Apache::lonnet::put('email_folders',{$newfolder => time});
 }  }
   
Line 579  sub makefolder { Line 616  sub makefolder {
   
 sub movemsg {  sub movemsg {
     my ($msgid,$srcfolder,$trgfolder)=@_;      my ($msgid,$srcfolder,$trgfolder)=@_;
     my $unmsgid=&Apache::lonnet::unescape($msgid);  
     my $srcsuffix=&foldersuffix($srcfolder);      my $srcsuffix=&foldersuffix($srcfolder);
     my $trgsuffix=&foldersuffix($trgfolder);      my $trgsuffix=&foldersuffix($trgfolder);
   
Line 588  sub movemsg { Line 624  sub movemsg {
     &Apache::lonnet::put('nohist_email'.$trgsuffix,{$msgid => $message{$msgid}});      &Apache::lonnet::put('nohist_email'.$trgsuffix,{$msgid => $message{$msgid}});
   
 # Copy status  # Copy status
     my %status=&Apache::lonnet::get('email_status'.$srcsuffix,[$unmsgid]);      unless ($trgfolder eq 'trash') {
     &Apache::lonnet::put('email_status'.$trgsuffix,{$unmsgid => $status{$unmsgid}});   my %status=&Apache::lonnet::get('email_status'.$srcsuffix,[$msgid]);
 # See if was deleted -> becomes "read" in trash   &Apache::lonnet::put('email_status'.$trgsuffix,{$msgid => $status{$msgid}});
     my $currentstatus=(&unpackmsgid($status{$unmsgid}),$srcfolder);  
     if ($currentstatus eq 'deleted') {  
  &statuschange($msgid,'read',$trgfolder);  
     }      }
 # Delete orginals  # Delete orginals
     &Apache::lonnet::del('nohist_email'.$srcsuffix,[$msgid]);      &Apache::lonnet::del('nohist_email'.$srcsuffix,[$msgid]);
     &Apache::lonnet::del('email_status'.$srcsuffix,[$unmsgid]);      &Apache::lonnet::del('email_status'.$srcsuffix,[$msgid]);
 }  }
   
 # ======================================================= Display a course list  # ======================================================= Display a course list
Line 642  sub discourse { Line 675  sub discourse {
 </script>  </script>
 <input type="button" onClick="checkall()" value="$lt{'cfa'}" />&nbsp;  <input type="button" onClick="checkall()" value="$lt{'cfa'}" />&nbsp;
 <input type="button" onClick="checksec()" value="$lt{'cfs'}" />  <input type="button" onClick="checksec()" value="$lt{'cfs'}" />
 <input type="text" size="5" name=chksec />&nbsp;  <input type="text" size="5" name="chksec" />&nbsp;
 <input type="button" onClick="uncheckall()" value="$lt{'cfn'}" />  <input type="button" onClick="uncheckall()" value="$lt{'cfn'}" />
 <p>  <p>
 ENDDISHEADER  ENDDISHEADER
Line 660  ENDDISHEADER Line 693  ENDDISHEADER
         }          }
     }      }
     $r->print('</table><table>');      $r->print('</table><table>');
     while (my ($student,$info) = each(%$classlist)) {      my $sort = sub {
    my $aname=lc($classlist->{$a}[&Apache::loncoursedata::CL_FULLNAME()]);
    if (!$aname) { $aname=$a; }
    my $bname=lc($classlist->{$b}[&Apache::loncoursedata::CL_FULLNAME()]);
    if (!$bname) { $bname=$b; }
    return $aname cmp $bname;
       };
       foreach my $student (sort $sort (keys(%{$classlist}))) {
    my $info=$classlist->{$student};
         my ($sname,$sdom,$status,$fullname,$section) =          my ($sname,$sdom,$status,$fullname,$section) =
             (@{$info}[&Apache::loncoursedata::CL_SNAME(),              (@{$info}[&Apache::loncoursedata::CL_SNAME(),
                       &Apache::loncoursedata::CL_SDOM(),                        &Apache::loncoursedata::CL_SDOM(),
Line 668  ENDDISHEADER Line 709  ENDDISHEADER
                       &Apache::loncoursedata::CL_FULLNAME(),                        &Apache::loncoursedata::CL_FULLNAME(),
                       &Apache::loncoursedata::CL_SECTION()]);                        &Apache::loncoursedata::CL_SECTION()]);
         next if ($status ne 'Active');          next if ($status ne 'Active');
         my $key = 'send_to_&&&'.$section.'&&&'.$student;          my $key = 'send_to_&&&'.$section.'&&&_'.$student;
         if (! defined($fullname) || $fullname eq '') { $fullname = $sname; }          if (! defined($fullname) || $fullname eq '') { $fullname = $sname; }
         $r->print('<tr><td><label>'.          $r->print('<tr><td><label>'.
                   qq{<input type="checkbox" name="$key">}.('&nbsp;'x2).                    qq{<input type="checkbox" name="$key" />}.('&nbsp;'x2).
                   $fullname.'</td><td>'.$sname.'@'.$sdom.'</td><td>'.$section.                    $fullname.'</label></td><td>'.$sname.'@'.$sdom.'</td><td>'.$section.
                   '</td></tr>');                    '</td></tr>');
     }      }
     $r->print('</table>');      $r->print('</table>');
Line 683  ENDDISHEADER Line 724  ENDDISHEADER
 sub discrit {  sub discrit {
     my $r=shift;      my $r=shift;
     my $header = '<h1><font color=red>'.&mt('Critical Messages').'</font></h1>'.      my $header = '<h1><font color=red>'.&mt('Critical Messages').'</font></h1>'.
         '<form action=/adm/email method=post>'.          '<form action="/adm/email" method="POST">'.
         '<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 (sort keys %what) {      foreach (sort keys %what) {
         my %content=&unpackagemsg($what{$_});          my %content=&unpackagemsg($what{$_});
         next if ($content{'senderdomain'} eq '');          next if ($content{'senderdomain'} eq '');
         $content{'message'}=~s/\n/\<br\>/g;  
         $result.='<hr />'.&mt('From').': <b>'.          $result.='<hr />'.&mt('From').': <b>'.
 &Apache::loncommon::aboutmewrapper(  &Apache::loncommon::aboutmewrapper(
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.   &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.
 $content{'sendername'}.'@'.  $content{'sendername'}.'@'.
             $content{'senderdomain'}.') '.$content{'time'}.              $content{'senderdomain'}.') '.$content{'time'}.
             '<br />'.&mt('Subject').': '.$content{'subject'}.              '<br />'.&mt('Subject').': '.$content{'subject'}.
             '<br /><blockquote>'.              '<br /><pre>'.
               &Apache::lontexconvert::msgtexconverted($content{'message'}).                &Apache::lontexconvert::msgtexconverted($content{'message'}).
             '</blockquote><small>'.              '</pre><small>'.
 &mt('You have to confirm that you received this message. After confirmation, this message will be moved to your regular inbox').  &mt('You have to confirm that you received this message. After confirmation, this message will be moved to your regular inbox').
             '</small><br />'.              '</small><br />'.
             '<input type=submit name="rec_'.$_.'" value="'.&mt('Confirm Receipt').'">'.              '<input type="submit" name="rec_'.$_.'" value="'.&mt('Confirm Receipt').'" />'.
             '<input type=submit name="reprec_'.$_.'" '.              '<input type="submit" name="reprec_'.$_.'" '.
                   'value="'.&mt('Confirm Receipt and Reply').'">';                    'value="'.&mt('Confirm Receipt and Reply').'" />';
     }      }
     # Check to see if there were any messages.      # Check to see if there were any messages.
     if ($result eq '') {      if ($result eq '') {
Line 830  TABLEHEAD Line 870  TABLEHEAD
         foreach my $msg (@newmsgs) {          foreach my $msg (@newmsgs) {
             $r->print(<<"ENDLINK");              $r->print(<<"ENDLINK");
 <tr bgcolor="#FFBB77">  <tr bgcolor="#FFBB77">
 <td><a href="/adm/email?display=$msg->{'msgid'}">$lt{'op'}</a></td>  <td><a href="/adm/email?dismode=new&display=$msg->{'msgid'}">$lt{'op'}</a></td>
 ENDLINK  ENDLINK
             foreach ('sendtime','from','fromdom','shortsub') {              foreach ('sendtime','from','fromdom','shortsub') {
                 $r->print("<td>$msg->{$_}</td>");                  $r->print("<td>$msg->{$_}</td>");
Line 863  ENDLINK Line 903  ENDLINK
 sub disall {  sub disall {
     my ($r,$folder)=@_;      my ($r,$folder)=@_;
     $r->print(&folderlist($folder));      $r->print(&folderlist($folder));
     unless ($folder) {      if ($folder eq 'new') {
  &disnew();   &disnew($r);
  return;      } elsif ($folder eq 'critical') {
     }   &discrit($r);
     if ($folder eq 'critical') {      } else {
  &discrit();   &disfolder($r,$folder);
     }      }
   }
   
   # ============================================================ Display a folder
   
   sub disfolder {
       my ($r,$folder)=@_;
     my %blocked = ();      my %blocked = ();
     my %setters = ();      my %setters = ();
     my $startblock;      my $startblock;
Line 900  ENDDISHEADER Line 946  ENDDISHEADER
     my $fsqs='&folder='.$folder;      my $fsqs='&folder='.$folder;
     my @temp=sortedmessages(\%blocked,$startblock,$endblock,\$numblocked,$folder);      my @temp=sortedmessages(\%blocked,$startblock,$endblock,\$numblocked,$folder);
     my $totalnumber=$#temp+1;      my $totalnumber=$#temp+1;
     my $number=int($totalnumber/$interdis)+1;      unless ($totalnumber>0) {
    $r->print('<h2>'.&mt('Empty Folder').'</h2>');
    return;
       }
       unless ($interdis) {
    $interdis=20;
       }
       my $number=int($totalnumber/$interdis);
       if (($startdis<0) || ($startdis>$number)) { $startdis=$number; }
     my $firstdis=$interdis*$startdis;      my $firstdis=$interdis*$startdis;
     if ($firstdis>$#temp) { $firstdis=$#temp-$interdis+1; }      if ($firstdis>$#temp) { $firstdis=$#temp-$interdis+1; }
     my $lastdis=$firstdis+$interdis-1;      my $lastdis=$firstdis+$interdis-1;
     if ($lastdis>$#temp) { $lastdis=$#temp; }      if ($lastdis>$#temp) { $lastdis=$#temp; }
       $r->print(&scrollbuttons($startdis,$number,$firstdis,$lastdis,$totalnumber));
     $r->print('<form method="post" name="disall" action="/adm/email">'.      $r->print('<form method="post" name="disall" action="/adm/email">'.
       '<table border=2><tr><th colspan="3">&nbsp</th><th>');        '<table border=2><tr><th colspan="3">&nbsp</th><th>');
     if ($ENV{'form.sortedby'} eq "revdate") {      if ($ENV{'form.sortedby'} eq "revdate") {
Line 932  ENDDISHEADER Line 987  ENDDISHEADER
     }      }
     $r->print('</th><th>');      $r->print('</th><th>');
     if ($ENV{'form.sortedby'} eq "revstatus") {      if ($ENV{'form.sortedby'} eq "revstatus") {
  $r->print('<a href = "?sortedby=status'.$fsqs.'">'.&mt('Status').'</th>');   $r->print('<a href = "?sortedby=status'.$fsqs.'">'.&mt('Status').'</a></th>');
     } else {      } else {
       $r->print('<a href = "?sortedby=revstatus'.$fsqs.'">'.&mt('Status').'</th>');        $r->print('<a href = "?sortedby=revstatus'.$fsqs.'">'.&mt('Status').'</a></th>');
     }      }
     $r->print('</tr>');      $r->print("</tr>\n");
     for (my $n=$firstdis;$n<=$lastdis;$n++) {      for (my $n=$firstdis;$n<=$lastdis;$n++) {
  my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID)= @{$temp[$n]};   my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID)= @{$temp[$n]};
  if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {   if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {
Line 949  ENDDISHEADER Line 1004  ENDDISHEADER
     } else {      } else {
  $r->print('<tr bgcolor="#99BBBB">');   $r->print('<tr bgcolor="#99BBBB">');
     }      }
     $r->print('<td></a><input type=checkbox name="delmark_'.$origID.'" /></td><td><a href="/adm/email?display='.$origID.$sqs.       $r->print('<td><input type="checkbox" name="delmark_'.$origID.'" /></td><td><a href="/adm/email?display='.$origID.$sqs. 
       '">'.&mt('Open').'</a></td><td>'.        '">'.&mt('Open').'</a></td><td>'.
       ($folder ne 'trash'?'<a href="/adm/email?markdel='.$origID.$sqs.        ($folder ne 'trash'?'<a href="/adm/email?markdel='.$origID.$sqs.
       '">'.&mt('Delete'):'&nbsp').'</td>'.        '">'.&mt('Delete'):'&nbsp').'</a></td>'.
       '<td>'.&Apache::lonlocal::locallocaltime($sendtime).'</td><td>'.        '<td>'.&Apache::lonlocal::locallocaltime($sendtime).'</td><td>'.
       $fromname.'</td><td>'.$fromdomain.'</td><td>'.        $fromname.'</td><td>'.$fromdomain.'</td><td>'.
       &Apache::lonnet::unescape($shortsubj).'</td><td>'.        &Apache::lonnet::unescape($shortsubj).'</td><td>'.
                       $status.'</td></tr>');                        $status."</td></tr>\n");
  } elsif ($status eq 'deleted') {   } elsif ($status eq 'deleted') {
 # purge  # purge
     &movemsg(&Apache::lonnet::unescape($origID),$folder,'trash');      &movemsg(&Apache::lonnet::unescape($origID),$folder,'trash');
  }   }
     }         }   
     $r->print('</table><p>'.      $r->print("</table>\n<p>".
   '<a href="javascript:checkall()">'.&mt('Check All').'</a>&nbsp;'.    '<a href="javascript:checkall()">'.&mt('Check All').'</a>&nbsp;'.
   '<a href="javascript:uncheckall()">'.&mt('Uncheck All').'</a></p>'.    '<a href="javascript:uncheckall()">'.&mt('Uncheck All').'</a></p>'.
   '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />');    '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />');
Line 970  ENDDISHEADER Line 1025  ENDDISHEADER
  $r->print(   $r->print(
       '<p><input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" /></p>');        '<p><input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" /></p>');
     }      }
 $r->print('<p><input type="submit" name="markedmove" value="'.&mt('Move Checked to Folder').'" />');      $r->print('<p><input type="submit" name="markedmove" value="'.&mt('Move Checked to Folder').'" />');
     my @allfolders=&Apache::lonnet::getkeys('email_folders');      my @allfolders=&Apache::lonnet::getkeys('email_folders');
     if ($allfolders[0]=~/^error:/) { @allfolders=(); }      if ($allfolders[0]=~/^error:/) { @allfolders=(); }
     $r->print(      $r->print(
  &Apache::loncommon::select_form('','movetofolder',   &Apache::loncommon::select_form('','movetofolder',
      ( map { $_ => $_ } @allfolders))       ( map { $_ => $_ } @allfolders))
       );        );
     $r->print('<input type="hidden" name="folder" value="'.$folder.'" /></form>');      my $postedstartdis=$startdis+1;
       $r->print('<input type="hidden" name="folder" value="'.$folder.'" /><input type="hidden" name="startdis" value="'.$postedstartdis.'" /><input type="hidden" name="interdis" value="'.$ENV{'form.interdis'}.'" /></form>');
     if ($numblocked > 0) {      if ($numblocked > 0) {
         my $beginblock = &Apache::lonlocal::locallocaltime($startblock);          my $beginblock = &Apache::lonlocal::locallocaltime($startblock);
         my $finishblock = &Apache::lonlocal::locallocaltime($endblock);          my $finishblock = &Apache::lonlocal::locallocaltime($endblock);
Line 991  $r->print('<p><input type="submit" name= Line 1047  $r->print('<p><input type="submit" name=
   
 sub compout {  sub compout {
     my ($r,$forwarding,$replying,$broadcast,$replycrit,$folder)=@_;      my ($r,$forwarding,$replying,$broadcast,$replycrit,$folder)=@_;
       my $suffix=&foldersuffix($folder);
   
     if ($broadcast eq 'individual') {      if ($broadcast eq 'individual') {
  &printheader($r,'/adm/email?compose=individual',   &printheader($r,'/adm/email?compose=individual',
Line 1021  sub compout { Line 1078  sub compout {
     my $dispcrit='';      my $dispcrit='';
     my $dissub='';      my $dissub='';
     my $dismsg='';      my $dismsg='';
       my $disbase='';
     my $func=&mt('Send New');      my $func=&mt('Send New');
     my %lt=&Apache::lonlocal::texthash('us' => 'Username',      my %lt=&Apache::lonlocal::texthash('us' => 'Username',
        'do' => 'Domain',         'do' => 'Domain',
Line 1032  sub compout { Line 1090  sub compout {
     if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {      if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
  my $crithelp = Apache::loncommon::help_open_topic("Course_Critical_Message");   my $crithelp = Apache::loncommon::help_open_topic("Course_Critical_Message");
          $dispcrit=           $dispcrit=
  '<input type="checkbox" name="critmsg" /> '.&mt('Send as critical message').' ' . $crithelp .    '<p><label><input type="checkbox" name="critmsg" /> '.&mt('Send as critical message').'</label> ' . $crithelp . 
  '<br>'.   '</p><p>'.
  '<input type="checkbox" name="sendbck" /> '.&mt('Send as critical message').'  ' .   '<label><input type="checkbox" name="sendbck" /> '.&mt('Send as critical message').'  ' .
  &mt('and return receipt') . $crithelp . '<p>';   &mt('and return receipt') . '</label>' . $crithelp . 
    '</p><p><label><input type="checkbox" name="permanent" /> '.
   &mt('Send copy to permanent email address (if known)').'</label></p>';
      }       }
     my %message;      my %message;
     my %content;      my %content;
     my $defdom=$ENV{'user.domain'};      my $defdom=$ENV{'user.domain'};
     if ($forwarding) {      if ($forwarding) {
  %message=&Apache::lonnet::get('nohist_email',[$forwarding]);   %message=&Apache::lonnet::get('nohist_email'.$suffix,[$forwarding]);
  %content=&unpackagemsg($message{$forwarding},$folder);   %content=&unpackagemsg($message{$forwarding},$folder);
  $dispcrit.='<input type="hidden" name="forwid" value="'.   $dispcrit.='<input type="hidden" name="forwid" value="'.
     $forwarding.'" />';      $forwarding.'" />';
Line 1050  sub compout { Line 1110  sub compout {
  $dissub=&mt('Forwarding').': '.$content{'subject'};   $dissub=&mt('Forwarding').': '.$content{'subject'};
  $dismsg=&mt('Forwarded message from').' '.   $dismsg=&mt('Forwarded message from').' '.
     $content{'sendername'}.' '.&mt('at').' '.$content{'senderdomain'};      $content{'sendername'}.' '.&mt('at').' '.$content{'senderdomain'};
    if ($content{'baseurl'}) {
       $disbase='<input type="hidden" name="baseurl" value="'.&Apache::lonnet::escape($content{'baseurl'}).'" />';
    }
     }      }
     if ($replying) {      if ($replying) {
  %message=&Apache::lonnet::get('nohist_email',[$replying]);   %message=&Apache::lonnet::get('nohist_email'.$suffix,[$replying]);
  %content=&unpackagemsg($message{$replying},$folder);   %content=&unpackagemsg($message{$replying},$folder);
  $dispcrit.='<input type="hidden" name="replyid" value="'.   $dispcrit.='<input type="hidden" name="replyid" value="'.
     $replying.'" />';      $replying.'" />';
Line 1063  sub compout { Line 1126  sub compout {
  $dismsg=~s/\r/\n/g;   $dismsg=~s/\r/\n/g;
  $dismsg=~s/\f/\n/g;   $dismsg=~s/\f/\n/g;
  $dismsg=~s/\n+/\n\> /g;   $dismsg=~s/\n+/\n\> /g;
    if ($content{'baseurl'}) {
       $disbase='<input type="hidden" name="baseurl" value="'.&Apache::lonnet::escape($content{'baseurl'}).'" />';
       if ($ENV{'user.adv'}) {
    $disbase.='<label><input type="checkbox" name="storebasecomment" />'.&mt('Store message for re-use').
       '</label> <a href="/adm/email?showcommentbaseurl='.
       &Apache::lonnet::escape($content{'baseurl'}).'" target="comments">'.
       &mt('Show re-usable messages').'</a><br />';
       }
    }
     }      }
     my $citation=&displayresource(%content);      my $citation=&displayresource(%content);
     if ($ENV{'form.recdom'}) { $defdom=$ENV{'form.recdom'}; }      if ($ENV{'form.recdom'}) { $defdom=$ENV{'form.recdom'}; }
Line 1086  sub compout { Line 1158  sub compout {
     my $selectlink=&Apache::loncommon::selectstudent_link      my $selectlink=&Apache::loncommon::selectstudent_link
     ('compemail','recuname','recdomain');      ('compemail','recuname','recdomain');
     $r->print(<<"ENDREC");      $r->print(<<"ENDREC");
 <tr><td>$lt{'us'}:</td><td><input type="text" size="12" name="recuname" value="$ENV{'form.recname'}"></td><td rowspan="2">$selectlink</td></tr>  <tr><td>$lt{'us'}:</td><td><input type="text" size="12" name="recuname" value="$ENV{'form.recname'}" /></td><td rowspan="2">$selectlink</td></tr>
 <tr><td>$lt{'do'}:</td>  <tr><td>$lt{'do'}:</td>
 <td>$domform</td></tr>  <td>$domform</td></tr>
 ENDREC  ENDREC
Line 1104  $latexHelp Line 1176  $latexHelp
 <textarea name="message" cols="80" rows="15" wrap="hard">$dismsg  <textarea name="message" cols="80" rows="15" wrap="hard">$dismsg
 </textarea></p><br />  </textarea></p><br />
 $dispcrit  $dispcrit
   $disbase
 <input type="submit" name="send" value="$func $lt{'ma'}" />  <input type="submit" name="send" value="$func $lt{'ma'}" />
 <input type="submit" name="cancel" value="$lt{'ca'}" /><hr />  <input type="submit" name="cancel" value="$lt{'ca'}" /><hr />
 $citation  $citation
Line 1201  sub disfacetoface { Line 1274  sub disfacetoface {
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.   &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.
 $content{'sendername'}.'@'.  $content{'sendername'}.'@'.
             $content{'senderdomain'}.') '.$content{'time'}.              $content{'senderdomain'}.') '.$content{'time'}.
             '<br /><blockquote>'.              '<br /><pre>'.
               &Apache::lontexconvert::msgtexconverted($content{'message'}).                &Apache::lontexconvert::msgtexconverted($content{'message'}).
       '</blockquote>';        '</pre>';
      }       }
     # Check to see if there were any messages.      # Check to see if there were any messages.
     if ($result eq '') {      if ($result eq '') {
Line 1486  END Line 1559  END
        <tr bgcolor="$bgcols[$iter]">         <tr bgcolor="$bgcols[$iter]">
         <td>$$ltext{'star'}:&nbsp;$startform<br/>$$ltext{'endd'}:&nbsp;&nbsp;$endform</td>          <td>$$ltext{'star'}:&nbsp;$startform<br/>$$ltext{'endd'}:&nbsp;&nbsp;$endform</td>
         <td>$settername</td>          <td>$settername</td>
         <td><input type="text" name="title_$parmcount" size="15" value="$title"/><input type="hidden" name="key_$parmcount" value="$_"></td>          <td><input type="text" name="title_$parmcount" size="15" value="$title" /><input type="hidden" name="key_$parmcount" value="$_" /></td>
         <td>$lt{'modi'}?&nbsp;<input type="checkbox" name="modify_$parmcount"/><br />$lt{'canc'}?&nbsp;&nbsp;<input type="checkbox" name="cancel_$parmcount"/>          <td><label>$lt{'modi'}?&nbsp;<input type="checkbox" name="modify_$parmcount" /></label><br /><label>$lt{'canc'}?&nbsp;&nbsp;<input type="checkbox" name="cancel_$parmcount" /></label>
        </tr>         </tr>
 END  END
         $parmcount ++;          $parmcount ++;
Line 1539  sub display_addblocker_table { Line 1612  sub display_addblocker_table {
        </tr>         </tr>
        <tr bgcolor="#eeeeee">         <tr bgcolor="#eeeeee">
         <td>$$ltext{'star'}:&nbsp;$startform<br />$$ltext{'endd'}:&nbsp;&nbsp;$endform</td>          <td>$$ltext{'star'}:&nbsp;$startform<br />$$ltext{'endd'}:&nbsp;&nbsp;$endform</td>
         <td><input type="text" name="title_$parmcount" size="15" value=""/></td>          <td><input type="text" name="title_$parmcount" size="15" value="" /></td>
         <td>$lt{'addb'}?&nbsp;<input type="checkbox" name="add_$parmcount" value="1"/></td>          <td><label>$lt{'addb'}?&nbsp;<input type="checkbox" name="add_$parmcount" value="1" /></label></td>
        </tr>         </tr>
       </table>        </table>
      </td>       </td>
Line 1701  sub displaymessage { Line 1774  sub displaymessage {
       '"><b>'.&mt('Mark Unread').'</b></a></td>'.        '"><b>'.&mt('Mark Unread').'</b></a></td>'.
       '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.        '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.
       '"><b>Delete</b></a></td>'.        '"><b>Delete</b></a></td>'.
       '<td><a href="/adm/email?sortedby='.$ENV{'form.sortedby'}.        '<td><a href="/adm/email?'.$sqs.
       '&folder='.&Apache::lonnet::escape($folder).        ($ENV{'form.dismode'} eq 'new'?'&folder=new':'').
       '"><b>'.&mt('Display all Messages').'</b></a></td>');        '"><b>'.&mt('Back to Folder Display').'</b></a></td>');
     if ($counter > 0){      if ($counter > 0){
  $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.   $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.
   '"><b>'.&mt('Previous').'</b></a></td>');    '"><b>'.&mt('Previous').'</b></a></td>');
Line 1728  sub displaymessage { Line 1801  sub displaymessage {
       ($content{'courseid'}?'<br /><b>'.&mt('Course').':</b> '.$courseinfo{'description'}.        ($content{'courseid'}?'<br /><b>'.&mt('Course').':</b> '.$courseinfo{'description'}.
        ($content{'coursesec'}?' ('.&mt('Group/Section').': '.$content{'coursesec'}.')':''):'').         ($content{'coursesec'}?' ('.&mt('Group/Section').': '.$content{'coursesec'}.')':''):'').
       '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.        '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.
         ($content{'baseurl'}?'<br /><b>'.&mt('Refers to').':</b> <a href="'.$content{'baseurl'}.'">'.
          $content{'baseurl'}.' ('.&Apache::lonnet::gettitle($content{'baseurl'}).')</a>':'').
       '<p><pre>'.        '<p><pre>'.
       &Apache::lontexconvert::msgtexconverted($content{'message'},1).        &Apache::lontexconvert::msgtexconverted($content{'message'},1).
       '</pre><hr />'.&displayresource(%content).'</p>');        '</pre><hr />'.&displayresource(%content).'</p>');
Line 1793  sub printheader { Line 1868  sub printheader {
     &header($r,$title,$baseurl);      &header($r,$title,$baseurl);
 }  }
   
   # ------------------------------------------------------------ Store the comment
   
   sub storecomment {
       my ($r)=@_;
       my $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});
       my $cleanmsgtxt='';
       foreach (split(/[\n\r]/,$msgtxt)) {
    unless ($_=~/^\s*(\>|\&gt\;)/) {
       $cleanmsgtxt.=$_."\n";
    }
       }
       my $key=&Apache::lonnet::escape($ENV{'form.baseurl'}).'___'.time;
       &Apache::lonnet::put('nohist_stored_comments',{ $key => $cleanmsgtxt });
   }
   
   sub storedcommentlisting {
       my ($r)=@_;
       my %msgs=&Apache::lonnet::dump('nohist_stored_comments',undef,undef,
          '^'.&Apache::lonnet::escape(&Apache::lonnet::escape($ENV{'form.showcommentbaseurl'})));
       $r->print('<html><body>');
       if ((keys %msgs)[0]=~/^error\:/) {
    $r->print(&mt('No stored comments yet.'));
       } else {
    my $found=0;
    foreach (sort keys %msgs) {
       $r->print("\n".$msgs{$_}."<hr />");
       $found=1;
    }
    unless ($found) {
       $r->print(&mt('No stored comments yet for this resource.'));
    }
       }
   }
   
   # ---------------------------------------------------------------- Send an email
   
   sub sendoffmail {
       my ($r,$folder)=@_;
       my $suffix=&foldersuffix($folder);
       my $sendstatus='';
       if ($ENV{'form.send'}) {
    &printheader($r,'','Messages being sent.');
    $r->rflush();
    my %content=();
    undef %content;
    if ($ENV{'form.forwid'}) {
       my $msgid=$ENV{'form.forwid'};
       my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
       %content=&unpackagemsg($message{$msgid},1);
       &statuschange($msgid,'forwarded',$folder);
       $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".
    $content{'message'};
    }
    if ($ENV{'form.replyid'}) {
       my $msgid=$ENV{'form.replyid'};
       my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
       %content=&unpackagemsg($message{$msgid},1);
       &statuschange($msgid,'replied',$folder);
    }
    my %toaddr=();
    undef %toaddr;
    if ($ENV{'form.sendmode'} eq 'group') {
       foreach (keys %ENV) {
    if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {
       $toaddr{$1}='';
    }
       }
    } elsif ($ENV{'form.sendmode'} eq 'upload') {
       foreach (split(/[\n\r\f]+/,$ENV{'form.upfile'})) {
    my ($rec,$txt)=split(/\s*\:\s*/,$_);
    if ($txt) {
       $rec=~s/\@/\:/;
       $toaddr{$rec}.=$txt."\n";
    }
       }
    } else {
       $toaddr{$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}}='';
    }
    if ($ENV{'form.additionalrec'}) {
       foreach (split(/\,/,$ENV{'form.additionalrec'})) {
    my ($auname,$audom)=split(/\@/,$_);
    $toaddr{$auname.':'.$audom}='';
       }
    }
   
    foreach (keys %toaddr) {
       my ($recuname,$recdomain)=split(/\:/,$_);
               my $msgtxt;
               if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&
                   (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
                   $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'},1);
               } else {  
           $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});
               }
       if ($toaddr{$_}) { $msgtxt.='<hr />'.$toaddr{$_}; }
       my $thismsg;    
       if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) && 
    (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
    $r->print(&mt('Sending critical message').' '.$recuname.'@'.$recdomain.': ');
    $thismsg=&user_crit_msg($recuname,$recdomain,
    &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
    $msgtxt,
    $ENV{'form.sendbck'},$ENV{'form.permanent'});
       } else {
    $r->print(&mt('Sending').' '.$recuname.'@'.$recdomain.': ');
    $thismsg=&user_normal_msg($recuname,$recdomain,
     &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
     $msgtxt,
     $content{'citation'},undef,undef,$ENV{'form.permanent'});
    if (($ENV{'request.course.id'}) && ($ENV{'form.sendmode'} eq 'group')) {
       &user_normal_msg_raw(
    $ENV{'course.'.$ENV{'request.course.id'}.'.num'},
    $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
    'Broadcast ['.$recuname.':'.$recdomain.']',
    $msgtxt);
    }
       }
       $r->print($thismsg.'<br />');
       $sendstatus.=' '.$thismsg;
    }
       } else {
    &printheader($r,'','No messages sent.'); 
       }
       if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {
    $r->print('<br /><font color="green">'.&mt('Completed.').'</font>');
    if ($ENV{'form.displayedcrit'}) {
       &discrit($r);
    } else {
       &Apache::loncommunicate::menu($r);
    }
       } else {
    $r->print(
     '<h2><font color="red">'.&mt('Could not deliver message').'</font></h2>'.
     &mt('Please use the browser "Back" button and correct the recipient addresses')
     );
       }
   }
   
 # ===================================================================== Handler  # ===================================================================== Handler
   
Line 1810  sub handler { Line 2022  sub handler {
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
         ['display','replyto','forward','markread','markdel','markunread',          ['display','replyto','forward','markread','markdel','markunread',
          'sendreply','compose','sendmail','critical','recname','recdom',           'sendreply','compose','sendmail','critical','recname','recdom',
          'recordftf','sortedby','block','folder','startdis','interdis']);           'recordftf','sortedby','block','folder','startdis','interdis',
     $sqs='&sortedby='.$ENV{'form.sortedby'}.   'showcommentbaseurl','dismode']);
  '&startdis='.$ENV{'form.startdis'}.      $sqs='&sortedby='.$ENV{'form.sortedby'};
  '&interdis='.$ENV{'form.interdis'};  
   
 # ------------------------------------------------------ They checked for email  # ------------------------------------------------------ They checked for email
     unless ($ENV{'form.block'}) {      unless ($ENV{'form.block'}) {
Line 1834  sub handler { Line 2045  sub handler {
     unless ($folder) {       unless ($folder) { 
  $folder='';    $folder=''; 
     } else {      } else {
  $sqs='&folder='.&Apache::lonnet::escape($folder);   $sqs.='&folder='.&Apache::lonnet::escape($folder);
     }      }
   
 # --------------------------------------------------------------------- Display  # --------------------------------------------------------------------- Display
   
     $startdis=$ENV{'form.startdis'};      $startdis=$ENV{'form.startdis'};
       $startdis--;
     unless ($startdis) { $startdis=0; }      unless ($startdis) { $startdis=0; }
   
     $interdis=$ENV{'form.interdis'};      $interdis=$ENV{'form.interdis'};
     unless ($interdis) { $interdis=20; }      unless ($interdis) { $interdis=20; }
       $sqs.='&interdis='.$interdis;
   
       if ($ENV{'form.firstview'}) {
    $startdis=0;
       }
       if ($ENV{'form.lastview'}) {
    $startdis=-1;
       }
       if ($ENV{'form.prevview'}) {
    $startdis--;
       }
       if ($ENV{'form.nextview'}) {
    $startdis++;
       }
       my $postedstartdis=$startdis+1;
       $sqs.='&startdis='.$postedstartdis;
   
 # --------------------------------------------------------------- Render Output  # --------------------------------------------------------------- Render Output
   
Line 1869  sub handler { Line 2098  sub handler {
  &printheader($r,'','Displaying Critical Messages');   &printheader($r,'','Displaying Critical Messages');
  &discrit($r);   &discrit($r);
     } elsif ($ENV{'form.forward'}) {      } elsif ($ENV{'form.forward'}) {
  &compout($r,$ENV{'form.forward'});   &compout($r,$ENV{'form.forward'},undef,undef,undef,$folder);
     } elsif ($ENV{'form.markdel'}) {      } elsif ($ENV{'form.markdel'}) {
  &printheader($r,'','Deleted Message');   &printheader($r,'','Deleted Message');
  &statuschange($ENV{'form.markdel'},'deleted',$folder);   &statuschange($ENV{'form.markdel'},'deleted',$folder);
    &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.markedmove'}) {      } elsif ($ENV{'form.markedmove'}) {
  my $total=0;   my $total=0;
Line 1885  sub handler { Line 2115  sub handler {
  }   }
  &printheader($r,'','Moved Messages');   &printheader($r,'','Moved Messages');
  $r->print('Moved '.$total.' message(s)<p>');   $r->print('Moved '.$total.' message(s)<p>');
    &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.markeddel'}) {      } elsif ($ENV{'form.markeddel'}) {
  my $total=0;   my $total=0;
Line 1896  sub handler { Line 2127  sub handler {
  }   }
  &printheader($r,'','Deleted Messages');   &printheader($r,'','Deleted Messages');
  $r->print('Deleted '.$total.' message(s)<p>');   $r->print('Deleted '.$total.' message(s)<p>');
    &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.markunread'}) {      } elsif ($ENV{'form.markunread'}) {
  &printheader($r,'','Marked Message as Unread');   &printheader($r,'','Marked Message as Unread');
  &statuschange($ENV{'form.markunread'},'new');   &statuschange($ENV{'form.markunread'},'new');
    &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.compose'}) {      } elsif ($ENV{'form.compose'}) {
  &compout($r,'','',$ENV{'form.compose'});   &compout($r,'','',$ENV{'form.compose'});
Line 1908  sub handler { Line 2141  sub handler {
     } elsif ($ENV{'form.block'}) {      } elsif ($ENV{'form.block'}) {
         &examblock($r,$ENV{'form.block'});          &examblock($r,$ENV{'form.block'});
     } elsif ($ENV{'form.sendmail'}) {      } elsif ($ENV{'form.sendmail'}) {
  my $sendstatus='';   &sendoffmail($r,$folder);
  if ($ENV{'form.send'}) {   if ($ENV{'form.storebasecomment'}) {
     &printheader($r,'','Messages being sent.');      &storecomment($r);
     $r->rflush();  
     my %content=();  
     undef %content;  
     if ($ENV{'form.forwid'}) {  
  my $msgid=$ENV{'form.forwid'};  
  my %message=&Apache::lonnet::get('nohist_email',[$msgid]);  
  %content=&unpackagemsg($message{$msgid},1);  
  &statuschange($msgid,'forwarded');  
  $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".  
     $content{'message'};  
     }  
     if ($ENV{'form.replyid'}) {  
  my $msgid=$ENV{'form.replyid'};  
  my %message=&Apache::lonnet::get('nohist_email',[$msgid]);  
  %content=&unpackagemsg($message{$msgid},1);  
  &statuschange($msgid,'replied');  
     }  
     my %toaddr=();  
     undef %toaddr;  
     if ($ENV{'form.sendmode'} eq 'group') {  
  foreach (keys %ENV) {  
     if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {  
  $toaddr{$1}='';  
     }  
  }  
     } elsif ($ENV{'form.sendmode'} eq 'upload') {  
  foreach (split(/[\n\r\f]+/,$ENV{'form.upfile'})) {  
     my ($rec,$txt)=split(/\s*\:\s*/,$_);  
     if ($txt) {  
  $rec=~s/\@/\:/;  
  $toaddr{$rec}.=$txt."\n";  
     }  
  }  
     } else {  
  $toaddr{$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}}='';  
     }  
     if ($ENV{'form.additionalrec'}) {  
  foreach (split(/\,/,$ENV{'form.additionalrec'})) {  
     my ($auname,$audom)=split(/\@/,$_);  
     $toaddr{$auname.':'.$audom}='';  
  }  
     }  
   
     foreach (keys %toaddr) {  
  my ($recuname,$recdomain)=split(/\:/,$_);  
  my $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});  
  if ($toaddr{$_}) { $msgtxt.='<hr />'.$toaddr{$_}; }  
  my $thismsg;      
  if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&   
     (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {  
     $r->print(&mt('Sending critical message').' '.$recuname.'@'.$recdomain.': ');  
     $thismsg=&user_crit_msg($recuname,$recdomain,  
     &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),  
     $msgtxt,  
     $ENV{'form.sendbck'});  
  } else {  
     $r->print(&mt('Sending').' '.$recuname.'@'.$recdomain.': ');  
     $thismsg=&user_normal_msg($recuname,$recdomain,  
       &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),  
       $msgtxt,  
       $content{'citation'});  
                     if (($ENV{'request.course.id'}) && ($ENV{'form.sendmode'} eq 'group')) {  
                         &user_normal_msg_raw(  
                         $ENV{'course.'.$ENV{'request.course.id'}.'.num'},  
                         $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},  
                         'Broadcast ['.$recuname.':'.$recdomain.']',  
                         $msgtxt);  
                     }  
  }  
  $r->print($thismsg.'<br />');  
  $sendstatus.=' '.$thismsg;  
     }  
  } else {  
     &printheader($r,'','No messages sent.');   
  }  
  if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {  
     $r->print('<br /><font color="green">'.&mt('Completed.').'</font>');  
     if ($ENV{'form.displayedcrit'}) {  
  &discrit($r);  
     } else {  
  &Apache::loncommunicate::menu($r);  
     }  
  } else {  
     $r->print(  
       '<h2><font color="red">'.&mt('Could not deliver message').'</font></h2>'.  
       &mt('Please use the browser "Back" button and correct the recipient addresses')  
       );  
  }   }
    &disall($r,$folder);
     } elsif ($ENV{'form.newfolder'}) {      } elsif ($ENV{'form.newfolder'}) {
  &printheader($r,'','New Folder');   &printheader($r,'','New Folder');
  &makefolder($ENV{'form.newfolder'});   &makefolder($ENV{'form.newfolder'});
    &Apache::loncommunicate::menu($r);
  &disall($r,$ENV{'form.newfolder'});   &disall($r,$ENV{'form.newfolder'});
       } elsif ($ENV{'form.showcommentbaseurl'}) {
    &storedcommentlisting($r);
     } else {      } else {
  &printheader($r,'','Display All Messages');   &printheader($r,'','Display All Messages');
    &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     }      }
     $r->print('</body></html>');      $r->print('</body></html>');

Removed from v.1.113  
changed lines
  Added in v.1.136


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