--- loncom/interface/lonfeedback.pm 2005/11/15 20:33:20 1.174 +++ loncom/interface/lonfeedback.pm 2006/03/04 00:59:53 1.182 @@ -1,7 +1,7 @@ # The LearningOnline Network # Feedback # -# $Id: lonfeedback.pm,v 1.174 2005/11/15 20:33:20 albertel Exp $ +# $Id: lonfeedback.pm,v 1.182 2006/03/04 00:59:53 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -39,6 +39,7 @@ use Apache::lonnet; use Apache::lonhtmlcommon(); use Apache::lonnavmaps; use Apache::lonenc(); +use Apache::lonrss(); use HTML::LCParser(); use Apache::lonspeller(); use Cwd; @@ -905,16 +906,16 @@ sub build_posting_display { } else { @{$$namesort{$lastname}{$firstname}} = ("$idx"); } - if ($env{'course.'.$env{'request.course.id'}.'.allow_discussion_post_editing'} =~ m/yes/i) { + if (&editing_allowed()) { if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) { $sender.=' '.&mt('Edit').''; unless ($seeid) { - $sender.=" '; } } @@ -924,22 +925,22 @@ sub build_posting_display { unless ($studenthidden) { $sender.=' '.&mt('Make Visible').''; } } else { $sender.=' '.&mt('Hide').''; } $sender.=' '.&mt('Delete').''; @@ -975,8 +976,8 @@ sub build_posting_display { ($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) { $sender.=' '.&mt('Reply').''; } @@ -1300,7 +1301,7 @@ sub replicate_attachments { sub mail_screen { my ($r,$feedurl,$options) = @_; if (exists($env{'form.origpage'})) { - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['subject','comment','currnewattach','addnewattach','deloldattach','delnewattach','timestamp','idx','anondiscuss','discuss']); + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['subject','comment','currnewattach','addnewattach','deloldattach','delnewattach','timestamp','idx','anondiscuss','discuss','blog']); } my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion', '','onLoad="window.focus();setposttype();"'); @@ -1484,6 +1485,11 @@ $htmlheader rec=1; } } + if (typeof(document.mailform.elements.blog)!="undefined") { + if (document.mailform.elements.blog.checked) { + rec=1; + } + } if (rec) { if (typeof(document.mailform.onsubmit)=='function') { @@ -2140,7 +2146,7 @@ ENDFAILREDIR } sub redirect_back { - my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status,$previous,$sort,$rolefilter,$statusfilter,$sectionpick,$numpicks) = @_; + my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$blog,$status,$previous,$sort,$rolefilter,$statusfilter,$sectionpick,$numpicks) = @_; my $sorttag = ''; my $roletag = ''; my $statustag = ''; @@ -2222,6 +2228,7 @@ $html $typestyle Sent $sendsomething message(s), and $sendposts post(s). +$blog $status
$prevtag @@ -2307,6 +2314,8 @@ sub screen_header { ' ('.&mt('name only visible to course faculty').') '. ''.&mt('Change Screenname').''; } + #$discussoptions.='
'; } if ($msgoptions) { $msgoptions='

'.&mt('Sending Messages').'

'.$msgoptions; } if ($discussoptions) { @@ -2469,14 +2478,16 @@ sub feedback_available { } sub send_msg { - my ($feedurl,$email,$citations,$attachmenturl,%to)=@_; + my ($title,$feedurl,$email,$citations,$attachmenturl,%to)=@_; my $status=''; my $sendsomething=0; + if ($title=~/^Error/) { $title=&mt('Feedback').': '.$title; } + unless ($title=~/\w/) { $title=&mt('Feedback'); } foreach (keys %to) { if ($_) { my $declutter=&Apache::lonnet::declutter($feedurl); unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$_), - 'Feedback ['.$declutter.']',$email,$citations,$feedurl, + $title.' ['.$declutter.']',$email,$citations,$feedurl, $attachmenturl)=~/ok/) { $status.='
'.&mt('Error sending message to').' '.$_.'
'; } else { @@ -2578,7 +2589,7 @@ sub adddiscuss { $newcontrib{$key} = $contrib{$_}; } my $put_reply = &Apache::lonnet::putstore($env{'request.course.id'}, - \%newcontrib, + $oldsymb,$oldidx,\%contrib, $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); $status='Editing class discussion'.($anon?' (anonymous)':''); @@ -2736,6 +2747,7 @@ END + END foreach (@{$currnewattach}) { @@ -2800,6 +2812,7 @@ this.form.submit();" /> + @@ -2981,7 +2994,15 @@ sub handler { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['hide','unhide','deldisc','postdata','preview','replydisc','editdisc','cmd','symb','onlyunread','allposts','onlyunmark','previous','markread','markonread','markondisp','toggoff','toggon','modifydisp','changes','navtime','navmaps','navurl','sortposts','applysort','rolefilter','statusfilter','sectionpick','posterlist','userpick','attach','origpage','currnewattach','deloldattach','keepold','allversions','export']); - + if ($env{'form.editdisc'}) { + if (!(&editing_allowed())) { + my $symb=(split(/\:\:\:/,$env{'form.editdisc'}))[0]; + my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb); + my $feedurl=&Apache::lonnet::clutter($url); + &redirect_back($r,$feedurl,&mt('Editing not permitted').'
', '0','0','','',$env{'form.previous'},'','','',); + return OK; + } + } if ($env{'form.discsymb'}) { my ($symb,$feedurl) = &get_feedurl_and_clean_symb($env{'form.discsymb'}); my $readkey = $symb.'_read'; @@ -3005,7 +3026,7 @@ sub handler { \%readinghash,$env{'user.domain'},$env{'user.name'}); } &redirect_back($r,$feedurl,&mt('Marked postings read/unread').'
', - '0','0','',$env{'form.previous'},'','','',); + '0','0','','',$env{'form.previous'},'','','',); return OK; } if ($env{'form.allversions'}) { @@ -3057,14 +3078,14 @@ END $discinfo{$symb.'_userpick'} = join('&',@posters); &Apache::lonnet::put('nohist_'.$env{'request.course.id'}.'_discuss', \%discinfo,$env{'user.domain'},$env{'user.name'}); - &redirect_back($r,$feedurl,&mt('Changed sort/filter').'
','0','0', + &redirect_back($r,$feedurl,&mt('Changed sort/filter').'
','0','0','', '',$env{'form.previous'},$env{'form.sortposts'},'','','', $numpicks); return OK; } if ($env{'form.applysort'}) { my ($symb,$feedurl)=&get_feedurl_and_clean_symb($env{'form.applysort'}); - &redirect_back($r,$feedurl,&mt('Changed sort/filter').'
','0','0', + &redirect_back($r,$feedurl,&mt('Changed sort/filter').'
','0','0','', '',$env{'form.previous'},$env{'form.sortposts'}, $env{'form.rolefilter'},$env{'form.statusfilter'}, $env{'form.sectionpick'}); @@ -3168,7 +3189,7 @@ ENDREDIR my $previous=$env{'form.previous'}; if ($env{'form.markondisp'}) { $previous=undef; } &redirect_back($r,$feedurl,&mt('Changed display status').'
', - '0','0','',$previous); + '0','0','','',$previous); return OK; } elsif (($env{'form.hide'}) || ($env{'form.unhide'})) { # ----------------------------------------------------------------- Hide/unhide @@ -3176,6 +3197,18 @@ ENDREDIR my ($symb,$idx)=split(/\:\:\:/,$entry); ($symb,my $feedurl)=&get_feedurl_and_clean_symb($symb); + my $crs='/'.$env{'request.course.id'}; + if ($env{'request.course.sec'}) { + $crs.='_'.$env{'request.course.sec'}; + } + $crs=~s/\_/\//g; + my $seeid=&Apache::lonnet::allowed('rin',$crs); + + if ($env{'form.hide'} && !$seeid && !(&editing_allowed())) { + &redirect_back($r,$feedurl,&mt('Deletion not permitted').'
', '0','0','','',$env{'form.previous'},'','','',); + return OK; + } + my %contrib=&Apache::lonnet::restore($symb,$env{'request.course.id'}, $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); @@ -3183,13 +3216,6 @@ ENDREDIR my $currenthidden=$contrib{'hidden'}; my $currentstudenthidden=$contrib{'studenthidden'}; - my $crs='/'.$env{'request.course.id'}; - if ($env{'request.course.sec'}) { - $crs.='_'.$env{'request.course.sec'}; - } - $crs=~s/\_/\//g; - my $seeid=&Apache::lonnet::allowed('rin',$crs); - if ($env{'form.hide'}) { $currenthidden.='.'.$idx.'.'; unless ($seeid) { @@ -3208,7 +3234,7 @@ ENDREDIR $env{'course.'.$env{'request.course.id'}.'.num'}); &redirect_back($r,$feedurl,&mt('Changed discussion status').'
', - '0','0','',$env{'form.previous'}); + '0','0','','',$env{'form.previous'}); return OK; } elsif ($env{'form.cmd'}=~/^(threadedoff|threadedon)$/) { my ($symb,$feedurl)=&get_feedurl_and_clean_symb($env{'form.symb'}); @@ -3220,7 +3246,7 @@ ENDREDIR &Apache::lonnet::delenv('environment\.threadeddiscussion'); } &redirect_back($r,$feedurl,&mt('Changed discussion view mode').'
', - '0','0','',$env{'form.previous'}); + '0','0','','',$env{'form.previous'}); return OK; } elsif ($env{'form.deldisc'}) { # --------------------------------------------------------------- Hide for good @@ -3234,7 +3260,7 @@ ENDREDIR $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); &redirect_back($r,$feedurl,&mt('Changed discussion status').'
', - '0','0','',$env{'form.previous'}); + '0','0','','',$env{'form.previous'}); return OK; } elsif ($env{'form.preview'}) { # -------------------------------------------------------- User wants a preview @@ -3244,7 +3270,7 @@ ENDREDIR # -------------------------------------------------------- Work on attachments &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['subject','comment','addnewattach','delnewattach','timestamp','numoldver','idx','anondiscuss','discuss']); + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['subject','comment','addnewattach','delnewattach','timestamp','numoldver','idx','anondiscuss','discuss','blog']); my (@currnewattach,@currdelold,@keepold); &process_attachments(\@currnewattach,\@currdelold,\@keepold); if (exists($env{'form.addnewattach.filename'})) { @@ -3336,6 +3362,7 @@ ENDREDIR $r->send_http_header; # Unable to give feedback &no_redirect_back($r,$feedurl); + return OK; } # --------------------------------------------------- Print login screen header unless ($env{'form.sendit'}) { @@ -3399,7 +3426,7 @@ ENDREDIR my ($typestyle,%to) = &decide_receiver($feedurl); # Actually send mail - my ($status,$numsent)=&send_msg($feedurl,$email,$citations, + my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'}),$feedurl,$email,$citations, $attachmenturl,%to); # Discussion? Store that. @@ -3412,9 +3439,21 @@ ENDREDIR $subject); $numpost++; } + +# Add to blog? + + my $blog=''; + if ($env{'form.blog'}) { + my $subject = &clear_out_html($env{'form.subject'}); + $status.=&Apache::lonrss::addentry($env{'user.name'}, + $env{'user.domain'}, + 'CourseBlog_'.$env{'request.course.id'}, + $subject,$message,$feedurl,'public'); + $blog='
'.&mt('Added to my course blog').'
'; + } # Receipt screen and redirect back to where came from - &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$status,$env{'form.previous'}); + &redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$blog,$status,$env{'form.previous'}); } return OK; } @@ -3453,5 +3492,39 @@ sub get_feedurl_and_clean_symb { my $feedurl = &get_feedurl($symb); return ($symb,$feedurl); } + +sub editing_allowed { + my $can_edit = 0; + my $cid = $env{'request.course.id'}; + my $role = (split(/\./,$env{'request.role'}))[0]; + my $section = $env{'request.course.sec'}; + my $allow_editing_config = $env{'course.'.$env{'request.course.id'}. + '.allow_discussion_post_editing'}; + if ($allow_editing_config =~ m/^\s*yes\s*$/i) { + $can_edit = 1; + } else { + my @editor_roles = split(/,/,$allow_editing_config); + if (@editor_roles > 0) { + foreach my $editor (@editor_roles) { + my ($editor_role,$editor_sec) = split(/:/,$editor); + if ($editor_role eq $role) { + if (defined($editor_sec)) { + if (defined($section)) { + if ($editor_sec eq $section) { + $can_edit = 1; + last; + } + } + } else { + $can_edit = 1; + last; + } + } + } + } + } + return $can_edit; +} + 1; __END__