--- loncom/interface/lonmsg.pm 2008/06/06 05:24:28 1.212
+++ loncom/interface/lonmsg.pm 2009/01/04 16:21:10 1.214.2.4
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines for messaging
#
-# $Id: lonmsg.pm,v 1.212 2008/06/06 05:24:28 raeburn Exp $
+# $Id: lonmsg.pm,v 1.214.2.4 2009/01/04 16:21:10 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -83,10 +83,10 @@ sub packagemsg {
$citation=&HTML::Entities::encode($citation,'<>&"');
$subject =&HTML::Entities::encode($subject,'<>&"');
#remove machine specification
- $baseurl =~ s|^http://[^/]+/|/|;
+ $baseurl =~ s|^https?\://[^/]+/|/|;
$baseurl =&HTML::Entities::encode($baseurl,'<>&"');
#remove machine specification
- $attachmenturl =~ s|^http://[^/]+/|/|;
+ $attachmenturl =~ s|^https?\://[^/]+/|/|;
$attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"');
my $course_context = &get_course_context();
my $now=time;
@@ -120,6 +120,9 @@ sub packagemsg {
''.$env{'request.role'}.''.
''.$env{'request.filename'}.''.
''.$msgid.'';
+ if (defined($env{'form.group'})) {
+ $result .= ''.$env{'form.group'}.'';
+ }
if (ref($recuser) eq 'ARRAY') {
for (my $i=0; $i<@{$recuser}; $i++) {
if ($type eq 'dcmail') {
@@ -279,22 +282,49 @@ sub unpackmsgid {
sub sendemail {
- my ($to,$subject,$body)=@_;
- my %senderemails=&Apache::loncommon::getemails();
+ my ($to,$subject,$body,$to_uname,$to_udom,$user_lh)=@_;
my $senderaddress='';
- foreach my $type ('notification','permanentemail','critnotification') {
- if ($senderemails{$type}) {
- $senderaddress=$senderemails{$type};
- }
+ my $replytoaddress='';
+ if ($env{'form.can_reply'} eq 'N') {
+ my $lonhost = $Apache::lonnet::perlvar{'lonHostID'};
+ my $hostname = &Apache::lonnet::hostname($lonhost);
+ $replytoaddress = 'do-not-reply@'.$hostname;
+ } else {
+ my %senderemails;
+ my $have_sender;
+ if ($env{'form.reply_to_addr'}) {
+ my ($replytoname,$replytodom) = split(/:/,$env{'form.reply_to_addr'});
+ if (!($replytoname eq $env{'user.name'} && $replytodom eq $env{'user.domain'})) {
+ if (&Apache::lonnet::homeserver($replytoname,$replytodom) ne 'no_host') {
+ %senderemails =
+ &Apache::loncommon::getemails($replytoname,$replytodom);
+ $have_sender = 1;
+ }
+ }
+ }
+ if (!$have_sender) {
+ %senderemails=&Apache::loncommon::getemails();
+ }
+ foreach my $type ('permanentemail','critnotification','notification') {
+ if ($senderemails{$type}) {
+ ($senderaddress) = split(/,/,$senderemails{$type});
+ last if ($senderaddress);
+ }
+ }
}
$body=
- "*** ".&mt('This is an automatic message generated by the LON-CAPA system.')."\n".
- "*** ".($senderaddress?&mt('You can reply to this message'):&mt('Please do not reply to this address.')."\n*** ".
- &mt('A reply will not be received by the recipient!'))."\n\n".$body;
+ "*** ".&mt_user($user_lh,'This is an automatic message generated by the LON-CAPA system.')."\n".
+ "*** ".($senderaddress?&mt_user($user_lh,'You can reply to this message'):&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;
my $msg = new Mail::Send;
$msg->to($to);
$msg->subject('[LON-CAPA] '.$subject);
- if ($senderaddress) { $msg->add('Reply-to',$senderaddress); $msg->add('From',$senderaddress); }
+ if ($replytoaddress) {
+ $msg->add('Reply-to',$replytoaddress);
+ }
+ if ($senderaddress) {
+ $msg->add('From',$senderaddress);
+ }
if (my $fh = $msg->open()) {
print $fh $body;
$fh->close;
@@ -313,14 +343,17 @@ sub sendnotification {
$text=~s/\<\;/\/gs;
- my $url='http://'.
- &Apache::lonnet::hostname(&Apache::lonnet::homeserver($touname,$toudom)).
- '/adm/email?username='.$touname.'&domain='.$toudom;
+ my $homeserver = &Apache::lonnet::homeserver($touname,$toudom);
+ my $protocol = $Apache::lonnet::protocol{$homeserver};
+ $protocol = 'http' if ($protocol ne 'https');
+ my $url = $protocol.'://'.&Apache::lonnet::hostname($homeserver).
+ '/adm/email?username='.$touname.'&domain='.$toudom;
my ($sendtime,$shortsubj,$fromname,$fromdomain,$status,$fromcid,
$symb,$error) = &Apache::lonmsg::unpackmsgid($msgid);
my ($coursetext,$body,$bodybegin,$bodysubj,$bodyend);
+ my $user_lh = &user_lang($touname,$toudom,$fromcid);
if ($fromcid ne '') {
- $coursetext = "\n".&mt('Course').': ';
+ $coursetext = "\n".&mt_user($user_lh,'Course').': ';
if ($env{'course.'.$fromcid.'.description'} ne '') {
$coursetext .= $env{'course.'.$fromcid.'.description'};
} else {
@@ -333,24 +366,25 @@ sub sendnotification {
}
my @recipients = split(/,/,$to);
$bodybegin = $coursetext.
- &mt('You received a'.$critical.' message from [_1] in LON-CAPA.',$sender).' ';
- $bodysubj = &mt('The subject is
+ &mt_user($user_lh,
+ 'You received a'.$critical.' message from [_1] in LON-CAPA.',$sender).' ';
+ $bodysubj = &mt_user($user_lh,'The subject is
[_1]
',$subj)."\n".
-'=== '.&mt('Excerpt')." ============================================================
+'=== '.&mt_user($user_lh,'Excerpt')." ============================================================
";
$bodyend = "
========================================================================
-".&mt('Use
+".&mt_user($user_lh,'Use
[_1]
to access the full message.',$url);
my %userenv = &Apache::lonnet::get('environment',['notifywithhtml'],$toudom,$touname);
- my $subject = &mt("'New' $critical message from ").$sender;
+ my $subject = &mt_user($user_lh,"'New' $critical message from ").$sender;
my ($blocked,$blocktext);
if (!$crit) {
@@ -361,7 +395,7 @@ to access the full message.',$url);
$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);
+ $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);
}
}
if ($userenv{'notifywithhtml'} ne '') {
@@ -376,7 +410,7 @@ to access the full message.',$url);
}
$body = $bodybegin.$bodysubj.$sendtext.$bodyend;
}
- &sendemail($addr,$subject,$body);
+ &sendemail($addr,$subject,$body,$touname,$toudom,$user_lh);
}
} else {
if ($blocked) {
@@ -385,7 +419,7 @@ to access the full message.',$url);
$text =~ s/\<\/*[^\>]+\>//gs;
$body = $bodybegin.$bodysubj.$text.$bodyend;
}
- &sendemail($to,$subject,$body);
+ &sendemail($to,$subject,$body,$touname,$toudom,$user_lh);
}
}
# ============================================================= Check for email
@@ -686,8 +720,10 @@ sub user_normal_msg_raw {
$text,$msgid);
}
if ($toperm && $userenv{'permanentemail'}) {
- &sendnotification($userenv{'permanentemail'},$user,$domain,$subject,0,
- $text,$msgid);
+ if ((!$userenv{'notification'}) || ($userenv{'notification'} ne $userenv{'permanentemail'})) {
+ &sendnotification($userenv{'permanentemail'},$user,$domain,$subject,0,
+ $text,$msgid);
+ }
}
&Apache::lonnet::log($env{'user.domain'},$env{'user.name'},
$env{'user.home'},
@@ -746,7 +782,7 @@ sub user_normal_msg {
}
sub process_sent_mail {
- my ($msgsubj,$subj_prefix,$numsent,$stamp,$msgname,$msgdom,$msgcount,$context,$pid,$savemsg,$recusers,$recudoms,$baseurl,$attachmenturl,$symb,$error,$senderuname,$senderdom) = @_;
+ my ($msgsubj,$subj_prefix,$numsent,$stamp,$msgname,$msgdom,$msgcount,$context,$pid,$savemsg,$recusers,$recudoms,$baseurl,$attachmenturl,$symb,$error,$senderuname,$senderdom,$recipid) = @_;
my $sentsubj;
if ($numsent > 1) {
$sentsubj = $subj_prefix.' ('.$numsent.' sent) '.$msgsubj;
@@ -761,7 +797,7 @@ sub process_sent_mail {
&buildmsgid($stamp,$sentsubj,$msgname,$msgdom,$msgcount,$context,$pid);
(undef,my $sentmessage) =
&packagemsg($msgsubj,$savemsg,undef,$baseurl,$attachmenturl,$recusers,
- $recudoms,$sentmsgid,undef,undef,$symb,$error);
+ $recudoms,$sentmsgid,undef,undef,$symb,$error,$recipid);
my $status = &store_sent_mail($sentmsgid,$sentmessage,$senderuname,
$senderdom);
return $status;
@@ -922,6 +958,28 @@ sub decide_receiver {
return ($typestyle,%to);
}
+sub user_lang {
+ my ($touname,$toudom,$fromcid) = @_;
+ my @userlangs;
+ if (($fromcid ne '') && ($env{'course.'.$fromcid.'.languages'} ne '')) {
+ @userlangs=(@userlangs,split(/\s*(\,|\;|\:)\s*/,
+ $env{'course.'.$fromcid.'.languages'}));
+ } else {
+ my %langhash = &Apache::loncommon::getlangs($toudom,$touname);
+ if ($langhash{'languages'} ne '') {
+ @userlangs = split(/\s*(\,|\;|\:)\s*/,$langhash{'languages'});
+ } else {
+ my %domdefs = &Apache::lonnet::get_domain_defaults($toudom);
+ if ($domdefs{'lang_def'} ne '') {
+ @userlangs = ($domdefs{'lang_def'});
+ }
+ }
+ }
+ my @languages=&Apache::lonlocal::get_genlanguages(@userlangs);
+ my $user_lh = Apache::localize->get_handle(@languages);
+ return $user_lh;
+}
+
=pod
=back