Diff for /loncom/interface/lonmsg.pm between versions 1.207 and 1.212

version 1.207, 2007/05/09 21:04:51 version 1.212, 2008/06/06 05:24:28
Line 179  sub packagemsg { Line 179  sub packagemsg {
   
 sub get_course_context {  sub get_course_context {
     my $course_context;      my $course_context;
       my $msgkey;
     if (defined($env{'form.replyid'})) {      if (defined($env{'form.replyid'})) {
           $msgkey = $env{'form.replyid'};
       } elsif (defined($env{'form.forwid'})) {
           $msgkey = $env{'form.forwid'}
       } elsif (defined($env{'form.multiforwid'})) {
           $msgkey = $env{'form.multiforwid'};
       }
       if ($msgkey ne '') {
         my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$origcid)=          my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$origcid)=
                    split(/\:/,&unescape($env{'form.replyid'}));                     split(/\:/,&unescape($msgkey));
         $course_context = $origcid;          $course_context = $origcid;
     }      }
     foreach my $key (keys(%env)) {      foreach my $key (keys(%env)) {
Line 201  sub get_course_context { Line 209  sub get_course_context {
 # ================================================== Unpack message into a hash  # ================================================== Unpack message into a hash
   
 sub unpackagemsg {  sub unpackagemsg {
     my ($message,$notoken)=@_;      my ($message,$notoken,$noattachmentlink)=@_;
     my %content=();      my %content=();
     my $parser=HTML::TokeParser->new(\$message);      my $parser=HTML::TokeParser->new(\$message);
     my $token;      my $token;
Line 221  sub unpackagemsg { Line 229  sub unpackagemsg {
        }         }
     }      }
     if (!exists($content{'recuser'})) { $content{'recuser'} = []; }      if (!exists($content{'recuser'})) { $content{'recuser'} = []; }
     if ($content{'attachmenturl'}) {      if (($content{'attachmenturl'}) && (!$noattachmentlink)) {
        my ($fname)=($content{'attachmenturl'}=~m|/([^/]+)$|);         my ($fname)=($content{'attachmenturl'}=~m|/([^/]+)$|);
        if ($notoken) {         if ($notoken) {
    $content{'message'}.='<p>'.&mt('Attachment').': <tt>'.$fname.'</tt>';     $content{'message'}.='<p>'.&mt('Attachment').': <tt>'.$fname.'</tt>';
Line 299  sub sendnotification { Line 307  sub sendnotification {
     my ($to,$touname,$toudom,$subj,$crit,$text,$msgid)=@_;      my ($to,$touname,$toudom,$subj,$crit,$text,$msgid)=@_;
     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;
     $text=~s/\&gt\;/\>/gs;      $text=~s/\&gt\;/\>/gs;
     my $url='http://'.      my $url='http://'.
Line 309  sub sendnotification { Line 318  sub sendnotification {
       '/adm/email?username='.$touname.'&domain='.$toudom;        '/adm/email?username='.$touname.'&domain='.$toudom;
     my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,      my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,
         $symb,$error) = &Apache::lonmsg::unpackmsgid($msgid);          $symb,$error) = &Apache::lonmsg::unpackmsgid($msgid);
     my ($coursetext,$body,$bodystart,$bodyend);      my ($coursetext,$body,$bodybegin,$bodysubj,$bodyend);
     if ($fromcid ne '') {      if ($fromcid ne '') {
         $coursetext = "\n".&mt('Course').': ';          $coursetext = "\n".&mt('Course').': ';
         if ($env{'course.'.$fromcid.'.description'} ne '') {          if ($env{'course.'.$fromcid.'.description'} ne '') {
Line 323  sub sendnotification { Line 332  sub sendnotification {
         $coursetext .= "\n\n";          $coursetext .= "\n\n";
     }      }
     my @recipients = split(/,/,$to);      my @recipients = split(/,/,$to);
     $bodystart = $coursetext.       $bodybegin = $coursetext. 
                &mt('You received a'.$critical.' message from [_1] in LON-CAPA.',$sender).' '.&mt('The subject is                  &mt('You received a'.$critical.' message from [_1] in LON-CAPA.',$sender).' ';
       $bodysubj = &mt('The subject is 
   
  [_1]   [_1]
   
Line 341  sub sendnotification { Line 351  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("'New' $critical message from ").$sender;      my $subject = &mt("'New' $critical message from ").$sender;
    
       my ($blocked,$blocktext);
       if (!$crit) {
           my %setters;
           my ($startblock,$endblock) = 
               &Apache::loncommon::blockcheck(\%setters,'com',$touname,$toudom);
           if ($startblock && $endblock) {
               $blocked = 1;
               my $showstart = &Apache::lonlocal::locallocaltime($startblock);
               my $showend = &Apache::lonlocal::locallocaltime($endblock);
               $blocktext = &mt('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);
           }
       }
     if ($userenv{'notifywithhtml'} ne '') {      if ($userenv{'notifywithhtml'} ne '') {
         my @htmlexcerpt = split(/,/,$userenv{'notifywithhtml'});          my @htmlexcerpt = split(/,/,$userenv{'notifywithhtml'});
         foreach my $addr (@recipients) {          foreach my $addr (@recipients) {
             my $sendtext = $text;              if ($blocked) {
             if (!grep/^\Q$addr\E/,@htmlexcerpt) {                  $body = $bodybegin."\n".$blocktext."\n".$bodyend;
                 $sendtext =~ s/\<\/*[^\>]+\>//gs;              } else {
                   my $sendtext = $text;
                   if (!grep/^\Q$addr\E/,@htmlexcerpt) {
                       $sendtext =~ s/\<\/*[^\>]+\>//gs;
                   }
                   $body = $bodybegin.$bodysubj.$sendtext.$bodyend;
             }              }
             $body = $bodystart.$sendtext.$bodyend;  
             &sendemail($addr,$subject,$body);              &sendemail($addr,$subject,$body);
         }          }
     } else {      } else {
         $text =~ s/\<\/*[^\>]+\>//gs;          if ($blocked) {
         $body = $bodystart.$text.$bodyend;              $body = $bodybegin."\n".$blocktext."\n".$bodyend;
           } else {
               $text =~ s/\<\/*[^\>]+\>//gs;
               $body = $bodybegin.$bodysubj.$text.$bodyend;
           }
         &sendemail($to,$subject,$body);          &sendemail($to,$subject,$body);
     }      }
 }  }
Line 362  to access the full message.',$url); Line 393  to access the full message.',$url);
 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; }
     }      }
     return 0;      return 0;
Line 476  sub store_instructor_comment { Line 507  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)=@_;          $nosentstore,$recipid,$attachmenturl)=@_;
 # Check if allowed missing  # Check if allowed missing
     my ($status,$packed_message);      my ($status,$packed_message);
     my $msgid='undefined';      my $msgid='undefined';
Line 485  sub user_crit_msg_raw { Line 516  sub user_crit_msg_raw {
     my $homeserver=&Apache::lonnet::homeserver($user,$domain);      my $homeserver=&Apache::lonnet::homeserver($user,$domain);
     if ($homeserver ne 'no_host') {      if ($homeserver ne 'no_host') {
        ($msgid,$packed_message)=&packagemsg($subject,$message,undef,undef,         ($msgid,$packed_message)=&packagemsg($subject,$message,undef,undef,
                                   undef,undef,undef,undef,undef,undef,undef,                                    $attachmenturl,undef,undef,undef,undef,undef,
                                   undef,$recipid);                                    undef,undef,$recipid);
        if ($sendback) { $packed_message.='<sendback>true</sendback>'; }         if ($sendback) { $packed_message.='<sendback>true</sendback>'; }
        $status=&Apache::lonnet::critical(         $status=&Apache::lonnet::cput('critical', {$msgid => $packed_message},
            'put:'.$domain.':'.$user.':critical:'.       $domain,$user);
            &escape($msgid).'='.  
            &escape($packed_message),$homeserver);  
         if (defined($sentmessage)) {          if (defined($sentmessage)) {
             $$sentmessage = $packed_message;              $$sentmessage = $packed_message;
         }          }
         if (!$nosentstore) {          if (!$nosentstore) {
             (undef,my $packed_message_no_citation) =              (undef,my $packed_message_no_citation) =
             &packagemsg($subject,$message,undef,undef,undef,$user,$domain,              &packagemsg($subject,$message,undef,undef,$attachmenturl,$user,
                         $msgid);                          $domain,$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);                  &store_sent_mail($msgid,$packed_message_no_citation);
             }              }
Line 532  sub user_crit_msg_raw { Line 561  sub user_crit_msg_raw {
   
 =pod  =pod
   
 =item * B<user_crit_msg($user, $domain, $subject, $message, $sendback, $nosentstore,$recipid)>:   =item * B<user_crit_msg($user, $domain, $subject, $message, $sendback, $nosentstore,$recipid,$attachmenturl)>: 
     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 549  sub user_crit_msg_raw { Line 578  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)=@_;          $nosentstore,$recipid,$attachmenturl)=@_;
     my @status;      my @status;
     my %userenv = &Apache::lonnet::get('environment',['msgforward'],      my %userenv = &Apache::lonnet::get('environment',['msgforward'],
                                        $domain,$user);                                         $domain,$user);
Line 560  sub user_crit_msg { Line 589  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));                                   $recipid,$attachmenturl));
        }         }
     } 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));
     }      }
     if (wantarray) {      if (wantarray) {
  return @status;   return @status;
Line 628  sub user_normal_msg_raw { Line 658  sub user_normal_msg_raw {
                                      undef,$crsmsgid,$symb,$error,$recipid);                                       undef,$crsmsgid,$symb,$error,$recipid);
   
 # Store in user folder  # Store in user folder
        $status=&Apache::lonnet::critical(         $status=
            'put:'.$domain.':'.$user.':nohist_email:'.     &Apache::lonnet::cput('nohist_email',{$msgid => $packed_message},
            &escape($msgid).'='.   $domain,$user);
            &escape($packed_message),$homeserver);  
 # Save new message received time  # Save new message received time
        &Apache::lonnet::put         &Apache::lonnet::put
                          ('email_status',{'recnewemail'=>time},$domain,$user);                           ('email_status',{'recnewemail'=>time},$domain,$user);
Line 717  sub user_normal_msg { Line 746  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,$senderhome) = @_;      my ($msgsubj,$subj_prefix,$numsent,$stamp,$msgname,$msgdom,$msgcount,$context,$pid,$savemsg,$recusers,$recudoms,$baseurl,$attachmenturl,$symb,$error,$senderuname,$senderdom) = @_;
     my $sentsubj;      my $sentsubj;
     if ($numsent > 1) {      if ($numsent > 1) {
         $sentsubj = $subj_prefix.' ('.$numsent.' sent) '.$msgsubj;          $sentsubj = $subj_prefix.' ('.$numsent.' sent) '.$msgsubj;
Line 734  sub process_sent_mail { Line 763  sub process_sent_mail {
         &packagemsg($msgsubj,$savemsg,undef,$baseurl,$attachmenturl,$recusers,          &packagemsg($msgsubj,$savemsg,undef,$baseurl,$attachmenturl,$recusers,
                     $recudoms,$sentmsgid,undef,undef,$symb,$error);                      $recudoms,$sentmsgid,undef,undef,$symb,$error);
     my $status = &store_sent_mail($sentmsgid,$sentmessage,$senderuname,      my $status = &store_sent_mail($sentmsgid,$sentmessage,$senderuname,
                                   $senderdom,$senderhome);                                    $senderdom);
     return $status;      return $status;
 }  }
   
 sub store_sent_mail {  sub store_sent_mail {
     my ($msgid,$message,$senderuname,$senderdom,$senderhome) = @_;      my ($msgid,$message,$senderuname,$senderdom) = @_;
     if ($senderuname eq '') {      if ($senderuname eq '') {
         $senderuname = $env{'user.name'};          $senderuname = $env{'user.name'};
     }      }
     if ($senderdom eq '') {      if ($senderdom eq '') {
         $senderdom = $env{'user.domain'};          $senderdom = $env{'user.domain'};
     }      }
     if ($senderhome eq '') {      my $status =' '.&Apache::lonnet::cput('nohist_email_sent',
         $senderhome = $env{'user.home'};    {$msgid => $message},
     }    $senderdom,$senderuname);
     my $status =' '.&Apache::lonnet::critical(  
                'put:'.$senderdom.':'.$senderuname.':nohist_email_sent:'.  
                &escape($msgid).'='.&escape($message),$senderhome);  
     return $status;      return $status;
 }  }
   

Removed from v.1.207  
changed lines
  Added in v.1.212


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