version 1.240, 2007/01/05 06:47:22
|
version 1.246, 2007/03/20 00:08:09
|
Line 1012 sub build_posting_display {
|
Line 1012 sub build_posting_display {
|
$sender.=' <font color="red"><b>['.$$anonhash{$key}.']</b></font> '. |
$sender.=' <font color="red"><b>['.$$anonhash{$key}.']</b></font> '. |
$screenname; |
$screenname; |
} |
} |
|
$sender.=&Apache::loncommon::student_image_tag($contrib{$idx.':senderdomain'},$contrib{$idx.':sendername'}); |
# Set up for sorting by domain, then username |
# Set up for sorting by domain, then username |
unless (defined($$usernamesort{$contrib{$idx.':senderdomain'}})) { |
unless (defined($$usernamesort{$contrib{$idx.':senderdomain'}})) { |
%{$$usernamesort{$contrib{$idx.':senderdomain'}}} = (); |
%{$$usernamesort{$contrib{$idx.':senderdomain'}}} = (); |
Line 2559 sub screen_header {
|
Line 2559 sub screen_header {
|
'<p><label><input type="radio" name="discuss" value="author" /> '. |
'<p><label><input type="radio" name="discuss" value="author" /> '. |
&mt('Feedback to resource author').'</label></p>'; |
&mt('Feedback to resource author').'</label></p>'; |
} |
} |
|
my %optionhash=(); |
|
foreach my $type ('question','comment','policy') { |
|
$optionhash{$type}=$env{'course.'.$env{'request.course.id'}.'.'.$type.'.email.text'}; |
|
} |
if (&feedback_available(1)) { |
if (&feedback_available(1)) { |
$msgoptions.= |
$msgoptions.= |
'<p><label><input type="radio" name="discuss" value="question" /> '. |
'<p><label><input type="radio" name="discuss" value="question" /> '. |
&mt('Question about resource content').'</label></p>'; |
($optionhash{'question'}?$optionhash{'question'}:&mt('Question about resource content')).'</label></p>'; |
} |
} |
if (&feedback_available(0,1)) { |
if (&feedback_available(0,1)) { |
$msgoptions.= |
$msgoptions.= |
'<p><label><input type="radio" name="discuss" value="course" /> '. |
'<p><label><input type="radio" name="discuss" value="course" /> '. |
&mt('Question/Comment/Feedback about course content'). |
($optionhash{'comment'}?$optionhash{'comment'}:&mt('Question/Comment/Feedback about course content')). |
'</label></p>'; |
'</label></p>'; |
} |
} |
if (&feedback_available(0,0,1)) { |
if (&feedback_available(0,0,1)) { |
$msgoptions.= |
$msgoptions.= |
'<p><label><input type="radio" name="discuss" value="policy" /> '. |
'<p><label><input type="radio" name="discuss" value="policy" /> '. |
&mt('Question/Comment/Feedback about course policy'). |
($optionhash{'policy'}?$optionhash{'policy'}:&mt('Question/Comment/Feedback about course policy')). |
'</label></p>'; |
'</label></p>'; |
} |
} |
} |
} |
if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) { |
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', |
&Apache::lonnet::allowed('pch', |
$env{'request.course.id'}. |
$env{'request.course.id'}. |
($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) { |
($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) { |
Line 2588 sub screen_header {
|
Line 2593 sub screen_header {
|
&mt('Anonymous contribution to course discussion of resource'). |
&mt('Anonymous contribution to course discussion of resource'). |
' <i>('.&mt('name only visible to course faculty').')</i></label> '. |
' <i>('.&mt('name only visible to course faculty').')</i></label> '. |
'<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>'; |
'<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>'; |
} |
my $blockblog = &Apache::loncommon::blocking_status('blogs'); |
my $blockblog = &Apache::loncommon::blocking_status('blogs'); |
if (!$blockblog) { |
if (!$blockblog) { |
$discussoptions.= &add_blog_checkbox(); |
$discussoptions.= &add_blog_checkbox(); |
} |
} |
} |
} |
} |
if ($msgoptions) { $msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/feedback.gif').'" />'.&mt('Sending Messages').'</h2>'.$msgoptions; } |
if ($msgoptions) { $msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/feedback.gif').'" />'.&mt('Sending Messages').'</h2>'.$msgoptions; } |
Line 2661 ENDCITE
|
Line 2666 ENDCITE
|
return ($email,$citations); |
return ($email,$citations); |
} |
} |
|
|
sub secapply { |
|
my $rec=shift; |
|
my $defaultflag=shift; |
|
$rec=~s/\s+//g; |
|
$rec=~s/\@/\:/g; |
|
my ($adr,$sections_or_groups)=($rec=~/^([^\(]+)\(([^\)]+)\)/); |
|
if ($sections_or_groups) { |
|
foreach my $item (split(/\;/,$sections_or_groups)) { |
|
if (($item eq $env{'request.course.sec'}) || |
|
($defaultflag && ($item eq '*'))) { |
|
return $adr; |
|
} elsif ($env{'request.course.groups'}) { |
|
my @usersgroups = split(/:/,$env{'request.course.groups'}); |
|
if (grep(/^\Q$item\E$/,@usersgroups)) { |
|
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.<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 { |
|
my ($feedurl,$author,$question,$course,$policy,$defaultflag) = @_; |
|
&Apache::lonenc::check_decrypt(\$feedurl); |
|
my $typestyle=''; |
|
my %to=(); |
|
if ($env{'form.discuss'} eq 'author' ||$author) { |
|
$typestyle.='Submitting as Author Feedback<br />'; |
|
$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').'<br />'; |
|
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').'<br />'; |
|
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').'<br />'; |
|
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 { |
sub feedback_available { |
my ($question,$course,$policy)=@_; |
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); |
return scalar(%to); |
} |
} |
|
|
sub send_msg { |
sub send_msg { |
my ($title,$feedurl,$email,$citations,$attachmenturl,$symb,%to)=@_; |
my ($title,$feedurl,$email,$citations,$attachmenturl,$symb,%to)=@_; |
my $status=''; |
my $status=''; |
my $sendsomething=0; |
my $sendsomething=0; |
my $restitle = &get_resource_title($symb,$feedurl); |
my $restitle = &get_resource_title($symb,$feedurl); |
if ($title=~/^Error/) { $title=&mt('Feedback').': '.$title; } |
if ($title=~/^Error/) { $title=&mt('Feedback').': '.$title; } |
unless ($title=~/\w/) { $title=&mt('Feedback'); } |
unless ($title=~/\w/) { $title=&mt('Feedback'); } |
foreach my $key (keys(%to)) { |
foreach my $key (keys(%to)) { |
if ($key) { |
if ($key) { |
unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$key), |
my ($user,$domain) = split(/\:/,$key,2); |
$title.' ['.$restitle.']',$email,$citations,$feedurl, |
if (!defined($user)) { |
$attachmenturl,undef,undef,$symb,$restitle)=~/ok/) { |
$status.='<br />'.&mt('Error sending message to [_1], no user specified.',$key); |
$status.='<br />'.&mt('Error sending message to').' '.$key.'<br />'; |
} elsif (!defined($domain)) { |
} else { |
$status.='<br />'.&mt('Error sending message to [_1], no domain specified.',$key); |
$sendsomething++; |
} else { |
} |
unless (&Apache::lonmsg::user_normal_msg($user,$domain, |
|
$title.' ['.$restitle.']',$email,$citations,$feedurl, |
|
$attachmenturl,undef,undef,$symb,$restitle)=~/ok/) { |
|
$status.='<br />'.&mt('Error sending message to').' '.$key.'<br />'; |
|
} else { |
|
$sendsomething++; |
|
} |
|
} |
|
} |
} |
} |
} |
|
|
|
my %record=&Apache::lonnet::restore('_feedback'); |
my %record=&Apache::lonnet::restore('_feedback'); |
my ($temp)=keys(%record); |
my ($temp)=keys(%record); |
unless ($temp=~/^error\:/) { |
unless ($temp=~/^error\:/) { |
my %newrecord=(); |
my %newrecord=(); |
$newrecord{'resource'}=$feedurl; |
$newrecord{'resource'}=$feedurl; |
$newrecord{'subnumber'}=$record{'subnumber'}+1; |
$newrecord{'subnumber'}=$record{'subnumber'}+1; |
unless (&Apache::lonnet::cstore(\%newrecord,'_feedback') eq 'ok') { |
unless (&Apache::lonnet::cstore(\%newrecord,'_feedback') eq 'ok') { |
$status.='<br />'.&mt('Not registered').'<br />'; |
$status.='<br />'.&mt('Not registered').'<br />'; |
} |
} |
} |
} |
|
|
return ($status,$sendsomething); |
return ($status,$sendsomething); |
} |
} |
|
|
sub adddiscuss { |
sub adddiscuss { |
Line 3839 ENDREDIR
|
Line 3755 ENDREDIR
|
$usersaw,$useranswer); |
$usersaw,$useranswer); |
|
|
# Who gets this? |
# Who gets this? |
my ($typestyle,%to) = &decide_receiver($feedurl); |
my ($typestyle,%to) = &Apache::lonmsg::decide_receiver($feedurl); |
|
|
# Actually send mail |
# Actually send mail |
my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'}, |
my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'}, |