--- loncom/interface/lonfeedback.pm 2006/12/09 16:07:34 1.234
+++ loncom/interface/lonfeedback.pm 2007/02/28 21:45:42 1.245
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Feedback
#
-# $Id: lonfeedback.pm,v 1.234 2006/12/09 16:07:34 raeburn Exp $
+# $Id: lonfeedback.pm,v 1.245 2007/02/28 21:45:42 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -100,7 +100,8 @@ sub list_discussion {
}
}
- my ($blocked,$blocktext) = &blocking_posts('boards',1);
+ my ($blocked,$blocktext) =
+ &Apache::loncommon::blocking_status('boards');
if ($blocked) {
&Apache::lonenc::check_encrypt(\$ressymb);
if ($mode ne 'board') {
@@ -823,25 +824,6 @@ sub action_links_bar {
return $discussion;
}
-sub blocking_posts {
- my ($type,$showstatus) = @_;
- my %setters;
- my ($blocked,$output);
- my ($startblock,$endblock) =
- &Apache::loncommon::blockcheck(\%setters,$type);
- if ($startblock && $endblock) {
- $blocked = 1;
- if ($showstatus) {
- my $showstart = &Apache::lonlocal::locallocaltime($startblock);
- my $showend = &Apache::lonlocal::locallocaltime($endblock);
- $output = '
'.&mt('Discussion postings will not be viewable for resources in this course between [_1] and [_2] because communication is being blocked.',$showstart, $showend).'
'.
- &Apache::loncommon::build_block_table($startblock,$endblock,
- \%setters);
- }
- }
- return ($blocked,$output);
-}
-
sub postingform_display {
my ($mode,$ressymb,$now,$subject,$comment,$outputtarget,$attachnum,
$currnewattach,$currdelold,$group) = @_;
@@ -878,7 +860,7 @@ ENDDISCUSS
if ($group ne '') {
$postingform .='';
}
- my ($blockblog) = &blocking_posts('blogs');
+ my $blockblog = &Apache::loncommon::blocking_status('blogs');
if (!$blockblog) {
$postingform .= &add_blog_checkbox();
}
@@ -1030,7 +1012,7 @@ sub build_posting_display {
$sender.=' ['.$$anonhash{$key}.'] '.
$screenname;
}
-
+ $sender.=&Apache::loncommon::student_image_tag($contrib{$idx.':senderdomain'},$contrib{$idx.':sendername'});
# Set up for sorting by domain, then username
unless (defined($$usernamesort{$contrib{$idx.':senderdomain'}})) {
%{$$usernamesort{$contrib{$idx.':senderdomain'}}} = ();
@@ -1486,7 +1468,7 @@ sub replicate_attachments {
}
sub mail_screen {
- my ($r,$feedurl,$options) = @_;
+ my ($r,$feedurl,$options,$caller_symb) = @_;
if (exists($env{'form.origpage'})) {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['subject','comment','currnewattach','addnewattach','deloldattach','delnewattach','timestamp','idx','anondiscuss','discuss','blog','group','ref']);
}
@@ -1497,9 +1479,8 @@ sub mail_screen {
'title' => 'Title',
'reta' => 'Retained attachments',
'atta' => 'Attachment (128 KB max size)',
- );
- my $title=&Apache::lonnet::gettitle($feedurl);
- if (!$title) { $title = $feedurl; }
+ );
+ my $restitle = &get_resource_title($caller_symb,$feedurl);
my $quote='';
my $subject = '';
my $comment = '';
@@ -1687,7 +1668,7 @@ END
$r->print(<$title
+$restitle
';
}
if (&feedback_available(0,1)) {
$msgoptions.=
'';
}
if (&feedback_available(0,0,1)) {
$msgoptions.=
'';
}
}
if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) {
- if (&discussion_open(undef,$symb) &&
+ my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('boards');
+ if (!$blocked && &discussion_open(undef,$symb) &&
&Apache::lonnet::allowed('pch',
$env{'request.course.id'}.
($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) {
@@ -2607,10 +2593,10 @@ sub screen_header {
&mt('Anonymous contribution to course discussion of resource').
' ('.&mt('name only visible to course faculty').') '.
''.&mt('Change Screenname').'';
- }
- my ($blockblog) = &blocking_posts('blogs');
- if (!$blockblog) {
- $discussoptions.= &add_blog_checkbox();
+ my $blockblog = &Apache::loncommon::blocking_status('blogs');
+ if (!$blockblog) {
+ $discussoptions.= &add_blog_checkbox();
+ }
}
}
if ($msgoptions) { $msgoptions=''.&mt('Sending Messages').'
'.$msgoptions; }
@@ -2659,7 +2645,7 @@ sub clear_out_html {
}
sub assemble_email {
- my ($feedurl,$message,$prevattempts,$usersaw,$useranswer)=@_;
+ my ($message,$prevattempts,$usersaw,$useranswer)=@_;
my %lt = &Apache::lonlocal::texthash(
'prev' => 'Previous attempts of student (if applicable)',
'orig' => 'Original screen output (if applicable)',
@@ -2680,117 +2666,26 @@ ENDCITE
return ($email,$citations);
}
-sub secapply {
- my $rec=shift;
- my $defaultflag=shift;
- $rec=~s/\s+//g;
- $rec=~s/\@/\:/g;
- my ($adr,$sections)=($rec=~/^([^\(]+)\(([^\)]+)\)/);
- if ($sections) {
- foreach my $sec (split(/\;/,$sections)) {
- if (($sec eq $env{'request.course.sec'}) ||
- ($defaultflag && ($sec eq '*'))) {
- return $adr;
- }
- }
- } else {
- return $rec;
- }
- return '';
-}
-
-=pod
-
-=over 4
-
-=item *
-
-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.
- 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 {
- my ($feedurl,$author,$question,$course,$policy,$defaultflag) = @_;
- my $typestyle='';
- my %to=();
- if ($env{'form.discuss'} eq 'author' ||$author) {
- $typestyle.='Submitting as Author Feedback
';
- $feedurl=~ m{^/res/($LONCAPA::domain_re)/($LONCAPA::username_re)/};
- $to{$2.':'.$1}=1;
- }
- if ($env{'form.discuss'} eq 'question' ||$question) {
- $typestyle.=&mt('Submitting as Question').'
';
- foreach my $item (split(/\,/,
- $env{'course.'.$env{'request.course.id'}.'.question.email'})
- ) {
- my $rec=&secapply($item,$defaultflag);
- if ($rec) { $to{$rec}=1; }
- }
- }
- if ($env{'form.discuss'} eq 'course' ||$course) {
- $typestyle.=&mt('Submitting as Comment').'
';
- foreach my $item (split(/\,/,
- $env{'course.'.$env{'request.course.id'}.'.comment.email'})
- ) {
- my $rec=&secapply($item,$defaultflag);
- if ($rec) { $to{$rec}=1; }
- }
- }
- if ($env{'form.discuss'} eq 'policy' ||$policy) {
- $typestyle.=&mt('Submitting as Policy Feedback').'
';
- foreach my $item (split(/\,/,
- $env{'course.'.$env{'request.course.id'}.'.policy.email'})
- ) {
- my $rec=&secapply($item,$defaultflag);
- if ($rec) { $to{$rec}=1; }
- }
- }
- if ((scalar(%to) eq '0') && (!$defaultflag)) {
- ($typestyle,%to)=
- &decide_receiver($feedurl,$author,$question,$course,$policy,1);
- }
- return ($typestyle,%to);
-}
sub feedback_available {
my ($question,$course,$policy)=@_;
- my ($typestyle,%to)=&decide_receiver('',0,$question,$course,$policy);
+ my ($typestyle,%to)=&Apache::lonmsg::decide_receiver('',0,$question,
+ $course,$policy);
return scalar(%to);
}
sub send_msg {
- my ($title,$feedurl,$email,$citations,$attachmenturl,%to)=@_;
+ my ($title,$feedurl,$email,$citations,$attachmenturl,$symb,%to)=@_;
my $status='';
my $sendsomething=0;
+ my $restitle = &get_resource_title($symb,$feedurl);
if ($title=~/^Error/) { $title=&mt('Feedback').': '.$title; }
unless ($title=~/\w/) { $title=&mt('Feedback'); }
foreach my $key (keys(%to)) {
if ($key) {
- my $declutter=&Apache::lonnet::declutter($feedurl);
unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$key),
- $title.' ['.$declutter.']',$email,$citations,$feedurl,
- $attachmenturl)=~/ok/) {
+ $title.' ['.$restitle.']',$email,$citations,$feedurl,
+ $attachmenturl,undef,undef,$symb,$restitle)=~/ok/) {
$status.='
'.&mt('Error sending message to').' '.$key.'
';
} else {
$sendsomething++;
@@ -3738,12 +3633,8 @@ ENDREDIR
my $symb;
if ($env{'form.replydisc'}) {
$symb=(split(/\:\:\:/,$env{'form.replydisc'}))[0];
- my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
- $feedurl=&Apache::lonnet::clutter($url);
} elsif ($env{'form.editdisc'}) {
$symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0];
- my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
- $feedurl=&Apache::lonnet::clutter($url);
} elsif ($env{'form.origpage'}) {
$symb="";
} else {
@@ -3751,18 +3642,18 @@ ENDREDIR
}
unless ($symb) {
$symb=$env{'form.symb'};
- if ($symb) {
- my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb);
- $feedurl=&Apache::lonnet::clutter($url);
- }
}
- &Apache::lonenc::check_decrypt(\$symb);
+ if (defined($symb)) {
+ ($symb,$feedurl)=&get_feedurl_and_clean_symb($symb);
+ } else {
+ # backward compatibility (bulletin boards used to be 'wrapped')
+ &Apache::lonenc::check_decrypt(\$feedurl);
+ &dewrapper(\$feedurl);
+ }
my $goahead=1;
if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {
unless ($symb) { $goahead=0; }
}
- # backward compatibility (bulletin boards used to be 'wrapped')
- &dewrapper(\$feedurl);
if (!$goahead) {
# Ambiguous Problem Resource
$r->internal_redirect('/adm/ambiguous');
@@ -3791,7 +3682,8 @@ ENDREDIR
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
if (($env{'form.replydisc'}) || ($env{'form.editdisc'})) {
- my ($blocked,$blocktext) = &blocking_posts('boards',1);
+ my ($blocked,$blocktext) =
+ &Apache::loncommon::blocking_status('boards');
if ($blocked) {
$r->print(&blocked_reply_or_edit($blocktext));
return OK;
@@ -3799,7 +3691,7 @@ ENDREDIR
}
my $options=&screen_header($feedurl,$symb);
if ($options) {
- &mail_screen($r,$feedurl,$options);
+ &mail_screen($r,$feedurl,$options,$symb);
} else {
&fail_redirect($r,$feedurl);
}
@@ -3812,13 +3704,16 @@ ENDREDIR
$env{'request.course.id'});
# Get output from resource
+ &Apache::lonenc::check_encrypt(\$feedurl);
my $usersaw=&resource_output($feedurl);
# Get resource answer (need to allow student to view grades for this to work)
&Apache::lonnet::appenv(('allowed.vgr'=>'F'));
- my $useranswer=&Apache::loncommon::get_student_answers(
- $symb,$env{'user.name'},$env{'user.domain'},
- $env{'request.course.id'});
+ my $usersymb = &Apache::lonenc::check_encrypt($symb);
+ my $useranswer=
+ &Apache::loncommon::get_student_answers(
+ $usersymb,$env{'user.name'},$env{'user.domain'},
+ $env{'request.course.id'});
&Apache::lonnet::delenv('allowed.vgr');
# Get attachments, if any, and not too large
my $attachmenturl='';
@@ -3848,17 +3743,17 @@ ENDREDIR
my $message=&clear_out_html($env{'form.comment'});
# Assemble email
- my ($email,$citations)=&assemble_email($feedurl,$message,$prevattempts,
+ my ($email,$citations)=&assemble_email($message,$prevattempts,
$usersaw,$useranswer);
# Who gets this?
- my ($typestyle,%to) = &decide_receiver($feedurl);
+ my ($typestyle,%to) = &Apache::lonmsg::decide_receiver($feedurl);
# Actually send mail
my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'},
undef,1),
$feedurl,$email,$citations,
- $attachmenturl,%to);
+ $attachmenturl,$usersymb,%to);
# Discussion? Store that.
my $numpost=0;
@@ -4001,5 +3896,32 @@ sub group_args {
return $extra_args;
}
+sub get_resource_title {
+ my ($symb,$feedurl) = @_;
+ my ($restitle,$plainurl);
+ if (defined($symb)) {
+ my $plain_symb = &Apache::lonenc::check_decrypt($symb);
+ $restitle = &Apache::lonnet::gettitle($plain_symb);
+ }
+ if (defined($feedurl)) {
+ $plainurl = &Apache::lonenc::check_decrypt($feedurl);
+ }
+ if (!defined($restitle)) {
+ if (defined($feedurl)) {
+ $restitle = &Apache::lonnet::gettitle($plainurl);
+ }
+ }
+ if ($plainurl ne $feedurl) {
+ my ($plain_filename) = ($plainurl =~ m-/([^/]+)$-);
+ if ($plain_filename eq $restitle) {
+ $restitle = &mt('Untitled resource');
+ }
+ }
+ if ($restitle eq '') {
+ $restitle = &mt('Untitled resource');
+ }
+ return $restitle;
+}
+
1;
__END__