Diff for /loncom/interface/lonmsg.pm between versions 1.73 and 1.91

version 1.73, 2003/12/30 14:57:49 version 1.91, 2004/03/01 20:57:47
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 154  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 287  sub author_res_msg { Line 273  sub author_res_msg {
 # =========================================== Retrieve author resource messages  # =========================================== Retrieve author resource messages
   
 sub retrieve_author_res_msg {  sub retrieve_author_res_msg {
     my ($author,$domain,$url)=@_;      my $url=shift;
     $url=&Apache::lonnet::declutter($url);      $url=&Apache::lonnet::declutter($url);
     my %errormsgs=&Apache::lonnet::dump('nohist_res_msgs',$1,$2);      my ($domain,$author)=($url=~/^(\w+)\/(\w+)\//);
       my %errormsgs=&Apache::lonnet::dump('nohist_res_msgs',$domain,$author);
     my $msgs='';      my $msgs='';
     foreach (keys %errormsgs) {      foreach (keys %errormsgs) {
  if ($_=~/^\Q$url\E\_\d+$/) {   if ($_=~/^\Q$url\E\_\d+$/) {
     my %content=&unpackagemsg($errormsgs{$_});      my %content=&unpackagemsg($errormsgs{$_});
     $msgs.='<b>'.$content{'time'}.'</b>: '.$content{'message'}.      $msgs.='<p><img src="/adm/lonMisc/bomb.gif" /><b>'.
       '<br />';   $content{'time'}.'</b>: '.$content{'message'}.
    '<br /></p>';
  }   }
     }       } 
     return $msgs;           return $msgs;     
Line 305  sub retrieve_author_res_msg { Line 293  sub retrieve_author_res_msg {
 # =============================== Delete all author messages related to one URL  # =============================== Delete all author messages related to one URL
   
 sub del_url_author_res_msg {  sub del_url_author_res_msg {
     my ($author,$domain,$url)=@_;      my $url=shift;
     $url=&Apache::lonnet::declutter($url);      $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  # ================= Return hash with URLs for which there is a resource message
   
 sub all_url_author_res_msg {  sub all_url_author_res_msg {
     my ($author,$domain)=@_;      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
Line 395  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'},
                      &mt('Receipt').': '.$ENV{'user.name'}.' at '.$ENV{'user.domain'},                       &mt('Receipt').': '.$ENV{'user.name'}.' '.&mt('at').' '.$ENV{'user.domain'}.', '.$contents{'subject'},
                      &mt('User').' '.$ENV{'user.name'}.' '.&mt('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".&mt('dated').' '.                       $contents{'subject'}.'"'."\n".&mt('dated').' '.
Line 598  $content{'sendername'}.'@'. Line 600  $content{'sendername'}.'@'.
             '<br>'.&mt('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>'.
   &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="rec_'.$_.'" value="'.&mt('Confirm Receipt').'">'.
             '<input type=submit name="reprec_'.$_.'" '.              '<input type=submit name="reprec_'.$_.'" '.
                   'value="'.&mt('Confirm Receipt and Reply').'">';                    'value="'.&mt('Confirm Receipt and Reply').'">';
Line 798  ENDDISHEADER Line 802  ENDDISHEADER
   
 sub compout {  sub compout {
     my ($r,$forwarding,$broadcast)=@_;      my ($r,$forwarding,$broadcast)=@_;
       my $dispcrit='';      &printheader($r,'/adm/email?compose=upload',
        'Distribute from uploaded file');
       my $dispcrit='';
     my $dissub='';      my $dissub='';
     my $dismsg='';      my $dismsg='';
     my $func=&mt('Send New');      my $func=&mt('Send New');
Line 851  ENDREC Line 857  ENDREC
        $r->print(<<"ENDCOMP");         $r->print(<<"ENDCOMP");
 <tr><td>$lt{'ad'}<br /><tt>username\@domain,username\@domain, ...  <tr><td>$lt{'ad'}<br /><tt>username\@domain,username\@domain, ...
 </tt></td><td>  </tt></td><td>
 <input type="text" size="50" name="additionalrec"></td></tr>  <input type="text" size="50" name="additionalrec" /></td></tr>
 <tr><td>$lt{'sb'}:</td><td><input type="text" size="50" name="subject" value="$dissub">  <tr><td>$lt{'sb'}:</td><td><input type="text" size="50" name="subject" value="$dissub" />
 </td></tr></table>  </td></tr></table>
 $latexHelp  $latexHelp
 <textarea name="message" cols="80" rows="10" wrap="hard">$dismsg  <textarea name="message" cols="80" rows="10" wrap="hard">$dismsg
Line 863  $dispcrit Line 869  $dispcrit
 ENDCOMP  ENDCOMP
     } else { # $broadcast is 'upload'      } else { # $broadcast is 'upload'
  $r->print(<<ENDUPLOAD);   $r->print(<<ENDUPLOAD);
 <input type=hidden name=sendmode value=upload>  <input type="hidden" name="sendmode" value="upload" />
   <input type="hidden" name="send" value="on" />
 <h3>Generate messages from a file</h3>  <h3>Generate messages from a file</h3>
 <p>  <p>
 Subject: <input type=text size=50 name=subject>  Subject: <input type="text" size="50" name="subject" />
 </p>  </p>
 <p>General message text<br />  <p>General message text<br />
 <textarea name=message cols=60 rows=10 wrap=hard>$dismsg  <textarea name="message" cols="60" rows="10" wrap="hard">$dismsg
 </textarea></p>  </textarea></p>
 <p>  <p>
 The file format for the uploaded portion of the message is:  The file format for the uploaded portion of the message is:
Line 883  username3\@domain1: text Line 890  username3\@domain1: text
 The messages will be assembled from all lines with the respective   The messages will be assembled from all lines with the respective 
 <tt>username\@domain</tt>, and appended to the general message text.</p>  <tt>username\@domain</tt>, and appended to the general message text.</p>
 <p>  <p>
 <input type=file name=upfile size=20><p>  <input type="file" name="upfile" size="40" /></p><p>
 $dispcrit  $dispcrit
 <input type=submit value="Upload and send">  <input type="submit" value="Upload and send" /></p>
 ENDUPLOAD  ENDUPLOAD
     }      }
     if ($broadcast eq 'group') {      if ($broadcast eq 'group') {
Line 944  sub facetoface { Line 951  sub facetoface {
     unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {      unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {
  return;   return;
     }      }
       &printheader($r,
    '/adm/email?recordftf=query',
    "User Notes, Face-to-Face, Critical Messages");
 # from query string  # from query string
   
     if ($ENV{'form.recname'}) { $ENV{'form.recuname'}=$ENV{'form.recname'}; }      if ($ENV{'form.recname'}) { $ENV{'form.recuname'}=$ENV{'form.recname'}; }
     if ($ENV{'form.recdom'}) { $ENV{'form.recdomain'}=$ENV{'form.recdom'}; }      if ($ENV{'form.recdom'}) { $ENV{'form.recdomain'}=$ENV{'form.recdom'}; }
   
Line 955  sub facetoface { Line 966  sub facetoface {
     my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain');      my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain');
     my $stdbrws = &Apache::loncommon::selectstudent_link      my $stdbrws = &Apache::loncommon::selectstudent_link
  ('stdselect','recuname','recdomain');   ('stdselect','recuname','recdomain');
       my %lt=&Apache::lonlocal::texthash('user' => 'Username',
          'dom' => 'Domain',
          'head' => 'User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course',
          'subm' => 'Retrieve discussion and message records',
          'newr' => 'New Record (record is visible to course faculty and staff)',
          'post' => 'Post this Record');
     $r->print(<<"ENDTREC");      $r->print(<<"ENDTREC");
 <h3>User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course</h3>  <h3>$lt{'head'}</h3>
 <form method="post" action="/adm/email" name="stdselect">  <form method="post" action="/adm/email" name="stdselect">
 <input type="hidden" name="recordftf" value="retrieve" />  <input type="hidden" name="recordftf" value="retrieve" />
 <table>  <table>
 <tr><td>Username:</td><td><input type=text size=12 name=recuname value="$ENV{'form.recuname'}"></td>  <tr><td>$lt{'user'}:</td><td><input type="text" size="12" name="recuname" value="$ENV{'form.recuname'}" /></td>
 <td rowspan="2">  <td rowspan="2">
 $stdbrws  $stdbrws
 <input type="submit" value="Retrieve discussion and message records"></td>  <input type="submit" value="$lt{'subm'}" /></td>
 </tr>  </tr>
 <tr><td>Domain:</td>  <tr><td>$lt{'dom'}:</td>
 <td>$domform</td></tr>  <td>$domform</td></tr>
 </table>  </table>
 </form>  </form>
Line 977  ENDTREC Line 994  ENDTREC
            &user_normal_msg_raw(             &user_normal_msg_raw(
             $ENV{'course.'.$ENV{'request.course.id'}.'.num'},              $ENV{'course.'.$ENV{'request.course.id'}.'.num'},
             $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},              $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
             'Record ['.$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}.']',              &mt('Record').
        ' ['.$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}.']',
     $ENV{'form.newrecord'});      $ENV{'form.newrecord'});
         }          }
         $r->print('<h3>'.&Apache::loncommon::plainname($ENV{'form.recuname'},          $r->print('<h3>'.&Apache::loncommon::plainname($ENV{'form.recuname'},
Line 989  ENDTREC Line 1007  ENDTREC
 <input name="recuname" value="$ENV{'form.recuname'}" type="hidden" />  <input name="recuname" value="$ENV{'form.recuname'}" type="hidden" />
 ENDRHEAD  ENDRHEAD
         $r->print(<<ENDBFORM);          $r->print(<<ENDBFORM);
 <hr />New Record (record is visible to course faculty and staff)<br />  <hr />$lt{'newr'}<br />
 <textarea name="newrecord" cols="80" rows="10" wrap="hard"></textarea>  <textarea name="newrecord" cols="80" rows="10" wrap="hard"></textarea>
 <br />  <br />
 <input type="hidden" name="recordftf" value="post" />  <input type="hidden" name="recordftf" value="post" />
 <input type="submit" value="Post this record" />  <input type="submit" value="$lt{'post'}" />
 </form>  </form>
 ENDBFORM  ENDBFORM
     }      }
 }  }
   
   # ----------------------------------------------- Generate the text input field
   
   sub textinputarea {
       my ($r,$name,$quote)=@_;
       $r->print('<textarea name="'.$name.
         '" cols="80" rows="12" wrap="hard">'.$quote.'</textarea>');
   }
   
   # ----------------------------------------------------------- Display a message
   
   sub displaymessage {
       my ($r,$msgid)=@_;
       &statuschange($msgid,'read');
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
       my %content=&unpackagemsg($message{$msgid});
   # info to generate "next" and "previous" buttons
       my @messages=&sortedmessages();
       my $counter=0;
       $r->print('<pre>');
       my $escmsgid=&Apache::lonnet::escape($msgid);
       foreach (@messages) {
    if ($_->[5] eq $escmsgid){
       last;
    }
    $counter++;
       }
       $r->print('</pre>');
       my $number_of_messages = scalar(@messages); #subtract 1 for last index
   # start output
       &printheader($r,'/adm/email?display='.$msgid,'Display a Message','',$content{'baseurl'});
       my %courseinfo=&Apache::lonnet::coursedescription($content{'courseid'});
   # Functions
       $r->print('<table border="2" width="100%"><tr bgcolor="#FFFFAA"><td>'.&mt('Functions').':</td>'.
         '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).$sqs.
         '"><b>'.&mt('Reply').'</b></a></td>'.
         '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).$sqs.
         '"><b>'.&mt('Forward').'</b></a></td>'.
         '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).$sqs.
         '"><b>'.&mt('Mark Unread').'</b></a></td>'.
         '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.
         '"><b>Delete</b></a></td>'.
         '<td><a href="/adm/email?sortedby='.$ENV{'form.sortedby'}.
         '"><b>'.&mt('Display all Messages').'</b></a></td>');
       if ($counter > 0){
    $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.
     '"><b>'.&mt('Previous').'</b></a></td>');
       }
       if ($counter < $number_of_messages - 1){
    $r->print('<td><a href="/adm/email?display='.$messages[$counter+1]->[5].$sqs.
     '"><b>'.&mt('Next').'</b></a></td>');
       }
       $r->print('</tr></table>');
       $r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}.
         '<br /><b>'.&mt('From').':</b> '.
         &Apache::loncommon::aboutmewrapper(
    &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),
    $content{'sendername'},$content{'senderdomain'}).' ('.
         $content{'sendername'}.' at '.
         $content{'senderdomain'}.') '.
         ($content{'courseid'}?'<br /><b>'.&mt('Course').':</b> '.$courseinfo{'description'}.
          ($content{'coursesec'}?' ('.&mt('Group/Section').': '.$content{'coursesec'}.')':''):'').
         '<br /><b>'.&mt('Time').':</b> '.$content{'time'}.
         '<p><pre>'.
         &Apache::lontexconvert::msgtexconverted($content{'message'},1).
         '</pre><hr />'.$content{'citation'}.'</p>');
       return;   
   }
   
   # ================================================================== The Header
   
   sub header {
       my ($r,$title,$baseurl)=@_;
       $r->print('<html><head><title>Communication and Messages</title>');
       if ($baseurl) {
    $r->print("<base href=\"http://$ENV{'SERVER_NAME'}/$baseurl\" />");
       }
       $r->print(&Apache::loncommon::studentbrowser_javascript().'</head>'.
         &Apache::loncommon::bodytag('Communication and Messages'));
           $r->print(&Apache::lonhtmlcommon::breadcrumbs
                     (undef,($title?$title:'Communication and Messages')));
   
   }
   
   # ---------------------------------------------------------------- Print header
   
   sub printheader {
       my ($r,$url,$desc,$title,$baseurl)=@_;
       &Apache::lonhtmlcommon::add_breadcrumb
    ({href=>$url,
     text=>$desc});
       &header($r,$title,$baseurl);
   }
   
   
 # ===================================================================== Handler  # ===================================================================== Handler
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
   
 # ----------------------------------------------------------- Set document type  # ----------------------------------------------------------- Set document type
       
   &Apache::loncommon::content_type($r,'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 1018  sub handler { Line 1130  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});
   
   # ----------------------------------------------------------------- Breadcrumbs
   
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       &Apache::lonhtmlcommon::add_breadcrumb
           ({href=>"/adm/communicate",
             text=>"Communication/Messages",
             faq=>12,bug=>'Communication Tools',});
   
 # --------------------------------------------------------------- Render Output  # --------------------------------------------------------------- Render Output
   if (!$ENV{'form.display'}) {  
       $r->print('<html><head><title>EMail and Messaging</title>'.  
  &Apache::loncommon::studentbrowser_javascript().'</head>'.  
  &Apache::loncommon::bodytag('EMail and Messages'));  
   }  
   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});  
 # 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>');  
       if (defined($content{'baseurl'})) {  
   $r->print("<base href=\"http://$ENV{'SERVER_NAME'}/$content{'baseurl'}\" />");  
       }  
       $r->print(&Apache::loncommon::studentbrowser_javascript().  
  '</head>'.  
  &Apache::loncommon::bodytag('EMail and Messages'));  
       $r->print('<b>'.&mt('Subject').':</b> '.$content{'subject'}.  
              '<br><b>'.&mt('From').':</b> '.  
 &Apache::loncommon::aboutmewrapper(  
 &Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),  
 $content{'sendername'},$content{'senderdomain'}).' ('.  
                                  $content{'sendername'}.' at '.  
                                  $content{'senderdomain'}.') '.  
              '<br><b>'.&mt('Time').':</b> '.$content{'time'}.'<p>'.  
              '<table border=2><tr bgcolor="#FFFFAA"><td>'.&mt('Functions').':</td>'.  
            '<td><a href="/adm/email?replyto='.&Apache::lonnet::escape($msgid).$sqs.  
              '"><b>'.&mt('Reply').'</b></a></td>'.  
            '<td><a href="/adm/email?forward='.&Apache::lonnet::escape($msgid).$sqs.  
              '"><b>'.&mt('Forward').'</b></a></td>'.  
         '<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid).$sqs.  
              '"><b>'.&mt('Mark Unread').'</b></a></td>'.  
         '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.  
              '"><b>Delete</b></a></td>'.  
  '<td><a href="/adm/email?sortedby='.$ENV{'form.sortedby'}.  
  '"><b>'.&mt('Display all Messages').'</b></a></td>');  
       if ($counter > 0){  
    $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.  
            '"><b>'.&mt('Previous').'</b></a></td>');  
        }  
        if ($counter < $number_of_messages - 1){  
    $r->print('<td><a href="/adm/email?display='.$messages[$counter+1]->[5].$sqs.  
            '"><b>'.&mt('Next').'</b></a></td>');  
        }  
        $r->print('</tr></table><p><pre>'.  
              &Apache::lontexconvert::msgtexconverted($content{'message'}).  
              '</pre><hr>'.$content{'citation'});  
   } elsif ($ENV{'form.replyto'}) {  
       &comprep($r,$ENV{'form.replyto'});  
   } elsif ($ENV{'form.sendreply'}) {  
       if ($ENV{'form.send'}) {  
   my $msgid=$ENV{'form.sendreply'};  
   my %message=&Apache::lonnet::get('nohist_email',[$msgid]);  
   my %content=&unpackagemsg($message{$msgid},1);  
   &statuschange($msgid,'replied');  
   if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&   
       (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {  
       $r->print(&mt('Sending critical message').': '.  
  &user_crit_msg($content{'sendername'},  
        $content{'senderdomain'},  
        &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),  
        &Apache::lonfeedback::clear_out_html($ENV{'form.message'}),  
        $ENV{'form.sendbck'}));  
   } else {  
       $r->print(&mt('Sending').': '.&user_normal_msg($content{'sendername'},  
      $content{'senderdomain'},  
      &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),  
      &Apache::lonfeedback::clear_out_html($ENV{'form.message'})));  
   }  
       }  
       if ($ENV{'form.displayedcrit'}) {  
           &discrit($r);  
       } else {  
   &disall($r);  
       }  
   } elsif ($ENV{'form.confirm'}) {  
       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.recordftf'}) {  
       &facetoface($r,$ENV{'form.recordftf'});  
   } elsif ($ENV{'form.sendmail'}) {  
       my $sendstatus='';  
       if ($ENV{'form.send'}) {  
   my %content=();  
   undef %content;  
   if ($ENV{'form.forwid'}) {  
       my $msgid=$ENV{'form.forwid'};  
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);  
       %content=&unpackagemsg($message{$msgid},1);  
       &statuschange($msgid,'forwarded');  
       $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".  
   $content{'message'};  
   }  
   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 />');  
   }  
       }  
       if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {  
   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);  
   }  
   $r->print('</body></html>');  
   return OK;  
   
       if ($ENV{'form.display'}) {
    &displaymessage($r,$ENV{'form.display'});
       } elsif ($ENV{'form.replyto'}) {
    &comprep($r,$ENV{'form.replyto'});
       } elsif ($ENV{'form.sendreply'}) {
    if ($ENV{'form.send'}) {
       my $msgid=$ENV{'form.sendreply'};
       my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
       my %content=&unpackagemsg($message{$msgid},1);
       &statuschange($msgid,'replied');
       if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) && 
    (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {
    $r->print(&mt('Sending critical message').': '.
     &user_crit_msg($content{'sendername'},
    $content{'senderdomain'},
    &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
    &Apache::lonfeedback::clear_out_html($ENV{'form.message'}),
    $ENV{'form.sendbck'}));
       } else {
    $r->print(&mt('Sending').': '.&user_normal_msg($content{'sendername'},
          $content{'senderdomain'},
          &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),
          &Apache::lonfeedback::clear_out_html($ENV{'form.message'})));
       }
    }
    if ($ENV{'form.displayedcrit'}) {
       &discrit($r);
    } else {
       &disall($r);
    }
       } elsif ($ENV{'form.confirm'}) {
    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.recordftf'}) {
    &facetoface($r,$ENV{'form.recordftf'});
       } elsif ($ENV{'form.sendmail'}) {
    my $sendstatus='';
    if ($ENV{'form.send'}) {
       my %content=();
       undef %content;
       if ($ENV{'form.forwid'}) {
    my $msgid=$ENV{'form.forwid'};
    my %message=&Apache::lonnet::get('nohist_email',[$msgid]);
    %content=&unpackagemsg($message{$msgid},1);
    &statuschange($msgid,'forwarded');
    $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".
       $content{'message'};
       }
       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 />');
       }
    }
    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);
       }
       $r->print('</body></html>');
       return OK;
 }  }
 # ================================================= Main program, reset counter  # ================================================= Main program, reset counter
   

Removed from v.1.73  
changed lines
  Added in v.1.91


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