--- loncom/interface/lonmsg.pm 2000/10/19 14:20:17 1.1
+++ loncom/interface/lonmsg.pm 2000/10/20 14:40:26 1.3
@@ -10,26 +10,32 @@
#
# 10/05 Gerd Kortemeyer)
#
-# 10/19 Gerd Kortemeyer
+# 10/19,10/20 Gerd Kortemeyer
package Apache::lonmsg;
use strict;
use Apache::lonnet();
-
+use vars qw($msgcount);
+use HTML::TokeParser;
# ===================================================================== Package
-sub package {
- var ($subject,$message)=@_;
+sub packagemsg {
+ my ($subject,$message)=@_;
$message=~s/\\<\;/g;
$message=~s/\>/\>\;/g;
$subject=~s/\\<\;/g;
$subject=~s/\>/\>\;/g;
- return ''.$ENV{'user.name'}.''.
+ my $now=time;
+ $msgcount++;
+ my $msgid=$now.'_'.$ENV{'user.name'}.'_'.
+ $ENV{'user.domain'}.'_'.$msgcount.'_'.$$;
+ return $msgid,
+ ''.$ENV{'user.name'}.''.
''.$ENV{'user.domain'}.''.
''.$subject.''.
- ''.
+ ''.
''.$ENV{'SERVER_NAME'}.''.
''.$ENV{'HTTP_HOST'}.''.
''.$ENV{'REMOTE_ADDR'}.''.
@@ -41,26 +47,106 @@ sub package {
''.$ENV{'request.course.id'}.''.
''.$ENV{'request.role'}.''.
''.$ENV{'request.filename'}.''.
+ ''.$msgid.''.
''.$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
sub author_res_msg {
my ($filename,$message)=@_;
+ unless ($message) { return 'empty'; }
$filename=&Apache::lonnet::declutter($filename);
my ($domain,$author,@dummy)=split(/\//,$filename);
my $homeserver=&Apache::lonnet::homeserver($author,$domain);
if ($homeserver ne 'no_host') {
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
sub user_crit_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::cput('critical',$msgid => $message);
+ } else {
+ $status='no_host';
+ }
+ &Apache::lonnet::logthis(
+ 'INFO: 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;
+
+}
+
+# ======================================================== 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::cput('nohist_email',$msgid => $message);
+ } 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;
+}
+
+# ================================================= Main program, reset counter
+
+sub BEGIN {
+ $msgcount=0;
}
1;