version 1.67, 2007/02/28 16:30:40
|
version 1.70, 2007/04/22 13:41:22
|
Line 33 package Apache::lonmsgdisplay;
|
Line 33 package Apache::lonmsgdisplay;
|
|
|
=head1 NAME |
=head1 NAME |
|
|
Apache::lonmsg: supports internal messaging |
Apache::lonmsgdisplay: supports internal messaging |
|
|
=head1 SYNOPSIS |
=head1 SYNOPSIS |
|
|
lonmsg provides routines for sending messages, receiving messages, and |
lonmsgdisplay provides a handler to allow users to read, send, |
a handler to allow users to read, send, and delete messages. |
and delete messages, and to create and delete message folders, |
|
and to move messages between folders. |
|
|
=head1 OVERVIEW |
=head1 OVERVIEW |
|
|
Line 93 addresses on their B<PREF> screen, but g
|
Line 94 addresses on their B<PREF> screen, but g
|
are much more useful than traditional email can be made to be, even |
are much more useful than traditional email can be made to be, even |
with HTML support. |
with HTML support. |
|
|
Right now, this document will cover just how to send a message, since |
|
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 <recuser>$uname</recuser> and |
|
<recdomain>$udom</recdomain> in stored internal messages, compared |
|
with <recipient username="$uname:$udom">$email</recipient> in stored |
|
Domain Coordinator e-mail for the storage of information about |
|
recipients of the message/e-mail. |
|
|
|
=head1 FUNCTIONS |
|
|
|
=over 4 |
|
|
|
=cut |
=cut |
|
|
use strict; |
use strict; |
Line 1055 ENDDISHEADER
|
Line 1037 ENDDISHEADER
|
} |
} |
my ($dis_name,$dis_domain) = ($fromname,$fromdomain); |
my ($dis_name,$dis_domain) = ($fromname,$fromdomain); |
if ($folder eq 'sent') { |
if ($folder eq 'sent') { |
if (defined($recv_name) && !defined($recv_domain)) { |
if (defined($recv_name) && defined($recv_domain)) { |
$dis_name = join('<br />',@{$recv_name}); |
if (ref($recv_name) eq 'ARRAY' && |
$dis_domain = join('<br />',@{$recv_domain}); |
ref($recv_domain) eq 'ARRAY') { |
|
$dis_name = join('<br />',@{$recv_name}); |
|
$dis_domain = join('<br />',@{$recv_domain}); |
|
} |
} else { |
} else { |
my $msg_id = &unescape($origID); |
my $msg_id = &unescape($origID); |
my %message = &Apache::lonnet::get('nohist_email'.$suffix, |
my %message = &Apache::lonnet::get('nohist_email'.$suffix, |
[$msg_id]); |
[$msg_id]); |
my %content = &Apache::lonmsg::unpackagemsg($message{$msg_id}); |
my %content = &Apache::lonmsg::unpackagemsg($message{$msg_id}); |
$dis_name = join('<br />',@{$content{'recuser'}}); |
if (ref($content{'recuser'}) eq 'ARRAY') { |
$dis_domain = join('<br />',@{$content{'recdomain'}}); |
$dis_name = join('<br />',@{$content{'recuser'}}); |
|
} |
|
if (ref($content{'recdomain'}) eq 'ARRAY') { |
|
$dis_domain = join('<br />',@{$content{'recdomain'}}); |
|
} |
} |
} |
} |
} |
my $localsenttime = &Apache::lonlocal::locallocaltime($sendtime); |
my $localsenttime = &Apache::lonlocal::locallocaltime($sendtime); |
Line 1197 sub compout {
|
Line 1186 sub compout {
|
text=>"Display All Messages"}); |
text=>"Display All Messages"}); |
&printheader($r,'/adm/email?compose=multiforward', |
&printheader($r,'/adm/email?compose=multiforward', |
'Forwarding Multiple Messages'); |
'Forwarding Multiple Messages'); |
$r->print(&mt('Each of the <b>[quant,_1,message]</b> you checked will be forwarded to the recipient(s) you select below.',$multiforward).'<br />'); |
if ($multiforward > 1) { |
|
$r->print(&mt('Each of the <b>[quant,_1,message]</b> you checked |
|
will be forwarded to the recipient(s) you select below.',$multiforward).'<br />'); |
|
} else { |
|
$r->print(&mt('The message you checked will be forwarded to the recipient(s) you select below.').'<br />'); |
|
} |
|
|
} else { |
} else { |
&printheader($r,'/adm/email?compose=upload', |
&printheader($r,'/adm/email?compose=upload', |
'Distribute from Uploaded File'); |
'Distribute from Uploaded File'); |
Line 1233 sub compout {
|
Line 1228 sub compout {
|
&mt('Send copy to permanent email address (if known)').'</label></p>'. |
&mt('Send copy to permanent email address (if known)').'</label></p>'. |
'<p><label><input type="checkbox" name="rsspost" /> '. |
'<p><label><input type="checkbox" name="rsspost" /> '. |
&mt('Include in course RSS newsfeed').'</label></p>'; |
&mt('Include in course RSS newsfeed').'</label></p>'; |
} |
} |
|
if (&Apache::lonnet::allowed('dff',$env{'request.course.id'}) || |
|
&Apache::lonnet::allowed('dff',$env{'request.course.id'}. |
|
'/'.$env{'request.course.sec'})) { |
|
|
|
$dispcrit.='<p><label>'. |
|
'<input type="checkbox" name="courserecord" value="1" /> '. |
|
&mt("Include in course's 'User records' for recipient(s)"). |
|
'</label></p>'; |
|
} |
|
|
my %message; |
my %message; |
my %content; |
my %content; |
my $defdom=$env{'user.domain'}; |
my $defdom=$env{'user.domain'}; |
Line 1518 sub disfacetoface {
|
Line 1523 sub disfacetoface {
|
'<b>'.&mt('Subject').': '.$content{'subject'}.'</b><br />'. |
'<b>'.&mt('Subject').': '.$content{'subject'}.'</b><br />'. |
$content{'message'}; |
$content{'message'}; |
} |
} |
} |
} |
|
} elsif ($content{'subject'}=~/^Archive/) { |
|
$result.='<h3>'.&mt('Archived Message').'</h3>'; |
|
if (defined($content{'coursemsgid'})) { |
|
my $crsmsgid = &escape($content{'coursemsgid'}); |
|
my $archive_message = &general_message($crsmsgid); |
|
$content{'message'} = '<b>'.&mt('Subject').': '.$content{'message'}.'</b><br />'.$archive_message; |
|
} else { |
|
%content=&Apache::lonmsg::unpackagemsg($content{'message'}); |
|
$content{'message'} = |
|
'<b>'.&mt('Subject').': '.$content{'subject'}.'</b><br |
|
'. |
|
$content{'message'}; |
|
} |
} else { |
} else { |
$result.='<h3>'.&mt('Critical Message').'</h3>'; |
$result.='<h3>'.&mt('Critical Message').'</h3>'; |
if (defined($content{'coursemsgid'})) { |
if (defined($content{'coursemsgid'})) { |
Line 1581 sub facetoface {
|
Line 1599 sub facetoface {
|
: 'faculty and staff'; |
: 'faculty and staff'; |
&printheader($r, |
&printheader($r, |
'/adm/email?recordftf=query', |
'/adm/email?recordftf=query', |
"User Notes, Face-to-Face, Critical Messages, Broadcast Messages"); |
"User Notes, Face-to-Face, Critical Messages, Broadcast Messages, Archived 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'}; } |
Line 1596 sub facetoface {
|
Line 1614 sub facetoface {
|
('stdselect','recuname','recdomain'); |
('stdselect','recuname','recdomain'); |
my %lt=&Apache::lonlocal::texthash('user' => 'Username', |
my %lt=&Apache::lonlocal::texthash('user' => 'Username', |
'dom' => 'Domain', |
'dom' => 'Domain', |
'head' => "User Notes, Records of Face-To-Face Discussions, Critical Messages, and Broadcast Messages in $crstype", |
'head' => "User Notes, Records of Face-To-Face Discussions, Critical Messages, Broadcast Messages and Archived Messages in $crstype", |
'subm' => 'Retrieve discussion and message records', |
'subm' => 'Retrieve discussion and message records', |
'newr' => 'New Record (record is visible to '.lc($crstype).' '.$leaders.')', |
'newr' => 'New Record (record is visible to '.lc($crstype).' '.$leaders.')', |
'post' => 'Post this Record'); |
'post' => 'Post this Record'); |
Line 2040 sub displaymessage {
|
Line 2058 sub displaymessage {
|
if (defined($content{'baseurl'})) { |
if (defined($content{'baseurl'})) { |
$baseurl = &Apache::lonenc::check_encrypt($content{'baseurl'}); |
$baseurl = &Apache::lonenc::check_encrypt($content{'baseurl'}); |
} |
} |
$r->print(&Apache::loncommon::studentimagetag($content{'senderdomain'},$content{'sendername'})); |
$r->print(&Apache::loncommon::student_image_tag($content{'senderdomain'},$content{'sendername'})); |
$r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}. |
$r->print('<br /><b>'.&mt('Subject').':</b> '.$content{'subject'}. |
($folder ne 'sent'?'<br /><b>'.&mt('From').':</b> '. |
($folder ne 'sent'?'<br /><b>'.&mt('From').':</b> '. |
&Apache::loncommon::aboutmewrapper( |
&Apache::loncommon::aboutmewrapper( |
Line 2330 sub sendoffmail {
|
Line 2348 sub sendoffmail {
|
$env{'form.permanent'}, |
$env{'form.permanent'}, |
\$sentmessage{$address}); |
\$sentmessage{$address}); |
} |
} |
if (($env{'request.course.id'}) && (($msgtype eq 'critical') || |
if (($env{'request.course.id'}) && |
($env{'form.sendmode'} eq 'group'))) { |
(($msgtype eq 'critical') || |
|
($env{'form.sendmode'} eq 'group') || |
|
($env{'form.courserecord'}))) { |
$specialmsg_status{$recuname.':'.$recdomain} = |
$specialmsg_status{$recuname.':'.$recdomain} = |
join(' ',@thismsg); |
join(' ',@thismsg); |
foreach my $result (@thismsg) { |
foreach my $result (@thismsg) { |
Line 2342 sub sendoffmail {
|
Line 2362 sub sendoffmail {
|
} |
} |
$sendstatus.=' '.join(' ',@thismsg); |
$sendstatus.=' '.join(' ',@thismsg); |
} |
} |
if (($env{'request.course.id'}) && (($env{'form.sendmode'} eq 'group') |
if (($env{'request.course.id'}) && |
|| ($msgtype eq 'critical'))) { |
(($env{'form.sendmode'} eq 'group') || |
|
($env{'form.courserecord'}) || |
|
($msgtype eq 'critical'))) { |
my $subj_prefix; |
my $subj_prefix; |
if ($msgtype eq 'critical') { |
if ($msgtype eq 'critical') { |
$subj_prefix = 'Critical.'; |
$subj_prefix = 'Critical.'; |
} else { |
} elsif ($env{'form.sendmode'} eq 'group') { |
$subj_prefix = 'Broadcast.'; |
$subj_prefix = 'Broadcast.'; |
|
} else { |
|
$subj_prefix = 'Archive'; |
} |
} |
my ($specialmsgid,$specialresult); |
my ($specialmsgid,$specialresult); |
my $course_str = &escape('['.$cnum.':'.$cdom.']'); |
my $course_str = &escape('['.$cnum.':'.$cdom.']'); |
Line 2367 sub sendoffmail {
|
Line 2391 sub sendoffmail {
|
split(/\:/,&unescape($specialmsgid)); |
split(/\:/,&unescape($specialmsgid)); |
|
|
foreach my $recipient (sort(keys(%toaddr))) { |
foreach my $recipient (sort(keys(%toaddr))) { |
if ($specialmsg_status{$recipient} eq 'ok') { |
if ($specialmsg_status{$recipient} =~ /\s*(ok|con_delayed)\s*/) { |
my $usersubj = $subj_prefix.'['.$recipient.']'; |
my $usersubj = $subj_prefix.'['.$recipient.']'; |
my $usermsgid = |
my $usermsgid = |
&Apache::lonmsg::buildmsgid($stamp,$usersubj, |
&Apache::lonmsg::buildmsgid($stamp,$usersubj, |
Line 2760 sub handler {
|
Line 2784 sub handler {
|
|
|
=pod |
=pod |
|
|
=back |
|
|
|
=cut |
=cut |
|
|
1; |
1; |