version 1.214.2.3, 2008/12/23 19:27:33
|
version 1.221, 2009/01/05 20:04:40
|
Line 53 with <recipient username="$uname:$udom">
|
Line 53 with <recipient username="$uname:$udom">
|
Domain Coordinator e-mail for the storage of information about |
Domain Coordinator e-mail for the storage of information about |
recipients of the message/e-mail. |
recipients of the message/e-mail. |
|
|
=head1 FUNCTIONS |
=head1 SUBROUTINES |
|
|
=over 4 |
=over |
|
|
|
=pod |
|
|
|
=item packagemsg() |
|
|
|
Package |
|
|
|
=item get_course_context() |
|
|
|
=item unpackagemsg() |
|
|
|
Unpack message into a hash |
|
|
|
=item buildmsgid() |
|
|
|
Get info out of msgid |
|
|
|
=item unpackmsgid() |
|
|
|
=item sendemail() |
|
|
|
=item sendnotification() |
|
|
|
Send notification emails |
|
|
|
=item newmail() |
|
|
|
Check for email |
|
|
|
=item author_res_msg() |
|
|
|
Automated message to the author of a resource |
|
|
|
=item * B<author_res_msg($filename, $message)>: Sends message $message to the owner |
|
of the resource with the URI $filename. |
|
|
|
=item retrieve_author_res_msg() |
|
|
|
Retrieve author resource messages |
|
|
|
=item del_url_author_res_msg() |
|
|
|
Delete all author messages related to one URL |
|
|
|
=item clear_author_res_msg() |
|
|
|
Clear out all author messages in URL path |
|
|
|
=item all_url_author_res_msg() |
|
|
|
Return hash with URLs for which there is a resource message |
|
|
|
=item store_instructor_comment() |
|
|
|
Add a comment to the User Notes screen |
|
|
|
=item user_crit_msg_raw() |
|
|
|
Critical message to a user |
|
|
|
=item user_crit_msg() |
|
|
|
New routine that respects "forward" and calls old routine |
|
|
|
=item * B<user_crit_msg($user, $domain, $subject, $message, $sendback, $nosentstore,$recipid,$attachmenturl)>: |
|
Sends a critical message $message to the $user at $domain. If $sendback |
|
is true, a receipt will be sent to the current user when $user receives |
|
the message. |
|
|
|
Additionally it will check if the user has a Forwarding address |
|
set, and send the message to that address instead |
|
|
|
returns |
|
- in array context a list of results for each message that was sent |
|
- in scalar context a space seperated list of results for each |
|
message sent |
|
|
|
|
|
=item user_crit_received() |
|
|
|
Critical message received |
|
|
|
=item user_normal_msg_raw() |
|
|
|
Normal communication |
|
|
|
=item user_normal_msg() |
|
|
|
New routine that respects "forward" and calls old routine |
|
|
|
=item * B<user_normal_msg($user, $domain, $subject, $message, $citation, |
|
$baseurl, $attachmenturl, $toperm, $sentmessage, $symb, $restitle, |
|
$error,$nosentstore,$recipid)>: |
|
Sends a message to the $user at $domain, with subject $subject and message $message. |
|
|
|
Additionally it will check if the user has a Forwarding address |
|
set, and send the message to that address instead |
|
|
|
returns |
|
- in array context a list of results for each message that was sent |
|
- in scalar context a space seperated list of results for each |
|
message sent |
|
|
|
=item store_sent_mail() |
|
|
|
=item store_recipients() |
|
|
|
=item foldersuffix() |
|
|
|
=item get_user_folders() |
|
|
|
User-defined folders |
|
|
|
=item secapply() |
|
|
|
=item B<decide_receiver($feedurl,$author,$question,$course,$policy,$defaultflag)>: |
|
|
|
Arguments |
|
$feedurl - /res/ url of resource (only need if $author is true) |
|
$author,$question,$course,$policy - all true/false parameters |
|
if true will attempt to find the addresses of user that should receive |
|
this type of feedback (author - feedback to author of resource $feedurl, |
|
$question 'Resource Content Questions', $course 'Course Content Question', |
|
$policy 'Course Policy') |
|
(Additionally it also checks $env for whether the corresponding form.<name> |
|
element exists, for ease of use in a html response context) |
|
|
|
$defaultflag - (internal should be left blank) if true gather addresses |
|
that aren't for a section even if I have a section |
|
(used for reccursion internally, first we look for |
|
addresses for our specific section then we recurse |
|
and look for non section addresses) |
|
|
|
Returns |
|
$typestyle - string of html text, describing what addresses were found |
|
%to - a hash, which keys are addresses of users to send messages to |
|
the keys will look like name:domain |
|
|
|
=item user_lang() |
|
|
|
=back |
|
|
=cut |
=cut |
|
|
Line 74 use LONCAPA qw(:DEFAULT :match);
|
Line 215 use LONCAPA qw(:DEFAULT :match);
|
} |
} |
} |
} |
|
|
# ===================================================================== Package |
|
|
|
sub packagemsg { |
sub packagemsg { |
my ($subject,$message,$citation,$baseurl,$attachmenturl, |
my ($subject,$message,$citation,$baseurl,$attachmenturl, |
Line 83 sub packagemsg {
|
Line 224 sub packagemsg {
|
$citation=&HTML::Entities::encode($citation,'<>&"'); |
$citation=&HTML::Entities::encode($citation,'<>&"'); |
$subject =&HTML::Entities::encode($subject,'<>&"'); |
$subject =&HTML::Entities::encode($subject,'<>&"'); |
#remove machine specification |
#remove machine specification |
$baseurl =~ s|^https?\://[^/]+/|/|; |
$baseurl =~ s|^https?://[^/]+/|/|; |
$baseurl =&HTML::Entities::encode($baseurl,'<>&"'); |
$baseurl =&HTML::Entities::encode($baseurl,'<>&"'); |
#remove machine specification |
#remove machine specification |
$attachmenturl =~ s|^https\://[^/]+/|/|; |
$attachmenturl =~ s|^https?://[^/]+/|/|; |
$attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"'); |
$attachmenturl =&HTML::Entities::encode($attachmenturl,'<>&"'); |
my $course_context = &get_course_context(); |
my $course_context = &get_course_context(); |
my $now=time; |
my $now=time; |
Line 209 sub get_course_context {
|
Line 350 sub get_course_context {
|
return $course_context; |
return $course_context; |
} |
} |
|
|
# ================================================== Unpack message into a hash |
|
|
|
sub unpackagemsg { |
sub unpackagemsg { |
my ($message,$notoken,$noattachmentlink)=@_; |
my ($message,$notoken,$noattachmentlink)=@_; |
Line 247 sub unpackagemsg {
|
Line 387 sub unpackagemsg {
|
return %content; |
return %content; |
} |
} |
|
|
# ======================================================= Get info out of msgid |
|
|
|
sub buildmsgid { |
sub buildmsgid { |
my ($now,$subject,$uname,$udom,$msgcount,$course_context,$symb,$error,$pid) = @_; |
my ($now,$subject,$uname,$udom,$msgcount,$course_context,$symb,$error,$pid) = @_; |
Line 283 sub unpackmsgid {
|
Line 422 sub unpackmsgid {
|
|
|
sub sendemail { |
sub sendemail { |
my ($to,$subject,$body,$to_uname,$to_udom,$user_lh)=@_; |
my ($to,$subject,$body,$to_uname,$to_udom,$user_lh)=@_; |
my %senderemails=&Apache::loncommon::getemails(); |
|
my $senderaddress=''; |
my $senderaddress=''; |
foreach my $type ('notification','permanentemail','critnotification') { |
my $replytoaddress=''; |
if ($senderemails{$type}) { |
if ($env{'form.can_reply'} eq 'N') { |
$senderaddress=$senderemails{$type}; |
my $lonhost = $Apache::lonnet::perlvar{'lonHostID'}; |
} |
my $hostname = &Apache::lonnet::hostname($lonhost); |
|
$replytoaddress = 'do-not-reply@'.$hostname; |
|
} else { |
|
my %senderemails; |
|
my $have_sender; |
|
if ($env{'form.reply_to_addr'}) { |
|
my ($replytoname,$replytodom) = split(/:/,$env{'form.reply_to_addr'}); |
|
if (!($replytoname eq $env{'user.name'} && $replytodom eq $env{'user.domain'})) { |
|
if (&Apache::lonnet::homeserver($replytoname,$replytodom) ne 'no_host') { |
|
%senderemails = |
|
&Apache::loncommon::getemails($replytoname,$replytodom); |
|
$have_sender = 1; |
|
} |
|
} |
|
} |
|
if (!$have_sender) { |
|
%senderemails=&Apache::loncommon::getemails(); |
|
} |
|
foreach my $type ('permanentemail','critnotification','notification') { |
|
if ($senderemails{$type}) { |
|
($senderaddress) = split(/,/,$senderemails{$type}); |
|
last if ($senderaddress); |
|
} |
|
} |
} |
} |
$body= |
$body= |
"*** ".&mt_user($user_lh,'This is an automatic message generated by the LON-CAPA system.')."\n". |
"*** ".&mt_user($user_lh,'This is an automatic e-mail generated by the LON-CAPA system.')."\n". |
"*** ".($senderaddress?&mt_user($user_lh,'You can reply to this message'):&mt_user($user_lh,'Please do not reply to this address.')."\n*** ". |
"*** ".($senderaddress?&mt_user($user_lh,'You can reply to this e-mail'):&mt_user($user_lh,'Please do not reply to this address.')."\n*** ". |
&mt_user($user_lh,'A reply will not be received by the recipient!'))."\n\n".$body; |
&mt_user($user_lh,'A reply will not be received by the recipient!'))."\n\n".$body; |
my $msg = new Mail::Send; |
my $msg = new Mail::Send; |
$msg->to($to); |
$msg->to($to); |
$msg->subject('[LON-CAPA] '.$subject); |
$msg->subject('[LON-CAPA] '.$subject); |
if ($senderaddress) { $msg->add('Reply-to',$senderaddress); $msg->add('From',$senderaddress); } |
if ($replytoaddress) { |
|
$msg->add('Reply-to',$replytoaddress); |
|
} |
|
if ($senderaddress) { |
|
$msg->add('From',$senderaddress); |
|
} |
if (my $fh = $msg->open()) { |
if (my $fh = $msg->open()) { |
print $fh $body; |
print $fh $body; |
$fh->close; |
$fh->close; |
Line 395 to access the full message.',$url);
|
Line 561 to access the full message.',$url);
|
&sendemail($to,$subject,$body,$touname,$toudom,$user_lh); |
&sendemail($to,$subject,$body,$touname,$toudom,$user_lh); |
} |
} |
} |
} |
# ============================================================= Check for email |
|
|
|
sub newmail { |
sub newmail { |
if ((time-$env{'user.mailcheck.time'})>300) { |
if ((time-$env{'user.mailcheck.time'})>300) { |
Line 406 sub newmail {
|
Line 572 sub newmail {
|
return 0; |
return 0; |
} |
} |
|
|
# =============================== Automated message to the author of a resource |
|
|
|
=pod |
|
|
|
=item * B<author_res_msg($filename, $message)>: Sends message $message to the owner |
|
of the resource with the URI $filename. |
|
|
|
=cut |
|
|
|
sub author_res_msg { |
sub author_res_msg { |
my ($filename,$message)=@_; |
my ($filename,$message)=@_; |
Line 435 sub author_res_msg {
|
Line 594 sub author_res_msg {
|
return 'no_host'; |
return 'no_host'; |
} |
} |
|
|
# =========================================== Retrieve author resource messages |
|
|
|
sub retrieve_author_res_msg { |
sub retrieve_author_res_msg { |
my $url=shift; |
my $url=shift; |
Line 455 sub retrieve_author_res_msg {
|
Line 614 sub retrieve_author_res_msg {
|
} |
} |
|
|
|
|
# =============================== Delete all author messages related to one URL |
|
|
|
|
|
sub del_url_author_res_msg { |
sub del_url_author_res_msg { |
my $url=shift; |
my $url=shift; |
Line 469 sub del_url_author_res_msg {
|
Line 629 sub del_url_author_res_msg {
|
} |
} |
return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author); |
return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author); |
} |
} |
# =================================== Clear out all author messages in URL path |
|
|
|
sub clear_author_res_msg { |
sub clear_author_res_msg { |
my $url=shift; |
my $url=shift; |
Line 483 sub clear_author_res_msg {
|
Line 643 sub clear_author_res_msg {
|
} |
} |
return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author); |
return &Apache::lonnet::del('nohist_res_msgs',\@delmsgs,$domain,$author); |
} |
} |
# ================= Return hash with URLs for which there is a resource message |
|
|
|
|
|
sub all_url_author_res_msg { |
sub all_url_author_res_msg { |
my ($author,$domain)=@_; |
my ($author,$domain)=@_; |
Line 495 sub all_url_author_res_msg {
|
Line 656 sub all_url_author_res_msg {
|
return %returnhash; |
return %returnhash; |
} |
} |
|
|
# ====================================== Add a comment to the User Notes screen |
|
|
|
sub store_instructor_comment { |
sub store_instructor_comment { |
my ($msg,$uname,$udom) = @_; |
my ($msg,$uname,$udom) = @_; |
Line 510 sub store_instructor_comment {
|
Line 670 sub store_instructor_comment {
|
return $result; |
return $result; |
} |
} |
|
|
# ================================================== Critical message to a user |
|
|
|
sub user_crit_msg_raw { |
sub user_crit_msg_raw { |
my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage, |
my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage, |
Line 564 sub user_crit_msg_raw {
|
Line 723 sub user_crit_msg_raw {
|
return $status; |
return $status; |
} |
} |
|
|
# New routine that respects "forward" and calls old routine |
|
|
|
=pod |
|
|
|
=item * B<user_crit_msg($user, $domain, $subject, $message, $sendback, $nosentstore,$recipid,$attachmenturl)>: |
|
Sends a critical message $message to the $user at $domain. If $sendback |
|
is true, a receipt will be sent to the current user when $user receives |
|
the message. |
|
|
|
Additionally it will check if the user has a Forwarding address |
|
set, and send the message to that address instead |
|
|
|
returns |
|
- in array context a list of results for each message that was sent |
|
- in scalar context a space seperated list of results for each |
|
message sent |
|
|
|
=cut |
|
|
|
sub user_crit_msg { |
sub user_crit_msg { |
my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage, |
my ($user,$domain,$subject,$message,$sendback,$toperm,$sentmessage, |
Line 610 sub user_crit_msg {
|
Line 752 sub user_crit_msg {
|
return join(' ',@status); |
return join(' ',@status); |
} |
} |
|
|
# =================================================== Critical message received |
|
|
|
sub user_crit_received { |
sub user_crit_received { |
my $msgid=shift; |
my $msgid=shift; |
Line 646 sub user_crit_received {
|
Line 787 sub user_crit_received {
|
return $status; |
return $status; |
} |
} |
|
|
# ======================================================== Normal communication |
|
|
|
|
|
sub user_normal_msg_raw { |
sub user_normal_msg_raw { |
my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl, |
my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl, |
Line 707 sub user_normal_msg_raw {
|
Line 849 sub user_normal_msg_raw {
|
return $status; |
return $status; |
} |
} |
|
|
# New routine that respects "forward" and calls old routine |
|
|
|
=pod |
|
|
|
=item * B<user_normal_msg($user, $domain, $subject, $message, $citation, |
|
$baseurl, $attachmenturl, $toperm, $sentmessage, $symb, $restitle, |
|
$error,$nosentstore,$recipid)>: |
|
Sends a message to the $user at $domain, with subject $subject and message $message. |
|
|
|
Additionally it will check if the user has a Forwarding address |
|
set, and send the message to that address instead |
|
|
|
returns |
|
- in array context a list of results for each message that was sent |
|
- in scalar context a space seperated list of results for each |
|
message sent |
|
|
|
=cut |
|
|
|
sub user_normal_msg { |
sub user_normal_msg { |
my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl, |
my ($user,$domain,$subject,$message,$citation,$baseurl,$attachmenturl, |
$toperm,$sentmessage,$symb,$restitle,$error,$nosentstore,$recipid)=@_; |
$toperm,$sentmessage,$symb,$restitle,$error,$nosentstore,$recipid)=@_; |
Line 809 sub store_recipients {
|
Line 932 sub store_recipients {
|
} |
} |
} |
} |
|
|
# =============================================================== Folder suffix |
|
|
|
sub foldersuffix { |
sub foldersuffix { |
my $folder=shift; |
my $folder=shift; |
Line 824 sub foldersuffix {
|
Line 946 sub foldersuffix {
|
return $suffix; |
return $suffix; |
} |
} |
|
|
# ========================================================= User-defined folders |
|
|
|
sub get_user_folders { |
sub get_user_folders { |
my ($folder) = @_; |
my ($folder) = @_; |
Line 865 sub secapply {
|
Line 986 sub secapply {
|
return ''; |
return ''; |
} |
} |
|
|
=pod |
|
|
|
=item * B<decide_receiver($feedurl,$author,$question,$course,$policy,$defaultflag)>: |
|
|
|
Arguments |
|
$feedurl - /res/ url of resource (only need if $author is true) |
|
$author,$question,$course,$policy - all true/false parameters |
|
if true will attempt to find the addresses of user that should receive |
|
this type of feedback (author - feedback to author of resource $feedurl, |
|
$question 'Resource Content Questions', $course 'Course Content Question', |
|
$policy 'Course Policy') |
|
(Additionally it also checks $env for whether the corresponding form.<name> |
|
element exists, for ease of use in a html response context) |
|
|
|
$defaultflag - (internal should be left blank) if true gather addresses |
|
that aren't for a section even if I have a section |
|
(used for reccursion internally, first we look for |
|
addresses for our specific section then we recurse |
|
and look for non section addresses) |
|
|
|
Returns |
|
$typestyle - string of html text, describing what addresses were found |
|
%to - a hash, which keys are addresses of users to send messages to |
|
the keys will look like name:domain |
|
|
|
=cut |
|
|
|
sub decide_receiver { |
sub decide_receiver { |
my ($feedurl,$author,$question,$course,$policy,$defaultflag) = @_; |
my ($feedurl,$author,$question,$course,$policy,$defaultflag) = @_; |
&Apache::lonenc::check_decrypt(\$feedurl); |
&Apache::lonenc::check_decrypt(\$feedurl); |
Line 938 sub user_lang {
|
Line 1032 sub user_lang {
|
@userlangs=(@userlangs,split(/\s*(\,|\;|\:)\s*/, |
@userlangs=(@userlangs,split(/\s*(\,|\;|\:)\s*/, |
$env{'course.'.$fromcid.'.languages'})); |
$env{'course.'.$fromcid.'.languages'})); |
} else { |
} else { |
my %langhash = &Apache::loncommon::getlangs($toudom,$touname); |
my %langhash = &Apache::loncommon::getlangs($touname,$toudom); |
if ($langhash{'languages'} ne '') { |
if ($langhash{'languages'} ne '') { |
@userlangs = split(/\s*(\,|\;|\:)\s*/,$langhash{'languages'}); |
@userlangs = split(/\s*(\,|\;|\:)\s*/,$langhash{'languages'}); |
} else { |
} else { |
my %domdefs = &Apache::lonnet::get_domain_defaults($toudom); |
my %domdefs = &Apache::lonnet::get_domain_defaults($toudom); |
if ($domdefs{'lang_def'} ne '') { |
if ($domdefs{'lang_def'} ne '') { |
Line 953 sub user_lang {
|
Line 1047 sub user_lang {
|
return $user_lh; |
return $user_lh; |
} |
} |
|
|
=pod |
|
|
|
=back |
|
|
|
=cut |
|
|
|
1; |
1; |
__END__ |
__END__ |
|
|