Diff for /loncom/interface/lonmsg.pm between versions 1.89 and 1.99

version 1.89, 2004/03/01 16:19:45 version 1.99, 2004/05/07 12:03:53
Line 101  use Apache::lontexconvert(); Line 101  use Apache::lontexconvert();
 use HTML::Entities();  use HTML::Entities();
 use Mail::Send;  use Mail::Send;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::loncommunicate;
   
 # Querystring component with sorting type  # Querystring component with sorting type
 my $sqs;  my $sqs;
Line 109  my $sqs; Line 110  my $sqs;
   
 sub packagemsg {  sub packagemsg {
     my ($subject,$message,$citation,$baseurl,$attachmenturl)=@_;      my ($subject,$message,$citation,$baseurl,$attachmenturl)=@_;
     $message =&HTML::Entities::encode($message);      $message =&HTML::Entities::encode($message,'<>&"');
     $citation=&HTML::Entities::encode($citation);      $citation=&HTML::Entities::encode($citation,'<>&"');
     $subject =&HTML::Entities::encode($subject);      $subject =&HTML::Entities::encode($subject,'<>&"');
     #remove machine specification      #remove machine specification
     $baseurl =~ s|^http://[^/]+/|/|;      $baseurl =~ s|^http://[^/]+/|/|;
     $baseurl =&HTML::Entities::encode($baseurl);      $baseurl =&HTML::Entities::encode($baseurl,'<>&"');
     #remove machine specification      #remove machine specification
     $attachmenturl =~ s|^http://[^/]+/|/|;      $attachmenturl =~ s|^http://[^/]+/|/|;
     $attachmenturl =&HTML::Entities::encode($attachmenturl);      $attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"');
   
     my $now=time;      my $now=time;
     $msgcount++;      $msgcount++;
Line 175  sub unpackagemsg { Line 176  sub unpackagemsg {
        if ($notoken) {         if ($notoken) {
    $content{'message'}.='<p>'.&mt('Attachment').': <tt>'.$fname.'.'.$ft.'</tt>';     $content{'message'}.='<p>'.&mt('Attachment').': <tt>'.$fname.'.'.$ft.'</tt>';
        } else {         } else {
    $content{'message'}.='<p>'.&mt('Attachment').': <a href="'.     &Apache::lonnet::allowuploaded('/adm/msg',
        &Apache::lonnet::tokenwrapper($content{'attachmenturl'}).    $content{'attachmenturl'});
        '"><tt>'.$fname.'.'.$ft.'</tt></a>';     $content{'message'}.='<p>'.&mt('Attachment').
          ': <a href="'.$content{'attachmenturl'}.'"><tt>'.
          $fname.'.'.$ft.'</tt></a>';
        }         }
     }      }
     return %content;      return %content;
Line 204  sub sendemail { Line 207  sub sendemail {
     my $msg = new Mail::Send;      my $msg = new Mail::Send;
     $msg->to($to);      $msg->to($to);
     $msg->subject('[LON-CAPA] '.$subject);      $msg->subject('[LON-CAPA] '.$subject);
     if (my $fh = $msg->open('smtp',Server => 'localhost')) {      if (my $fh = $msg->open()) {
  print $fh $body;   print $fh $body;
  $fh->close;   $fh->close;
     }      }
Line 508  sub discourse { Line 511  sub discourse {
             'cfs' => 'Check for Section/Group',              'cfs' => 'Check for Section/Group',
             'cfn' => 'Check for None');              'cfn' => 'Check for None');
     $r->print(<<ENDDISHEADER);      $r->print(<<ENDDISHEADER);
 <input type=hidden name=sendmode value=group>  <input type="hidden" name="sendmode" value="group" />
 <script>  <script>
     function checkall() {      function checkall() {
  for (i=0; i<document.forms.compemail.elements.length; i++) {   for (i=0; i<document.forms.compemail.elements.length; i++) {
Line 538  sub discourse { Line 541  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
     my %coursepersonnel=      my %coursepersonnel=
Line 618  $content{'sendername'}.'@'. Line 621  $content{'sendername'}.'@'.
     $r->print('<input type=hidden name="displayedcrit" value="true"></form>');      $r->print('<input type=hidden name="displayedcrit" value="true"></form>');
 }  }
   
 # =============================================================== Compose reply  
   
 sub comprep {  
     my ($r,$msgid)=@_;  
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);  
       my %content=&unpackagemsg($message{$msgid},1);  
       my $quotemsg='> '.$content{'message'};  
       $quotemsg=~s/\r/\n/g;  
       $quotemsg=~s/\f/\n/g;  
       $quotemsg=~s/\n+/\n\> /g;  
       my $torepl=&Apache::loncommon::aboutmewrapper(  
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.  
 $content{'sendername'}.'@'.  
             $content{'senderdomain'}.')';  
       my $subject=&mt('Re').': '.$content{'subject'};  
       my $dispcrit='';  
       if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {  
  my $crithelp = Apache::loncommon::help_open_topic("Course_Critical_Message");  
          $dispcrit=  
  '<input type=checkbox name=critmsg> '.&mt('Send as critical message').' ' . $crithelp .   
  '<br>'.  
  '<input type=checkbox name=sendbck> '.&mt('Send as critical message').' ' .  
  &mt('and return receipt') . $crithelp . '<p>';  
       }  
     my %lt=&Apache::lonlocal::texthash(  
    'to' => 'To',  
    'sb' => 'Subject',  
    'sr' => 'Send Reply',  
    'ca' => 'Cancel'  
    );  
       $r->print(<<"ENDREPLY");  
 <form action="/adm/email" method="post">  
 <input type="hidden" name="sendreply" value="$msgid">  
 $lt{'to'}: $torepl<br />  
 $lt{'sb'}: <input type="text" size=50 name="subject" value="$subject"><p>  
 <textarea name="message" cols="84" rows="10" wrap="hard">  
 $quotemsg  
 </textarea></p><br />  
 $dispcrit  
 <input type="submit" name="send" value="$lt{'sr'}" />  
 <input type="submit" name="cancel" value="$lt{'ca'}"/ >  
 </form>  
 ENDREPLY  
 }  
   
 sub sortedmessages {  sub sortedmessages {
     my @messages = &Apache::lonnet::getkeys('nohist_email');      my @messages = &Apache::lonnet::getkeys('nohist_email');
     #unpack the varibles and repack into temp for sorting      #unpack the varibles and repack into temp for sorting
Line 783  ENDDISHEADER Line 741  ENDDISHEADER
     }      }
     $r->print('<td><a href="/adm/email?display='.$origID.$sqs.       $r->print('<td><a href="/adm/email?display='.$origID.$sqs. 
       '">'.&mt('Open').'</a></td><td><a href="/adm/email?markdel='.$origID.$sqs.        '">'.&mt('Open').'</a></td><td><a href="/adm/email?markdel='.$origID.$sqs.
       '">'.&mt('Delete').'</a><input type=checkbox name="delmark_'.$origID.'"></td>'.        '">'.&mt('Delete').'</a><input type=checkbox name="delmark_'.$origID.'" /></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>'.
Line 794  ENDDISHEADER Line 752  ENDDISHEADER
               '<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'}.'" />'.
               '<input type=submit name="markeddel" value="'.&mt('Delete Checked').'">'.                '<input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" />'.
               '</form></body></html>');                '</form></body></html>');
 }  }
   
 # ============================================================== Compose output  # ============================================================== Compose output
   
 sub compout {  sub compout {
     my ($r,$forwarding,$broadcast)=@_;      my ($r,$forwarding,$replying,$broadcast,$replycrit)=@_;
     &printheader($r,'/adm/email?compose=upload',  
      'Distribute from uploaded file');      if ($broadcast eq 'individual') {
    &printheader($r,'/adm/email?compose=individual',
        'Send a Message');
       } elsif ($broadcast) {
    &printheader($r,'/adm/email?compose=group',
        'Broadcast Message');
       } elsif ($forwarding) {
    &Apache::lonhtmlcommon::add_breadcrumb
           ({href=>"/adm/email?display=".&Apache::lonnet::escape($forwarding),
             text=>"Display Message"});
    &printheader($r,'/adm/email?forward='.&Apache::lonnet::escape($forwarding),
        'Forwarding a Message');
       } elsif ($replying) {
    &Apache::lonhtmlcommon::add_breadcrumb
           ({href=>"/adm/email?display=".&Apache::lonnet::escape($replying),
             text=>"Display Message"});
    &printheader($r,'/adm/email?replyto='.&Apache::lonnet::escape($replying),
        'Replying to a Message');
       } elsif ($replycrit) {
    $r->print('<h3>'.&mt('Replying to a Critical Message').'</h3>');
    $replying=$replycrit;
       } else {
    &printheader($r,'/adm/email?compose=upload',
        'Distribute from Uploaded File');
       }
   
     my $dispcrit='';      my $dispcrit='';
     my $dissub='';      my $dissub='';
     my $dismsg='';      my $dismsg='';
Line 818  sub compout { Line 801  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 .    '<input type="checkbox" name="critmsg" /> '.&mt('Send as critical message').' ' . $crithelp . 
  '<br>'.   '<br>'.
  '<input type="checkbox" name="sendbck"> '.&mt('Send as critical message').'  ' .   '<input type="checkbox" name="sendbck" /> '.&mt('Send as critical message').'  ' .
  &mt('and return receipt') . $crithelp . '<p>';   &mt('and return receipt') . $crithelp . '<p>';
       }       }
       my %message;
       my %content;
       my $defdom=$ENV{'user.domain'};
     if ($forwarding) {      if ($forwarding) {
        $dispcrit.='<input type="hidden" name="forwid" value="'.   %message=&Apache::lonnet::get('nohist_email',[$forwarding]);
    $forwarding.'">';   %content=&unpackagemsg($message{$forwarding});
        $func=&mt('Forward');   $dispcrit.='<input type="hidden" name="forwid" value="'.
       my %message=&Apache::lonnet::get('nohist_email',[$forwarding]);      $forwarding.'" />';
       my %content=&unpackagemsg($message{$forwarding});   $func=&mt('Forward');
   
        $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 ($replying) {
    %message=&Apache::lonnet::get('nohist_email',[$replying]);
    %content=&unpackagemsg($message{$replying});
    $dispcrit.='<input type="hidden" name="forwid" value="'.
       $forwarding.'" />';
    $func=&mt('Replying to');
   
    $dissub=&mt('Reply').': '.$content{'subject'};       
    $dismsg='> '.$content{'message'};
    $dismsg=~s/\r/\n/g;
    $dismsg=~s/\f/\n/g;
    $dismsg=~s/\n+/\n\> /g;
     }      }
     my $defdom=$ENV{'user.domain'};  
     if ($ENV{'form.recdom'}) { $defdom=$ENV{'form.recdom'}; }      if ($ENV{'form.recdom'}) { $defdom=$ENV{'form.recdom'}; }
       $r->print(        $r->print(
                 '<form action="/adm/email"  name="compemail" method="post"'.                  '<form action="/adm/email"  name="compemail" method="post"'.
                 ' enctype="multipart/form-data">'."\n".                  ' enctype="multipart/form-data">'."\n".
                 '<input type="hidden" name="sendmail" value="on">'."\n".                  '<input type="hidden" name="sendmail" value="on" />'."\n".
                 '<table>');                  '<table>');
     unless (($broadcast eq 'group') || ($broadcast eq 'upload')) {      unless (($broadcast eq 'group') || ($broadcast eq 'upload')) {
         my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain');   if ($replying) {
         my $selectlink=&Apache::loncommon::selectstudent_link      $r->print('<tr><td colspan="2">'.&mt('Replying to').' '.
         &Apache::loncommon::aboutmewrapper(
    &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.
         $content{'sendername'}.'@'.
         $content{'senderdomain'}.')'.
         '<input type="hidden" name="recuname" value="'.$content{'sendername'}.'" />'.
         '<input type="hidden" name="recdomain" value="'.$content{'senderdomain'}.'" />'.
         '</td></tr>');
    } else {
       my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain');
       my $selectlink=&Apache::loncommon::selectstudent_link
     ('compemail','recuname','recdomain');      ('compemail','recuname','recdomain');
        $r->print(<<"ENDREC");      $r->print(<<"ENDREC");
 <table>  
 <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
           }
     }      }
     my $latexHelp = Apache::loncommon::helpLatexCheatsheet();      my $latexHelp = Apache::loncommon::helpLatexCheatsheet();
     if ($broadcast ne 'upload') {      if ($broadcast ne 'upload') {
        $r->print(<<"ENDCOMP");         $r->print(<<"ENDCOMP");
 <tr><td>$lt{'ad'}<br /><tt>username\@domain,username\@domain, ...  <tr><td>$lt{'ad'}<br /><tt>username\@domain,username\@domain, ...
 </tt></td><td>  </tt></td><td>
 <input type="text" size="50" name="additionalrec"></td></tr>  <input type="text" size="50" name="additionalrec" /></td></tr>
 <tr><td>$lt{'sb'}:</td><td><input type="text" size="50" name="subject" value="$dissub">  <tr><td>$lt{'sb'}:</td><td><input type="text" size="50" name="subject" value="$dissub" />
 </td></tr></table>  </td></tr></table>
 $latexHelp  $latexHelp
 <textarea name="message" cols="80" rows="10" wrap="hard">$dismsg  <textarea name="message" cols="80" rows="15" wrap="hard">$dismsg
 </textarea></p><br />  </textarea></p><br />
 $dispcrit  $dispcrit
 <input type="submit" name="send" value="$func $lt{'ma'}" />  <input type="submit" name="send" value="$func $lt{'ma'}" />
Line 869  $dispcrit Line 877  $dispcrit
 ENDCOMP  ENDCOMP
     } else { # $broadcast is 'upload'      } else { # $broadcast is 'upload'
  $r->print(<<ENDUPLOAD);   $r->print(<<ENDUPLOAD);
 <input type=hidden name=sendmode value=upload>  <input type="hidden" name="sendmode" value="upload" />
 <input type="hidden" name="send" value="on" />  <input type="hidden" name="send" value="on" />
 <h3>Generate messages from a file</h3>  <h3>Generate messages from a file</h3>
 <p>  <p>
 Subject: <input type=text size=50 name=subject>  Subject: <input type="text" size="50" name="subject" />
 </p>  </p>
 <p>General message text<br />  <p>General message text<br />
 <textarea name=message cols=60 rows=10 wrap=hard>$dismsg  <textarea name="message" cols="60" rows="10" wrap="hard">$dismsg
 </textarea></p>  </textarea></p>
 <p>  <p>
 The file format for the uploaded portion of the message is:  The file format for the uploaded portion of the message is:
Line 890  username3\@domain1: text Line 898  username3\@domain1: text
 The messages will be assembled from all lines with the respective   The messages will be assembled from all lines with the respective 
 <tt>username\@domain</tt>, and appended to the general message text.</p>  <tt>username\@domain</tt>, and appended to the general message text.</p>
 <p>  <p>
 <input type=file name=upfile size=20><p>  <input type="file" name="upfile" size="40" /></p><p>
 $dispcrit  $dispcrit
 <input type=submit value="Upload and send">  <input type="submit" value="Upload and Send" /></p>
 ENDUPLOAD  ENDUPLOAD
     }      }
     if ($broadcast eq 'group') {      if ($broadcast eq 'group') {
Line 905  ENDUPLOAD Line 913  ENDUPLOAD
   
 sub disfacetoface {  sub disfacetoface {
     my ($r,$user,$domain)=@_;      my ($r,$user,$domain)=@_;
       my $target=$ENV{'form.grade_target'};
     unless ($ENV{'request.course.id'}) { return; }      unless ($ENV{'request.course.id'}) { return; }
     unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {      unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
  return;   return;
Line 924  sub disfacetoface { Line 933  sub disfacetoface {
             $result.='<h3>'.&mt('Sent Message').'</h3>';              $result.='<h3>'.&mt('Sent Message').'</h3>';
             %content=&unpackagemsg($content{'message'});              %content=&unpackagemsg($content{'message'});
             $content{'message'}=              $content{'message'}=
                 '<b>Subject: '.$content{'subject'}.'</b><br />'.                  '<b>'.&mt('Subject').': '.$content{'subject'}.'</b><br />'.
  $content{'message'};   $content{'message'};
         }          }
         $result.=&mt('By').': <b>'.          $result.=&mt('By').': <b>'.
Line 932  sub disfacetoface { Line 941  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 /><blockquote>'.
               &Apache::lontexconvert::msgtexconverted($content{'message'}).                &Apache::lontexconvert::msgtexconverted($content{'message'}).
       '</blockquote>';        '</blockquote>';
      }       }
     # Check to see if there were any messages.      # Check to see if there were any messages.
     if ($result eq '') {      if ($result eq '') {
         $r->print("<p><b>No notes, face-to-face discussion records, or critical messages in this course.</b></p>");   if ($target ne 'tex') { 
       $r->print("<p><b>".&mt("No notes, face-to-face discussion records, or critical messages in this course.")."</b></p>");
    } else {
       $r->print('\textbf{'.&mt("No notes, face-to-face discussion records, or critical messages in this course.").'}\\\\');
    }
     } else {      } else {
        $r->print($result);         $r->print($result);
     }      }
 }  }
   
 # ---------------------------------------------------------------- Print header  
   
 sub printheader {  
     my ($r,$url,$desc,$baseurl)=@_;  
     &Apache::lonhtmlcommon::add_breadcrumb  
  ({href=>$url,  
   text=>$desc});  
     &header($r,$baseurl);  
 }  
   
 # ---------------------------------------------------------------- Face to face  # ---------------------------------------------------------------- Face to face
   
 sub facetoface {  sub facetoface {
Line 1027  ENDBFORM Line 1030  ENDBFORM
     }      }
 }  }
   
   # ----------------------------------------------------------- Display a message
   
   sub displaymessage {
       my ($r,$msgid)=@_;
       &statuschange($msgid,'read');
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
       my %content=&unpackagemsg($message{$msgid});
   # info to generate "next" and "previous" buttons
       my @messages=&sortedmessages();
       my $counter=0;
       $r->print('<pre>');
       my $escmsgid=&Apache::lonnet::escape($msgid);
       foreach (@messages) {
    if ($_->[5] eq $escmsgid){
       last;
    }
    $counter++;
       }
       $r->print('</pre>');
       my $number_of_messages = scalar(@messages); #subtract 1 for last index
   # start output
       &printheader($r,'/adm/email?display='.&Apache::lonnet::escape($msgid),'Display a Message','',$content{'baseurl'});
       my %courseinfo=&Apache::lonnet::coursedescription($content{'courseid'});
   # Functions
       $r->print('<table border="2" width="100%"><tr bgcolor="#FFFFAA"><td>'.&mt('Functions').':</td>'.
         '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).$sqs.
         '"><b>'.&mt('Reply').'</b></a></td>'.
         '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).$sqs.
         '"><b>'.&mt('Forward').'</b></a></td>'.
         '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).$sqs.
         '"><b>'.&mt('Mark Unread').'</b></a></td>'.
         '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.
         '"><b>Delete</b></a></td>'.
         '<td><a href="/adm/email?sortedby='.$ENV{'form.sortedby'}.
         '"><b>'.&mt('Display all Messages').'</b></a></td>');
       if ($counter > 0){
    $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.
     '"><b>'.&mt('Previous').'</b></a></td>');
       }
       if ($counter < $number_of_messages - 1){
    $r->print('<td><a href="/adm/email?display='.$messages[$counter+1]->[5].$sqs.
     '"><b>'.&mt('Next').'</b></a></td>');
       }
       $r->print('</tr></table>');
       $r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}.
         '<br /><b>'.&mt('From').':</b> '.
         &Apache::loncommon::aboutmewrapper(
    &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),
    $content{'sendername'},$content{'senderdomain'}).' ('.
         $content{'sendername'}.' at '.
         $content{'senderdomain'}.') '.
         ($content{'courseid'}?'<br /><b>'.&mt('Course').':</b> '.$courseinfo{'description'}.
          ($content{'coursesec'}?' ('.&mt('Group/Section').': '.$content{'coursesec'}.')':''):'').
         '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.
         '<p><pre>'.
         &Apache::lontexconvert::msgtexconverted($content{'message'},1).
         '</pre><hr />'.$content{'citation'}.'</p>');
       return;   
   }
   
 # ================================================================== The Header  # ================================================================== The Header
   
 sub header {  sub header {
     my ($r,$baseurl)=@_;      my ($r,$title,$baseurl)=@_;
     $r->print('<html><head><title>Communication and Messages</title>');      $r->print('<html><head><title>Communication and Messages</title>');
     if ($baseurl) {      if ($baseurl) {
  $r->print("<base href=\"http://$ENV{'SERVER_NAME'}/$baseurl\" />");   $r->print("<base href=\"http://$ENV{'SERVER_NAME'}/$baseurl\" />");
Line 1038  sub header { Line 1101  sub header {
     $r->print(&Apache::loncommon::studentbrowser_javascript().'</head>'.      $r->print(&Apache::loncommon::studentbrowser_javascript().'</head>'.
       &Apache::loncommon::bodytag('Communication and Messages'));        &Apache::loncommon::bodytag('Communication and Messages'));
         $r->print(&Apache::lonhtmlcommon::breadcrumbs          $r->print(&Apache::lonhtmlcommon::breadcrumbs
                   (undef,'Communication and Messages'));                    (undef,($title?$title:'Communication and Messages')));
   
   }
   
   # ---------------------------------------------------------------- Print header
   
   sub printheader {
       my ($r,$url,$desc,$title,$baseurl)=@_;
       &Apache::lonhtmlcommon::add_breadcrumb
    ({href=>$url,
     text=>$desc});
       &header($r,$title,$baseurl);
 }  }
   
   
 # ===================================================================== Handler  # ===================================================================== Handler
   
 sub handler {  sub handler {
Line 1074  sub handler { Line 1148  sub handler {
 # --------------------------------------------------------------- Render Output  # --------------------------------------------------------------- Render Output
   
     if ($ENV{'form.display'}) {      if ($ENV{'form.display'}) {
  my $msgid=$ENV{'form.display'};   &displaymessage($r,$ENV{'form.display'});
  &statuschange($msgid,'read');  
  my %message=&Apache::lonnet::get('nohist_email',[$msgid]);  
  my %content=&unpackagemsg($message{$msgid});  
 # info to generate "next" and "previous" buttons  
  my @messages=&sortedmessages();  
  my $counter=0;  
  $r->print('<pre>');  
  my $escmsgid=&Apache::lonnet::escape($msgid);  
  foreach (@messages) {  
     if ($_->[5] eq $escmsgid){  
  last;  
     }  
     $counter++;  
  }  
  $r->print('</pre>');  
  my $number_of_messages = scalar(@messages); #subtract 1 for last index  
 # start output  
  $r->print('<html><head><title>EMail and Messaging</title>');  
  $r->print(&Apache::loncommon::studentbrowser_javascript().  
   '</head>'.  
   &Apache::loncommon::bodytag('EMail and Messages').  
   &Apache::loncommon::help_open_faq(12).  
   &Apache::loncommon::help_open_bug('Communication Tools'));  
  my %courseinfo=&Apache::lonnet::coursedescription($content{'courseid'});  
   
  $r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}.  
   '<br /><b>'.&mt('From').':</b> '.  
   &Apache::loncommon::aboutmewrapper(  
      &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),  
      $content{'sendername'},$content{'senderdomain'}).' ('.  
   $content{'sendername'}.' at '.  
   $content{'senderdomain'}.') '.  
   ($content{'courseid'}?'<br /><b>'.&mt('Course').':</b> '.$courseinfo{'description'}.  
    ($content{'coursesec'}?' ('.&mt('Group/Section').': '.$content{'coursesec'}.')':''):'').  
   '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.'<p>'.  
   '<table border=2><tr bgcolor="#FFFFAA"><td>'.&mt('Functions').':</td>'.  
   '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).$sqs.  
   '"><b>'.&mt('Reply').'</b></a></td>'.  
   '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).$sqs.  
   '"><b>'.&mt('Forward').'</b></a></td>'.  
   '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).$sqs.  
   '"><b>'.&mt('Mark Unread').'</b></a></td>'.  
   '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.  
   '"><b>Delete</b></a></td>'.  
   '<td><a href="/adm/email?sortedby='.$ENV{'form.sortedby'}.  
   '"><b>'.&mt('Display all Messages').'</b></a></td>');  
  if ($counter > 0){  
     $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.  
       '"><b>'.&mt('Previous').'</b></a></td>');  
  }  
  if ($counter < $number_of_messages - 1){  
     $r->print('<td><a href="/adm/email?display='.$messages[$counter+1]->[5].$sqs.  
       '"><b>'.&mt('Next').'</b></a></td>');  
  }  
  $r->print('</tr></table><p><pre>'.  
   &Apache::lontexconvert::msgtexconverted($content{'message'},1).  
   '</pre><hr>'.$content{'citation'});  
     } elsif ($ENV{'form.replyto'}) {      } elsif ($ENV{'form.replyto'}) {
  &comprep($r,$ENV{'form.replyto'});   &compout($r,'',$ENV{'form.replyto'});
     } elsif ($ENV{'form.sendreply'}) {  
  if ($ENV{'form.send'}) {  
     my $msgid=$ENV{'form.sendreply'};  
     my %message=&Apache::lonnet::get('nohist_email',[$msgid]);  
     my %content=&unpackagemsg($message{$msgid},1);  
     &statuschange($msgid,'replied');  
     if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&   
  (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {  
  $r->print(&mt('Sending critical message').': '.  
   &user_crit_msg($content{'sendername'},  
  $content{'senderdomain'},  
  &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),  
  &Apache::lonfeedback::clear_out_html($ENV{'form.message'}),  
  $ENV{'form.sendbck'}));  
     } else {  
  $r->print(&mt('Sending').': '.&user_normal_msg($content{'sendername'},  
        $content{'senderdomain'},  
        &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),  
        &Apache::lonfeedback::clear_out_html($ENV{'form.message'})));  
     }  
  }  
  if ($ENV{'form.displayedcrit'}) {  
     &discrit($r);  
  } else {  
     &disall($r);  
  }  
     } elsif ($ENV{'form.confirm'}) {      } elsif ($ENV{'form.confirm'}) {
    &printheader($r,'','Confirmed Receipt');
  foreach (keys %ENV) {   foreach (keys %ENV) {
     if ($_=~/^form\.rec\_(.*)$/) {      if ($_=~/^form\.rec\_(.*)$/) {
  $r->print('<b>Confirming Receipt:</b> '.   $r->print('<b>'.&mt('Confirming Receipt').':</b> '.
   &user_crit_received($1).'<br>');    &user_crit_received($1).'<br>');
     }      }
     if ($_=~/^form\.reprec\_(.*)$/) {      if ($_=~/^form\.reprec\_(.*)$/) {
  my $msgid=$1;   my $msgid=$1;
  $r->print('<b>Confirming Receipt:</b> '.   $r->print('<b>'.&mt('Confirming Receipt').':</b> '.
   &user_crit_received($msgid).'<br>');    &user_crit_received($msgid).'<br>');
  &comprep($r,$msgid);   &compout($r,'','','',$msgid);
     }      }
  }   }
  &discrit($r);   &discrit($r);
     } elsif ($ENV{'form.critical'}) {      } elsif ($ENV{'form.critical'}) {
    &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'});
     } elsif ($ENV{'form.markread'}) {  
     } elsif ($ENV{'form.markdel'}) {      } elsif ($ENV{'form.markdel'}) {
    &printheader($r,'','Deleted Message');
  &statuschange($ENV{'form.markdel'},'deleted');   &statuschange($ENV{'form.markdel'},'deleted');
  &disall($r);   &disall($r);
     } elsif ($ENV{'form.markeddel'}) {      } elsif ($ENV{'form.markeddel'}) {
Line 1190  sub handler { Line 1183  sub handler {
  $total++;   $total++;
     }      }
  }   }
    &printheader($r,'','Deleted Messages');
  $r->print('Deleted '.$total.' message(s)<p>');   $r->print('Deleted '.$total.' message(s)<p>');
  &disall($r);   &disall($r);
     } elsif ($ENV{'form.markunread'}) {      } elsif ($ENV{'form.markunread'}) {
    &printheader($r,'','Marked Message as Unread');
  &statuschange($ENV{'form.markunread'},'new');   &statuschange($ENV{'form.markunread'},'new');
  &disall($r);   &disall($r);
     } elsif ($ENV{'form.compose'}) {      } elsif ($ENV{'form.compose'}) {
  &compout($r,'',$ENV{'form.compose'});   &compout($r,'','',$ENV{'form.compose'});
     } elsif ($ENV{'form.recordftf'}) {      } elsif ($ENV{'form.recordftf'}) {
  &facetoface($r,$ENV{'form.recordftf'});   &facetoface($r,$ENV{'form.recordftf'});
     } elsif ($ENV{'form.sendmail'}) {      } elsif ($ENV{'form.sendmail'}) {
  my $sendstatus='';   my $sendstatus='';
  if ($ENV{'form.send'}) {   if ($ENV{'form.send'}) {
       &printheader($r,'','Messages being sent.');
       $r->rflush();
     my %content=();      my %content=();
     undef %content;      undef %content;
     if ($ENV{'form.forwid'}) {      if ($ENV{'form.forwid'}) {
Line 1237  sub handler { Line 1234  sub handler {
     $toaddr{$auname.':'.$audom}='';      $toaddr{$auname.':'.$audom}='';
  }   }
     }      }
   
     foreach (keys %toaddr) {      foreach (keys %toaddr) {
  my ($recuname,$recdomain)=split(/\:/,$_);   my ($recuname,$recdomain)=split(/\:/,$_);
  my $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});   my $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});
  if ($toaddr{$_}) { $msgtxt.='<hr>'.$toaddr{$_}; }       if ($toaddr{$_}) { $msgtxt.='<hr />'.$toaddr{$_}; }
    my $thismsg;    
  if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&    if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) && 
     (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {      (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
     $r->print(&mt('Sending critical message').' ...');      $r->print(&mt('Sending critical message').' '.$recuname.'@'.$recdomain.': ');
     $sendstatus.=' '.&user_crit_msg($recuname,$recdomain,      $thismsg=&user_crit_msg($recuname,$recdomain,
     &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),      &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
     $msgtxt,      $msgtxt,
     $ENV{'form.sendbck'});      $ENV{'form.sendbck'});
  } else {   } else {
     $r->print(&mt('Sending').' ...');      $r->print(&mt('Sending').' '.$recuname.'@'.$recdomain.': ');
     $sendstatus.=' '.&user_normal_msg($recuname,$recdomain,      $thismsg=&user_normal_msg($recuname,$recdomain,
       &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),        &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
       $msgtxt,        $msgtxt,
       $content{'citation'});        $content{'citation'});
  }   }
  $r->print('<br />');   $r->print($thismsg.'<br />');
    $sendstatus.=' '.$thismsg;
     }      }
    } else {
       &printheader($r,'','No messages sent.'); 
  }   }
  if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {   if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {
     $r->print('<br /><font color="green">'.&mt('Completed.').'</font>');      $r->print('<br /><font color="green">'.&mt('Completed.').'</font>');
     if ($ENV{'form.displayedcrit'}) {      if ($ENV{'form.displayedcrit'}) {
  &discrit($r);   &discrit($r);
     } else {      } else {
  &disall($r);   &Apache::loncommunicate::menu($r);
     }      }
  } else {   } else {
     $r->print(      $r->print(
Line 1272  sub handler { Line 1274  sub handler {
       );        );
  }   }
     } else {      } else {
    &printheader($r,'','Display All Messages');
  &disall($r);   &disall($r);
     }      }
     $r->print('</body></html>');      $r->print('</body></html>');

Removed from v.1.89  
changed lines
  Added in v.1.99


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