Diff for /loncom/interface/lonmsg.pm between versions 1.66 and 1.87

version 1.66, 2003/10/04 20:49:40 version 1.87, 2004/03/01 01:19:51
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 #  
 # (Routines to control the menu  
 #  
 # (TeX Conversion Module  
 #  
 # 05/29/00,05/30 Gerd Kortemeyer)  
 #  
 # 10/05 Gerd Kortemeyer)  
 #  
 # 10/19,10/20,10/30,  
 # 02/06/01 Gerd Kortemeyer  
 # 07/27 Guy Albertelli  
 # 07/27,07/28,07/30,08/03,08/06,08/08,08/09,08/10,8/13,8/15,  
 # 10/1,11/5 Gerd Kortemeyer  
 # YEAR=2002  
 # 1/1,3/18 Gerd Kortemeyer  
 #  
 package Apache::lonmsg;  package Apache::lonmsg;
   
 =pod  =pod
Line 115  use Apache::loncommon(); Line 100  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  # Querystring component with sorting type
 my $sqs;  my $sqs;
Line 143  sub packagemsg { Line 129  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 153  sub packagemsg { Line 139  sub packagemsg {
            '<browsermathml>'.$ENV{'browser.mathml'}.'</browsermathml>'.             '<browsermathml>'.$ENV{'browser.mathml'}.'</browsermathml>'.
    '<browserraw>'.$ENV{'HTTP_USER_AGENT'}.'</browserraw>'.     '<browserraw>'.$ENV{'HTTP_USER_AGENT'}.'</browserraw>'.
    '<courseid>'.$ENV{'request.course.id'}.'</courseid>'.     '<courseid>'.$ENV{'request.course.id'}.'</courseid>'.
      '<coursesec>'.$ENV{'request.course.sec'}.'</coursesec>'.
    '<role>'.$ENV{'request.role'}.'</role>'.     '<role>'.$ENV{'request.role'}.'</role>'.
    '<resource>'.$ENV{'request.filename'}.'</resource>'.     '<resource>'.$ENV{'request.filename'}.'</resource>'.
            '<msgid>'.$msgid.'</msgid>'.             '<msgid>'.$msgid.'</msgid>'.
Line 186  sub unpackagemsg { Line 173  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 212  sub unpackmsgid { Line 199  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 282  sub author_res_msg { Line 270  sub author_res_msg {
     return 'no_host';      return 'no_host';
 }  }
   
   # =========================================== Retrieve author resource messages
   
   sub retrieve_author_res_msg {
       my $url=shift;
       $url=&Apache::lonnet::declutter($url);
       my ($domain,$author)=($url=~/^(\w+)\/(\w+)\//);
       my %errormsgs=&Apache::lonnet::dump('nohist_res_msgs',$domain,$author);
       my $msgs='';
       foreach (keys %errormsgs) {
    if ($_=~/^\Q$url\E\_\d+$/) {
       my %content=&unpackagemsg($errormsgs{$_});
       $msgs.='<p><img src="/adm/lonMisc/bomb.gif" /><b>'.
    $content{'time'}.'</b>: '.$content{'message'}.
    '<br /></p>';
    }
       } 
       return $msgs;     
   }
   
   
   # =============================== Delete all author messages related to one URL
   
   sub del_url_author_res_msg {
       my $url=shift;
       $url=&Apache::lonnet::declutter($url);
       my ($domain,$author)=($url=~/^(\w+)\/(\w+)\//);
       my @delmsgs=();
       foreach (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
    if ($_=~/^\Q$url\E\_\d+$/) {
       push (@delmsgs,$_);
    }
       }
       return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author);
   }
   
   # ================= Return hash with URLs for which there is a resource message
   
   sub all_url_author_res_msg {
       my ($author,$domain)=@_;
       my %returnhash=();
       foreach (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
    $_=~/^(.+)\_\d+/;
    $returnhash{$1}=1;
       }
       return %returnhash;
   }
   
 # ================================================== Critical message to a user  # ================================================== Critical message to a user
   
 sub user_crit_msg_raw {  sub user_crit_msg_raw {
Line 362  sub user_crit_received { Line 397  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'}.' '.&mt('at').' '.$ENV{'user.domain'}.', '.$contents{'subject'},
                      '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 469  sub discourse { Line 504  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 500  sub discourse { Line 538  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 545  ENDDISHEADER Line 583  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 554  sub discrit { Line 592  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><small>'.
             '<input type=submit name="rec_'.$_.'" value="Confirm Receipt">'.  &mt('You have to confirm that you received this message. After confirmation, this message will be moved to your regular inbox').
               '</small><br />'.
               '<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 592  sub comprep { Line 632  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
 }  }
Line 688  sub disall { Line 735  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 @temp=sortedmessages();      my @temp=sortedmessages();
Line 735  ENDDISHEADER Line 782  ENDDISHEADER
  $r->print('<tr bgcolor="#99BBBB">');   $r->print('<tr bgcolor="#99BBBB">');
     }      }
     $r->print('<td><a href="/adm/email?display='.$origID.$sqs.       $r->print('<td><a href="/adm/email?display='.$origID.$sqs. 
       '">Open</a></td><td><a href="/adm/email?markdel='.$origID.$sqs.        '">'.&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>'.&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 744  ENDDISHEADER Line 791  ENDDISHEADER
  }   }
     }         }   
     $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="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />'.        '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />'.
               '<input type=submit name="markeddel" value="Delete Checked">'.                '<input type=submit name="markeddel" value="'.&mt('Delete Checked').'">'.
               '</form></body></html>');                '</form></body></html>');
 }  }
   
Line 758  sub compout { Line 805  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 791  sub compout { Line 845  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);
 <input type=hidden name=sendmode value=upload>  <input type=hidden name=sendmode value=upload>
   <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>
Line 861  sub disfacetoface { Line 917  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 954  sub handler { Line 1010  sub handler {
     my $r=shift;      my $r=shift;
   
 # ----------------------------------------------------------- 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;
       
 # --------------------------- Get query string for limited number of parameters  # --------------------------- Get query string for limited number of parameters
     &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',
Line 967  sub handler { Line 1023  sub handler {
          'recordftf','sortedby']);           'recordftf','sortedby']);
     $sqs='&sortedby='.$ENV{'form.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
   if (!$ENV{'form.display'}) {      if (!$ENV{'form.display'}) {
       $r->print('<html><head><title>EMail and Messaging</title>'.   $r->print('<html><head><title>EMail and Messaging</title>'.
  &Apache::loncommon::studentbrowser_javascript().'</head>'.    &Apache::loncommon::studentbrowser_javascript().'</head>'.
  &Apache::loncommon::bodytag('EMail and Messages'));    &Apache::loncommon::bodytag('EMail and Messages').
   }    &Apache::loncommon::help_open_faq(12).
   if ($ENV{'form.display'}) {    &Apache::loncommon::help_open_bug('Communication Tools'));
       my $msgid=$ENV{'form.display'};      }
       &statuschange($msgid,'read');      if ($ENV{'form.display'}) {
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);   my $msgid=$ENV{'form.display'};
       my %content=&unpackagemsg($message{$msgid});   &statuschange($msgid,'read');
    my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
    my %content=&unpackagemsg($message{$msgid});
 # info to generate "next" and "previous" buttons  # info to generate "next" and "previous" buttons
       my @messages=&sortedmessages();   my @messages=&sortedmessages();
       my $counter=0;   my $counter=0;
       $r->print('<pre>');   $r->print('<pre>');
       my $escmsgid=&Apache::lonnet::escape($msgid);   my $escmsgid=&Apache::lonnet::escape($msgid);
       foreach (@messages) {   foreach (@messages) {
    if ($_->[5] eq $escmsgid){      if ($_->[5] eq $escmsgid){
        last;   last;
    }      }
    $counter++;      $counter++;
       }   }
       $r->print('</pre>');   $r->print('</pre>');
       my $number_of_messages = scalar(@messages); #subtract 1 for last index   my $number_of_messages = scalar(@messages); #subtract 1 for last index
 # start output  # 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'}\" />");
       }   }
       $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'}.    &Apache::loncommon::help_open_faq(12).
              '<br><b>From:</b> '.    &Apache::loncommon::help_open_bug('Communication Tools'));
 &Apache::loncommon::aboutmewrapper(   my %courseinfo=&Apache::lonnet::coursedescription($content{'courseid'});
 &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),  
 $content{'sendername'},$content{'senderdomain'}).' ('.   $r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}.
                                  $content{'sendername'}.' at '.    '<br /><b>'.&mt('From').':</b> '.
                                  $content{'senderdomain'}.') '.    &Apache::loncommon::aboutmewrapper(
              '<br><b>Time:</b> '.$content{'time'}.'<p>'.       &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),
              '<table border=2><tr bgcolor="#FFFFAA"><td>Functions:</td>'.       $content{'sendername'},$content{'senderdomain'}).' ('.
            '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).$sqs.    $content{'sendername'}.' at '.
              '"><b>Reply</b></a></td>'.    $content{'senderdomain'}.') '.
            '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).$sqs.    ($content{'courseid'}?'<br /><b>'.&mt('Course').':</b> '.$courseinfo{'description'}.
              '"><b>Forward</b></a></td>'.     ($content{'coursesec'}?' ('.&mt('Group/Section').': '.$content{'coursesec'}.')':''):'').
         '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).$sqs.    '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.'<p>'.
              '"><b>Mark Unread</b></a></td>'.    '<table border=2><tr bgcolor="#FFFFAA"><td>'.&mt('Functions').':</td>'.
         '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.    '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).$sqs.
              '"><b>Delete</b></a></td>'.    '"><b>'.&mt('Reply').'</b></a></td>'.
  '<td><a href="/adm/email?sortedby='.$ENV{'form.sortedby'}.    '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).$sqs.
  '"><b>Display all Messages</b></a></td>');    '"><b>'.&mt('Forward').'</b></a></td>'.
       if ($counter > 0){    '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).$sqs.
    $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.    '"><b>'.&mt('Mark Unread').'</b></a></td>'.
            '"><b>Previous</b></a></td>');    '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.
        }    '"><b>Delete</b></a></td>'.
        if ($counter < $number_of_messages - 1){    '<td><a href="/adm/email?sortedby='.$ENV{'form.sortedby'}.
    $r->print('<td><a href="/adm/email?display='.$messages[$counter+1]->[5].$sqs.    '"><b>'.&mt('Display all Messages').'</b></a></td>');
            '"><b>Next</b></a></td>');   if ($counter > 0){
        }      $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.
        $r->print('</tr></table><p><pre>'.        '"><b>'.&mt('Previous').'</b></a></td>');
              &Apache::lontexconvert::msgtexconverted($content{'message'}).   }
              '</pre><hr>'.$content{'citation'});   if ($counter < $number_of_messages - 1){
   } elsif ($ENV{'form.replyto'}) {      $r->print('<td><a href="/adm/email?display='.$messages[$counter+1]->[5].$sqs.
       &comprep($r,$ENV{'form.replyto'});        '"><b>'.&mt('Next').'</b></a></td>');
   } elsif ($ENV{'form.sendreply'}) {   }
       my $msgid=$ENV{'form.sendreply'};   $r->print('</tr></table><p><pre>'.
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);    &Apache::lontexconvert::msgtexconverted($content{'message'},1).
       my %content=&unpackagemsg($message{$msgid},1);    '</pre><hr>'.$content{'citation'});
       &statuschange($msgid,'replied');      } elsif ($ENV{'form.replyto'}) {
       if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&    &comprep($r,$ENV{'form.replyto'});
           (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {      } elsif ($ENV{'form.sendreply'}) {
          $r->print('Sending critical: '.   if ($ENV{'form.send'}) {
                 &user_crit_msg($content{'sendername'},      my $msgid=$ENV{'form.sendreply'};
                                  $content{'senderdomain'},      my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
                                  &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),      my %content=&unpackagemsg($message{$msgid},1);
                                  &Apache::lonfeedback::clear_out_html($ENV{'form.message'}),      &statuschange($msgid,'replied');
                                  $ENV{'form.sendbck'}));      if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) && 
       } else {   (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
          $r->print('Sending: '.&user_normal_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'}),
       }   &Apache::lonfeedback::clear_out_html($ENV{'form.message'}),
       if ($ENV{'form.displayedcrit'}) {   $ENV{'form.sendbck'}));
           &discrit($r);      } else {
       } else {   $r->print(&mt('Sending').': '.&user_normal_msg($content{'sendername'},
   &disall($r);         $content{'senderdomain'},
       }         &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
   } elsif ($ENV{'form.confirm'}) {         &Apache::lonfeedback::clear_out_html($ENV{'form.message'})));
       foreach (keys %ENV) {      }
           if ($_=~/^form\.rec\_(.*)$/) {   }
       $r->print('<b>Confirming Receipt:</b> '.   if ($ENV{'form.displayedcrit'}) {
                         &user_crit_received($1).'<br>');      &discrit($r);
           }   } else {
           if ($_=~/^form\.reprec\_(.*)$/) {      &disall($r);
               my $msgid=$1;   }
       $r->print('<b>Confirming Receipt:</b> '.      } elsif ($ENV{'form.confirm'}) {
                         &user_crit_received($msgid).'<br>');   foreach (keys %ENV) {
               &comprep($r,$msgid);      if ($_=~/^form\.rec\_(.*)$/) {
           }   $r->print('<b>Confirming Receipt:</b> '.
       }    &user_crit_received($1).'<br>');
       &discrit($r);      }
   } elsif ($ENV{'form.critical'}) {      if ($_=~/^form\.reprec\_(.*)$/) {
       &discrit($r);   my $msgid=$1;
   } elsif ($ENV{'form.forward'}) {   $r->print('<b>Confirming Receipt:</b> '.
       &compout($r,$ENV{'form.forward'});    &user_crit_received($msgid).'<br>');
   } elsif ($ENV{'form.markread'}) {   &comprep($r,$msgid);
   } elsif ($ENV{'form.markdel'}) {      }
       &statuschange($ENV{'form.markdel'},'deleted');   }
       &disall($r);   &discrit($r);
   } elsif ($ENV{'form.markeddel'}) {      } elsif ($ENV{'form.critical'}) {
       my $total=0;   &discrit($r);
       foreach (keys %ENV) {      } elsif ($ENV{'form.forward'}) {
           if ($_=~/^form\.delmark_(.*)$/) {   &compout($r,$ENV{'form.forward'});
       &statuschange(&Apache::lonnet::unescape($1),'deleted');      } elsif ($ENV{'form.markread'}) {
               $total++;      } elsif ($ENV{'form.markdel'}) {
           }   &statuschange($ENV{'form.markdel'},'deleted');
       }   &disall($r);
       $r->print('Deleted '.$total.' message(s)<p>');      } elsif ($ENV{'form.markeddel'}) {
       &disall($r);   my $total=0;
   } elsif ($ENV{'form.markunread'}) {   foreach (keys %ENV) {
       &statuschange($ENV{'form.markunread'},'new');      if ($_=~/^form\.delmark_(.*)$/) {
       &disall($r);   &statuschange(&Apache::lonnet::unescape($1),'deleted');
   } elsif ($ENV{'form.compose'}) {   $total++;
       &compout($r,'',$ENV{'form.compose'});      }
   } elsif ($ENV{'form.recordftf'}) {   }
       &facetoface($r,$ENV{'form.recordftf'});   $r->print('Deleted '.$total.' message(s)<p>');
   } elsif ($ENV{'form.sendmail'}) {   &disall($r);
       my %content=();      } elsif ($ENV{'form.markunread'}) {
       undef %content;   &statuschange($ENV{'form.markunread'},'new');
       if ($ENV{'form.forwid'}) {   &disall($r);
         my $msgid=$ENV{'form.forwid'};      } elsif ($ENV{'form.compose'}) {
         my %message=&Apache::lonnet::get('nohist_email',[$msgid]);   &compout($r,'',$ENV{'form.compose'});
         %content=&unpackagemsg($message{$msgid},1);      } elsif ($ENV{'form.recordftf'}) {
         &statuschange($msgid,'forwarded');   &facetoface($r,$ENV{'form.recordftf'});
         $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".      } elsif ($ENV{'form.sendmail'}) {
                        $content{'message'};   my $sendstatus='';
       }   if ($ENV{'form.send'}) {
       my %toaddr=();      my %content=();
       undef %toaddr;      undef %content;
       if ($ENV{'form.sendmode'} eq 'group') {      if ($ENV{'form.forwid'}) {
           foreach (keys %ENV) {   my $msgid=$ENV{'form.forwid'};
       if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {   my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
   $toaddr{$1}='';   %content=&unpackagemsg($message{$msgid},1);
               }   &statuschange($msgid,'forwarded');
           }   $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".
       } elsif ($ENV{'form.sendmode'} eq 'upload') {      $content{'message'};
           foreach (split(/[\n\r\f]+/,$ENV{'form.upfile'})) {      }
               my ($rec,$txt)=split(/\s*\:\s*/,$_);      my %toaddr=();
               if ($txt) {      undef %toaddr;
   $rec=~s/\@/\:/;      if ($ENV{'form.sendmode'} eq 'group') {
                   $toaddr{$rec}.=$txt."\n";   foreach (keys %ENV) {
               }      if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {
           }   $toaddr{$1}='';
       } else {      }
   $toaddr{$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}}='';   }
       }      } elsif ($ENV{'form.sendmode'} eq 'upload') {
       if ($ENV{'form.additionalrec'}) {   foreach (split(/[\n\r\f]+/,$ENV{'form.upfile'})) {
   foreach (split(/\,/,$ENV{'form.additionalrec'})) {      my ($rec,$txt)=split(/\s*\:\s*/,$_);
               my ($auname,$audom)=split(/\@/,$_);      if ($txt) {
               $toaddr{$auname.':'.$audom}='';   $rec=~s/\@/\:/;
           }   $toaddr{$rec}.=$txt."\n";
       }      }
     foreach (keys %toaddr) {   }
       my ($recuname,$recdomain)=split(/\:/,$_);      } else {
       my $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});   $toaddr{$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}}='';
       if ($toaddr{$_}) { $msgtxt.='<hr>'.$toaddr{$_}; }          }
       if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&       if ($ENV{'form.additionalrec'}) {
           (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {   foreach (split(/\,/,$ENV{'form.additionalrec'})) {
          $r->print('Sending critical: '.      my ($auname,$audom)=split(/\@/,$_);
                 &user_crit_msg($recuname,$recdomain,      $toaddr{$auname.':'.$audom}='';
                &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),   }
                                  $msgtxt,      }
                                  $ENV{'form.sendbck'}));      foreach (keys %toaddr) {
       } else {   my ($recuname,$recdomain)=split(/\:/,$_);
          $r->print('Sending: '.&user_normal_msg($recuname,$recdomain,   my $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});
               &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),   if ($toaddr{$_}) { $msgtxt.='<hr>'.$toaddr{$_}; }    
                                  $msgtxt,   if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) && 
                                  $content{'citation'}));      (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
       }      $r->print(&mt('Sending critical message').' ...');
       $r->print('<br>');      $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 />');
       }
    }
    if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {
       $r->print('<br /><font color="green">'.&mt('Completed.').'</font>');
       if ($ENV{'form.displayedcrit'}) {
    &discrit($r);
       } else {
    &disall($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')
         );
    }
       } else {
    &disall($r);
     }      }
       if ($ENV{'form.displayedcrit'}) {      $r->print('</body></html>');
           &discrit($r);      return OK;
       } else {  
   &disall($r);  
       }  
   } else {  
       &disall($r);  
   }  
   $r->print('</body></html>');  
   return OK;  
   
 }  }
 # ================================================= Main program, reset counter  # ================================================= Main program, reset counter
   

Removed from v.1.66  
changed lines
  Added in v.1.87


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