Diff for /loncom/interface/lonmsg.pm between versions 1.234 and 1.248

version 1.234, 2012/05/21 18:35:35 version 1.248, 2022/01/18 17:33:13
Line 120  Critical message to a user Line 120  Critical message to a user
   
 New routine that respects "forward" and calls old routine  New routine that respects "forward" and calls old routine
   
 =item * B<user_crit_msg($user, $domain, $subject, $message, $sendback, $nosentstore,$recipid,$attachmenturl)>:   =item * B<user_crit_msg($user, $domain, $subject, $message, $sendback, $toperm, $sentmessage, $nosentstore, $recipid, $attachmenturl, $permresults, $senthide)>: 
     Sends a critical message $message to the $user at $domain.  If $sendback      Sends a critical message $message to the $user at $domain.  If $sendback
     is true,  a receipt will be sent to the current user when $user receives       is true,  a receipt will be sent to the current user when $user receives 
     the message.      the message.
Line 148  New routine that respects "forward" and Line 148  New routine that respects "forward" and
   
 =item * B<user_normal_msg($user, $domain, $subject, $message, $citation,  =item * B<user_normal_msg($user, $domain, $subject, $message, $citation,
        $baseurl, $attachmenturl, $toperm, $sentmessage, $symb, $restitle,         $baseurl, $attachmenturl, $toperm, $sentmessage, $symb, $restitle,
        $error,$nosentstore,$recipid)>:         $error,$nosentstore,$recipid,$permresults,$senthide)>:
  Sends a message to the  $user at $domain, with subject $subject and message $message.   Sends a message to the  $user at $domain, with subject $subject and message $message.
   
     Additionally it will check if the user has a Forwarding address      Additionally it will check if the user has a Forwarding address
Line 200  Returns Line 200  Returns
   
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
   use Apache::loncommon;
 use HTML::TokeParser();  use HTML::TokeParser();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Mail::Send;  
 use HTML::Entities;  use HTML::Entities;
 use Encode;  use Encode;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
Line 218  use LONCAPA qw(:DEFAULT :match); Line 218  use LONCAPA qw(:DEFAULT :match);
   
   
 sub packagemsg {  sub packagemsg {
     my ($subject,$message,$citation,$baseurl,$attachmenturl,      my ($subject,$message,$citation,$baseurl,$attachmenturl,$recuser,$recdomain,
  $recuser,$recdomain,$msgid,$type,$crsmsgid,$symb,$error,$recipid)=@_;   $msgid,$type,$crsmsgid,$symb,$error,$recipid,$senthide,$origmsgid)=@_;
     $message =&HTML::Entities::encode($message,'<>&"');      $message =&HTML::Entities::encode($message,'<>&"');
     $citation=&HTML::Entities::encode($citation,'<>&"');      $citation=&HTML::Entities::encode($citation,'<>&"');
     $subject =&HTML::Entities::encode($subject,'<>&"');      $subject =&HTML::Entities::encode($subject,'<>&"');
Line 229  sub packagemsg { Line 229  sub packagemsg {
     #remove machine specification      #remove machine specification
     $attachmenturl =~ s|^https?://[^/]+/|/|;      $attachmenturl =~ s|^https?://[^/]+/|/|;
     $attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"');      $attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"');
       if ($senthide) {
           foreach my $item ($subject,$message) {
               if ($item ne '') {
                   $item = 'Not shown due to IP block';
               }
           }
           if ($attachmenturl ne '') {
               $attachmenturl = '';
           }
           if ($citation ne '') {
               $citation = '';
           }
           if ($msgid ne '') {
               $msgid = '';
           }
       }
     my $course_context = &get_course_context();      my $course_context = &get_course_context();
     my $now=time;      my $now=time;
       my $ip = &Apache::lonnet::get_requestor_ip();
     my $msgcount = &get_uniq();      my $msgcount = &get_uniq();
     unless(defined($msgid)) {      unless(defined($msgid)) {
         $msgid = &buildmsgid($now,$subject,$env{'user.name'},$env{'user.domain'},          $msgid = &buildmsgid($now,$subject,$env{'user.name'},$env{'user.domain'},
Line 250  sub packagemsg { Line 267  sub packagemsg {
     }      }
     $result .= '<servername>'.$ENV{'SERVER_NAME'}.'</servername>'.      $result .= '<servername>'.$ENV{'SERVER_NAME'}.'</servername>'.
            '<host>'.$ENV{'HTTP_HOST'}.'</host>'.             '<host>'.$ENV{'HTTP_HOST'}.'</host>'.
    '<client>'.$ENV{'REMOTE_ADDR'}.'</client>'.     '<client>'.$ip.'</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>'.
Line 318  sub packagemsg { Line 335  sub packagemsg {
             }              }
         }          }
     }      }
       if ($senthide) {
           $result .= '<senthide>$origmsgid</senthide>';
       }
     return ($msgid,$result);      return ($msgid,$result);
 }  }
   
Line 397  sub buildmsgid { Line 417  sub buildmsgid {
 }  }
   
 sub unpackmsgid {  sub unpackmsgid {
     my ($msgid,$folder,$skipstatus,$status_cache)=@_;      my ($msgid,$folder,$skipstatus,$status_cache,$onlycid)=@_;
     $msgid=&unescape($msgid);      $msgid=&unescape($msgid);
     my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$fromcid,      my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$fromcid,
         $processid,$symb,$error) = split(/\:/,&unescape($msgid));          $processid,$symb,$error) = split(/\:/,&unescape($msgid));
       if (!defined($processid)) { $fromcid = ''; }
       if (($onlycid) && ($onlycid ne $fromcid)) {
           return ($sendtime,'',$fromname,$fromdomain,'',$fromcid,'',$error);
       }
     $shortsubj = &unescape($shortsubj);      $shortsubj = &unescape($shortsubj);
     $shortsubj = &HTML::Entities::decode($shortsubj);      $shortsubj = &HTML::Entities::decode($shortsubj);
     $symb = &unescape($symb);      $symb = &unescape($symb);
     if (!defined($processid)) { $fromcid = ''; }  
     my %status=();      my %status=();
     unless ($skipstatus) {      unless ($skipstatus) {
  if (ref($status_cache)) {   if (ref($status_cache)) {
Line 421  sub unpackmsgid { Line 444  sub unpackmsgid {
   
   
 sub sendemail {  sub sendemail {
     my ($to,$subject,$body,$to_uname,$to_udom,$user_lh)=@_;      my ($to,$subject,$body,$to_uname,$to_udom,$user_lh,$attachmenturl)=@_;
     my $senderaddress='';      my $senderaddress='';
     my $replytoaddress='';      my $replytoaddress='';
       my $msgsent;
     if ($env{'form.can_reply'} eq 'N') {      if ($env{'form.can_reply'} eq 'N') {
         my $lonhost = $Apache::lonnet::perlvar{'lonHostID'};          my $lonhost = $Apache::lonnet::perlvar{'lonHostID'};
         my $hostname = &Apache::lonnet::hostname($lonhost);          my $hostname = &Apache::lonnet::hostname($lonhost);
Line 456  sub sendemail { Line 480  sub sendemail {
     "*** ".($senderaddress?&mt_user($user_lh,'You can reply to this e-mail'):&mt_user($user_lh,'Please do not reply to this address.')."\n*** ".      "*** ".($senderaddress?&mt_user($user_lh,'You can reply to this e-mail'):&mt_user($user_lh,'Please do not reply to this address.')."\n*** ".
     &mt_user($user_lh,'A reply will not be received by the recipient!'))."\n\n".$body;      &mt_user($user_lh,'A reply will not be received by the recipient!'))."\n\n".$body;
           
     my $msg = new Mail::Send;      $attachmenturl = &Apache::lonnet::filelocation("",$attachmenturl);
     $msg->to($to);      my $filesize = (stat($attachmenturl))[7];
     $msg->subject('[LON-CAPA] '.$subject);      if ($filesize > 1048576) {
     if ($replytoaddress) {          # Don't send if it exceeds 1 MB.
         $msg->add('Reply-to',$replytoaddress);          print '<p><span class="LC_error">' 
     }              .&mt('Email not sent.  Attachment exceeds permitted length.')
     if ($senderaddress) {              .'</span><br /></p>';
         $msg->add('From',$senderaddress);      } else {
     }          # Otherwise build and send the email
     $msg->add('Content-type','text/plain; charset=UTF-8');          $subject = '[LON-CAPA] '.$subject;
     if (my $fh = $msg->open()) {          &Apache::loncommon::mime_email($senderaddress,$replytoaddress,$to,
  print $fh $body;                                         $subject,$body,'','',$attachmenturl,'','');
  $fh->close;          $msgsent = 1;
     }      }
       return $msgsent;
 }  }
   
 # ==================================================== Send notification emails  # ==================================================== Send notification emails
   
 sub sendnotification {  sub sendnotification {
     my ($to,$touname,$toudom,$subj,$crit,$text,$msgid)=@_;      my ($to,$touname,$toudom,$subj,$crit,$text,$msgid,$attachmenturl)=@_;
     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':'');
       my $numsent = 0;
   
     $text=~s/\&lt\;/\</gs;      $text=~s/\&lt\;/\</gs;
     $text=~s/\&gt\;/\>/gs;      $text=~s/\&gt\;/\>/gs;
     my $homeserver = &Apache::lonnet::homeserver($touname,$toudom);      my $homeserver = &Apache::lonnet::homeserver($touname,$toudom);
       my $hostname = &Apache::lonnet::hostname($homeserver);
     my $protocol = $Apache::lonnet::protocol{$homeserver};      my $protocol = $Apache::lonnet::protocol{$homeserver};
     $protocol = 'http' if ($protocol ne 'https');      $protocol = 'http' if ($protocol ne 'https');
     my $url = $protocol.'://'.&Apache::lonnet::hostname($homeserver).  #FIXME
       my $url = $protocol.'://'.$hostname.
               '/adm/email?username='.$touname.'&domain='.$toudom.                '/adm/email?username='.$touname.'&domain='.$toudom.
               '&display='.&escape($msgid);                '&display='.&escape($msgid);
     my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,      my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,
Line 526  sub sendnotification { Line 554  sub sendnotification {
   
 to access the full message.',$url);  to access the full message.',$url);
     my %userenv = &Apache::lonnet::get('environment',['notifywithhtml'],$toudom,$touname);      my %userenv = &Apache::lonnet::get('environment',['notifywithhtml'],$toudom,$touname);
     my $subject = &mt_user($user_lh,"'New' $critical message from ").$sender;      my $subject = &mt_user($user_lh,"'New'$critical message from [_1]",$sender);
     unless ($subj eq '') {      unless ($subj eq '') {
         $subject = $subj;          $subject = $subj;
     }      }
     
     my ($blocked,$blocktext);      my ($blocked,$blocktext,$clientip);
       $clientip = &Apache::lonnet::get_requestor_ip();
     if (!$crit) {      if (!$crit) {
         my %setters;          my %setters;
         my ($startblock,$endblock) =           my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = 
             &Apache::loncommon::blockcheck(\%setters,'com',$touname,$toudom);              &Apache::loncommon::blockcheck(\%setters,'com',$clientip,$touname,$toudom);
         if ($startblock && $endblock) {          if ($startblock && $endblock) {
             $blocked = 1;              $blocked = 1;
             my $showstart = &Apache::lonlocal::locallocaltime($startblock);              my $showstart = &Apache::lonlocal::locallocaltime($startblock);
             my $showend = &Apache::lonlocal::locallocaltime($endblock);              my $showend = &Apache::lonlocal::locallocaltime($endblock);
             $blocktext = &mt_user($user_lh,'LON-CAPA messages sent to you between [_1] and [_2] will be inaccessible until the end of this time period, because you are a student in a course with an active communications block.',$showstart,$showend);              $blocktext = &mt_user($user_lh,'LON-CAPA messages sent to you between [_1] and [_2] will be inaccessible until the end of this time period, because you are a student in a course with an active communications block.',$showstart,$showend);
           } elsif ($by_ip) {
               $blocked = 1;
               $blocktext = &mt_user($user_lh,'LON-CAPA messages sent to you will be inaccessible from your IP address [_1], because communication is being blocked for certain IP address(es).',$clientip);
         }          }
     }      }
     if ($userenv{'notifywithhtml'} ne '') {      if ($userenv{'notifywithhtml'} ne '') {
Line 558  to access the full message.',$url); Line 590  to access the full message.',$url);
                 }                  }
                 $body = $bodybegin.$bodysubj.$sendtext.$bodyend;                  $body = $bodybegin.$bodysubj.$sendtext.$bodyend;
             }              }
             &sendemail($addr,$subject,$body,$touname,$toudom,$user_lh);              if (&sendemail($addr,$subject,$body,$touname,$toudom,$user_lh,$attachmenturl)) {
                   $numsent ++;
               }
         }          }
     } else {      } else {
         if ($blocked) {          if ($blocked) {
Line 567  to access the full message.',$url); Line 601  to access the full message.',$url);
             my $htmlfree = &make_htmlfree($text);              my $htmlfree = &make_htmlfree($text);
             $body = $bodybegin.$bodysubj.$htmlfree.$bodyend;              $body = $bodybegin.$bodysubj.$htmlfree.$bodyend;
         }          }
         &sendemail($to,$subject,$body,$touname,$toudom,$user_lh);          if (&sendemail($to,$subject,$body,$touname,$toudom,$user_lh,$attachmenturl)) {
               $numsent ++;
           }
     }      }
       return $numsent;
 }  }
   
 sub make_htmlfree {  sub make_htmlfree {
Line 625  sub retrieve_author_res_msg { Line 662  sub retrieve_author_res_msg {
     my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);      my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);
     my %errormsgs=&Apache::lonnet::dump('nohist_res_msgs',$domain,$author);      my %errormsgs=&Apache::lonnet::dump('nohist_res_msgs',$domain,$author);
     my $msgs='';      my $msgs='';
     foreach (keys %errormsgs) {      foreach my $msg (keys(%errormsgs)) {
  if ($_=~/^\Q$url\E\_\d+$/) {   if ($msg =~ /^\Q$url\E\_\d+$/) {
     my %content=&unpackagemsg($errormsgs{$_});      my %content=&unpackagemsg($errormsgs{$msg});
     $msgs.='<p><img src="/adm/lonMisc/bomb.gif" /><b>'.      $msgs.='<p><img src="/adm/lonMisc/bomb.gif" /><b>'.
  $content{'time'}.'</b>: '.$content{'message'}.   $content{'time'}.'</b>: '.$content{'message'}.
  '<br /></p>';   '<br /></p>';
Line 645  sub del_url_author_res_msg { Line 682  sub del_url_author_res_msg {
     $url=&Apache::lonnet::declutter($url);      $url=&Apache::lonnet::declutter($url);
     my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);      my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);
     my @delmsgs=();      my @delmsgs=();
     foreach (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {      foreach my $msg (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
  if ($_=~/^\Q$url\E\_\d+$/) {   if ($msg =~ /^\Q$url\E\_\d+$/) {
     push (@delmsgs,$_);      push (@delmsgs,$msg);
  }   }
     }      }
     return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author);      return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author);
Line 659  sub clear_author_res_msg { Line 696  sub clear_author_res_msg {
     $url=&Apache::lonnet::declutter($url);      $url=&Apache::lonnet::declutter($url);
     my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);      my ($domain,$author)=($url=~/^($match_domain)\/($match_username)\//);
     my @delmsgs=();      my @delmsgs=();
     foreach (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {      foreach my $msg (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
  if ($_=~/^\Q$url\E/) {   if ($msg =~ /^\Q$url\E/) {
     push (@delmsgs,$_);      push (@delmsgs,$msg);
  }   }
     }      }
     return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author);      return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author);
Line 672  sub clear_author_res_msg { Line 709  sub clear_author_res_msg {
 sub all_url_author_res_msg {  sub all_url_author_res_msg {
     my ($author,$domain)=@_;      my ($author,$domain)=@_;
     my %returnhash=();      my %returnhash=();
     foreach (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {      foreach my $msg (&Apache::lonnet::getkeys('nohist_res_msgs',$domain,$author)) {
  $_=~/^(.+)\_\d+/;   $msg =~ /^(.+)\_\d+/;
  $returnhash{$1}=1;   $returnhash{$1}=1;
     }      }
     return %returnhash;      return %returnhash;
Line 696  sub store_instructor_comment { Line 733  sub store_instructor_comment {
   
 sub user_crit_msg_raw {  sub user_crit_msg_raw {
     my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage,      my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage,
         $nosentstore,$recipid,$attachmenturl)=@_;          $nosentstore,$recipid,$attachmenturl,$permresults,$senthide)=@_;
 # Check if allowed missing  # Check if allowed missing
     my ($status,$packed_message);      my ($status,$packed_message);
     my $msgid='undefined';      my $msgid='undefined';
Line 714  sub user_crit_msg_raw { Line 751  sub user_crit_msg_raw {
             $$sentmessage = $packed_message;              $$sentmessage = $packed_message;
         }          }
         if (!$nosentstore) {          if (!$nosentstore) {
             (undef,my $packed_message_no_citation) =              my ($sentmsgid,$packed_message_no_citation) =
             &packagemsg($subject,$message,undef,undef,$attachmenturl,$user,              &packagemsg($subject,$message,undef,undef,$attachmenturl,$user,
                         $domain,$msgid);                          $domain,$msgid,undef,undef,undef,undef,undef,$senthide,$msgid);
             if ($status eq 'ok' || $status eq 'con_delayed') {              if ($status eq 'ok' || $status eq 'con_delayed') {
                 &store_sent_mail($msgid,$packed_message_no_citation);                  if ($senthide && $sentmsgid) {
                       &store_sent_mail($sentmsgid,$packed_message_no_citation);
                   } else {
                       &store_sent_mail($msgid,$packed_message_no_citation);
                   }
             }              }
         }          }
     } else {      } else {
Line 727  sub user_crit_msg_raw { Line 768  sub user_crit_msg_raw {
   
 # Notifications  # Notifications
     my %userenv = &Apache::loncommon::getemails($user,$domain);      my %userenv = &Apache::loncommon::getemails($user,$domain);
     if ($userenv{'critnotification'}) {      my $critnotify = $userenv{'critnotification'};
       &sendnotification($userenv{'critnotification'},$user,$domain,$subject,1,      my $permemail = $userenv{'permanentemail'};
  $text,$msgid);      my $numcrit = 0;
     }      my $numperm = 0;
     if ($toperm && $userenv{'permanentemail'}) {      my $permlogmsgstatus;
       &sendnotification($userenv{'permanentemail'},$user,$domain,$subject,1,      if ($critnotify) {
  $text,$msgid);          $numcrit = &sendnotification($critnotify,$user,$domain,$subject,1,$text,$msgid,$attachmenturl);
       }
       if ($toperm && $permemail) {
           if ($critnotify && $numcrit) {
               if (grep(/^\Q$permemail\E/,split(/,/,$critnotify))) {
                   $numperm = 1;
               }
           }
           unless ($numperm) {
               $numperm = &sendnotification($permemail,$user,$domain,$subject,1,$text,$msgid,$attachmenturl);
           }
       }
       if ($toperm) {
           $permlogmsgstatus = '. Perm. email log status '.
                               &Apache::lonnet::log($env{'user.domain'},$env{'user.name'},$env{'user.home'},
                                                    "Perm. e-mail count $numperm for $user at $domain");
           if (ref($permresults) eq 'HASH') {
               $permresults->{"$user:$domain"} = $numperm;
           }
     }      }
 # Log this  # Log this
     &Apache::lonnet::logthis(      &Apache::lonnet::logthis(
       'Sending critical email '.$msgid.        'Sending critical '.$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).$permlogmsgstatus);
     return $status;      return $status;
 }  }
   
Line 750  sub user_crit_msg_raw { Line 809  sub user_crit_msg_raw {
   
 sub user_crit_msg {  sub user_crit_msg {
     my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage,      my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage,
         $nosentstore,$recipid,$attachmenturl)=@_;          $nosentstore,$recipid,$attachmenturl,$permresults,$senthide)=@_;
     my @status;      my @status;
     my %userenv = &Apache::lonnet::get('environment',['msgforward'],      my %userenv = &Apache::lonnet::get('environment',['msgforward'],
                                        $domain,$user);                                         $domain,$user);
Line 761  sub user_crit_msg { Line 820  sub user_crit_msg {
          push(@status,           push(@status,
       &user_crit_msg_raw($forwuser,$forwdomain,$subject,$message,        &user_crit_msg_raw($forwuser,$forwdomain,$subject,$message,
  $sendback,$toperm,$sentmessage,$nosentstore,   $sendback,$toperm,$sentmessage,$nosentstore,
                                  $recipid,$attachmenturl));                                   $recipid,$attachmenturl,$permresults,$senthide));
        }         }
     } else {       } else { 
  push(@status,   push(@status,
      &user_crit_msg_raw($user,$domain,$subject,$message,$sendback,       &user_crit_msg_raw($user,$domain,$subject,$message,$sendback,
  $toperm,$sentmessage,$nosentstore,$recipid,   $toperm,$sentmessage,$nosentstore,$recipid,
                                 $attachmenturl));                                  $attachmenturl,$permresults,$senthide));
     }      }
     if (wantarray) {      if (wantarray) {
  return @status;   return @status;
Line 816  sub user_crit_received { Line 875  sub user_crit_received {
 sub user_normal_msg_raw {  sub user_normal_msg_raw {
     my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl,      my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl,
         $toperm,$currid,$newid,$sentmessage,$crsmsgid,$symb,$restitle,          $toperm,$currid,$newid,$sentmessage,$crsmsgid,$symb,$restitle,
         $error,$nosentstore,$recipid)=@_;          $error,$nosentstore,$recipid,$permresults,$senthide)=@_;
 # Check if allowed missing  # Check if allowed missing
     my ($status,$packed_message);      my ($status,$packed_message);
     my $msgid='undefined';      my $msgid='undefined';
Line 838  sub user_normal_msg_raw { Line 897  sub user_normal_msg_raw {
                          ('email_status',{'recnewemail'=>time},$domain,$user);                           ('email_status',{'recnewemail'=>time},$domain,$user);
 # Into sent-mail folder if sent mail storage required  # Into sent-mail folder if sent mail storage required
        if (!$nosentstore) {         if (!$nosentstore) {
            (undef,my $packed_message_no_citation) =             my ($sentmsgid,$packed_message_no_citation) =
                &packagemsg($subject,$message,undef,$baseurl,$attachmenturl,                 &packagemsg($subject,$message,undef,$baseurl,$attachmenturl,
                            $user,$domain,$currid,undef,$crsmsgid,$symb,$error);                             $user,$domain,$currid,undef,$crsmsgid,$symb,$error,
                              undef,$senthide,$msgid);
            if ($status eq 'ok' || $status eq 'con_delayed') {             if ($status eq 'ok' || $status eq 'con_delayed') {
                &store_sent_mail($msgid,$packed_message_no_citation);                 if ($senthide && $sentmsgid) {
                      &store_sent_mail($sentmsgid,$packed_message_no_citation);
                  } else {
                      &store_sent_mail($msgid,$packed_message_no_citation);
                  }
            }             }
        }         }
        if (ref($newid) eq 'SCALAR') {         if (ref($newid) eq 'SCALAR') {
Line 853  sub user_normal_msg_raw { Line 917  sub user_normal_msg_raw {
        }         }
 # Notifications  # Notifications
        my %userenv = &Apache::loncommon::getemails($user,$domain);         my %userenv = &Apache::loncommon::getemails($user,$domain);
        if ($userenv{'notification'}) {         my $notify = $userenv{'notification'};
    &sendnotification($userenv{'notification'},$user,$domain,$subject,0,         my $permemail = $userenv{'permanentemail'};
      $text,$msgid);         my $numnotify = 0;
          my $numperm = 0;
          my $permlogmsgstatus;
          if ($notify) {
              $numnotify = &sendnotification($notify,$user,$domain,$subject,0,$text,$msgid,$attachmenturl);
          }
          if ($toperm && $permemail) {
              if ($notify && $numnotify) {
                  if (grep(/^\Q$permemail\E/,split(/,/,$notify))) {
                      $numperm = 1;
                  }
              }
              unless ($numperm) {
                  $numperm = &sendnotification($permemail,$user,$domain,$subject,0,
                                               $text,$msgid,$attachmenturl);
              }
        }         }
        if ($toperm && $userenv{'permanentemail'}) {         if ($toperm) {
            if ((!$userenv{'notification'}) || ($userenv{'notification'} ne $userenv{'permanentemail'})) {             $permlogmsgstatus = '. Perm. email log status '.
        &sendnotification($userenv{'permanentemail'},$user,$domain,$subject,0,                           &Apache::lonnet::log($env{'user.domain'},$env{'user.name'},$env{'user.home'},
            $text,$msgid);                                                "Perm. e-mail count $numperm for $user at $domain");
              if (ref($permresults) eq 'HASH') {
                  $permresults->{"$user:$domain"} = $numperm;
            }             }
        }         }
        &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.
                               $permlogmsgstatus);
    } else {     } else {
        $status='no_host';         $status='no_host';
    }     }
Line 874  sub user_normal_msg_raw { Line 956  sub user_normal_msg_raw {
   
 sub user_normal_msg {  sub user_normal_msg {
     my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl,      my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl,
  $toperm,$sentmessage,$symb,$restitle,$error,$nosentstore,$recipid)=@_;   $toperm,$sentmessage,$symb,$restitle,$error,$nosentstore,$recipid,
           $permresults,$senthide)=@_;
     my @status;      my @status;
     my %userenv = &Apache::lonnet::get('environment',['msgforward'],      my %userenv = &Apache::lonnet::get('environment',['msgforward'],
                                        $domain,$user);                                         $domain,$user);
     my $msgforward=$userenv{'msgforward'};      my $msgforward=$userenv{'msgforward'};
     if ($msgforward) {      if ($msgforward) {
         foreach (split(/\,/,$msgforward)) {          foreach my $fwd (split(/\,/,$msgforward)) {
     my ($forwuser,$forwdomain)=split(/\:/,$_);      my ($forwuser,$forwdomain)=split(/\:/,$fwd);
     push(@status,      push(@status,
         &user_normal_msg_raw($forwuser,$forwdomain,$subject,$message,          &user_normal_msg_raw($forwuser,$forwdomain,$subject,$message,
      $citation,$baseurl,$attachmenturl,$toperm,       $citation,$baseurl,$attachmenturl,$toperm,
      undef,undef,$sentmessage,undef,$symb,       undef,undef,$sentmessage,undef,$symb,
                                      $restitle,$error,$nosentstore,$recipid));                                       $restitle,$error,$nosentstore,$recipid,
                                        $permresults,$senthide));
         }          }
     } else {      } else {
  push(@status,&user_normal_msg_raw($user,$domain,$subject,$message,   push(@status,&user_normal_msg_raw($user,$domain,$subject,$message,
      $citation,$baseurl,$attachmenturl,$toperm,       $citation,$baseurl,$attachmenturl,$toperm,
      undef,undef,$sentmessage,undef,$symb,       undef,undef,$sentmessage,undef,$symb,
                                      $restitle,$error,$nosentstore,$recipid));                                       $restitle,$error,$nosentstore,$recipid,
                                        $permresults,$senthide));
     }      }
     if (wantarray) {      if (wantarray) {
         return @status;          return @status;
Line 901  sub user_normal_msg { Line 986  sub user_normal_msg {
 }  }
   
 sub process_sent_mail {  sub process_sent_mail {
     my ($msgsubj,$subj_prefix,$numsent,$stamp,$msgname,$msgdom,$msgcount,$context,$pid,$savemsg,$recusers,$recudoms,$baseurl,$attachmenturl,$symb,$error,$senderuname,$senderdom,$recipid) = @_;      my ($msgsubj,$subj_prefix,$numsent,$stamp,$msgname,$msgdom,$msgcount,
           $context,$pid,$savemsg,$recusers,$recudoms,$baseurl,$attachmenturl,
           $symb,$error,$senderuname,$senderdom,$recipid) = @_;
     my $sentsubj;      my $sentsubj;
     if ($numsent > 1) {      if ($numsent > 1) {
         $sentsubj = $subj_prefix.' ('.$numsent.' sent) '.$msgsubj;          $sentsubj = $subj_prefix.' ('.$numsent.' sent) '.$msgsubj;

Removed from v.1.234  
changed lines
  Added in v.1.248


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.