version 1.41, 2002/10/11 20:09:36
|
version 1.49, 2003/02/18 15:47:40
|
Line 47 package Apache::lonmsg;
|
Line 47 package Apache::lonmsg;
|
use strict; |
use strict; |
use Apache::lonnet(); |
use Apache::lonnet(); |
use vars qw($msgcount); |
use vars qw($msgcount); |
use HTML::TokeParser; |
use HTML::TokeParser(); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use Apache::loncommon; |
use Apache::loncommon(); |
use Apache::lontexconvert; |
use Apache::lontexconvert(); |
|
use HTML::Entities(); |
|
|
# ===================================================================== Package |
# ===================================================================== Package |
|
|
sub packagemsg { |
sub packagemsg { |
my ($subject,$message,$citation)=@_; |
my ($subject,$message,$citation,$baseurl)=@_; |
$message=~s/\</\<\;/g; |
&Apache::lonnet::logthis("base is $baseurl"); |
$message=~s/\>/\>\;/g; |
$message =&HTML::Entities::encode($message); |
$citation=~s/\</\<\;/g; |
$citation=&HTML::Entities::encode($citation); |
$citation=~s/\>/\>\;/g; |
$subject =&HTML::Entities::encode($subject); |
$subject=~s/\</\<\;/g; |
#remove machine specification |
$subject=~s/\>/\>\;/g; |
$baseurl =~ s|^http://[^/]+/|/|; |
|
$baseurl =&HTML::Entities::encode($baseurl); |
my $now=time; |
my $now=time; |
$msgcount++; |
$msgcount++; |
my $partsubj=$subject; |
my $partsubj=$subject; |
Line 69 sub packagemsg {
|
Line 71 sub packagemsg {
|
my $msgid=&Apache::lonnet::escape( |
my $msgid=&Apache::lonnet::escape( |
$now.':'.$partsubj.':'.$ENV{'user.name'}.':'. |
$now.':'.$partsubj.':'.$ENV{'user.name'}.':'. |
$ENV{'user.domain'}.':'.$msgcount.':'.$$); |
$ENV{'user.domain'}.':'.$msgcount.':'.$$); |
return $msgid, |
my $result='<sendername>'.$ENV{'user.name'}.'</sendername>'. |
'<sendername>'.$ENV{'user.name'}.'</sendername>'. |
|
'<senderdomain>'.$ENV{'user.domain'}.'</senderdomain>'. |
'<senderdomain>'.$ENV{'user.domain'}.'</senderdomain>'. |
'<subject>'.$subject.'</subject>'. |
'<subject>'.$subject.'</subject>'. |
'<time>'.localtime($now).'</time>'. |
'<time>'.localtime($now).'</time>'. |
Line 86 sub packagemsg {
|
Line 87 sub packagemsg {
|
'<role>'.$ENV{'request.role'}.'</role>'. |
'<role>'.$ENV{'request.role'}.'</role>'. |
'<resource>'.$ENV{'request.filename'}.'</resource>'. |
'<resource>'.$ENV{'request.filename'}.'</resource>'. |
'<msgid>'.$msgid.'</msgid>'. |
'<msgid>'.$msgid.'</msgid>'. |
'<message>'.$message.'</message>'. |
'<message>'.$message.'</message>'; |
'<citation>'.$citation.'</citation>'; |
if (defined($citation)) { |
|
$result.='<citation>'.$citation.'</citation>'; |
|
} |
|
if (defined($baseurl)) { |
|
$result.= '<baseurl>'.$baseurl.'</baseurl>'; |
|
} |
|
return $msgid,$result; |
} |
} |
|
|
# ================================================== Unpack message into a hash |
# ================================================== Unpack message into a hash |
Line 102 sub unpackagemsg {
|
Line 109 sub unpackagemsg {
|
my $entry=$token->[1]; |
my $entry=$token->[1]; |
my $value=$parser->get_text('/'.$entry); |
my $value=$parser->get_text('/'.$entry); |
$content{$entry}=$value; |
$content{$entry}=$value; |
|
&Apache::lonnet::logthis("setting $entry to $value"); |
|
|
} |
} |
} |
} |
return %content; |
return %content; |
Line 166 sub user_crit_msg_raw {
|
Line 175 sub user_crit_msg_raw {
|
'put:'.$domain.':'.$user.':critical:'. |
'put:'.$domain.':'.$user.':critical:'. |
&Apache::lonnet::escape($msgid).'='. |
&Apache::lonnet::escape($msgid).'='. |
&Apache::lonnet::escape($message),$homeserver); |
&Apache::lonnet::escape($message),$homeserver); |
|
if ($ENV{'request.course.id'}) { |
|
&user_normal_msg_raw( |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
'Critical ['.$user.':'.$domain.']', |
|
$message); |
|
} |
} else { |
} else { |
$status='no_host'; |
$status='no_host'; |
} |
} |
Line 210 sub user_crit_received {
|
Line 226 sub user_crit_received {
|
&user_normal_msg($contents{'sendername'},$contents{'senderdomain'}, |
&user_normal_msg($contents{'sendername'},$contents{'senderdomain'}, |
'Receipt: '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}, |
'Receipt: '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}, |
'User '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}. |
'User '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}. |
' acknowledged receipt of message "'. |
' acknowledged receipt of message'."\n".' "'. |
$contents{'subject'}.'" dated '.$contents{'time'}.".\n\n" |
$contents{'subject'}.'"'."\n".'dated '. |
.'Message ID: '.$contents{'msgid'}):'no msg req'); |
$contents{'time'}.".\n" |
|
):'no msg req'); |
$status.=' trans: '. |
$status.=' trans: '. |
&Apache::lonnet::put( |
&Apache::lonnet::put( |
'nohist_email',{$contents{'msgid'} => $message{$msgid}}); |
'nohist_email',{$contents{'msgid'} => $message{$msgid}}); |
Line 228 sub user_crit_received {
|
Line 245 sub user_crit_received {
|
# ======================================================== Normal communication |
# ======================================================== Normal communication |
|
|
sub user_normal_msg_raw { |
sub user_normal_msg_raw { |
my ($user,$domain,$subject,$message,$citation)=@_; |
my ($user,$domain,$subject,$message,$citation,$baseurl)=@_; |
# Check if allowed missing |
# Check if allowed missing |
my $status=''; |
my $status=''; |
my $msgid='undefined'; |
my $msgid='undefined'; |
unless (($message)&&($user)&&($domain)) { $status='empty'; }; |
unless (($message)&&($user)&&($domain)) { $status='empty'; }; |
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,$message)=&packagemsg($subject,$message,$citation); |
&Apache::lonnet::logthis("baseraw is $baseurl"); |
|
($msgid,$message)=&packagemsg($subject,$message,$citation,$baseurl); |
$status=&Apache::lonnet::critical( |
$status=&Apache::lonnet::critical( |
'put:'.$domain.':'.$user.':nohist_email:'. |
'put:'.$domain.':'.$user.':nohist_email:'. |
&Apache::lonnet::escape($msgid).'='. |
&Apache::lonnet::escape($msgid).'='. |
Line 254 sub user_normal_msg_raw {
|
Line 272 sub user_normal_msg_raw {
|
# New routine that respects "forward" and calls old routine |
# New routine that respects "forward" and calls old routine |
|
|
sub user_normal_msg { |
sub user_normal_msg { |
my ($user,$domain,$subject,$message,$citation)=@_; |
my ($user,$domain,$subject,$message,$citation,$baseurl)=@_; |
my $status=''; |
my $status=''; |
my %userenv = &Apache::lonnet::get('environment',['msgforward'], |
my %userenv = &Apache::lonnet::get('environment',['msgforward'], |
$domain,$user); |
$domain,$user); |
Line 264 sub user_normal_msg {
|
Line 282 sub user_normal_msg {
|
my ($forwuser,$forwdomain)=split(/\:/,$_); |
my ($forwuser,$forwdomain)=split(/\:/,$_); |
$status.= |
$status.= |
&user_normal_msg_raw($forwuser,$forwdomain,$subject,$message, |
&user_normal_msg_raw($forwuser,$forwdomain,$subject,$message, |
$citation).' '; |
$citation,$baseurl).' '; |
} |
} |
} else { |
} else { |
$status= |
$status=&user_normal_msg_raw($user,$domain,$subject,$message, |
&user_normal_msg_raw($user,$domain,$subject,$message,$citation); |
$citation,$baseurl); |
} |
} |
return $status; |
return $status; |
} |
} |
Line 525 sub compout {
|
Line 543 sub compout {
|
'<table>'); |
'<table>'); |
unless (($broadcast eq 'group') || ($broadcast eq 'upload')) { |
unless (($broadcast eq 'group') || ($broadcast eq 'upload')) { |
my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain'); |
my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain'); |
|
my $selectlink=&Apache::loncommon::selectstudent_link |
|
('compemail','recuname','recdomain'); |
$r->print(<<"ENDREC"); |
$r->print(<<"ENDREC"); |
<table> |
<table> |
<tr><td>Username:</td><td><input type=text size=12 name=recuname value="$ENV{'form.recname'}"></td></tr> |
<tr><td>Username:</td><td><input type=text size=12 name=recuname value="$ENV{'form.recname'}"></td><td rowspan="2">$selectlink</td></tr> |
<tr><td>Domain:</td> |
<tr><td>Domain:</td> |
<td>$domform</td></tr> |
<td>$domform</td></tr> |
ENDREC |
ENDREC |
Line 578 ENDUPLOAD
|
Line 597 ENDUPLOAD
|
$r->print('</form>'); |
$r->print('</form>'); |
} |
} |
|
|
|
# ---------------------------------------------------- Display all face to face |
|
|
|
sub disfacetoface { |
|
my ($r,$user,$domain)=@_; |
|
unless ($ENV{'request.course.id'}) { return; } |
|
unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { |
|
return; |
|
} |
|
my %records=&Apache::lonnet::dump('nohist_email', |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}, |
|
'%255b'.$user.'%253a'.$domain.'%255d'); |
|
my $result=''; |
|
foreach (sort keys %records) { |
|
my %content=&unpackagemsg($records{$_}); |
|
next if ($content{'senderdomain'} eq ''); |
|
$content{'message'}=~s/\n/\<br\>/g; |
|
if ($content{'subject'}=~/^Record/) { |
|
$result.='<h3>Record</h3>'; |
|
} else { |
|
$result.='<h3>Sent Message</h3>'; |
|
%content=&unpackagemsg($content{'message'}); |
|
$content{'message'}= |
|
'<b>Subject: '.$content{'subject'}.'</b><br />'. |
|
$content{'message'}; |
|
} |
|
$result.='By: <b>'. |
|
&Apache::loncommon::aboutmewrapper( |
|
&Apache::loncommon::plainname($content{'sendername'},$content{'senderdomain'}),$content{'sendername'},$content{'senderdomain'}).'</b> ('. |
|
$content{'sendername'}.'@'. |
|
$content{'senderdomain'}.') '.$content{'time'}. |
|
'<br><blockquote>'. |
|
&Apache::lontexconvert::msgtexconverted($content{'message'}). |
|
'</blockquote>'; |
|
} |
|
# Check to see if there were any messages. |
|
if ($result eq '') { |
|
$r->print("<p><b>No notes, face-to-face discussion records, or critical messages in this course.</b></p>"); |
|
} else { |
|
$r->print($result); |
|
} |
|
} |
|
|
|
# ---------------------------------------------------------------- Face to face |
|
|
|
sub facetoface { |
|
my ($r,$stage)=@_; |
|
unless (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) { |
|
return; |
|
} |
|
# from query string |
|
if ($ENV{'form.recname'}) { $ENV{'form.recuname'}=$ENV{'form.recname'}; } |
|
if ($ENV{'form.recdom'}) { $ENV{'form.recdomain'}=$ENV{'form.recdom'}; } |
|
|
|
my $defdom=$ENV{'user.domain'}; |
|
# already filled in |
|
if ($ENV{'form.recdomain'}) { $defdom=$ENV{'form.recdomain'}; } |
|
# generate output |
|
my $domform = &Apache::loncommon::select_dom_form($defdom,'recdomain'); |
|
my $stdbrws = &Apache::loncommon::selectstudent_link |
|
('stdselect','recuname','recdomain'); |
|
$r->print(<<"ENDTREC"); |
|
<h3>User Notes, Records of Face-To-Face Discussions, and Critical Messages in Course</h3> |
|
<form method="post" action="/adm/email" name="stdselect"> |
|
<input type="hidden" name="recordftf" value="retrieve" /> |
|
<table> |
|
<tr><td>Username:</td><td><input type=text size=12 name=recuname value="$ENV{'form.recuname'}"></td> |
|
<td rowspan="2"> |
|
$stdbrws |
|
<input type="submit" value="Retrieve discussion and message records"></td> |
|
</tr> |
|
<tr><td>Domain:</td> |
|
<td>$domform</td></tr> |
|
</table> |
|
</form> |
|
ENDTREC |
|
if (($stage ne 'query') && |
|
($ENV{'form.recdomain'}) && ($ENV{'form.recuname'})) { |
|
chomp($ENV{'form.newrecord'}); |
|
if ($ENV{'form.newrecord'}) { |
|
&user_normal_msg_raw( |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
'Record ['.$ENV{'form.recuname'}.':'.$ENV{'form.recdomain'}.']', |
|
$ENV{'form.newrecord'}); |
|
} |
|
$r->print('<h3>'.&Apache::loncommon::plainname($ENV{'form.recuname'}, |
|
$ENV{'form.recdomain'}).'</h3>'); |
|
&disfacetoface($r,$ENV{'form.recuname'},$ENV{'form.recdomain'}); |
|
$r->print(<<ENDRHEAD); |
|
<form method="post" action="/adm/email"> |
|
<input name="recdomain" value="$ENV{'form.recdomain'}" type="hidden" /> |
|
<input name="recuname" value="$ENV{'form.recuname'}" type="hidden" /> |
|
ENDRHEAD |
|
$r->print(<<ENDBFORM); |
|
<hr />New Record (record is visible to course faculty and staff)<br /> |
|
<textarea name="newrecord" cols="80" rows="10" wrap="hard"></textarea> |
|
<br /> |
|
<input type="hidden" name="recordftf" value="post" /> |
|
<input type="submit" value="Post this record" /> |
|
</form> |
|
ENDBFORM |
|
} |
|
} |
|
|
# ===================================================================== Handler |
# ===================================================================== Handler |
|
|
sub handler { |
sub handler { |
Line 593 sub handler {
|
Line 717 sub handler {
|
# --------------------------- Get query string for limited number of parameters |
# --------------------------- Get query string for limited number of parameters |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['display','replyto','forward','markread','markdel','markunread', |
['display','replyto','forward','markread','markdel','markunread', |
'sendreply','compose','sendmail','critical','recname','recdom']); |
'sendreply','compose','sendmail','critical','recname','recdom', |
|
'recordftf']); |
|
|
# ------------------------------------------------------ They checked for email |
# ------------------------------------------------------ They checked for email |
&Apache::lonnet::put('email_status',{'recnewemail'=>0}); |
&Apache::lonnet::put('email_status',{'recnewemail'=>0}); |
# --------------------------------------------------------------- Render Output |
# --------------------------------------------------------------- Render Output |
|
if (!$ENV{'form.display'}) { |
$r->print('<html><head><title>EMail and Messaging</title></head>'. |
$r->print('<html><head><title>EMail and Messaging</title>'. |
&Apache::loncommon::bodytag('EMail and Messages')); |
&Apache::loncommon::studentbrowser_javascript().'</head>'. |
|
&Apache::loncommon::bodytag('EMail and Messages')); |
|
} |
if ($ENV{'form.display'}) { |
if ($ENV{'form.display'}) { |
my $msgid=$ENV{'form.display'}; |
my $msgid=$ENV{'form.display'}; |
&statuschange($msgid,'read'); |
&statuschange($msgid,'read'); |
my %message=&Apache::lonnet::get('nohist_email',[$msgid]); |
my %message=&Apache::lonnet::get('nohist_email',[$msgid]); |
my %content=&unpackagemsg($message{$msgid}); |
my %content=&unpackagemsg($message{$msgid}); |
|
$r->print('<html><head><title>EMail and Messaging</title>'); |
|
if (defined($content{'baseurl'})) { |
|
$r->print("<base href=\"http://$ENV{'SERVER_NAME'}/$content{'baseurl'}\" />"); |
|
} |
|
$r->print(&Apache::loncommon::studentbrowser_javascript(). |
|
'</head>'. |
|
&Apache::loncommon::bodytag('EMail and Messages')); |
$r->print('<b>Subject:</b> '.$content{'subject'}. |
$r->print('<b>Subject:</b> '.$content{'subject'}. |
'<br><b>From:</b> '. |
'<br><b>From:</b> '. |
&Apache::loncommon::aboutmewrapper( |
&Apache::loncommon::aboutmewrapper( |
Line 621 $content{'sendername'},$content{'senderd
|
Line 755 $content{'sendername'},$content{'senderd
|
'"><b>Forward</b></a></td>'. |
'"><b>Forward</b></a></td>'. |
'<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid). |
'<td><a href="/adm/email?markunread='.&Apache::lonnet::escape($msgid). |
'"><b>Mark Unread</b></a></td>'. |
'"><b>Mark Unread</b></a></td>'. |
|
'<td><a href="/adm/email?markdel='.&Apache::lonnet::escape($msgid). |
|
'"><b>Delete</b></a></td>'. |
'<td><a href="/adm/email"><b>Display all Messages</b></a></td>'. |
'<td><a href="/adm/email"><b>Display all Messages</b></a></td>'. |
'</tr></table><p><pre>'. |
'</tr></table><p><pre>'. |
&Apache::lontexconvert::msgtexconverted($content{'message'}). |
&Apache::lontexconvert::msgtexconverted($content{'message'}). |
Line 688 $content{'sendername'},$content{'senderd
|
Line 824 $content{'sendername'},$content{'senderd
|
&disall($r); |
&disall($r); |
} elsif ($ENV{'form.compose'}) { |
} elsif ($ENV{'form.compose'}) { |
&compout($r,'',$ENV{'form.compose'}); |
&compout($r,'',$ENV{'form.compose'}); |
|
} elsif ($ENV{'form.recordftf'}) { |
|
&facetoface($r,$ENV{'form.recordftf'}); |
} elsif ($ENV{'form.sendmail'}) { |
} elsif ($ENV{'form.sendmail'}) { |
my %content=(); |
my %content=(); |
undef %content; |
undef %content; |