Diff for /loncom/interface/lonmsg.pm between versions 1.64 and 1.72

version 1.64, 2003/08/18 17:37:42 version 1.72, 2003/12/29 21:21:39
Line 115  use Apache::loncommon(); Line 115  use Apache::loncommon();
 use Apache::lontexconvert();  use Apache::lontexconvert();
 use HTML::Entities();  use HTML::Entities();
 use Mail::Send;  use Mail::Send;
   use Apache::lonlocal;
   
   # Querystring component with sorting type
   my $sqs;
   
 # ===================================================================== Package  # ===================================================================== Package
   
Line 140  sub packagemsg { Line 144  sub packagemsg {
     my $result='<sendername>'.$ENV{'user.name'}.'</sendername>'.      my $result='<sendername>'.$ENV{'user.name'}.'</sendername>'.
            '<senderdomain>'.$ENV{'user.domain'}.'</senderdomain>'.             '<senderdomain>'.$ENV{'user.domain'}.'</senderdomain>'.
            '<subject>'.$subject.'</subject>'.             '<subject>'.$subject.'</subject>'.
    '<time>'.localtime($now).'</time>'.     '<time>'.&Apache::lonlocal::locallocaltime($now).'</time>'.
    '<servername>'.$ENV{'SERVER_NAME'}.'</servername>'.     '<servername>'.$ENV{'SERVER_NAME'}.'</servername>'.
            '<host>'.$ENV{'HTTP_HOST'}.'</host>'.             '<host>'.$ENV{'HTTP_HOST'}.'</host>'.
    '<client>'.$ENV{'REMOTE_ADDR'}.'</client>'.     '<client>'.$ENV{'REMOTE_ADDR'}.'</client>'.
Line 183  sub unpackagemsg { Line 187  sub unpackagemsg {
     if ($content{'attachmenturl'}) {      if ($content{'attachmenturl'}) {
        my ($fname,$ft)=($content{'attachmenturl'}=~/\/(\w+)\.(\w+)$/);         my ($fname,$ft)=($content{'attachmenturl'}=~/\/(\w+)\.(\w+)$/);
        if ($notoken) {         if ($notoken) {
    $content{'message'}.='<p>Attachment: <tt>'.$fname.'.'.$ft.'</tt>';     $content{'message'}.='<p>'.&mt('Attachment').': <tt>'.$fname.'.'.$ft.'</tt>';
        } else {         } else {
    $content{'message'}.='<p>Attachment: <a href="'.     $content{'message'}.='<p>'.&mt('Attachment').': <a href="'.
        &Apache::lonnet::tokenwrapper($content{'attachmenturl'}).         &Apache::lonnet::tokenwrapper($content{'attachmenturl'}).
        '"><tt>'.$fname.'.'.$ft.'</tt></a>';         '"><tt>'.$fname.'.'.$ft.'</tt></a>';
        }         }
Line 209  sub unpackmsgid { Line 213  sub unpackmsgid {
 sub sendemail {  sub sendemail {
     my ($to,$subject,$body)=@_;      my ($to,$subject,$body)=@_;
     $body=      $body=
     "*** This is an automatic message generated by the LON-CAPA system.\n".      "*** ".&mt('This is an automatic message generated by the LON-CAPA system.')."\n".
     "*** Please do not reply to this address.\n\n".$body;      "*** ".&mt('Please do not reply to this address.')."\n\n".$body;
     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);
     my $fh = $msg->open('smtp',Server => 'localhost');      if (my $fh = $msg->open('smtp',Server => 'localhost')) {
     print $fh $body;   print $fh $body;
     $fh->close;   $fh->close;
       }
 }  }
   
 # ==================================================== Send notification emails  # ==================================================== Send notification emails
Line 359  sub user_crit_received { Line 364  sub user_crit_received {
     my %contents=&unpackagemsg($message{$msgid},1);      my %contents=&unpackagemsg($message{$msgid},1);
     my $status='rec: '.($contents{'sendback'}?      my $status='rec: '.($contents{'sendback'}?
      &user_normal_msg($contents{'sendername'},$contents{'senderdomain'},       &user_normal_msg($contents{'sendername'},$contents{'senderdomain'},
                      'Receipt: '.$ENV{'user.name'}.' at '.$ENV{'user.domain'},                       &mt('Receipt').': '.$ENV{'user.name'}.' at '.$ENV{'user.domain'},
                      'User '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}.                       &mt('User').' '.$ENV{'user.name'}.' '.&mt('at').' '.$ENV{'user.domain'}.
                      ' acknowledged receipt of message'."\n".'   "'.                       ' acknowledged receipt of message'."\n".'   "'.
                      $contents{'subject'}.'"'."\n".'dated '.                       $contents{'subject'}.'"'."\n".&mt('dated').' '.
                      $contents{'time'}.".\n"                       $contents{'time'}.".\n"
                      ):'no msg req');                       ):'no msg req');
     $status.=' trans: '.      $status.=' trans: '.
Line 466  sub discourse { Line 471  sub discourse {
    $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'});
     my $now=time;      my $now=time;
       my %lt=&Apache::lonlocal::texthash('cfa' => 'Check for All',
               'cfs' => 'Check for Section/Group',
               '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>
Line 497  sub discourse { Line 505  sub discourse {
         }          }
     }      }
 </script>  </script>
 <input type=button onClick="checkall()" value="Check for All">&nbsp;  <input type=button onClick="checkall()" value="$lt{'cfa'}">&nbsp;
 <input type=button onClick="checksec()" value="Check for Section/Group">  <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="Check for None">  <input type=button onClick="uncheckall()" value="$lt{'cfn'}">
 <p>  <p>
 ENDDISHEADER  ENDDISHEADER
     my %coursepersonnel=      my %coursepersonnel=
Line 542  ENDDISHEADER Line 550  ENDDISHEADER
   
 sub discrit {  sub discrit {
     my $r=shift;      my $r=shift;
     my $header = '<h1><font color=red>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');
Line 551  sub discrit { Line 559  sub discrit {
         my %content=&unpackagemsg($what{$_});          my %content=&unpackagemsg($what{$_});
         next if ($content{'senderdomain'} eq '');          next if ($content{'senderdomain'} eq '');
         $content{'message'}=~s/\n/\<br\>/g;          $content{'message'}=~s/\n/\<br\>/g;
         $result.='<hr>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>Subject: '.$content{'subject'}.              '<br>'.&mt('Subject').': '.$content{'subject'}.
             '<br><blockquote>'.              '<br><blockquote>'.
               &Apache::lontexconvert::msgtexconverted($content{'message'}).                &Apache::lontexconvert::msgtexconverted($content{'message'}).
             '</blockquote>'.              '</blockquote>'.
             '<input type=submit name="rec_'.$_.'" value="Confirm Receipt">'.              '<input type=submit name="rec_'.$_.'" value="'.&mt('Confirm Receipt').'">'.
             '<input type=submit name="reprec_'.$_.'" '.              '<input type=submit name="reprec_'.$_.'" '.
                   'value="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 '') {
         $result = "<h2>You have no critical messages.</h2>".          $result = "<h2>".&mt('You have no critical messages.')."</h2>".
     '<a href="/adm/roles">Select a course</a>';      '<a href="/adm/roles">'.&mt('Select a course').'</a>';
     } else {      } else {
         $r->print($header);          $r->print($header);
     }      }
Line 589  sub comprep { Line 597  sub comprep {
  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.   &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).' ('.
 $content{'sendername'}.'@'.  $content{'sendername'}.'@'.
             $content{'senderdomain'}.')';              $content{'senderdomain'}.')';
       my $subject='Re: '.$content{'subject'};        my $subject=&mt('Re').': '.$content{'subject'};
       my $dispcrit='';        my $dispcrit='';
       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> Send as critical message ' . $crithelp .    '<input type=checkbox name=critmsg> '.&mt('Send as critical message').' ' . $crithelp . 
  '<br>'.   '<br>'.
  '<input type=checkbox name=sendbck> Send as critical message ' .   '<input type=checkbox name=sendbck> '.&mt('Send as critical message').' ' .
  ' and return receipt' . $crithelp . '<p>';   &mt('and return receipt') . $crithelp . '<p>';
       }        }
       my %lt=&Apache::lonlocal::texthash(
      'to' => 'To',
      'sb' => 'Subject',
      'sr' => 'Send Reply',
      'ca' => 'Cancel'
      );
       $r->print(<<"ENDREPLY");        $r->print(<<"ENDREPLY");
 <form action="/adm/email" method=post>  <form action="/adm/email" method="post">
 <input type=hidden name=sendreply value="$msgid">  <input type="hidden" name="sendreply" value="$msgid">
 To: $torepl<br />  $lt{'to'}: $torepl<br />
 Subject: <input type=text size=50 name=subject value="$subject"><p>  $lt{'sb'}: <input type="text" size=50 name="subject" value="$subject"><p>
 <textarea name=message cols=84 rows=10 wrap=hard>  <textarea name="message" cols="84" rows="10" wrap="hard">
 $quotemsg  $quotemsg
 </textarea><p>  </textarea></p><br />
 $dispcrit  $dispcrit
 <input type=submit value="Send Reply">  <input type="submit" name="send" value="$lt{'sr'}" />
   <input type="submit" name="cancel" value="$lt{'ca'}"/ >
 </form>  </form>
 ENDREPLY  ENDREPLY
 }  }
   
   sub sortedmessages {
       my @messages = &Apache::lonnet::getkeys('nohist_email');
       #unpack the varibles and repack into temp for sorting
       my @temp;
       foreach (@messages) {
    my $msgid=&Apache::lonnet::escape($_);
    my ($sendtime,$shortsubj,$fromname,$fromdomain,$status)=
       &Apache::lonmsg::unpackmsgid($msgid);
    my @temp1 = ($sendtime,$shortsubj,$fromname,$fromdomain,$status,
        $msgid);
    push @temp ,\@temp1;
       }
       #default sort
       @temp = sort  {$a->[0] <=> $b->[0]} @temp;    
       if ($ENV{'form.sortedby'} eq "date"){
           @temp = sort  {$a->[0] <=> $b->[0]} @temp;    
       }
       if ($ENV{'form.sortedby'} eq "revdate"){
       @temp = sort  {$b->[0] <=> $a->[0]} @temp; 
       }
       if ($ENV{'form.sortedby'} eq "user"){
    @temp = sort  {lc($a->[2]) cmp lc($b->[2])} @temp;
       }
       if ($ENV{'form.sortedby'} eq "revuser"){
    @temp = sort  {lc($b->[2]) cmp lc($a->[2])} @temp;
       }
       if ($ENV{'form.sortedby'} eq "domain"){
           @temp = sort  {$a->[3] cmp $b->[3]} @temp;
       }
       if ($ENV{'form.sortedby'} eq "revdomain"){
           @temp = sort  {$b->[3] cmp $a->[3]} @temp;
       }
       if ($ENV{'form.sortedby'} eq "subject"){
           @temp = sort  {lc($a->[1]) cmp lc($b->[1])} @temp;
       }
       if ($ENV{'form.sortedby'} eq "revsubject"){
           @temp = sort  {lc($b->[1]) cmp lc($a->[1])} @temp;
       }
       if ($ENV{'form.sortedby'} eq "status"){
           @temp = sort  {$a->[4] cmp $b->[4]} @temp;
       }
       if ($ENV{'form.sortedby'} eq "revstatus"){
           @temp = sort  {$b->[4] cmp $a->[4]} @temp;
       }
       return @temp;
   }
   
 # ======================================================== Display all messages  # ======================================================== Display all messages
   
 sub disall {  sub disall {
Line 638  sub disall { Line 700  sub disall {
     }      }
 </script>  </script>
 ENDDISHEADER  ENDDISHEADER
     $r->print('<h1>Display All Messages</h1><form method=post name=disall '.      $r->print('<h1>'.&mt('Display All Messages').'</h1><form method=post name=disall '.
       'action="/adm/email">'.        'action="/adm/email">'.
       '<table border=2><tr><th colspan=2>&nbsp</th><th>');        '<table border=2><tr><th colspan=2>&nbsp</th><th>');
     if ($ENV{'form.sortedby'} eq "revdate") {      if ($ENV{'form.sortedby'} eq "revdate") {
  $r->print('<a href = "?sortedby=date">Date</a></th>');   $r->print('<a href = "?sortedby=date">'.&mt('Date').'</a></th>');
     } else {      } else {
  $r->print('<a href = "?sortedby=revdate">Date</a></th>');   $r->print('<a href = "?sortedby=revdate">'.&mt('Date').'</a></th>');
     }      }
     $r->print('<th>');      $r->print('<th>');
     if ($ENV{'form.sortedby'} eq "revuser") {      if ($ENV{'form.sortedby'} eq "revuser") {
  $r->print('<a href = "?sortedby=user">Username</a>');   $r->print('<a href = "?sortedby=user">'.&mt('Username').'</a>');
     } else {      } else {
  $r->print('<a href = "?sortedby=revuser">Username</a>');   $r->print('<a href = "?sortedby=revuser">'.&mt('Username').'</a>');
     }      }
     $r->print('</th><th>');      $r->print('</th><th>');
     if ($ENV{'form.sortedby'} eq "revdomain") {      if ($ENV{'form.sortedby'} eq "revdomain") {
  $r->print('<a href = "?sortedby=domain">Domain</a>');   $r->print('<a href = "?sortedby=domain">'.&mt('Domain').'</a>');
     } else {      } else {
  $r->print('<a href = "?sortedby=revdomain">Domain</a>');   $r->print('<a href = "?sortedby=revdomain">'.&mt('Domain').'</a>');
     }      }
     $r->print('</th><th>');      $r->print('</th><th>');
     if ($ENV{'form.sortedby'} eq "revsubject") {      if ($ENV{'form.sortedby'} eq "revsubject") {
  $r->print('<a href = "?sortedby=subject">Subject</a>');   $r->print('<a href = "?sortedby=subject">'.&mt('Subject').'</a>');
     } else {      } else {
     $r->print('<a href = "?sortedby=revsubject">Subject</a>');      $r->print('<a href = "?sortedby=revsubject">'.&mt('Subject').'</a>');
     }      }
     $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">Status</th>');   $r->print('<a href = "?sortedby=status">'.&mt('Status').'</th>');
     } else {      } else {
       $r->print('<a href = "?sortedby=revstatus">Status</th>');        $r->print('<a href = "?sortedby=revstatus">'.&mt('Status').'</th>');
     }      }
     $r->print('</tr>');      $r->print('</tr>');
     my @messages = split(/\&/,&Apache::lonnet::reply('keys:'.$ENV{'user.domain'}.':'.$ENV{'user.name'}.':nohist_email',$ENV{'user.home'}));      my @temp=sortedmessages();
     #unpack the varibles and repack into temp for sorting  
     my @temp;  
     foreach (@messages) {  
  my ($sendtime,$shortsubj,$fromname,$fromdomain,$status)=  
     &Apache::lonmsg::unpackmsgid($_);  
  my @temp1 = ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$_);  
  push @temp ,\@temp1;  
     }  
     #default sort  
     @temp = sort  {$a->[0] <=> $b->[0]} @temp;      
     if ($ENV{'form.sortedby'} eq "date"){  
         @temp = sort  {$a->[0] <=> $b->[0]} @temp;      
     }  
     if ($ENV{'form.sortedby'} eq "revdate"){  
     @temp = sort  {$b->[0] <=> $a->[0]} @temp;   
     }  
     if ($ENV{'form.sortedby'} eq "user"){  
  @temp = sort  {lc($a->[2]) cmp lc($b->[2])} @temp;  
     }  
     if ($ENV{'form.sortedby'} eq "revuser"){  
  @temp = sort  {lc($b->[2]) cmp lc($a->[2])} @temp;  
     }  
     if ($ENV{'form.sortedby'} eq "domain"){  
         @temp = sort  {$a->[3] cmp $b->[3]} @temp;  
     }  
     if ($ENV{'form.sortedby'} eq "revdomain"){  
         @temp = sort  {$b->[3] cmp $a->[3]} @temp;  
     }  
     if ($ENV{'form.sortedby'} eq "subject"){  
         @temp = sort  {lc($a->[1]) cmp lc($b->[1])} @temp;  
     }  
     if ($ENV{'form.sortedby'} eq "revsubject"){  
         @temp = sort  {lc($b->[1]) cmp lc($a->[1])} @temp;  
     }  
     if ($ENV{'form.sortedby'} eq "status"){  
         @temp = sort  {$a->[4] cmp $b->[4]} @temp;  
     }  
     if ($ENV{'form.sortedby'} eq "revstatus"){  
         @temp = sort  {$b->[4] cmp $a->[4]} @temp;  
     }  
     foreach (@temp){      foreach (@temp){
  my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID)= @$_;   my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$origID)= @$_;
  if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {   if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {
Line 724  ENDDISHEADER Line 746  ENDDISHEADER
     } else {      } else {
  $r->print('<tr bgcolor="#99BBBB">');   $r->print('<tr bgcolor="#99BBBB">');
     }      }
     $r->print('<td><a href="/adm/email?display='.$origID.       $r->print('<td><a href="/adm/email?display='.$origID.$sqs. 
       '">Open</a></td><td><a href="/adm/email?markdel='.$origID.        '">'.&mt('Open').'</a></td><td><a href="/adm/email?markdel='.$origID.$sqs.
       '">Delete</a><input type=checkbox name="delmark_'.$origID.'"></td>'.        '">'.&mt('Delete').'</a><input type=checkbox name="delmark_'.$origID.'"></td>'.
       '<td>'.localtime($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>');
  }   }
     }         }   
     $r->print('</table><p>'.      $r->print('</table><p>'.
               '<a href="javascript:checkall()">Check All</a>&nbsp;'.                '<a href="javascript:checkall()">'.&mt('Check All').'</a>&nbsp;'.
               '<a href="javascript:uncheckall()">Uncheck All</a><p>'.                '<a href="javascript:uncheckall()">'.&mt('Uncheck All').'</a><p>'.
               '<input type=submit name="markeddel" value="Delete Checked">'.        '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />'.
                 '<input type=submit name="markeddel" value="'.&mt('Delete Checked').'">'.
               '</form></body></html>');                '</form></body></html>');
 }  }
   
Line 747  sub compout { Line 770  sub compout {
       my $dispcrit='';        my $dispcrit='';
     my $dissub='';      my $dissub='';
     my $dismsg='';      my $dismsg='';
     my $func='Send New';      my $func=&mt('Send New');
       if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {      my %lt=&Apache::lonlocal::texthash('us' => 'Username',
          'do' => 'Domain',
          'ad' => 'Additional Recipients',
          'sb' => 'Subject',
          'ca' => 'Cancel',
          'ma' => 'Mail');
   
       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> Send as critical message ' . $crithelp .    '<input type="checkbox" name="critmsg"> '.&mt('Send as critical message').' ' . $crithelp . 
  '<br>'.   '<br>'.
  '<input type=checkbox name=sendbck> Send as critical message ' .   '<input type="checkbox" name="sendbck"> '.&mt('Send as critical message').'  ' .
  ' and return receipt' . $crithelp . '<p>';   &mt('and return receipt') . $crithelp . '<p>';
       }        }
     if ($forwarding) {      if ($forwarding) {
        $dispcrit.='<input type=hidden name=forwid value="'.         $dispcrit.='<input type="hidden" name="forwid" value="'.
    $forwarding.'">';     $forwarding.'">';
        $func='Forward';         $func=&mt('Forward');
       my %message=&Apache::lonnet::get('nohist_email',[$forwarding]);        my %message=&Apache::lonnet::get('nohist_email',[$forwarding]);
       my %content=&unpackagemsg($message{$forwarding});        my %content=&unpackagemsg($message{$forwarding});
   
        $dissub='Forwarding: '.$content{'subject'};         $dissub=&mt('Forwarding').': '.$content{'subject'};
        $dismsg='Forwarded message from '.         $dismsg=&mt('Forwarded message from').' '.
    $content{'sendername'}.' at '.$content{'senderdomain'};     $content{'sendername'}.' '.&mt('at').' '.$content{'senderdomain'};
     }      }
     my $defdom=$ENV{'user.domain'};      my $defdom=$ENV{'user.domain'};
     if ($ENV{'form.recdom'}) { $defdom=$ENV{'form.recdom'}; }      if ($ENV{'form.recdom'}) { $defdom=$ENV{'form.recdom'}; }
Line 780  sub compout { Line 810  sub compout {
     ('compemail','recuname','recdomain');      ('compemail','recuname','recdomain');
        $r->print(<<"ENDREC");         $r->print(<<"ENDREC");
 <table>  <table>
 <tr><td>Username:</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>Domain:</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>Additional Recipients<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>Subject:</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="10" wrap="hard">$dismsg
 </textarea><p>  </textarea></p><br />
 $dispcrit  $dispcrit
 <input type=submit value="$func Mail">  <input type="submit" name="send" value="$func $lt{'ma'}" />
   <input type="submit" name="cancel" value="$lt{'ca'}" />
 ENDCOMP  ENDCOMP
     } else { # $broadcast is 'upload'      } else { # $broadcast is 'upload'
  $r->print(<<ENDUPLOAD);   $r->print(<<ENDUPLOAD);
Line 850  sub disfacetoface { Line 881  sub disfacetoface {
         next if ($content{'senderdomain'} eq '');          next if ($content{'senderdomain'} eq '');
         $content{'message'}=~s/\n/\<br\>/g;          $content{'message'}=~s/\n/\<br\>/g;
         if ($content{'subject'}=~/^Record/) {          if ($content{'subject'}=~/^Record/) {
     $result.='<h3>Record</h3>';      $result.='<h3>'.&mt('Record').'</h3>';
         } else {          } else {
             $result.='<h3>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>Subject: '.$content{'subject'}.'</b><br />'.
  $content{'message'};   $content{'message'};
         }          }
         $result.='By: <b>'.          $result.=&mt('By').': <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'}.'@'.
Line 944  sub handler { Line 975  sub handler {
   
 # ----------------------------------------------------------- Set document type  # ----------------------------------------------------------- Set document type
   
   $r->content_type('text/html');    &Apache::loncommon::content_type($r,'text/html');
   $r->send_http_header;    $r->send_http_header;
   
   return OK if $r->header_only;    return OK if $r->header_only;
Line 954  sub handler { Line 985  sub handler {
         ['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']);           'recordftf','sortedby']);
       $sqs='&sortedby='.$ENV{'form.sortedby'};
 # ------------------------------------------------------ They checked for email  # ------------------------------------------------------ They checked for email
   &Apache::lonnet::put('email_status',{'recnewemail'=>0});    &Apache::lonnet::put('email_status',{'recnewemail'=>0});
 # --------------------------------------------------------------- Render Output  # --------------------------------------------------------------- Render Output
Line 968  sub handler { Line 999  sub handler {
       &statuschange($msgid,'read');        &statuschange($msgid,'read');
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);        my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
       my %content=&unpackagemsg($message{$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('<html><head><title>EMail and Messaging</title>');
       if (defined($content{'baseurl'})) {        if (defined($content{'baseurl'})) {
   $r->print("<base href=\"http://$ENV{'SERVER_NAME'}/$content{'baseurl'}\" />");    $r->print("<base href=\"http://$ENV{'SERVER_NAME'}/$content{'baseurl'}\" />");
Line 975  sub handler { Line 1020  sub handler {
       $r->print(&Apache::loncommon::studentbrowser_javascript().        $r->print(&Apache::loncommon::studentbrowser_javascript().
  '</head>'.   '</head>'.
  &Apache::loncommon::bodytag('EMail and Messages'));   &Apache::loncommon::bodytag('EMail and Messages'));
       $r->print('<b>Subject:</b> '.$content{'subject'}.        $r->print('<b>'.&mt('Subject').':</b> '.$content{'subject'}.
              '<br><b>From:</b> '.               '<br><b>'.&mt('From').':</b> '.
 &Apache::loncommon::aboutmewrapper(  &Apache::loncommon::aboutmewrapper(
 &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),  &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),
 $content{'sendername'},$content{'senderdomain'}).' ('.  $content{'sendername'},$content{'senderdomain'}).' ('.
                                  $content{'sendername'}.' at '.                                   $content{'sendername'}.' at '.
                                  $content{'senderdomain'}.') '.                                   $content{'senderdomain'}.') '.
              '<br><b>Time:</b> '.$content{'time'}.'<p>'.               '<br><b>'.&mt('Time').':</b> '.$content{'time'}.'<p>'.
              '<table border=2><tr bgcolor="#FFFFAA"><td>Functions:</td>'.               '<table border=2><tr bgcolor="#FFFFAA"><td>'.&mt('Functions').':</td>'.
            '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).             '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).$sqs.
              '"><b>Reply</b></a></td>'.               '"><b>'.&mt('Reply').'</b></a></td>'.
            '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).             '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).$sqs.
              '"><b>Forward</b></a></td>'.               '"><b>'.&mt('Forward').'</b></a></td>'.
         '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).          '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).$sqs.
              '"><b>Mark Unread</b></a></td>'.               '"><b>'.&mt('Mark Unread').'</b></a></td>'.
         '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).          '<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"><b>Display all Messages</b></a></td>'.   '<td><a href="/adm/email?sortedby='.$ENV{'form.sortedby'}.
              '</tr></table><p><pre>'.   '"><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'}).               &Apache::lontexconvert::msgtexconverted($content{'message'}).
              '</pre><hr>'.$content{'citation'});               '</pre><hr>'.$content{'citation'});
   } elsif ($ENV{'form.replyto'}) {    } elsif ($ENV{'form.replyto'}) {
       &comprep($r,$ENV{'form.replyto'});        &comprep($r,$ENV{'form.replyto'});
   } elsif ($ENV{'form.sendreply'}) {    } elsif ($ENV{'form.sendreply'}) {
       my $msgid=$ENV{'form.sendreply'};        if ($ENV{'form.send'}) {
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);    my $msgid=$ENV{'form.sendreply'};
       my %content=&unpackagemsg($message{$msgid},1);    my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
       &statuschange($msgid,'replied');    my %content=&unpackagemsg($message{$msgid},1);
       if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&     &statuschange($msgid,'replied');
           (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {    if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) && 
          $r->print('Sending critical: '.        (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
                 &user_crit_msg($content{'sendername'},        $r->print(&mt('Sending critical message').': '.
                                  $content{'senderdomain'},   &user_crit_msg($content{'sendername'},
                                  &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),         $content{'senderdomain'},
                                  &Apache::lonfeedback::clear_out_html($ENV{'form.message'}),         &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
                                  $ENV{'form.sendbck'}));         &Apache::lonfeedback::clear_out_html($ENV{'form.message'}),
       } else {         $ENV{'form.sendbck'}));
          $r->print('Sending: '.&user_normal_msg($content{'sendername'},    } else {
                                  $content{'senderdomain'},        $r->print(&mt('Sending').': '.&user_normal_msg($content{'sendername'},
                                  &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),       $content{'senderdomain'},
                                  &Apache::lonfeedback::clear_out_html($ENV{'form.message'})));       &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
        &Apache::lonfeedback::clear_out_html($ENV{'form.message'})));
     }
       }        }
       if ($ENV{'form.displayedcrit'}) {        if ($ENV{'form.displayedcrit'}) {
           &discrit($r);            &discrit($r);
Line 1062  $content{'sendername'},$content{'senderd Line 1118  $content{'sendername'},$content{'senderd
   } 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 %content=();        my $sendstatus='';
       undef %content;        if ($ENV{'form.send'}) {
       if ($ENV{'form.forwid'}) {    my %content=();
         my $msgid=$ENV{'form.forwid'};    undef %content;
         my %message=&Apache::lonnet::get('nohist_email',[$msgid]);    if ($ENV{'form.forwid'}) {
         %content=&unpackagemsg($message{$msgid},1);        my $msgid=$ENV{'form.forwid'};
         &statuschange($msgid,'forwarded');        my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
         $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".        %content=&unpackagemsg($message{$msgid},1);
                        $content{'message'};        &statuschange($msgid,'forwarded');
         $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".
     $content{'message'};
     }
     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{$_}; }    
         if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) && 
     (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
     $r->print(&mt('Sending critical message').' ...');
                     $sendstatus.=' '.&user_crit_msg($recuname,$recdomain,
      &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
      $msgtxt,
      $ENV{'form.sendbck'});
         } else {
     $r->print(&mt('Sending').' ...');
                     $sendstatus.=' '.&user_normal_msg($recuname,$recdomain,
                            &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
    $msgtxt,
    $content{'citation'});
         }
         $r->print('<br />');
     }
       }        }
       my %toaddr=();        if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {
       undef %toaddr;    if ($ENV{'form.displayedcrit'}) {
       if ($ENV{'form.sendmode'} eq 'group') {        &discrit($r);
           foreach (keys %ENV) {    } else {
       if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {        &disall($r);
   $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{$_}; }      
       if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&   
           (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {  
          $r->print('Sending critical: '.  
                 &user_crit_msg($recuname,$recdomain,  
                &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),  
                                  $msgtxt,  
                                  $ENV{'form.sendbck'}));  
       } else {        } else {
          $r->print('Sending: '.&user_normal_msg($recuname,$recdomain,    $r->print(
               &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),    '<h2><font color="red">'.&mt('Could not deliver message').'</font></h2>'.
                                  $msgtxt,    &mt('Please use the browser "Back" button and correct the recipient addresses')
                                  $content{'citation'}));      );
       }  
       $r->print('<br>');  
     }  
       if ($ENV{'form.displayedcrit'}) {  
           &discrit($r);  
       } else {  
   &disall($r);  
       }        }
   } else {    } else {
       &disall($r);        &disall($r);

Removed from v.1.64  
changed lines
  Added in v.1.72


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