Diff for /loncom/interface/lonmsg.pm between versions 1.139 and 1.140

version 1.139, 2005/03/01 03:28:14 version 1.140, 2005/04/07 06:56:23
Line 104  since lonmsg already implements that fun Line 104  since lonmsg already implements that fun
 =cut  =cut
   
 use strict;  use strict;
 use Apache::lonnet();  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);
Line 140  sub packagemsg { Line 140  sub packagemsg {
     my $partsubj=$subject;      my $partsubj=$subject;
     $partsubj=&Apache::lonnet::escape($partsubj);      $partsubj=&Apache::lonnet::escape($partsubj);
     my $msgid=&Apache::lonnet::escape(      my $msgid=&Apache::lonnet::escape(
            $now.':'.$partsubj.':'.$ENV{'user.name'}.':'.             $now.':'.$partsubj.':'.$env{'user.name'}.':'.
            $ENV{'user.domain'}.':'.$msgcount.':'.$$);             $env{'user.domain'}.':'.$msgcount.':'.$$);
     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>'.&Apache::lonlocal::locallocaltime($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>'.
    '<browsertype>'.$ENV{'browser.type'}.'</browsertype>'.     '<browsertype>'.$env{'browser.type'}.'</browsertype>'.
    '<browseros>'.$ENV{'browser.os'}.'</browseros>'.     '<browseros>'.$env{'browser.os'}.'</browseros>'.
    '<browserversion>'.$ENV{'browser.version'}.'</browserversion>'.     '<browserversion>'.$env{'browser.version'}.'</browserversion>'.
            '<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>'.     '<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>'.
    '<recuser>'.$recuser.'</recuser>'.     '<recuser>'.$recuser.'</recuser>'.
    '<recdomain>'.$recdomain.'</recdomain>'.     '<recdomain>'.$recdomain.'</recdomain>'.
Line 226  sub sendemail { Line 226  sub sendemail {
     my $msg = new Mail::Send;      my $msg = new Mail::Send;
     $msg->to($to);      $msg->to($to);
     $msg->subject('[LON-CAPA] '.$subject);      $msg->subject('[LON-CAPA] '.$subject);
     my %oldENV=%ENV;  
     undef(%ENV);  
     if (my $fh = $msg->open()) {      if (my $fh = $msg->open()) {
  print $fh $body;   print $fh $body;
  $fh->close;   $fh->close;
     }      }
     %ENV=%oldENV;  
     undef(%oldENV);  
 }  }
   
 # ==================================================== Send notification emails  # ==================================================== Send notification emails
   
 sub sendnotification {  sub sendnotification {
     my ($to,$touname,$toudom,$subj,$crit,$text)=@_;      my ($to,$touname,$toudom,$subj,$crit,$text)=@_;
     my $sender=$ENV{'environment.firstname'}.' '.$ENV{'environment.lastname'};      my $sender=$env{'environment.firstname'}.' '.$env{'environment.lastname'};
     unless ($sender=~/\w/) {       unless ($sender=~/\w/) { 
  $sender=$ENV{'user.name'}.'@'.$ENV{'user.domain'};   $sender=$env{'user.name'}.'@'.$env{'user.domain'};
     }      }
     my $critical=($crit?' critical':'');      my $critical=($crit?' critical':'');
     $text=~s/\&lt\;/\</gs;      $text=~s/\&lt\;/\</gs;
Line 271  ENDMSG Line 267  ENDMSG
 # ============================================================= Check for email  # ============================================================= Check for email
   
 sub newmail {  sub newmail {
     if ((time-$ENV{'user.mailcheck.time'})>300) {      if ((time-$env{'user.mailcheck.time'})>300) {
         my %what=&Apache::lonnet::get('email_status',['recnewemail']);          my %what=&Apache::lonnet::get('email_status',['recnewemail']);
         &Apache::lonnet::appenv('user.mailcheck.time'=>time);          &Apache::lonnet::appenv('user.mailcheck.time'=>time);
         if ($what{'recnewemail'}>0) { return 1; }          if ($what{'recnewemail'}>0) { return 1; }
Line 370  sub user_crit_msg_raw { Line 366  sub user_crit_msg_raw {
            'put:'.$domain.':'.$user.':critical:'.             'put:'.$domain.':'.$user.':critical:'.
            &Apache::lonnet::escape($msgid).'='.             &Apache::lonnet::escape($msgid).'='.
            &Apache::lonnet::escape($message),$homeserver);             &Apache::lonnet::escape($message),$homeserver);
        if ($ENV{'request.course.id'}) {         if ($env{'request.course.id'}) {
           &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'},
             'Critical ['.$user.':'.$domain.']',              'Critical ['.$user.':'.$domain.']',
     $message);      $message);
        }         }
Line 396  sub user_crit_msg_raw { Line 392  sub user_crit_msg_raw {
     &Apache::lonnet::logthis(      &Apache::lonnet::logthis(
       'Sending critical email '.$msgid.        'Sending critical email '.$msgid.
       ', log status: '.        ', log status: '.
       &Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'},        &Apache::lonnet::log($env{'user.domain'},$env{'user.name'},
                          $ENV{'user.home'},                           $env{'user.home'},
       'Sending critical '.$msgid.' to '.$user.' at '.$domain.' with status: '        'Sending critical '.$msgid.' to '.$user.' at '.$domain.' with status: '
       .$status));        .$status));
     return $status;      return $status;
Line 440  sub user_crit_received { Line 436  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'}.' '.&mt('at').' '.$ENV{'user.domain'}.', '.$contents{'subject'},                       &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').' '.
                      $contents{'time'}.".\n"                       $contents{'time'}.".\n"
Line 451  sub user_crit_received { Line 447  sub user_crit_received {
      'nohist_email',{$contents{'msgid'} => $message{$msgid}});       '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;      return $status;
Line 482  sub user_normal_msg_raw { Line 478  sub user_normal_msg_raw {
                          ('email_status',{'recnewemail'=>time},$domain,$user);                           ('email_status',{'recnewemail'=>time},$domain,$user);
 # Into sent-mail folder  # Into sent-mail folder
        $status.=' '.&Apache::lonnet::critical(         $status.=' '.&Apache::lonnet::critical(
            'put:'.$ENV{'user.domain'}.':'.$ENV{'user.name'}.             'put:'.$env{'user.domain'}.':'.$env{'user.name'}.
       ':nohist_email_sent:'.        ':nohist_email_sent:'.
            &Apache::lonnet::escape($msgid).'='.             &Apache::lonnet::escape($msgid).'='.
            &Apache::lonnet::escape($message),$ENV{'user.home'});             &Apache::lonnet::escape($message),$env{'user.home'});
     } else {      } else {
        $status='no_host';         $status='no_host';
     }      }
Line 501  sub user_normal_msg_raw { Line 497  sub user_normal_msg_raw {
       &sendnotification($userenv{'permanentemail'},$user,$domain,$subject,0,        &sendnotification($userenv{'permanentemail'},$user,$domain,$subject,0,
  $text);   $text);
     }      }
     &Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'},      &Apache::lonnet::log($env{'user.domain'},$env{'user.name'},
                          $ENV{'user.home'},                           $env{'user.home'},
       'Sending '.$msgid.' to '.$user.' at '.$domain.' with status: '.$status);        'Sending '.$msgid.' to '.$user.' at '.$domain.' with status: '.$status);
     return $status;      return $status;
 }  }
Line 559  sub folderlist { Line 555  sub folderlist {
  ($_==$interdis?' selected="selected"':'').'>'.$_.'</option>' }   ($_==$interdis?' selected="selected"':'').'>'.$_.'</option>' }
    (10,20,50,100,200)).'</select>'.     (10,20,50,100,200)).'</select>'.
    '<input type="submit" value="'.&mt('View Folder').'" /><br />'.     '<input type="submit" value="'.&mt('View Folder').'" /><br />'.
     '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />'.      '<input type="hidden" name="sortedby" value="'.$env{'form.sortedby'}.'" />'.
       ($folder=~/^(new|critical)/?'</form>':'');        ($folder=~/^(new|critical)/?'</form>':'');
 }  }
   
Line 781  sub sortedmessages { Line 777  sub sortedmessages {
     }      }
     #default sort      #default sort
     @temp = sort  {$a->[0] <=> $b->[0]} @temp;          @temp = sort  {$a->[0] <=> $b->[0]} @temp;    
     if ($ENV{'form.sortedby'} eq "date"){      if ($env{'form.sortedby'} eq "date"){
         @temp = sort  {$a->[0] <=> $b->[0]} @temp;              @temp = sort  {$a->[0] <=> $b->[0]} @temp;    
     }      }
     if ($ENV{'form.sortedby'} eq "revdate"){      if ($env{'form.sortedby'} eq "revdate"){
     @temp = sort  {$b->[0] <=> $a->[0]} @temp;       @temp = sort  {$b->[0] <=> $a->[0]} @temp; 
     }      }
     if ($ENV{'form.sortedby'} eq "user"){      if ($env{'form.sortedby'} eq "user"){
  @temp = sort  {lc($a->[2]) cmp lc($b->[2])} @temp;   @temp = sort  {lc($a->[2]) cmp lc($b->[2])} @temp;
     }      }
     if ($ENV{'form.sortedby'} eq "revuser"){      if ($env{'form.sortedby'} eq "revuser"){
  @temp = sort  {lc($b->[2]) cmp lc($a->[2])} @temp;   @temp = sort  {lc($b->[2]) cmp lc($a->[2])} @temp;
     }      }
     if ($ENV{'form.sortedby'} eq "domain"){      if ($env{'form.sortedby'} eq "domain"){
         @temp = sort  {$a->[3] cmp $b->[3]} @temp;          @temp = sort  {$a->[3] cmp $b->[3]} @temp;
     }      }
     if ($ENV{'form.sortedby'} eq "revdomain"){      if ($env{'form.sortedby'} eq "revdomain"){
         @temp = sort  {$b->[3] cmp $a->[3]} @temp;          @temp = sort  {$b->[3] cmp $a->[3]} @temp;
     }      }
     if ($ENV{'form.sortedby'} eq "subject"){      if ($env{'form.sortedby'} eq "subject"){
         @temp = sort  {lc($a->[1]) cmp lc($b->[1])} @temp;          @temp = sort  {lc($a->[1]) cmp lc($b->[1])} @temp;
     }      }
     if ($ENV{'form.sortedby'} eq "revsubject"){      if ($env{'form.sortedby'} eq "revsubject"){
         @temp = sort  {lc($b->[1]) cmp lc($a->[1])} @temp;          @temp = sort  {lc($b->[1]) cmp lc($a->[1])} @temp;
     }      }
     if ($ENV{'form.sortedby'} eq "status"){      if ($env{'form.sortedby'} eq "status"){
         @temp = sort  {$a->[4] cmp $b->[4]} @temp;          @temp = sort  {$a->[4] cmp $b->[4]} @temp;
     }      }
     if ($ENV{'form.sortedby'} eq "revstatus"){      if ($env{'form.sortedby'} eq "revstatus"){
         @temp = sort  {$b->[4] cmp $a->[4]} @temp;          @temp = sort  {$b->[4] cmp $a->[4]} @temp;
     }      }
     return @temp;      return @temp;
Line 828  sub disnew { Line 824  sub disnew {
        'do' => 'Domain'         'do' => 'Domain'
        );         );
     my @msgids = sort split(/\&/,&Apache::lonnet::reply      my @msgids = sort split(/\&/,&Apache::lonnet::reply
                             ('keys:'.$ENV{'user.domain'}.':'.                              ('keys:'.$env{'user.domain'}.':'.
                              $ENV{'user.name'}.':nohist_email',                               $env{'user.name'}.':nohist_email',
                              $ENV{'user.home'}));                               $env{'user.home'}));
     my @newmsgs;      my @newmsgs;
     my %setters = ();      my %setters = ();
     my $startblock = 0;      my $startblock = 0;
Line 962  ENDDISHEADER Line 958  ENDDISHEADER
     $r->print(&scrollbuttons($startdis,$number,$firstdis,$lastdis,$totalnumber));      $r->print(&scrollbuttons($startdis,$number,$firstdis,$lastdis,$totalnumber));
     $r->print('<form method="post" name="disall" action="/adm/email">'.      $r->print('<form method="post" name="disall" action="/adm/email">'.
       '<table border=2><tr><th colspan="3">&nbsp</th><th>');        '<table border=2><tr><th colspan="3">&nbsp</th><th>');
     if ($ENV{'form.sortedby'} eq "revdate") {      if ($env{'form.sortedby'} eq "revdate") {
  $r->print('<a href = "?sortedby=date'.$fsqs.'">'.&mt('Date').'</a></th>');   $r->print('<a href = "?sortedby=date'.$fsqs.'">'.&mt('Date').'</a></th>');
     } else {      } else {
  $r->print('<a href = "?sortedby=revdate'.$fsqs.'">'.&mt('Date').'</a></th>');   $r->print('<a href = "?sortedby=revdate'.$fsqs.'">'.&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'.$fsqs.'">'.&mt('Username').'</a>');   $r->print('<a href = "?sortedby=user'.$fsqs.'">'.&mt('Username').'</a>');
     } else {      } else {
  $r->print('<a href = "?sortedby=revuser'.$fsqs.'">'.&mt('Username').'</a>');   $r->print('<a href = "?sortedby=revuser'.$fsqs.'">'.&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'.$fsqs.'">'.&mt('Domain').'</a>');   $r->print('<a href = "?sortedby=domain'.$fsqs.'">'.&mt('Domain').'</a>');
     } else {      } else {
  $r->print('<a href = "?sortedby=revdomain'.$fsqs.'">'.&mt('Domain').'</a>');   $r->print('<a href = "?sortedby=revdomain'.$fsqs.'">'.&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'.$fsqs.'">'.&mt('Subject').'</a>');   $r->print('<a href = "?sortedby=subject'.$fsqs.'">'.&mt('Subject').'</a>');
     } else {      } else {
     $r->print('<a href = "?sortedby=revsubject'.$fsqs.'">'.&mt('Subject').'</a>');      $r->print('<a href = "?sortedby=revsubject'.$fsqs.'">'.&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'.$fsqs.'">'.&mt('Status').'</a></th>');   $r->print('<a href = "?sortedby=status'.$fsqs.'">'.&mt('Status').'</a></th>');
     } else {      } else {
       $r->print('<a href = "?sortedby=revstatus'.$fsqs.'">'.&mt('Status').'</a></th>');        $r->print('<a href = "?sortedby=revstatus'.$fsqs.'">'.&mt('Status').'</a></th>');
Line 1020  ENDDISHEADER Line 1016  ENDDISHEADER
     $r->print("</table>\n<p>".      $r->print("</table>\n<p>".
   '<a href="javascript:checkall()">'.&mt('Check All').'</a>&nbsp;'.    '<a href="javascript:checkall()">'.&mt('Check All').'</a>&nbsp;'.
   '<a href="javascript:uncheckall()">'.&mt('Uncheck All').'</a></p>'.    '<a href="javascript:uncheckall()">'.&mt('Uncheck All').'</a></p>'.
   '<input type="hidden" name="sortedby" value="'.$ENV{'form.sortedby'}.'" />');    '<input type="hidden" name="sortedby" value="'.$env{'form.sortedby'}.'" />');
     if ($folder ne 'trash') {      if ($folder ne 'trash') {
  $r->print(   $r->print(
       '<p><input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" /></p>');        '<p><input type="submit" name="markeddel" value="'.&mt('Delete Checked').'" /></p>');
Line 1033  ENDDISHEADER Line 1029  ENDDISHEADER
      ( map { $_ => $_ } @allfolders))       ( map { $_ => $_ } @allfolders))
       );        );
     my $postedstartdis=$startdis+1;      my $postedstartdis=$startdis+1;
     $r->print('<input type="hidden" name="folder" value="'.$folder.'" /><input type="hidden" name="startdis" value="'.$postedstartdis.'" /><input type="hidden" name="interdis" value="'.$ENV{'form.interdis'}.'" /></form>');      $r->print('<input type="hidden" name="folder" value="'.$folder.'" /><input type="hidden" name="startdis" value="'.$postedstartdis.'" /><input type="hidden" name="interdis" value="'.$env{'form.interdis'}.'" /></form>');
     if ($numblocked > 0) {      if ($numblocked > 0) {
         my $beginblock = &Apache::lonlocal::locallocaltime($startblock);          my $beginblock = &Apache::lonlocal::locallocaltime($startblock);
         my $finishblock = &Apache::lonlocal::locallocaltime($endblock);          my $finishblock = &Apache::lonlocal::locallocaltime($endblock);
Line 1087  sub compout { Line 1083  sub compout {
        'ca' => 'Cancel',         'ca' => 'Cancel',
        'ma' => 'Mail');         'ma' => 'Mail');
   
     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=
  '<p><label><input type="checkbox" name="critmsg" /> '.&mt('Send as critical message').'</label> ' . $crithelp .    '<p><label><input type="checkbox" name="critmsg" /> '.&mt('Send as critical message').'</label> ' . $crithelp . 
Line 1099  sub compout { Line 1095  sub compout {
      }       }
     my %message;      my %message;
     my %content;      my %content;
     my $defdom=$ENV{'user.domain'};      my $defdom=$env{'user.domain'};
     if ($forwarding) {      if ($forwarding) {
  %message=&Apache::lonnet::get('nohist_email'.$suffix,[$forwarding]);   %message=&Apache::lonnet::get('nohist_email'.$suffix,[$forwarding]);
  %content=&unpackagemsg($message{$forwarding},$folder);   %content=&unpackagemsg($message{$forwarding},$folder);
Line 1128  sub compout { Line 1124  sub compout {
  $dismsg=~s/\n+/\n\> /g;   $dismsg=~s/\n+/\n\> /g;
  if ($content{'baseurl'}) {   if ($content{'baseurl'}) {
     $disbase='<input type="hidden" name="baseurl" value="'.&Apache::lonnet::escape($content{'baseurl'}).'" />';      $disbase='<input type="hidden" name="baseurl" value="'.&Apache::lonnet::escape($content{'baseurl'}).'" />';
     if ($ENV{'user.adv'}) {      if ($env{'user.adv'}) {
  $disbase.='<label><input type="checkbox" name="storebasecomment" />'.&mt('Store message for re-use').   $disbase.='<label><input type="checkbox" name="storebasecomment" />'.&mt('Store message for re-use').
     '</label> <a href="/adm/email?showcommentbaseurl='.      '</label> <a href="/adm/email?showcommentbaseurl='.
     &Apache::lonnet::escape($content{'baseurl'}).'" target="comments">'.      &Apache::lonnet::escape($content{'baseurl'}).'" target="comments">'.
Line 1137  sub compout { Line 1133  sub compout {
  }   }
     }      }
     my $citation=&displayresource(%content);      my $citation=&displayresource(%content);
     if ($ENV{'form.recdom'}) { $defdom=$ENV{'form.recdom'}; }      if ($env{'form.recdom'}) { $defdom=$env{'form.recdom'}; }
       $r->print(        $r->print(
                 '<form action="/adm/email"  name="compemail" method="post"'.                  '<form action="/adm/email"  name="compemail" method="post"'.
                 ' enctype="multipart/form-data">'."\n".                  ' enctype="multipart/form-data">'."\n".
Line 1158  sub compout { Line 1154  sub compout {
     my $selectlink=&Apache::loncommon::selectstudent_link      my $selectlink=&Apache::loncommon::selectstudent_link
     ('compemail','recuname','recdomain');      ('compemail','recuname','recdomain');
     $r->print(<<"ENDREC");      $r->print(<<"ENDREC");
 <tr><td>$lt{'us'}:</td><td><input type="text" size="12" name="recuname" value="$ENV{'form.recname'}" /></td><td rowspan="2">$selectlink</td></tr>  <tr><td>$lt{'us'}:</td><td><input type="text" size="12" name="recuname" value="$env{'form.recname'}" /></td><td rowspan="2">$selectlink</td></tr>
 <tr><td>$lt{'do'}:</td>  <tr><td>$lt{'do'}:</td>
 <td>$domform</td></tr>  <td>$domform</td></tr>
 ENDREC  ENDREC
Line 1219  ENDUPLOAD Line 1215  ENDUPLOAD
   
 sub retrieve_instructor_comments {  sub retrieve_instructor_comments {
     my ($user,$domain)=@_;      my ($user,$domain)=@_;
     my $target=$ENV{'form.grade_target'};      my $target=$env{'form.grade_target'};
     if (! $ENV{'request.course.id'}) { return; }      if (! $env{'request.course.id'}) { return; }
     if (! &Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {      if (! &Apache::lonnet::allowed('srm',$env{'request.course.id'})) {
  return;   return;
     }      }
     my %records=&Apache::lonnet::dump('nohist_email',      my %records=&Apache::lonnet::dump('nohist_email',
  $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'},
                          '%255b'.$user.'%253a'.$domain.'%255d');                           '%255b'.$user.'%253a'.$domain.'%255d');
     my $result='';      my $result='';
     foreach (sort(keys(%records))) {      foreach (sort(keys(%records))) {
Line 1244  sub retrieve_instructor_comments { Line 1240  sub retrieve_instructor_comments {
   
 sub disfacetoface {  sub disfacetoface {
     my ($r,$user,$domain)=@_;      my ($r,$user,$domain)=@_;
     my $target=$ENV{'form.grade_target'};      my $target=$env{'form.grade_target'};
     unless ($ENV{'request.course.id'}) { return; }      unless ($env{'request.course.id'}) { return; }
     unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {      unless (&Apache::lonnet::allowed('srm',$env{'request.course.id'})) {
  return;   return;
     }      }
     my %records=&Apache::lonnet::dump('nohist_email',      my %records=&Apache::lonnet::dump('nohist_email',
  $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'},
                          '%255b'.$user.'%253a'.$domain.'%255d');                           '%255b'.$user.'%253a'.$domain.'%255d');
     my $result='';      my $result='';
     foreach (sort keys %records) {      foreach (sort keys %records) {
Line 1294  $content{'sendername'}.'@'. Line 1290  $content{'sendername'}.'@'.
   
 sub facetoface {  sub facetoface {
     my ($r,$stage)=@_;      my ($r,$stage)=@_;
     unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {      unless (&Apache::lonnet::allowed('srm',$env{'request.course.id'})) {
  return;   return;
     }      }
     &printheader($r,      &printheader($r,
Line 1302  sub facetoface { Line 1298  sub facetoface {
  "User Notes, Face-to-Face, Critical Messages, Broadcast Messages");   "User Notes, Face-to-Face, Critical Messages, Broadcast 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'}; }
   
     my $defdom=$ENV{'user.domain'};      my $defdom=$env{'user.domain'};
 # already filled in  # already filled in
     if ($ENV{'form.recdomain'}) { $defdom=$ENV{'form.recdomain'}; }      if ($env{'form.recdomain'}) { $defdom=$env{'form.recdomain'}; }
 # generate output  # generate output
     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
Line 1323  sub facetoface { Line 1319  sub facetoface {
 <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>$lt{'user'}:</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="$lt{'subm'}" /></td>  <input type="submit" value="$lt{'subm'}" /></td>
Line 1334  $stdbrws Line 1330  $stdbrws
 </form>  </form>
 ENDTREC  ENDTREC
     if (($stage ne 'query') &&      if (($stage ne 'query') &&
         ($ENV{'form.recdomain'}) && ($ENV{'form.recuname'})) {          ($env{'form.recdomain'}) && ($env{'form.recuname'})) {
         chomp($ENV{'form.newrecord'});          chomp($env{'form.newrecord'});
         if ($ENV{'form.newrecord'}) {          if ($env{'form.newrecord'}) {
            &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'},
             &mt('Record').              &mt('Record').
      ' ['.$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}.']',       ' ['.$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'},
      $ENV{'form.recdomain'}).'</h3>');       $env{'form.recdomain'}).'</h3>');
         &disfacetoface($r,$ENV{'form.recuname'},$ENV{'form.recdomain'});          &disfacetoface($r,$env{'form.recuname'},$env{'form.recdomain'});
  $r->print(<<ENDRHEAD);   $r->print(<<ENDRHEAD);
 <form method="post" action="/adm/email">  <form method="post" action="/adm/email">
 <input name="recdomain" value="$ENV{'form.recdomain'}" type="hidden" />  <input name="recdomain" value="$env{'form.recdomain'}" type="hidden" />
 <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 />$lt{'newr'}<br />  <hr />$lt{'newr'}<br />
Line 1367  ENDBFORM Line 1363  ENDBFORM
   
 sub examblock {  sub examblock {
     my ($r,$action) = @_;      my ($r,$action) = @_;
     unless ($ENV{'request.course.id'}) { return;}      unless ($env{'request.course.id'}) { return;}
     unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { $r->print('Not allowed'); }      unless (&Apache::lonnet::allowed('srm',$env{'request.course.id'})) { $r->print('Not allowed'); }
     my %lt=&Apache::lonlocal::texthash(      my %lt=&Apache::lonlocal::texthash(
             'comb' => 'Communication Blocking',              'comb' => 'Communication Blocking',
             'cbds' => 'Communication blocking during scheduled exams',              'cbds' => 'Communication blocking during scheduled exams',
Line 1438  sub blockstore { Line 1434  sub blockstore {
     my $addtotal = 0;      my $addtotal = 0;
     my %blocking = ();      my %blocking = ();
     $r->print('<h3>'.$lt{'head'}.'</h3>');      $r->print('<h3>'.$lt{'head'}.'</h3>');
     foreach (keys %ENV) {      foreach (keys %env) {
         if ($_ =~ m/^form\.modify_(\w+)$/) {          if ($_ =~ m/^form\.modify_(\w+)$/) {
             $adds{$1} = $1;              $adds{$1} = $1;
             $removals{$1} = $1;              $removals{$1} = $1;
Line 1456  sub blockstore { Line 1452  sub blockstore {
     }      }
   
     foreach (keys %removals) {      foreach (keys %removals) {
         my $hashkey = $ENV{'form.key_'.$_};          my $hashkey = $env{'form.key_'.$_};
         &Apache::lonnet::del('comm_block',["$hashkey"],          &Apache::lonnet::del('comm_block',["$hashkey"],
                          $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'}
                          );                           );
     }      }
     foreach (keys %adds) {      foreach (keys %adds) {
         unless ( defined($cancels{$_}) ) {          unless ( defined($cancels{$_}) ) {
             my ($newstart,$newend) = &get_dates_from_form($_);              my ($newstart,$newend) = &get_dates_from_form($_);
             my $newkey = $newstart.'____'.$newend;              my $newkey = $newstart.'____'.$newend;
             $blocking{$newkey} = $ENV{'user.name'}.'@'.$ENV{'user.domain'}.':'.$ENV{'form.title_'.$_};              $blocking{$newkey} = $env{'user.name'}.'@'.$env{'user.domain'}.':'.$env{'form.title_'.$_};
         }          }
     }      }
     if ($addtotal + $modtotal > 0) {      if ($addtotal + $modtotal > 0) {
         &Apache::lonnet::put('comm_block',\%blocking,          &Apache::lonnet::put('comm_block',\%blocking,
                      $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 $chgestotal = $canceltotal + $modtotal + $addtotal;      my $chgestotal = $canceltotal + $modtotal + $addtotal;
Line 1506  sub get_blockdates { Line 1502  sub get_blockdates {
     my ($records,$blockcount) = @_;      my ($records,$blockcount) = @_;
     $$blockcount = 0;      $$blockcount = 0;
     %{$records} = &Apache::lonnet::dump('comm_block',      %{$records} = &Apache::lonnet::dump('comm_block',
                          $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'}
                          );                           );
     $$blockcount = keys %{$records};      $$blockcount = keys %{$records};
                                                                                                                                                                                                                             
Line 1525  sub display_blocker_status { Line 1521  sub display_blocker_status {
     my @bgcols = ("#eeeeee","#dddddd");      my @bgcols = ("#eeeeee","#dddddd");
     my $function = &Apache::loncommon::get_users_function();      my $function = &Apache::loncommon::get_users_function();
     my $color = &Apache::loncommon::designparm($function.'.tabbg',      my $color = &Apache::loncommon::designparm($function.'.tabbg',
                                                     $ENV{'user.domain'});                                                      $env{'user.domain'});
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'modi' => 'Modify',          'modi' => 'Modify',
         'canc' => 'Cancel',          'canc' => 'Cancel',
Line 1591  sub display_addblocker_table { Line 1587  sub display_addblocker_table {
     my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);      my $endform = &Apache::lonhtmlcommon::date_setter('blockform','enddate_'.$parmcount,$end,$onchange);
     my $function = &Apache::loncommon::get_users_function();      my $function = &Apache::loncommon::get_users_function();
     my $color = &Apache::loncommon::designparm($function.'.tabbg',      my $color = &Apache::loncommon::designparm($function.'.tabbg',
                                                     $ENV{'user.domain'});                                                      $env{'user.domain'});
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'addb' => 'Add block',          'addb' => 'Add block',
         'exam' => 'e.g., Exam 1',          'exam' => 'e.g., Exam 1',
Line 1634  sub blockcheck { Line 1630  sub blockcheck {
     my @staffcses = ();      my @staffcses = ();
     $$startblock = 0;      $$startblock = 0;
     $$endblock = 0;      $$endblock = 0;
     foreach (keys %ENV) {      foreach (keys %env) {
         if ($_ =~ m-^user\.role\.(st|cc|in)\./(.+)$-) {          if ($_ =~ m-^user\.role\.(st|cc|in)\./(.+)$-) {
             my $role = $1;              my $role = $1;
             my $cse = $2;              my $cse = $2;
             $cse =~ s|/|_|;              $cse =~ s|/|_|;
             if ($ENV{$_} =~ m/^(\d*)\.(\d*)$/) {              if ($env{$_} =~ m/^(\d*)\.(\d*)$/) {
                 unless (($2 > 0 && $2 < time) || ($1 > time)) {                  unless (($2 > 0 && $2 < time) || ($1 > time)) {
                     if ($role eq 'st') {                      if ($role eq 'st') {
                         push @livecses, $cse;                          push @livecses, $cse;
Line 1651  sub blockcheck { Line 1647  sub blockcheck {
                 }                  }
             }              }
         } elsif ($_ =~ m-user\.role\.cr/(\w+)/(\w+)/([^/]+)\./(.+)$- ) {           } elsif ($_ =~ m-user\.role\.cr/(\w+)/(\w+)/([^/]+)\./(.+)$- ) { 
             my $rolepriv = $ENV{'user.role..rolesdef_'.$3};              my $rolepriv = $env{'user.role..rolesdef_'.$3};
         }          }
     }      }
     # Retrieve blocking times and identity of blocker for active courses for students.      # Retrieve blocking times and identity of blocker for active courses for students.
     if (@livecses > 0) {      if (@livecses > 0) {
         foreach my $cse (@livecses) {          foreach my $cse (@livecses) {
             my ($cdom,$crs) = split/_/,$cse;              my ($cdom,$crs) = split/_/,$cse;
             if ( (grep/^$cse$/,@staffcses) && ($ENV{'request.role'} !~ m-^st\./$cdom/$crs$-) ) {              if ( (grep/^$cse$/,@staffcses) && ($env{'request.role'} !~ m-^st\./$cdom/$crs$-) ) {
                 next;                  next;
             } else {              } else {
                 %{$$setters{$cse}} = ();                  %{$$setters{$cse}} = ();
Line 1689  sub build_block_table { Line 1685  sub build_block_table {
     my ($r,$startblock,$endblock,$setters) = @_;      my ($r,$startblock,$endblock,$setters) = @_;
     my $function = &Apache::loncommon::get_users_function();      my $function = &Apache::loncommon::get_users_function();
     my $color = &Apache::loncommon::designparm($function.'.tabbg',      my $color = &Apache::loncommon::designparm($function.'.tabbg',
                                                     $ENV{'user.domain'});                                                      $env{'user.domain'});
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'cacb' => 'Currently active communication blocks',          'cacb' => 'Currently active communication blocks',
         'cour' => 'Course',          'cour' => 'Course',
Line 1776  sub displaymessage { Line 1772  sub displaymessage {
       '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.        '<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid).$sqs.
       '"><b>Delete</b></a></td>'.        '"><b>Delete</b></a></td>'.
       '<td><a href="/adm/email?'.$sqs.        '<td><a href="/adm/email?'.$sqs.
       ($ENV{'form.dismode'} eq 'new'?'&folder=new':'').        ($env{'form.dismode'} eq 'new'?'&folder=new':'').
       '"><b>'.&mt('Back to Folder Display').'</b></a></td>');        '"><b>'.&mt('Back to Folder Display').'</b></a></td>');
     if ($counter > 0){      if ($counter > 0){
  $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.   $r->print('<td><a href="/adm/email?display='.$messages[$counter-1]->[5].$sqs.
Line 1818  sub displayresource { Line 1814  sub displayresource {
 # If the recipient is in the same course that the message was sent from and  # If the recipient is in the same course that the message was sent from and
 # has sufficient privileges, show "all details," else show citation  # has sufficient privileges, show "all details," else show citation
 #  #
     if (($ENV{'request.course.id'} eq $content{'courseid'})      if (($env{'request.course.id'} eq $content{'courseid'})
      && (&Apache::lonnet::allowed('vgr',$content{'courseid'}))) {       && (&Apache::lonnet::allowed('vgr',$content{'courseid'}))) {
  my $symb=&Apache::lonnet::symbread($content{'baseurl'});   my $symb=&Apache::lonnet::symbread($content{'baseurl'});
 # Could not get a symb, give up  # Could not get a symb, give up
Line 1875  sub printheader { Line 1871  sub printheader {
   
 sub storecomment {  sub storecomment {
     my ($r)=@_;      my ($r)=@_;
     my $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});      my $msgtxt=&Apache::lonfeedback::clear_out_html($env{'form.message'});
     my $cleanmsgtxt='';      my $cleanmsgtxt='';
     foreach (split(/[\n\r]/,$msgtxt)) {      foreach (split(/[\n\r]/,$msgtxt)) {
  unless ($_=~/^\s*(\>|\&gt\;)/) {   unless ($_=~/^\s*(\>|\&gt\;)/) {
     $cleanmsgtxt.=$_."\n";      $cleanmsgtxt.=$_."\n";
  }   }
     }      }
     my $key=&Apache::lonnet::escape($ENV{'form.baseurl'}).'___'.time;      my $key=&Apache::lonnet::escape($env{'form.baseurl'}).'___'.time;
     &Apache::lonnet::put('nohist_stored_comments',{ $key => $cleanmsgtxt });      &Apache::lonnet::put('nohist_stored_comments',{ $key => $cleanmsgtxt });
 }  }
   
 sub storedcommentlisting {  sub storedcommentlisting {
     my ($r)=@_;      my ($r)=@_;
     my %msgs=&Apache::lonnet::dump('nohist_stored_comments',undef,undef,      my %msgs=&Apache::lonnet::dump('nohist_stored_comments',undef,undef,
        '^'.&Apache::lonnet::escape(&Apache::lonnet::escape($ENV{'form.showcommentbaseurl'})));         '^'.&Apache::lonnet::escape(&Apache::lonnet::escape($env{'form.showcommentbaseurl'})));
     $r->print(&Apache::lonxml::xmlbegin().'<head>'.      $r->print(&Apache::lonxml::xmlbegin().'<head>'.
       &Apache::lonxml::fontsettings().'</head><body>');        &Apache::lonxml::fontsettings().'</head><body>');
     if ((keys %msgs)[0]=~/^error\:/) {      if ((keys %msgs)[0]=~/^error\:/) {
Line 1912  sub sendoffmail { Line 1908  sub sendoffmail {
     my ($r,$folder)=@_;      my ($r,$folder)=@_;
     my $suffix=&foldersuffix($folder);      my $suffix=&foldersuffix($folder);
     my $sendstatus='';      my $sendstatus='';
     if ($ENV{'form.send'}) {      if ($env{'form.send'}) {
  &printheader($r,'','Messages being sent.');   &printheader($r,'','Messages being sent.');
  $r->rflush();   $r->rflush();
  my %content=();   my %content=();
  undef %content;   undef %content;
  if ($ENV{'form.forwid'}) {   if ($env{'form.forwid'}) {
     my $msgid=$ENV{'form.forwid'};      my $msgid=$env{'form.forwid'};
     my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);      my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
     %content=&unpackagemsg($message{$msgid},1);      %content=&unpackagemsg($message{$msgid},1);
     &statuschange($msgid,'forwarded',$folder);      &statuschange($msgid,'forwarded',$folder);
     $ENV{'form.message'}.="\n\n-- Forwarded message --\n\n".      $env{'form.message'}.="\n\n-- Forwarded message --\n\n".
  $content{'message'};   $content{'message'};
  }   }
  if ($ENV{'form.replyid'}) {   if ($env{'form.replyid'}) {
     my $msgid=$ENV{'form.replyid'};      my $msgid=$env{'form.replyid'};
     my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);      my %message=&Apache::lonnet::get('nohist_email'.$suffix,[$msgid]);
     %content=&unpackagemsg($message{$msgid},1);      %content=&unpackagemsg($message{$msgid},1);
     &statuschange($msgid,'replied',$folder);      &statuschange($msgid,'replied',$folder);
  }   }
  my %toaddr=();   my %toaddr=();
  undef %toaddr;   undef %toaddr;
  if ($ENV{'form.sendmode'} eq 'group') {   if ($env{'form.sendmode'} eq 'group') {
     foreach (keys %ENV) {      foreach (keys %env) {
  if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {   if ($_=~/^form\.send\_to\_\&\&\&[^\&]*\&\&\&\_(.+)$/) {
     $toaddr{$1}='';      $toaddr{$1}='';
  }   }
     }      }
  } elsif ($ENV{'form.sendmode'} eq 'upload') {   } elsif ($env{'form.sendmode'} eq 'upload') {
     foreach (split(/[\n\r\f]+/,$ENV{'form.upfile'})) {      foreach (split(/[\n\r\f]+/,$env{'form.upfile'})) {
  my ($rec,$txt)=split(/\s*\:\s*/,$_);   my ($rec,$txt)=split(/\s*\:\s*/,$_);
  if ($txt) {   if ($txt) {
     $rec=~s/\@/\:/;      $rec=~s/\@/\:/;
Line 1948  sub sendoffmail { Line 1944  sub sendoffmail {
  }   }
     }      }
  } else {   } else {
     $toaddr{$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}}='';      $toaddr{$env{'form.recuname'}.':'.$env{'form.recdomain'}}='';
  }   }
  if ($ENV{'form.additionalrec'}) {   if ($env{'form.additionalrec'}) {
     foreach (split(/\,/,$ENV{'form.additionalrec'})) {      foreach (split(/\,/,$env{'form.additionalrec'})) {
  my ($auname,$audom)=split(/\@/,$_);   my ($auname,$audom)=split(/\@/,$_);
  $toaddr{$auname.':'.$audom}='';   $toaddr{$auname.':'.$audom}='';
     }      }
Line 1960  sub sendoffmail { Line 1956  sub sendoffmail {
  foreach (keys %toaddr) {   foreach (keys %toaddr) {
     my ($recuname,$recdomain)=split(/\:/,$_);      my ($recuname,$recdomain)=split(/\:/,$_);
             my $msgtxt;              my $msgtxt;
             if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&              if ((($env{'form.critmsg'}) || ($env{'form.sendbck'})) &&
                 (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {                  (&Apache::lonnet::allowed('srm',$env{'request.course.id'}))) {
                 $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'},1);                  $msgtxt=&Apache::lonfeedback::clear_out_html($env{'form.message'},1);
             } else {                } else {  
         $msgtxt=&Apache::lonfeedback::clear_out_html($ENV{'form.message'});          $msgtxt=&Apache::lonfeedback::clear_out_html($env{'form.message'});
             }              }
     if ($toaddr{$_}) { $msgtxt.='<hr />'.$toaddr{$_}; }      if ($toaddr{$_}) { $msgtxt.='<hr />'.$toaddr{$_}; }
     my $thismsg;          my $thismsg;    
     if ((($ENV{'form.critmsg'}) || ($ENV{'form.sendbck'})) &&       if ((($env{'form.critmsg'}) || ($env{'form.sendbck'})) && 
  (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'}))) {   (&Apache::lonnet::allowed('srm',$env{'request.course.id'}))) {
  $r->print(&mt('Sending critical message').' '.$recuname.'@'.$recdomain.': ');   $r->print(&mt('Sending critical message').' '.$recuname.'@'.$recdomain.': ');
  $thismsg=&user_crit_msg($recuname,$recdomain,   $thismsg=&user_crit_msg($recuname,$recdomain,
  &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),   &Apache::lonfeedback::clear_out_html($env{'form.subject'}),
  $msgtxt,   $msgtxt,
  $ENV{'form.sendbck'},$ENV{'form.permanent'});   $env{'form.sendbck'},$env{'form.permanent'});
     } else {      } else {
  $r->print(&mt('Sending').' '.$recuname.'@'.$recdomain.': ');   $r->print(&mt('Sending').' '.$recuname.'@'.$recdomain.': ');
  $thismsg=&user_normal_msg($recuname,$recdomain,   $thismsg=&user_normal_msg($recuname,$recdomain,
   &Apache::lonfeedback::clear_out_html($ENV{'form.subject'}),    &Apache::lonfeedback::clear_out_html($env{'form.subject'}),
   $msgtxt,    $msgtxt,
   $content{'citation'},undef,undef,$ENV{'form.permanent'});    $content{'citation'},undef,undef,$env{'form.permanent'});
  if (($ENV{'request.course.id'}) && ($ENV{'form.sendmode'} eq 'group')) {   if (($env{'request.course.id'}) && ($env{'form.sendmode'} eq 'group')) {
     &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'},
  'Broadcast ['.$recuname.':'.$recdomain.']',   'Broadcast ['.$recuname.':'.$recdomain.']',
  $msgtxt);   $msgtxt);
  }   }
Line 1997  sub sendoffmail { Line 1993  sub sendoffmail {
     }      }
     if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {      if ($sendstatus=~/^(\s*(?:ok|con_delayed)\s*)*$/) {
  $r->print('<br /><font color="green">'.&mt('Completed.').'</font>');   $r->print('<br /><font color="green">'.&mt('Completed.').'</font>');
  if ($ENV{'form.displayedcrit'}) {   if ($env{'form.displayedcrit'}) {
     &discrit($r);      &discrit($r);
  } else {   } else {
     &Apache::loncommunicate::menu($r);      &Apache::loncommunicate::menu($r);
Line 2028  sub handler { Line 2024  sub handler {
          'sendreply','compose','sendmail','critical','recname','recdom',           'sendreply','compose','sendmail','critical','recname','recdom',
          'recordftf','sortedby','block','folder','startdis','interdis',           'recordftf','sortedby','block','folder','startdis','interdis',
  'showcommentbaseurl','dismode']);   'showcommentbaseurl','dismode']);
     $sqs='&sortedby='.$ENV{'form.sortedby'};      $sqs='&sortedby='.$env{'form.sortedby'};
   
 # ------------------------------------------------------ They checked for email  # ------------------------------------------------------ They checked for email
     unless ($ENV{'form.block'}) {      unless ($env{'form.block'}) {
         &Apache::lonnet::put('email_status',{'recnewemail'=>0});          &Apache::lonnet::put('email_status',{'recnewemail'=>0});
     }      }
   
Line 2045  sub handler { Line 2041  sub handler {
   
 # ------------------------------------------------------------------ Get Folder  # ------------------------------------------------------------------ Get Folder
   
     my $folder=$ENV{'form.folder'};      my $folder=$env{'form.folder'};
     unless ($folder) {       unless ($folder) { 
  $folder='';    $folder=''; 
     } else {      } else {
Line 2054  sub handler { Line 2050  sub handler {
   
 # --------------------------------------------------------------------- Display  # --------------------------------------------------------------------- Display
   
     $startdis=$ENV{'form.startdis'};      $startdis=$env{'form.startdis'};
     $startdis--;      $startdis--;
     unless ($startdis) { $startdis=0; }      unless ($startdis) { $startdis=0; }
   
     $interdis=$ENV{'form.interdis'};      $interdis=$env{'form.interdis'};
     unless ($interdis) { $interdis=20; }      unless ($interdis) { $interdis=20; }
     $sqs.='&interdis='.$interdis;      $sqs.='&interdis='.$interdis;
   
     if ($ENV{'form.firstview'}) {      if ($env{'form.firstview'}) {
  $startdis=0;   $startdis=0;
     }      }
     if ($ENV{'form.lastview'}) {      if ($env{'form.lastview'}) {
  $startdis=-1;   $startdis=-1;
     }      }
     if ($ENV{'form.prevview'}) {      if ($env{'form.prevview'}) {
  $startdis--;   $startdis--;
     }      }
     if ($ENV{'form.nextview'}) {      if ($env{'form.nextview'}) {
  $startdis++;   $startdis++;
     }      }
     my $postedstartdis=$startdis+1;      my $postedstartdis=$startdis+1;
Line 2079  sub handler { Line 2075  sub handler {
   
 # --------------------------------------------------------------- Render Output  # --------------------------------------------------------------- Render Output
   
     if ($ENV{'form.display'}) {      if ($env{'form.display'}) {
  &displaymessage($r,$ENV{'form.display'},$folder);   &displaymessage($r,$env{'form.display'},$folder);
     } elsif ($ENV{'form.replyto'}) {      } elsif ($env{'form.replyto'}) {
  &compout($r,'',$ENV{'form.replyto'},undef,undef,$folder);   &compout($r,'',$env{'form.replyto'},undef,undef,$folder);
     } elsif ($ENV{'form.confirm'}) {      } elsif ($env{'form.confirm'}) {
  &printheader($r,'','Confirmed Receipt');   &printheader($r,'','Confirmed Receipt');
  foreach (keys %ENV) {   foreach (keys %env) {
     if ($_=~/^form\.rec\_(.*)$/) {      if ($_=~/^form\.rec\_(.*)$/) {
  $r->print('<b>'.&mt('Confirming Receipt').':</b> '.   $r->print('<b>'.&mt('Confirming Receipt').':</b> '.
   &user_crit_received($1).'<br>');    &user_crit_received($1).'<br>');
Line 2098  sub handler { Line 2094  sub handler {
     }      }
  }   }
  &discrit($r);   &discrit($r);
     } elsif ($ENV{'form.critical'}) {      } elsif ($env{'form.critical'}) {
  &printheader($r,'','Displaying Critical Messages');   &printheader($r,'','Displaying Critical Messages');
  &discrit($r);   &discrit($r);
     } elsif ($ENV{'form.forward'}) {      } elsif ($env{'form.forward'}) {
  &compout($r,$ENV{'form.forward'},undef,undef,undef,$folder);   &compout($r,$env{'form.forward'},undef,undef,undef,$folder);
     } elsif ($ENV{'form.markdel'}) {      } elsif ($env{'form.markdel'}) {
  &printheader($r,'','Deleted Message');   &printheader($r,'','Deleted Message');
  &statuschange($ENV{'form.markdel'},'deleted',$folder);   &statuschange($env{'form.markdel'},'deleted',$folder);
  &Apache::loncommunicate::menu($r);   &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.markedmove'}) {      } elsif ($env{'form.markedmove'}) {
  my $total=0;   my $total=0;
  foreach (keys %ENV) {   foreach (keys %env) {
     if ($_=~/^form\.delmark_(.*)$/) {      if ($_=~/^form\.delmark_(.*)$/) {
  &movemsg(&Apache::lonnet::unescape($1),$folder,   &movemsg(&Apache::lonnet::unescape($1),$folder,
  $ENV{'form.movetofolder'});   $env{'form.movetofolder'});
  $total++;   $total++;
     }      }
  }   }
Line 2121  sub handler { Line 2117  sub handler {
  $r->print('Moved '.$total.' message(s)<p>');   $r->print('Moved '.$total.' message(s)<p>');
  &Apache::loncommunicate::menu($r);   &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.markeddel'}) {      } elsif ($env{'form.markeddel'}) {
  my $total=0;   my $total=0;
  foreach (keys %ENV) {   foreach (keys %env) {
     if ($_=~/^form\.delmark_(.*)$/) {      if ($_=~/^form\.delmark_(.*)$/) {
  &statuschange(&Apache::lonnet::unescape($1),'deleted',$folder);   &statuschange(&Apache::lonnet::unescape($1),'deleted',$folder);
  $total++;   $total++;
Line 2133  sub handler { Line 2129  sub handler {
  $r->print('Deleted '.$total.' message(s)<p>');   $r->print('Deleted '.$total.' message(s)<p>');
  &Apache::loncommunicate::menu($r);   &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.markunread'}) {      } elsif ($env{'form.markunread'}) {
  &printheader($r,'','Marked Message as Unread');   &printheader($r,'','Marked Message as Unread');
  &statuschange($ENV{'form.markunread'},'new');   &statuschange($env{'form.markunread'},'new');
  &Apache::loncommunicate::menu($r);   &Apache::loncommunicate::menu($r);
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.compose'}) {      } elsif ($env{'form.compose'}) {
  &compout($r,'','',$ENV{'form.compose'});   &compout($r,'','',$env{'form.compose'});
     } elsif ($ENV{'form.recordftf'}) {      } elsif ($env{'form.recordftf'}) {
  &facetoface($r,$ENV{'form.recordftf'});   &facetoface($r,$env{'form.recordftf'});
     } elsif ($ENV{'form.block'}) {      } elsif ($env{'form.block'}) {
         &examblock($r,$ENV{'form.block'});          &examblock($r,$env{'form.block'});
     } elsif ($ENV{'form.sendmail'}) {      } elsif ($env{'form.sendmail'}) {
  &sendoffmail($r,$folder);   &sendoffmail($r,$folder);
  if ($ENV{'form.storebasecomment'}) {   if ($env{'form.storebasecomment'}) {
     &storecomment($r);      &storecomment($r);
  }   }
  &disall($r,$folder);   &disall($r,$folder);
     } elsif ($ENV{'form.newfolder'}) {      } elsif ($env{'form.newfolder'}) {
  &printheader($r,'','New Folder');   &printheader($r,'','New Folder');
  &makefolder($ENV{'form.newfolder'});   &makefolder($env{'form.newfolder'});
  &Apache::loncommunicate::menu($r);   &Apache::loncommunicate::menu($r);
  &disall($r,$ENV{'form.newfolder'});   &disall($r,$env{'form.newfolder'});
     } elsif ($ENV{'form.showcommentbaseurl'}) {      } elsif ($env{'form.showcommentbaseurl'}) {
  &storedcommentlisting($r);   &storedcommentlisting($r);
     } else {      } else {
  &printheader($r,'','Display All Messages');   &printheader($r,'','Display All Messages');

Removed from v.1.139  
changed lines
  Added in v.1.140


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