# 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 packagemsg { my ($subject,$message)=@_; $message=~s/\/\>\;/g; $subject=~s/\/\>\;/g; 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'}.''. ''.$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 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); 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; __END__