--- loncom/interface/lonmsg.pm 2005/11/29 22:55:10 1.160
+++ loncom/interface/lonmsg.pm 2005/12/10 00:46:34 1.164
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Routines for messaging
#
-# $Id: lonmsg.pm,v 1.160 2005/11/29 22:55:10 raeburn Exp $
+# $Id: lonmsg.pm,v 1.164 2005/12/10 00:46:34 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -97,6 +97,17 @@ Right now, this document will cover just
it is likely you will not need to programmatically read messages,
since lonmsg already implements that functionality.
+The routines used to package messages and unpackage messages are not
+only used by lonmsg when creating/extracting messages for LON-CAPA's
+internal messaging system, but also by lonnotify.pm which is available
+for use by Domain Coordinators to broadcast standard e-mail to specified
+users in their domain. The XML packaging used in the two cases is very
+similar. The differences are the use of $uname and
+$udom in stored internal messages, compared
+with $email in stored
+Domain Coordinator e-mail for the storage of information about
+recipients of the message/e-mail.
+
=head1 FUNCTIONS
=over 4
@@ -126,7 +137,7 @@ my $interdis;
sub packagemsg {
my ($subject,$message,$citation,$baseurl,$attachmenturl,
- $recuser,$recdomain,$msgid)=@_;
+ $recuser,$recdomain,$msgid,$type)=@_;
$message =&HTML::Entities::encode($message,'<>&"');
$citation=&HTML::Entities::encode($citation,'<>&"');
$subject =&HTML::Entities::encode($subject,'<>&"');
@@ -178,8 +189,18 @@ sub packagemsg {
''.$msgid.'';
if (ref($recuser) eq 'ARRAY') {
for (my $i=0; $i<@{$recuser}; $i++) {
- $result .= ''.$$recuser[$i].''.
- ''.$$recdomain[$i].'';
+ if ($type eq 'dcmail') {
+ my ($username,$email) = split(/:/,$$recuser[$i]);
+ $username = &Apache::lonnet::unescape($username);
+ $email = &Apache::lonnet::unescape($email);
+ $username = &HTML::Entities::encode($username,'<>&"');
+ $email = &HTML::Entities::encode($email,'<>&"');
+ $result .= ''.
+ $email.'';
+ } else {
+ $result .= ''.$$recuser[$i].''.
+ ''.$$recdomain[$i].'';
+ }
}
} else {
$result .= ''.$recuser.''.
@@ -211,6 +232,10 @@ sub unpackagemsg {
my $value=$parser->get_text('/'.$entry);
if (($entry eq 'recuser') || ($entry eq 'recdomain')) {
push(@{$content{$entry}},$value);
+ } elsif ($entry eq 'recipient') {
+ my $username = $token->[2]{'username'};
+ $username = &HTML::Entities::decode($username,'<>&"');
+ $content{$entry}{$username} = $value;
} else {
$content{$entry}=$value;
}
@@ -241,14 +266,17 @@ sub buildmsgid {
}
sub unpackmsgid {
- my ($msgid,$folder)=@_;
+ my ($msgid,$folder,$skipstatus)=@_;
$msgid=&Apache::lonnet::unescape($msgid);
- my $suffix=&foldersuffix($folder);
my ($sendtime,$shortsubj,$fromname,$fromdomain,$count,$fromcid)=split(/\:/,
&Apache::lonnet::unescape($msgid));
- my %status=&Apache::lonnet::get('email_status'.$suffix,[$msgid]);
- if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
- unless ($status{$msgid}) { $status{$msgid}='new'; }
+ my %status=();
+ unless ($skipstatus) {
+ my $suffix=&foldersuffix($folder);
+ &Apache::lonnet::get('email_status'.$suffix,[$msgid]);
+ if ($status{$msgid}=~/^error\:/) { $status{$msgid}=''; }
+ unless ($status{$msgid}) { $status{$msgid}='new'; }
+ }
return ($sendtime,$shortsubj,$fromname,$fromdomain,$status{$msgid},$fromcid);
}
@@ -1189,8 +1217,8 @@ sub compout {
&mt('and return receipt') . '' . $crithelp .
'
'.
-''; }
+''; }
my %message;
my %content;
my $defdom=$env{'user.domain'};