# The LearningOnline Network with CAPA
#
# Routines for messaging
#
# (Routines to control the menu
#
# (TeX Conversion Module
#
# 05/29/00,05/30 Gerd Kortemeyer)
#
# 10/05 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)=@_;
$message=~s/\\<\;/g;
$message=~s/\>/\>\;/g;
$subject=~s/\\<\;/g;
$subject=~s/\>/\>\;/g;
my $now=time;
$msgcount++;
$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'}.''.
''.$ENV{'browser.type'}.''.
''.$ENV{'browser.os'}.''.
''.$ENV{'browser.version'}.''.
''.$ENV{'browser.mathml'}.''.
''.$ENV{'HTTP_USER_AGENT'}.''.
''.$ENV{'request.course.id'}.''.
''.$ENV{'request.role'}.''.
''.$ENV{'request.filename'}.''.
''.$msgid.''.
''.$message.'';
}
# ================================================== Unpack message into a hash
sub unpackage {
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);
my $msgid;
($msgid,$message)=package($filename,$message);
return &Apache::lonnet::put(
'nohist_res_msgs',$filename.'_'.$id => $message);
}
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)=package($filename,$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)=package($filename,$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;
__END__