Diff for /loncom/interface/lonmsg.pm between versions 1.5 and 1.42

version 1.5, 2000/10/31 22:31:37 version 1.42, 2002/10/25 13:55:45
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 #  
 # Routines for messaging  # Routines for messaging
 #  #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
   #
 # (Routines to control the menu  # (Routines to control the menu
 #  #
 # (TeX Conversion Module  # (TeX Conversion Module
Line 10 Line 34
 #  #
 # 10/05 Gerd Kortemeyer)  # 10/05 Gerd Kortemeyer)
 #  #
 # 10/19,10/20,10/30 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;
   
 use strict;  use strict;
Line 19  use Apache::lonnet(); Line 49  use Apache::lonnet();
 use vars qw($msgcount);  use vars qw($msgcount);
 use HTML::TokeParser;  use HTML::TokeParser;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
   use Apache::loncommon;
   use Apache::lontexconvert;
   
 # ===================================================================== Package  # ===================================================================== Package
   
 sub packagemsg {  sub packagemsg {
     my ($subject,$message)=@_;      my ($subject,$message,$citation)=@_;
     $message=~s/\</\&lt\;/g;      $message=~s/\</\&lt\;/g;
     $message=~s/\>/\&gt\;/g;      $message=~s/\>/\&gt\;/g;
       $citation=~s/\</\&lt\;/g;
       $citation=~s/\>/\&gt\;/g;
     $subject=~s/\</\&lt\;/g;      $subject=~s/\</\&lt\;/g;
     $subject=~s/\>/\&gt\;/g;      $subject=~s/\>/\&gt\;/g;
     my $now=time;      my $now=time;
     $msgcount++;      $msgcount++;
     my $msgid=$now.'_'.$ENV{'user.name'}.'_'.      my $partsubj=$subject;
            $ENV{'user.domain'}.'_'.$msgcount.'_'.$$;      $partsubj=&Apache::lonnet::escape($partsubj);
       my $msgid=&Apache::lonnet::escape(
              $now.':'.$partsubj.':'.$ENV{'user.name'}.':'.
              $ENV{'user.domain'}.':'.$msgcount.':'.$$);
     return $msgid,      return $msgid,
            '<sendername>'.$ENV{'user.name'}.'</sendername>'.             '<sendername>'.$ENV{'user.name'}.'</sendername>'.
            '<senderdomain>'.$ENV{'user.domain'}.'</senderdomain>'.             '<senderdomain>'.$ENV{'user.domain'}.'</senderdomain>'.
Line 49  sub packagemsg { Line 86  sub packagemsg {
    '<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>'.
    '<message>'.$message.'</message>';     '<message>'.$message.'</message>'.
      '<citation>'.$citation.'</citation>';
 }  }
   
 # ================================================== Unpack message into a hash  # ================================================== Unpack message into a hash
Line 69  sub unpackagemsg { Line 107  sub unpackagemsg {
     return %content;      return %content;
 }  }
   
   # ======================================================= Get info out of msgid
   
   sub unpackmsgid {
       my $msgid=&Apache::lonnet::unescape(shift);
       my ($sendtime,$shortsubj,$fromname,$fromdomain)=split(/\:/,
                             &Apache::lonnet::unescape($msgid));
       my %status=&Apache::lonnet::get('email_status',[$msgid]);
       if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
       unless ($status{$msgid}) { $status{$msgid}='new'; }
       return ($sendtime,$shortsubj,$fromname,$fromdomain,$status{$msgid});
   } 
   
   # ============================================================= Check for email
   
   sub newmail {
       if ((time-$ENV{'user.mailcheck.time'})>300) {
           my %what=&Apache::lonnet::get('email_status',['recnewemail']);
           &Apache::lonnet::appenv('user.mailcheck.time'=>time);
           if ($what{'recnewemail'}>0) { return 1; }
       }
       return 0;
   }
   
 # =============================== Automated message to the author of a resource  # =============================== Automated message to the author of a resource
   
 sub author_res_msg {  sub author_res_msg {
Line 91  sub author_res_msg { Line 152  sub author_res_msg {
   
 # ================================================== Critical message to a user  # ================================================== Critical message to a user
   
 sub user_crit_msg {  sub user_crit_msg_raw {
     my ($user,$domain,$subject,$message)=@_;      my ($user,$domain,$subject,$message,$sendback)=@_;
 # Check if allowed missing  # Check if allowed missing
     my $status='';      my $status='';
     my $msgid='undefined';      my $msgid='undefined';
     unless (($message)&&($user)&&($domain)) { $status='empty'; };      unless (($message)&&($user)&&($domain)) { $status='empty'; };
     my $homeserver=&Apache::lonnet::homeserver($user,$domain);      my $homeserver=&Apache::lonnet::homeserver($user,$domain);
     if ($homeserver ne 'no_host') {      if ($homeserver ne 'no_host') {
        my $msgid;  
        ($msgid,$message)=&packagemsg($subject,$message);         ($msgid,$message)=&packagemsg($subject,$message);
          if ($sendback) { $message.='<sendback>true</sendback>'; }
        $status=&Apache::lonnet::critical(         $status=&Apache::lonnet::critical(
            'put:'.$domain.':'.$user.':critical:'.             'put:'.$domain.':'.$user.':critical:'.
            &Apache::lonnet::escape($msgid).'='.             &Apache::lonnet::escape($msgid).'='.
Line 118  sub user_crit_msg { Line 179  sub user_crit_msg {
     return $status;      return $status;
 }  }
   
   # New routine that respects "forward" and calls old routine
   
   sub user_crit_msg {
       my ($user,$domain,$subject,$message,$sendback)=@_;
       my $status='';
       my %userenv = &Apache::lonnet::get('environment',['msgforward'],
                                          $domain,$user);
       my $msgforward=$userenv{'msgforward'};
       if ($msgforward) {
          foreach (split(/\,/,$msgforward)) {
    my ($forwuser,$forwdomain)=split(/\:/,$_);
            $status.=
      &user_crit_msg_raw($forwuser,$forwdomain,$subject,$message,
                   $sendback).' ';
          }
       } else { 
    $status=&user_crit_msg_raw($user,$domain,$subject,$message,$sendback);
       }
       return $status;
   }
   
 # =================================================== Critical message received  # =================================================== Critical message received
   
 sub user_crit_received {  sub user_crit_received {
     my $message=shift;      my $msgid=shift;
     my %contents=&unpackagemsg($message);      my %message=&Apache::lonnet::get('critical',[$msgid]);
     my $status='rec: '.      my %contents=&unpackagemsg($message{$msgid});
       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'},                       'Receipt: '.$ENV{'user.name'}.' at '.$ENV{'user.domain'},
                      'User '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}.                       'User '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}.
                      ' acknowledged receipt of message "'.                       ' acknowledged receipt of message'."\n".'   "'.
                      $contents{'subject'}.'" dated '.$contents{'time'}.".\n\n"                       $contents{'subject'}.'"'."\n".'dated '.
                      .'Message ID: '.$contents{'msgid'});                       $contents{'time'}.".\n"
                        ):'no msg req');
     $status.=' trans: '.      $status.=' trans: '.
      &Apache::lonnet::put('nohist_email',$contents{'msgid'} => $message);       &Apache::lonnet::put(
        'nohist_email',{$contents{'msgid'} => $message{$msgid}});
     $status.=' del: '.      $status.=' del: '.
      &Apache::lonnet::del('critical',$contents{'msgid'});       &Apache::lonnet::del('critical',[$contents{'msgid'}]);
     &Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'},      &Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'},
                          $ENV{'user.home'},'Received critical message '.                           $ENV{'user.home'},'Received critical message '.
                          $contents{'msgid'}.                           $contents{'msgid'}.
                          ', '.$status);                           ', '.$status);
       return $status;
 }  }
   
 # ======================================================== Normal communication  # ======================================================== Normal communication
   
 sub user_normal_msg {  sub user_normal_msg_raw {
     my ($user,$domain,$subject,$message)=@_;      my ($user,$domain,$subject,$message,$citation)=@_;
 # Check if allowed missing  # Check if allowed missing
     my $status='';      my $status='';
     my $msgid='undefined';      my $msgid='undefined';
     unless (($message)&&($user)&&($domain)) { $status='empty'; };      unless (($message)&&($user)&&($domain)) { $status='empty'; };
     my $homeserver=&Apache::lonnet::homeserver($user,$domain);      my $homeserver=&Apache::lonnet::homeserver($user,$domain);
     if ($homeserver ne 'no_host') {      if ($homeserver ne 'no_host') {
        my $msgid;         ($msgid,$message)=&packagemsg($subject,$message,$citation);
        ($msgid,$message)=&packagemsg($subject,$message);  
        $status=&Apache::lonnet::critical(         $status=&Apache::lonnet::critical(
            'put:'.$domain.':'.$user.':nohist_email:'.             'put:'.$domain.':'.$user.':nohist_email:'.
            &Apache::lonnet::escape($msgid).'='.             &Apache::lonnet::escape($msgid).'='.
            &Apache::lonnet::escape($message),$homeserver);             &Apache::lonnet::escape($message),$homeserver);
          &Apache::lonnet::put
                            ('email_status',{'recnewemail'=>time},$domain,$user);
     } else {      } else {
        $status='no_host';         $status='no_host';
     }      }
Line 165  sub user_normal_msg { Line 252  sub user_normal_msg {
     return $status;      return $status;
 }  }
   
   # New routine that respects "forward" and calls old routine
   
   sub user_normal_msg {
       my ($user,$domain,$subject,$message,$citation)=@_;
       my $status='';
       my %userenv = &Apache::lonnet::get('environment',['msgforward'],
                                          $domain,$user);
       my $msgforward=$userenv{'msgforward'};
       if ($msgforward) {
          foreach (split(/\,/,$msgforward)) {
    my ($forwuser,$forwdomain)=split(/\:/,$_);
            $status.=
     &user_normal_msg_raw($forwuser,$forwdomain,$subject,$message,
                                                                $citation).' ';
          }
       } else { 
    $status=
             &user_normal_msg_raw($user,$domain,$subject,$message,$citation);
       }
       return $status;
   }
   
   
   # =============================================================== Status Change
   
   sub statuschange {
       my ($msgid,$newstatus)=@_;
       my %status=&Apache::lonnet::get('email_status',[$msgid]);
       if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
       unless ($status{$msgid}) { $status{$msgid}='new'; }
       unless (($status{$msgid} eq 'replied') || 
               ($status{$msgid} eq 'forwarded')) {
    &Apache::lonnet::put('email_status',{$msgid => $newstatus});
       }
       if (($newstatus eq 'deleted') || ($newstatus eq 'new')) {
    &Apache::lonnet::put('email_status',{$msgid => $newstatus});
       }
   }
   
   # ======================================================= Display a course list
   
   sub discourse {
       my $r=shift;
       my %courselist=&Apache::lonnet::dump(
                      'classlist',
      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
      $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
       my $now=time;
       $r->print(<<ENDDISHEADER);
   <input type=hidden name=sendmode value=group>
   <script>
       function checkall() {
    for (i=0; i<document.forms.compemail.elements.length; i++) {
               if 
             (document.forms.compemail.elements[i].name.indexOf('send_to_')==0) {
         document.forms.compemail.elements[i].checked=true;
               }
           }
       }
   
       function checksec() {
    for (i=0; i<document.forms.compemail.elements.length; i++) {
               if 
             (document.forms.compemail.elements[i].name.indexOf
              ('send_to_&&&'+document.forms.compemail.chksec.value)==0) {
         document.forms.compemail.elements[i].checked=true;
               }
           }
       }
   
       function uncheckall() {
    for (i=0; i<document.forms.compemail.elements.length; i++) {
               if 
             (document.forms.compemail.elements[i].name.indexOf('send_to_')==0) {
         document.forms.compemail.elements[i].checked=false;
               }
           }
       }
   </script>
   <input type=button onClick="checkall()" value="Check for All">&nbsp;
   <input type=button onClick="checksec()" value="Check for Section/Group">
   <input type=text size=5 name=chksec>&nbsp;
   <input type=button onClick="uncheckall()" value="Check for None">
   <p>
   ENDDISHEADER
       foreach (sort keys %courselist) {
           my ($end,$start)=split(/\:/,$courselist{$_});
           my $active=1;
           if (($end) && ($now>$end)) { $active=0; }
           if ($active) {
              my ($sname,$sdom)=split(/\:/,$_);
              my %reply=&Apache::lonnet::get('environment',
                 ['firstname','middlename','lastname','generation'],
                 $sdom,$sname);
              my $section=&Apache::lonnet::usection
          ($sdom,$sname,$ENV{'request.course.id'});
              $r->print(
           '<br><input type=checkbox name="send_to_&&&'.$section.'&&&_'.$_.'"> '.
         $reply{'firstname'}.' '. 
                         $reply{'middlename'}.' '.
                         $reply{'lastname'}.' '.
                         $reply{'generation'}.
                         ' ('.$_.') '.$section);
           } 
       }
   }
   
   # ==================================================== Display Critical Message
   
   sub discrit {
       my $r=shift;
       my $header = '<h1><font color=red>Critical Messages</font></h1>'.
           '<form action=/adm/email method=post>'.
           '<input type=hidden name=confirm value=true>';
       my %what=&Apache::lonnet::dump('critical');
       my $result = '';
       foreach (sort keys %what) {
           my %content=&unpackagemsg($what{$_});
           next if ($content{'senderdomain'} eq '');
           $content{'message'}=~s/\n/\<br\>/g;
           $result.='<hr>From: <b>'.
   &Apache::loncommon::aboutmewrapper(
    &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('.
   $content{'sendername'}.'@'.
               $content{'senderdomain'}.') '.$content{'time'}.
               '<br>Subject: '.$content{'subject'}.
               '<br><blockquote>'.
                 &Apache::lontexconvert::msgtexconverted($content{'message'}).
               '</blockquote>'.
               '<input type=submit name="rec_'.$_.'" value="Confirm Receipt">'.
               '<input type=submit name="reprec_'.$_.'" '.
                     'value="Confirm Receipt and Reply">';
       }
       # Check to see if there were any messages.
       if ($result eq '') {
           $result = "<h2>You have no critical messages.</h2>";
       } else {
           $r->print($header);
       }
       $r->print($result);
       $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});
         my $quotemsg='> '.$content{'message'};
         $quotemsg=~s/\r/\n/g;
         $quotemsg=~s/\f/\n/g;
         $quotemsg=~s/\n+/\n\> /g;
         my $subject='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> Send as critical message ' . $crithelp . 
    '<br>'.
    '<input type=checkbox name=sendbck> Send as critical message ' .
    ' and return receipt' . $crithelp . '<p>';
         }
         $r->print(<<"ENDREPLY");
   <form action="/adm/email" method=post>
   <input type=hidden name=sendreply value="$msgid">
   Subject: <input type=text size=50 name=subject value="$subject"><p>
   <textarea name=message cols=84 rows=10 wrap=hard>
   $quotemsg
   </textarea><p>
   $dispcrit
   <input type=submit value="Send Reply">
   </form>
   ENDREPLY
   }
   
   # ======================================================== Display all messages
   
   sub disall {
       my $r=shift;
        $r->print(<<ENDDISHEADER);
   <script>
       function checkall() {
    for (i=0; i<document.forms.disall.elements.length; i++) {
               if 
             (document.forms.disall.elements[i].name.indexOf('delmark_')==0) {
         document.forms.disall.elements[i].checked=true;
               }
           }
       }
   
       function uncheckall() {
    for (i=0; i<document.forms.disall.elements.length; i++) {
               if 
             (document.forms.disall.elements[i].name.indexOf('delmark_')==0) {
         document.forms.disall.elements[i].checked=false;
               }
           }
       }
   </script>
   ENDDISHEADER
      $r->print(
    '<h1>Display All Messages</h1><form method=post name=disall '.
    'action="/adm/email">'.
        '<table border=2><tr><th colspan=2>&nbsp</th><th>Date</th>'.
        '<th>Username</th><th>Domain</th><th>Subject</th><th>Status</th></tr>');
       foreach (sort split(/\&/,&Apache::lonnet::reply('keys:'.
    $ENV{'user.domain'}.':'.
                                           $ENV{'user.name'}.':nohist_email',
                                           $ENV{'user.home'}))) {
           my ($sendtime,$shortsubj,$fromname,$fromdomain,$status)=
       &Apache::lonmsg::unpackmsgid($_);
    if (($status ne 'deleted') && defined($sendtime) && $sendtime!~/error/) {
       if ($status eq 'new') {
    $r->print('<tr bgcolor="#FFBB77">');
       } elsif ($status eq 'read') {
    $r->print('<tr bgcolor="#BBBB77">');
       } elsif ($status eq 'replied') {
    $r->print('<tr bgcolor="#AAAA88">');
       } else {
    $r->print('<tr bgcolor="#99BBBB">');
       }
       $r->print('<td><a href="/adm/email?display='.$_.
         '">Open</a></td><td><a href="/adm/email?markdel='.$_.
         '">Delete</a><input type=checkbox name="delmark_'.$_.'"></td>'.
         '<td>'.localtime($sendtime).'</td><td>'.
         $fromname.'</td><td>'.$fromdomain.'</td><td>'.
         &Apache::lonnet::unescape($shortsubj).'</td><td>'.
                         $status.'</td></tr>');
    }
       }
       $r->print('</table><p>'.
                 '<a href="javascript:checkall()">Check All</a>&nbsp;'.
                 '<a href="javascript:uncheckall()">Uncheck All</a><p>'.
                 '<input type=submit name="markeddel" value="Delete Checked">'.
                 '</form></body></html>');
   }
   
   # ============================================================== Compose output
   
   sub compout {
       my ($r,$forwarding,$broadcast)=@_;
         my $dispcrit='';
       my $dissub='';
       my $dismsg='';
       my $func='Send New';
         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> Send as critical message ' . $crithelp . 
    '<br>'.
    '<input type=checkbox name=sendbck> Send as critical message ' .
    ' and return receipt' . $crithelp . '<p>';
         }
       if ($forwarding) {
          $dispcrit.='<input type=hidden name=forwid value="'.
      $forwarding.'">';
          $func='Forward';
         my %message=&Apache::lonnet::get('nohist_email',[$forwarding]);
         my %content=&unpackagemsg($message{$forwarding});
   
          $dissub='Forwarding: '.$content{'subject'};
          $dismsg='Forwarded message from '.
      $content{'sendername'}.' at '.$content{'senderdomain'};
       }
       my $defdom=$ENV{'user.domain'};
       if ($ENV{'form.recdom'}) { $defdom=$ENV{'form.recdom'}; }
         $r->print(
                   '<form action="/adm/email"  name="compemail" method="post"'.
                   ' enctype="multipart/form-data">'."\n".
                   '<input type="hidden" name="sendmail" value="on">'."\n".
                   '<table>');
       unless (($broadcast eq 'group') || ($broadcast eq 'upload')) {
           my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain');
   
          $r->print(<<"ENDREC");
   <table>
   <tr><td>Username:</td><td><input type=text size=12 name=recuname value="$ENV{'form.recname'}"></td></tr>
   <tr><td>Domain:</td>
   <td>$domform</td></tr>
   ENDREC
       }
       if ($broadcast ne 'upload') {
          $r->print(<<"ENDCOMP");
   <tr><td>Additional Recipients<br><tt>username\@domain,username\@domain, ...
   </tt></td><td>
   <input type=text size=50 name=additionalrec></td></tr>
   <tr><td>Subject:</td><td><input type=text size=50 name=subject value="$dissub">
   </td></tr></table>
   <textarea name=message cols=80 rows=10 wrap=hard>$dismsg
   </textarea><p>
   $dispcrit
   <input type=submit value="$func Mail">
   ENDCOMP
       } else { # $broadcast is 'upload'
    $r->print(<<ENDUPLOAD);
   <input type=hidden name=sendmode value=upload>
   <h3>Generate messages from a file</h3>
   <p>
   Subject: <input type=text size=50 name=subject>
   </p>
   <p>General message text<br />
   <textarea name=message cols=60 rows=10 wrap=hard>$dismsg
   </textarea></p>
   <p>
   The file format for the uploaded portion of the message is:
   <pre>
   username1\@domain1: text
   username2\@domain2: text
   username3\@domain1: text
   </pre>
   </p>
   <p>
   The messages will be assembled from all lines with the respective 
   <tt>username\@domain</tt>, and appended to the general message text.</p>
   <p>
   <input type=file name=upfile size=20><p>
   $dispcrit
   <input type=submit value="Upload and send">
   ENDUPLOAD
       }
       if ($broadcast eq 'group') {
          &discourse;
       }
       $r->print('</form>');
   }
   
 # ===================================================================== Handler  # ===================================================================== Handler
   
 sub handler {  sub handler {
Line 177  sub handler { Line 591  sub handler {
   
   return OK if $r->header_only;    return OK if $r->header_only;
   
   # --------------------------- Get query string for limited number of parameters
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
           ['display','replyto','forward','markread','markdel','markunread',
            'sendreply','compose','sendmail','critical','recname','recdom']);
   
   # ------------------------------------------------------ They checked for email
     &Apache::lonnet::put('email_status',{'recnewemail'=>0});
 # --------------------------------------------------------------- Render Output  # --------------------------------------------------------------- Render Output
       
   $r->print('<html><head><title>EMail and Messaging</title></head>');    $r->print('<html><head><title>EMail and Messaging</title></head>'.
   $r->print('<body bgcolor="#FFFFFF">');              &Apache::loncommon::bodytag('EMail and Messages'));
   $r->print('<h1>EMail</h1>');    if ($ENV{'form.display'}) {
         my $msgid=$ENV{'form.display'};
         &statuschange($msgid,'read');
         my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
         my %content=&unpackagemsg($message{$msgid});
         $r->print('<b>Subject:</b> '.$content{'subject'}.
                '<br><b>From:</b> '.
   &Apache::loncommon::aboutmewrapper(
   &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),
   $content{'sendername'},$content{'senderdomain'}).' ('.
                                    $content{'sendername'}.' at '.
                                    $content{'senderdomain'}.') '.
                '<br><b>Time:</b> '.$content{'time'}.'<p>'.
                '<table border=2><tr bgcolor="#FFFFAA"><td>Functions:</td>'.
              '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).
                '"><b>Reply</b></a></td>'.
              '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).
                '"><b>Forward</b></a></td>'.
           '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).
                '"><b>Mark Unread</b></a></td>'.
           '<td><a href="/adm/email"><b>Display all Messages</b></a></td>'.
                '</tr></table><p><pre>'.
                &Apache::lontexconvert::msgtexconverted($content{'message'}).
                '</pre><hr>'.$content{'citation'});
     } elsif ($ENV{'form.replyto'}) {
         &comprep($r,$ENV{'form.replyto'});
     } elsif ($ENV{'form.sendreply'}) {
         my $msgid=$ENV{'form.sendreply'};
         my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
         my %content=&unpackagemsg($message{$msgid});
         &statuschange($msgid,'replied');
         if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) && 
             (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
            $r->print('Sending critical: '.
                   &user_crit_msg($content{'sendername'},
                                    $content{'senderdomain'},
                                    $ENV{'form.subject'},
                                    $ENV{'form.message'},
                                    $ENV{'form.sendbck'}));
         } else {
            $r->print('Sending: '.&user_normal_msg($content{'sendername'},
                                    $content{'senderdomain'},
                                    $ENV{'form.subject'},
                                    $ENV{'form.message'}));
         }
         if ($ENV{'form.displayedcrit'}) {
             &discrit($r);
         } else {
     &disall($r);
         }
     } elsif ($ENV{'form.confirm'}) {
         foreach (keys %ENV) {
             if ($_=~/^form\.rec\_(.*)$/) {
         $r->print('<b>Confirming Receipt:</b> '.
                           &user_crit_received($1).'<br>');
             }
             if ($_=~/^form\.reprec\_(.*)$/) {
                 my $msgid=$1;
         $r->print('<b>Confirming Receipt:</b> '.
                           &user_crit_received($msgid).'<br>');
                 &comprep($r,$msgid);
             }
         }
         &discrit($r);
     } elsif ($ENV{'form.critical'}) {
         &discrit($r);
     } elsif ($ENV{'form.forward'}) {
         &compout($r,$ENV{'form.forward'});
     } elsif ($ENV{'form.markread'}) {
     } elsif ($ENV{'form.markdel'}) {
         &statuschange($ENV{'form.markdel'},'deleted');
         &disall($r);
     } elsif ($ENV{'form.markeddel'}) {
         my $total=0;
         foreach (keys %ENV) {
             if ($_=~/^form\.delmark_(.*)$/) {
         &statuschange(&Apache::lonnet::unescape($1),'deleted');
                 $total++;
             }
         }
         $r->print('Deleted '.$total.' message(s)<p>');
         &disall($r);
     } elsif ($ENV{'form.markunread'}) {
         &statuschange($ENV{'form.markunread'},'new');
         &disall($r);
     } elsif ($ENV{'form.compose'}) {
         &compout($r,'',$ENV{'form.compose'});
     } elsif ($ENV{'form.sendmail'}) {
         my %content=();
         undef %content;
         if ($ENV{'form.forwid'}) {
           my $msgid=$ENV{'form.forwid'};
           my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
           %content=&unpackagemsg($message{$msgid});
           &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=$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,
                                    $ENV{'form.subject'},
                                    $msgtxt,
                                    $ENV{'form.sendbck'}));
         } else {
            $r->print('Sending: '.&user_normal_msg($recuname,$recdomain,
                                    $ENV{'form.subject'},
                                    $msgtxt,
                                    $content{'citation'}));
         }
         $r->print('<br>');
       }
         if ($ENV{'form.displayedcrit'}) {
             &discrit($r);
         } else {
     &disall($r);
         }
     } else {
         &disall($r);
     }
   $r->print('</body></html>');    $r->print('</body></html>');
   return OK;    return OK;
   
 }  }
 # ================================================= Main program, reset counter  # ================================================= Main program, reset counter
   
 sub BEGIN {  BEGIN {
     $msgcount=0;      $msgcount=0;
 }  }
   

Removed from v.1.5  
changed lines
  Added in v.1.42


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.