version 1.1, 2000/10/19 14:20:17
|
version 1.5, 2000/10/31 22:31:37
|
Line 10
|
Line 10
|
# |
# |
# 10/05 Gerd Kortemeyer) |
# 10/05 Gerd Kortemeyer) |
# |
# |
# 10/19 Gerd Kortemeyer |
# 10/19,10/20,10/30 Gerd Kortemeyer |
|
|
package Apache::lonmsg; |
package Apache::lonmsg; |
|
|
use strict; |
use strict; |
use Apache::lonnet(); |
use Apache::lonnet(); |
|
use vars qw($msgcount); |
|
use HTML::TokeParser; |
|
use Apache::Constants qw(:common); |
|
|
# ===================================================================== Package |
# ===================================================================== Package |
|
|
sub package { |
sub packagemsg { |
var ($subject,$message)=@_; |
my ($subject,$message)=@_; |
$message=~s/\</\<\;/g; |
$message=~s/\</\<\;/g; |
$message=~s/\>/\>\;/g; |
$message=~s/\>/\>\;/g; |
$subject=~s/\</\<\;/g; |
$subject=~s/\</\<\;/g; |
$subject=~s/\>/\>\;/g; |
$subject=~s/\>/\>\;/g; |
return '<sendername>'.$ENV{'user.name'}.'</sendername>'. |
my $now=time; |
|
$msgcount++; |
|
my $msgid=$now.'_'.$ENV{'user.name'}.'_'. |
|
$ENV{'user.domain'}.'_'.$msgcount.'_'.$$; |
|
return $msgid, |
|
'<sendername>'.$ENV{'user.name'}.'</sendername>'. |
'<senderdomain>'.$ENV{'user.domain'}.'</senderdomain>'. |
'<senderdomain>'.$ENV{'user.domain'}.'</senderdomain>'. |
'<subject>'.$subject.'</subject>'. |
'<subject>'.$subject.'</subject>'. |
'<time>'.localtime().'</time>'. |
'<time>'.localtime($now).'</time>'. |
'<servername>'.$ENV{'SERVER_NAME'}.'</servername>'. |
'<servername>'.$ENV{'SERVER_NAME'}.'</servername>'. |
'<host>'.$ENV{'HTTP_HOST'}.'</host>'. |
'<host>'.$ENV{'HTTP_HOST'}.'</host>'. |
'<client>'.$ENV{'REMOTE_ADDR'}.'</client>'. |
'<client>'.$ENV{'REMOTE_ADDR'}.'</client>'. |
Line 41 sub package {
|
Line 48 sub package {
|
'<courseid>'.$ENV{'request.course.id'}.'</courseid>'. |
'<courseid>'.$ENV{'request.course.id'}.'</courseid>'. |
'<role>'.$ENV{'request.role'}.'</role>'. |
'<role>'.$ENV{'request.role'}.'</role>'. |
'<resource>'.$ENV{'request.filename'}.'</resource>'. |
'<resource>'.$ENV{'request.filename'}.'</resource>'. |
|
'<msgid>'.$msgid.'</msgid>'. |
'<message>'.$message.'</message>'; |
'<message>'.$message.'</message>'; |
} |
} |
|
|
|
# ================================================== Unpack message into a hash |
|
|
|
sub unpackagemsg { |
|
my $message=shift; |
|
my %content=(); |
|
my $parser=HTML::TokeParser->new(\$message); |
|
my $token; |
|
while ($token=$parser->get_token) { |
|
if ($token->[0] eq 'S') { |
|
my $entry=$token->[1]; |
|
my $value=$parser->get_text('/'.$entry); |
|
$content{$entry}=$value; |
|
} |
|
} |
|
return %content; |
|
} |
|
|
# =============================== Automated message to the author of a resource |
# =============================== Automated message to the author of a resource |
|
|
sub author_res_msg { |
sub author_res_msg { |
my ($filename,$message)=@_; |
my ($filename,$message)=@_; |
|
unless ($message) { return 'empty'; } |
$filename=&Apache::lonnet::declutter($filename); |
$filename=&Apache::lonnet::declutter($filename); |
my ($domain,$author,@dummy)=split(/\//,$filename); |
my ($domain,$author,@dummy)=split(/\//,$filename); |
my $homeserver=&Apache::lonnet::homeserver($author,$domain); |
my $homeserver=&Apache::lonnet::homeserver($author,$domain); |
if ($homeserver ne 'no_host') { |
if ($homeserver ne 'no_host') { |
my $id=unpack("%32C*",$message); |
my $id=unpack("%32C*",$message); |
&Apache::lonnet::put('res_msgs',$filename.'_'.$id => package($message)); |
my $msgid; |
|
($msgid,$message)=&packagemsg($filename,$message); |
|
return &Apache::lonnet::reply('put:'.$domain.':'.$author. |
|
':nohist_res_msgs:'. |
|
&Apache::lonnet::escape($filename.'_'.$id).'='. |
|
&Apache::lonnet::escape($message),$homeserver); |
} |
} |
|
return 'no_host'; |
} |
} |
|
|
# ================================================== Critical message to a user |
# ================================================== Critical message to a user |
|
|
sub user_crit_msg { |
sub user_crit_msg { |
my ($user,$domain,$subject,$message)=@_; |
my ($user,$domain,$subject,$message)=@_; |
|
# Check if allowed missing |
|
my $status=''; |
|
my $msgid='undefined'; |
|
unless (($message)&&($user)&&($domain)) { $status='empty'; }; |
|
my $homeserver=&Apache::lonnet::homeserver($user,$domain); |
|
if ($homeserver ne 'no_host') { |
|
my $msgid; |
|
($msgid,$message)=&packagemsg($subject,$message); |
|
$status=&Apache::lonnet::critical( |
|
'put:'.$domain.':'.$user.':critical:'. |
|
&Apache::lonnet::escape($msgid).'='. |
|
&Apache::lonnet::escape($message),$homeserver); |
|
} else { |
|
$status='no_host'; |
|
} |
|
&Apache::lonnet::logthis( |
|
'Sending critical email '.$msgid. |
|
', log status: '. |
|
&Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'}, |
|
$ENV{'user.home'}, |
|
'Sending critical '.$msgid.' to '.$user.' at '.$domain.' with status: ' |
|
.$status)); |
|
return $status; |
|
} |
|
|
|
# =================================================== Critical message received |
|
|
|
sub user_crit_received { |
|
my $message=shift; |
|
my %contents=&unpackagemsg($message); |
|
my $status='rec: '. |
|
&user_normal_msg($contents{'sendername'},$contents{'senderdomain'}, |
|
'Receipt: '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}, |
|
'User '.$ENV{'user.name'}.' at '.$ENV{'user.domain'}. |
|
' acknowledged receipt of message "'. |
|
$contents{'subject'}.'" dated '.$contents{'time'}.".\n\n" |
|
.'Message ID: '.$contents{'msgid'}); |
|
$status.=' trans: '. |
|
&Apache::lonnet::put('nohist_email',$contents{'msgid'} => $message); |
|
$status.=' del: '. |
|
&Apache::lonnet::del('critical',$contents{'msgid'}); |
|
&Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'}, |
|
$ENV{'user.home'},'Received critical message '. |
|
$contents{'msgid'}. |
|
', '.$status); |
|
} |
|
|
|
# ======================================================== Normal communication |
|
|
|
sub user_normal_msg { |
|
my ($user,$domain,$subject,$message)=@_; |
|
# Check if allowed missing |
|
my $status=''; |
|
my $msgid='undefined'; |
|
unless (($message)&&($user)&&($domain)) { $status='empty'; }; |
|
my $homeserver=&Apache::lonnet::homeserver($user,$domain); |
|
if ($homeserver ne 'no_host') { |
|
my $msgid; |
|
($msgid,$message)=&packagemsg($subject,$message); |
|
$status=&Apache::lonnet::critical( |
|
'put:'.$domain.':'.$user.':nohist_email:'. |
|
&Apache::lonnet::escape($msgid).'='. |
|
&Apache::lonnet::escape($message),$homeserver); |
|
} else { |
|
$status='no_host'; |
|
} |
|
&Apache::lonnet::log($ENV{'user.domain'},$ENV{'user.name'}, |
|
$ENV{'user.home'}, |
|
'Sending '.$msgid.' to '.$user.' at '.$domain.' with status: '.$status); |
|
return $status; |
|
} |
|
|
|
# ===================================================================== Handler |
|
|
|
sub handler { |
|
my $r=shift; |
|
|
|
# ----------------------------------------------------------- Set document type |
|
|
|
$r->content_type('text/html'); |
|
$r->send_http_header; |
|
|
|
return OK if $r->header_only; |
|
|
|
# --------------------------------------------------------------- Render Output |
|
|
|
$r->print('<html><head><title>EMail and Messaging</title></head>'); |
|
$r->print('<body bgcolor="#FFFFFF">'); |
|
$r->print('<h1>EMail</h1>'); |
|
$r->print('</body></html>'); |
|
return OK; |
|
|
|
} |
|
# ================================================= Main program, reset counter |
|
|
|
sub BEGIN { |
|
$msgcount=0; |
} |
} |
|
|
1; |
1; |