'.
'';
}
@@ -753,10 +760,11 @@ ENDDISCUSS
}
sub build_posting_display {
- my ($usernamesort,$subjectsort,$namesort,$notshown,$newitem,$dischash,$shown,$alldiscussion,$imsitems,$imsfiles,$roleinfo,$discussionitems,$replies,$depth,$posters,$maxdepth,$visible,$newpostsflag,$current,$status,$viewgrades,$seeid,$prevread,$sortposts,$ressymb,$target,$readkey,$showunmark,$showonlyunread,$totposters,$rolefilter,$sectionpick,$statusfilter,$toggkey,$outputtarget) = @_;
+ my ($usernamesort,$subjectsort,$namesort,$notshown,$newitem,$dischash,$shown,$alldiscussion,$imsitems,$imsfiles,$roleinfo,$discussionitems,$replies,$depth,$posters,$maxdepth,$visible,$newpostsflag,$current,$status,$viewgrades,$seeid,$prevread,$sortposts,$ressymb,$target,$readkey,$showunmark,$showonlyunread,$totposters,$rolefilter,$sectionpick,$statusfilter,$toggkey,$outputtarget,$anonhash,$anoncnt) = @_;
my @original=();
my @index=();
my $symb=&Apache::lonenc::check_decrypt($ressymb);
+ my $escsymb=&Apache::lonnet::escape($ressymb);
my %contrib=&Apache::lonnet::restore($symb,$env{'request.course.id'},
$env{'course.'.$env{'request.course.id'}.'.domain'},
$env{'course.'.$env{'request.course.id'}.'.num'});
@@ -820,6 +828,13 @@ sub build_posting_display {
my %allattachments = ();
my ($screenname,$plainname);
my $sender = &mt('Anonymous');
+# Anonymous users getting number within a discussion
+# Since idx is in static order, this should give the same sequence every time.
+ my $key=$contrib{$idx.':sendername'}.'@'.$contrib{$idx.':senderdomain'};
+ unless ($$anonhash{$key}) {
+ $anoncnt++;
+ $$anonhash{$key}=&mt('Anonymous').' '.$anoncnt;
+ }
my ($message,$subject,$vgrlink,$ctlink);
&get_post_contents(\%contrib,$idx,$seeid,$outputtarget,\%messages,\%subjects,\%allattachments,\%attachtxt,$imsfiles,\$screenname,\$plainname,$numoldver);
@@ -858,7 +873,7 @@ sub build_posting_display {
$contrib{$idx.':sendername'}.' at '.
$contrib{$idx.':senderdomain'}.')';
if ($contrib{$idx.':anonymous'}) {
- $sender.=' ['.&mt('anonymous').'] '.
+ $sender.=' ['.$$anonhash{$key}.'] '.
$screenname;
}
@@ -891,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.=" ';
}
}
@@ -909,23 +924,23 @@ sub build_posting_display {
if ($hidden) {
unless ($studenthidden) {
$sender.=' '.&mt('Make Visible').'';
}
} else {
$sender.=' '.&mt('Hide').'';
}
$sender.=' '.&mt('Delete').'';
@@ -933,6 +948,8 @@ sub build_posting_display {
} else {
if ($screenname) {
$sender=''.$screenname.'';
+ } else {
+ $sender=''.$$anonhash{$key}.'';
}
# Set up for sorting by domain, then username for anonymous
unless (defined($$usernamesort{'__anon'})) {
@@ -958,9 +975,9 @@ sub build_posting_display {
$env{'request.course.id'}.
($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) {
$sender.=' '.&mt('Reply').'';
}
@@ -1074,7 +1091,7 @@ sub build_posting_display {
my @postversions = ();
$$discussionitems[$idx] .= &mt('This post has been edited by the author.');
if ($seeid) {
- $$discussionitems[$idx] .= ' '.&mt('Display all versions').'';
+ $$discussionitems[$idx] .= ' '.&mt('Display all versions').'';
}
$$discussionitems[$idx].=' '.&mt('Earlier version(s) were posted on: ');
if ($contrib{$idx.':history'} =~ m/:/) {
@@ -1164,11 +1181,11 @@ sub get_post_contents {
# $$screenname=&Apache::loncommon::screenname(
# $$contrib{$idx.':sendername'},
# $$contrib{$idx.':senderdomain'});
-# $$plainname=&Apache::loncommon::nickname(
-# $$contrib{$idx.':sendername'},
-# $$contrib{$idx.':senderdomain'});
- ($$screenname,$$plainname)=($$contrib{$idx.':screenname'},
- $$contrib{$idx.':plainname'});
+ $$plainname=&Apache::loncommon::nickname(
+ $$contrib{$idx.':sendername'},
+ $$contrib{$idx.':senderdomain'});
+ $$screenname=$$contrib{$idx.':screenname'};
+
my $sender=&Apache::loncommon::aboutmewrapper(
$$plainname,
$$contrib{$idx.':sendername'},
@@ -1180,11 +1197,7 @@ sub get_post_contents {
if ($type eq 'allversions' || $type eq 'export') {
$start = 0;
if ($$contrib{$idx.':history'}) {
- if ($$contrib{$idx.':history'} =~ m/:/) {
- @postversions = split/:/,$$contrib{$idx.':history'};
- } else {
- @postversions = ("$$contrib{$idx.':history'}");
- }
+ @postversions = split(/:/,$$contrib{$idx.':history'});
}
&get_post_versions($messages,$$contrib{$idx.':message'},1);
&get_post_versions($subjects,$$contrib{$idx.':subject'},1);
@@ -1288,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();"');
@@ -1472,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') {
@@ -2128,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 = '';
@@ -2210,6 +2228,7 @@ $html
$typestyle
Sent $sendsomething message(s), and $sendposts post(s).
+$blog
$status
ENDPREVIEW
}
@@ -2720,6 +2745,7 @@ END
+
END
foreach (@{$currnewattach}) {
@@ -2784,6 +2810,7 @@ this.form.submit();" />
+
@@ -2965,7 +2992,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';
@@ -2989,7 +3024,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'}) {
@@ -3041,14 +3076,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'});
@@ -3152,7 +3187,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
@@ -3160,6 +3195,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'});
@@ -3167,13 +3214,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) {
@@ -3192,7 +3232,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'});
@@ -3204,7 +3244,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
@@ -3218,7 +3258,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
@@ -3228,7 +3268,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'})) {
@@ -3257,7 +3297,7 @@ ENDREDIR
my $mode='board';
my $status='OPEN';
my $previous=$env{'form.previous'};
- if ($feedurl =~ /\.(problem|exam|quiz|assess|survey|form|library)$/) {
+ if ($feedurl =~ /\.(problem|exam|quiz|assess|survey|form|library|task)$/) {
$mode='problem';
$status=$Apache::inputtags::status[-1];
}
@@ -3296,7 +3336,7 @@ ENDREDIR
}
&Apache::lonenc::check_decrypt(\$symb);
my $goahead=1;
- if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+ if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form|task)$/) {
unless ($symb) { $goahead=0; }
}
# backward compatibility (bulletin boards used to be 'wrapped')
@@ -3320,6 +3360,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'}) {
@@ -3396,9 +3437,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;
}
@@ -3437,5 +3490,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__
|