'.
'';
if ($visible>2) {
$discussion.=''.
- ' '.
- '
- | ';
if ($newpostsflag) {
if (!$markondisp) {
- $discussion .=''.&mt('Mark NEW posts no longer new').' ';
+ $discussion .=' | '.&mt('Mark NEW posts no longer new').' ';
} else {
$discussion .= ' | | ';
}
@@ -693,8 +687,8 @@ sub build_posting_display {
my @original=();
my @index=();
-
- my %contrib=&Apache::lonnet::restore($ressymb,$ENV{'request.course.id'},
+ my $symb=&Apache::lonenc::check_decrypt($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'});
@@ -986,6 +980,7 @@ sub build_posting_display {
$$shown{$idx} = 1;
} else {
foreach my $role (@{$$roleinfo{$poster}}) {
+ &Apache::lonnet::logthis("\n rolematch $rolematch\nrole $role");
if ($role =~ m/^$rolematch$/) {
$$shown{$idx} = 1;
last;
@@ -1480,10 +1475,8 @@ END
sub print_display_options {
my ($r,$symb,$previous,$dispchgA,$dispchgB,$markchg,$toggchg,$feedurl) = @_;
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
my $function = &Apache::loncommon::get_users_function();
my $tabcolor = &Apache::loncommon::designparm($function.'.tabbg',
@@ -1664,6 +1657,7 @@ $lt{'sdpf'} $lt{'prca'} - $l
+
@@ -1681,10 +1675,10 @@ END
sub print_sortfilter_options {
my ($r,$symb,$previous,$feedurl) = @_;
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
+
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+
my @sections = ();
my $section_sel = '';
my $numsections = 0;
@@ -1820,17 +1814,9 @@ END
sub print_showposters {
my ($r,$symb,$previous,$feedurl,$sortposts) = @_;
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
+
# backward compatibility (bulletin boards used to be 'wrapped')
- my $ressymb=$symb;
- if ($ressymb =~ /bulletin___\d+___/) {
- unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
- $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
- }
- }
+ my $ressymb=&wrap_symb($symb);
my $crs='/'.$ENV{'request.course.id'};
if ($ENV{'request.course.sec'}) {
$crs.='_'.$ENV{'request.course.sec'};
@@ -2014,10 +2000,11 @@ sub redirect_back {
my $userpicktag = '';
my $qrystr = '';
my $prevtag = '';
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
+
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+
+ &dewrapper(\$feedurl);
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
if ($previous > 0) {
$qrystr = 'previous='.$previous;
@@ -2340,6 +2327,7 @@ sub adddiscuss {
$contrib{'history'} = '';
my $numoldver = 0;
my ($oldsymb,$oldidx)=split(/\:\:\:/,$ENV{'form.editdisc'});
+ &Apache::lonenc::check_decrypt(\$oldsymb);
$oldsymb=~s|(bulletin___\d+___)adm/wrapper/|$1|;
# get timestamp for last post and history
my %oldcontrib=&Apache::lonnet::restore($oldsymb,$ENV{'request.course.id'},
@@ -2415,6 +2403,8 @@ sub adddiscuss {
sub show_preview {
my $r=shift;
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
my $message=&clear_out_html($ENV{'form.comment'});
$message=~s/\n/\ /g;
$message=&Apache::lonspeller::markeduptext($message);
@@ -2748,13 +2738,12 @@ sub handler {
# --------------------------- Get query string for limited number of parameters
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['hide','unhide','deldisc','postdata','preview','replydisc','editdisc','threadedon','threadedoff','onlyunread','allposts','onlyunmark','previous','markread','markonread','markondisp','toggoff','toggon','modifydisp','changes','navtime','navmaps','navurl','sortfilter','sortposts','applysort','rolefilter','statusfilter','sectionpick','posterlist','userpick','attach','origpage','currnewattach','deloldattach','keepold','allversions','export']);
+ ['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.discsymb'}) {
- my $symb = $ENV{'form.discsymb'};
+ my ($symb,$feedurl) = &get_feedurl_and_clean_symb($ENV{'form.discsymb'});
my $readkey = $symb.'_read';
- my %readinghash = ();
my $chgcount = 0;
- %readinghash = &Apache::lonnet::get('nohist_'.$ENV{'request.course.id'}.'_discuss',[$readkey],$ENV{'user.domain'},$ENV{'user.name'});
+ my %readinghash = &Apache::lonnet::get('nohist_'.$ENV{'request.course.id'}.'_discuss',[$readkey],$ENV{'user.domain'},$ENV{'user.name'});
foreach my $key (keys %ENV) {
if ($key =~ m/^form\.postunread_(\d+)/) {
if ($readinghash{$readkey} =~ /\.$1\./) {
@@ -2769,21 +2758,17 @@ sub handler {
}
}
if ($chgcount > 0) {
- &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%readinghash,$ENV{'user.domain'},$ENV{'user.name'});
+ &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',
+ \%readinghash,$ENV{'user.domain'},$ENV{'user.name'});
}
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- my $previous=$ENV{'form.previous'};
- my $feedurl = &Apache::lonnet::clutter($url);
- &redirect_back($r,$feedurl,&mt('Marked postings read/unread').' ','0','0','',$previous,'','','',);
+ &redirect_back($r,$feedurl,&mt('Marked postings read/unread').' ',
+ '0','0','',$ENV{'form.previous'},'','','',);
return OK;
}
if ($ENV{'form.allversions'}) {
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
- my $bodytag=&Apache::loncommon::bodytag('Discussion Post Versions',
- '','');
+ my $bodytag=&Apache::loncommon::bodytag('Discussion Post Versions');
$r->print (<
@@ -2796,13 +2781,10 @@ END
if ($ENV{'request.course.sec'}) {
$crs.='_'.$ENV{'request.course.sec'};
}
- $crs=~s/\_/\//g;
+ $crs=~s|_|/|g;
my $seeid=&Apache::lonnet::allowed('rin',$crs);
my ($symb,$idx)=split(/\:\:\:/,$ENV{'form.allversions'});
- my $ressymb=$symb;
- unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
- $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
- }
+ ($symb)=&get_feedurl_and_clean_symb($symb);
if ($idx > 0) {
my %messages = ();
my %subjects = ();
@@ -2810,90 +2792,42 @@ END
my %allattachments = ();
my %imsfiles = ();
my ($screenname,$plainname);
- my %contrib=&Apache::lonnet::restore($ressymb,$ENV{'request.course.id'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
- my $discussion = &get_post_contents(\%contrib,$idx,$seeid,'allversions',\%messages,\%subjects,\%allattachments,\%attachmsgs,\%imsfiles,\$screenname,\$plainname);
- $r->print($discussion);
+ my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+ $r->print(&get_post_contents(\%contrib,$idx,$seeid,'allversions',\%messages,\%subjects,\%allattachments,\%attachmsgs,\%imsfiles,\$screenname,\$plainname));
}
return OK;
}
if ($ENV{'form.posterlist'}) {
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my $symb=$ENV{'form.posterlist'};
- my $sortposts = $ENV{'form.sortposts'};
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- my $previous=$ENV{'form.previous'};
- my $feedurl = &Apache::lonnet::clutter($url);
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
- &print_showposters($r,$symb,$previous,$feedurl,$sortposts);
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.applysort'});
+ &print_showposters($r,$symb,$ENV{'form.previous'},$feedurl,
+ $ENV{'form.sortposts'});
return OK;
}
if ($ENV{'form.userpick'}) {
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my $symb=$ENV{'form.userpick'};
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- my $previous=$ENV{'form.previous'};
-# backward compatibility (bulletin boards used to be 'wrapped')
- my $ressymb=$symb;
- unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
- $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
- }
- my $sort=$ENV{'form.sortposts'};
- my @posters = ();
- if (ref($ENV{'form.stuinfo'}) eq 'ARRAY') {
- @posters = $ENV{'form.stuinfo'};
- } else {
- $posters[0] = $ENV{'form.stuinfo'};
- }
+ my @posters = &Apache::loncommon::get_env_multiple('form.stuinfo');
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.userpick'});
my $numpicks = @posters;
- if (defined($ENV{'form.userpick'})) {
- my %discinfo = ();
- $discinfo{$ressymb.'_userpick'} = join('&',@posters);
- &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
- }
- my $feedurl = &Apache::lonnet::clutter($url);
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
- &redirect_back($r,$feedurl,&mt('Changed sort/filter').' ','0','0','',$previous,$sort,'','','',$numpicks);
+ my %discinfo;
+ $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',
+ '',$ENV{'form.previous'},$ENV{'form.sortposts'},'','','',
+ $numpicks);
return OK;
}
if ($ENV{'form.applysort'}) {
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my $symb=$ENV{'form.applysort'};
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- my $previous=$ENV{'form.previous'};
- my $sort = $ENV{'form.sortposts'};
- my $rolefilter = $ENV{'form.rolefilter'};
- my $statusfilter = $ENV{'form.statusfilter'};
- my $secpick = $ENV{'form.sectionpick'};
- my $feedurl = &Apache::lonnet::clutter($url);
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
- &redirect_back($r,$feedurl,&mt('Changed sort/filter').' ','0','0','',$previous,$sort,$rolefilter,$statusfilter,$secpick);
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.applysort'});
+ &redirect_back($r,$feedurl,&mt('Changed sort/filter').' ','0','0',
+ '',$ENV{'form.previous'},$ENV{'form.sortposts'},
+ $ENV{'form.rolefilter'},$ENV{'form.statusfilter'},
+ $ENV{'form.secpick'});
return OK;
- } elsif ($ENV{'form.sortfilter'}) {
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my $symb=$ENV{'form.sortfilter'};
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- my $previous=$ENV{'form.previous'};
- my $feedurl = &Apache::lonnet::clutter($url);
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
- &print_sortfilter_options($r,$symb,$previous,$feedurl);
+ } elsif ($ENV{'form.cmd'} eq 'sortfilter') {
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.symb'});
+ &print_sortfilter_options($r,$symb,$ENV{'form.previous'},$feedurl);
return OK;
} elsif ($ENV{'form.navtime'}) {
my %discinfo = ();
@@ -2909,9 +2843,7 @@ END
}
my $numitems = @resources;
my $feedurl = '/adm/navmaps';
- if ($ENV{'form.navurl'}) {
- $feedurl .= '?'.$ENV{'form.navurl'};
- }
+ if ($ENV{'form.navurl'}) { $feedurl .= '?'.$ENV{'form.navurl'}; }
my %lt = &Apache::lonlocal::texthash(
'mnpa' => 'Marked "New" posts as read in a total of',
'robb' => 'resources/bulletin boards.',
@@ -2920,6 +2852,7 @@ END
foreach (@resources) {
# backward compatibility (bulletin boards used to be 'wrapped')
my $ressymb=$_;
+ &Apache::lonenc::check_decrypt(\$ressymb);
if ($ressymb =~ m/bulletin___\d+___/) {
unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
$ressymb=~s|(bulletin___\d+___)|$1adm/wrapper/|;
@@ -2930,7 +2863,8 @@ END
}
my $textline = "$lt{'mnpa'} $numitems $lt{'robb'}";
if ($numitems > 0) {
- &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
+ &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',
+ \%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
} else {
$textline = "$lt{'twnp'}";
}
@@ -2954,209 +2888,124 @@ $textline
ENDREDIR
return OK;
} elsif ($ENV{'form.modifydisp'}) {
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my $symb=$ENV{'form.modifydisp'};
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- my $previous=$ENV{'form.previous'};
- my ($dispchgA,$dispchgB,$markchg,$toggchg) = split/_/,$ENV{'form.changes'};
- my $feedurl = &Apache::lonnet::clutter($url);
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
- &print_display_options($r,$symb,$previous,$dispchgA,$dispchgB,$markchg,$toggchg,$feedurl);
- return OK;
- } elsif (($ENV{'form.markondisp'}) || ($ENV{'form.markonread'}) || ($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'}) || $ENV{'form.onlyunmark'} || $ENV{'form.toggoff'} || $ENV{'form.toggon'} ) {
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my $previous=$ENV{'form.previous'};
- my ($map,$ind,$url);
- if ( ($ENV{'form.toggoff'}) || ($ENV{'form.toggon'}) ) {
-# ------------------------------ Modify setting for read/unread toggle for each post
- my $symb=$ENV{'form.toggoff'}?$ENV{'form.toggoff'}:$ENV{'form.toggon'};
- my $ressymb = $symb;
- ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
- $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
- }
- my %discinfo = ();
- my $toggkey = $ressymb.'_readtoggle';
- if ($ENV{'form.toggon'}) {
- $discinfo{$toggkey} = 1;
- } elsif ($ENV{'form.toggoff'}) {
- $discinfo{$toggkey} = 0;
- }
- &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
- }
- if (($ENV{'form.markondisp'}) || ($ENV{'form.markonread'})) {
-# ---------------------- Modify setting for identification of 'NEW' posts in this discussion
- my $symb=$ENV{'form.markondisp'}?$ENV{'form.markondisp'}:$ENV{'form.markonread'};
- my $ressymb = $symb;
- ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
- $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
- }
- my %discinfo = ();
- my $lastkey = $ressymb.'_lastread';
- my $ondispkey = $ressymb.'_markondisp';
- if ($ENV{'form.markondisp'}) {
- $discinfo{$lastkey} = time;
- $discinfo{$ondispkey} = 1;
- } elsif ($ENV{'form.markonread'}) {
- if ( $previous > 0 ) {
- $discinfo{$lastkey} = $previous;
- }
- $discinfo{$ondispkey} = 0;
- }
- &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
- }
- if (($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'}) || ($ENV{'form.onlyunmark'}) ) {
-# ----------------------------------------------------------------- Modify display setting for this discussion
- my $symb;
- if ($ENV{'form.allposts'}) {
- $symb = $ENV{'form.allposts'};
- } elsif ($ENV{'form.onlyunread'}) {
- $symb = $ENV{'form.onlyunread'};
- } else {
- $symb = $ENV{'form.onlyunmark'};
- }
- my $ressymb = $symb;
- ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
- $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
- }
- my %discinfo = ();
- if ($ENV{'form.allposts'}) {
- $discinfo{$ressymb.'_showonlyunread'} = 0;
- $discinfo{$ressymb.'_showonlyunmark'} = 0;
- } elsif ($ENV{'form.onlyunread'}) {
- $discinfo{$ressymb.'_showonlyunread'} = 1;
- } else {
- $discinfo{$ressymb.'_showonlyunmark'} = 1;
- }
- &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
- }
- if (($ENV{'form.markonread'}) || ($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'}) || ($ENV{'form.onlyunmark'}) ||($ENV{'form.toggoff'}) || ($ENV{'form.toggon'}) ) {
- &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').' ','0','0','',$previous);
- } else {
- &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').' ','0','0');
- }
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.modifydisp'});
+ my ($dispchgA,$dispchgB,$markchg,$toggchg) =
+ split(/_/,$ENV{'form.changes'});
+ &print_display_options($r,$symb,$ENV{'form.previous'},$dispchgA,
+ $dispchgB,$markchg,$toggchg,$feedurl);
return OK;
- } elsif ($ENV{'form.markread'}) {
-# ----------------------------------------------------------------- Mark new posts not NEW
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my $symb=$ENV{'form.markread'};
- my $ressymb = $symb;
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
- $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
+ } elsif ($ENV{'form.markondisp'} || $ENV{'form.markonread'} ||
+ $ENV{'form.allposts'} || $ENV{'form.onlyunread'} ||
+ $ENV{'form.onlyunmark'} || $ENV{'form.toggoff'} ||
+ $ENV{'form.toggon'} || $ENV{'form.markread'}) {
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.symb'});
+ my %discinfo;
+# ------------------------ Modify setting for read/unread toggle for each post
+ if ($ENV{'form.toggoff'}) { $discinfo{$symb.'_readtoggle'}=1; }
+ if ($ENV{'form.toggon'}) { $discinfo{$symb.'_readtoggle'}=0; }
+# --------- Modify setting for identification of 'NEW' posts in this discussion
+ if ($ENV{'form.markondisp'}) {
+ $discinfo{$symb.'_lastread'} = time;
+ $discinfo{$symb.'_markondisp'} = 1;
+ }
+ if ($ENV{'form.markonread'}) {
+ if ( $ENV{'form.previous'} > 0 ) {
+ $discinfo{$symb.'_lastread'} = $ENV{'form.previous'};
+ }
+ $discinfo{$symb.'_markondisp'} = 0;
}
- my %discinfo = ();
- my $lastkey = $ressymb.'_lastread';
- $discinfo{$lastkey} = time;
- &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
- &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed reading status').' ','0','0');
+# --------------------------------- Modify display setting for this discussion
+ if ($ENV{'form.allposts'}) {
+ $discinfo{$symb.'_showonlyunread'} = 0;
+ $discinfo{$symb.'_showonlyunmark'} = 0;
+ }
+ if ($ENV{'form.onlyunread'}) { $discinfo{$symb.'_showonlyunread'} = 1; }
+ if ($ENV{'form.onlyunmark'}) { $discinfo{$symb.'_showonlyunmark'} = 1; }
+# ----------------------------------------------------- Mark new posts not NEW
+ if ($ENV{'form.markread'}) { $discinfo{$symb.'_lastread'} = time; }
+ &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',
+ \%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
+ my $previous=$ENV{'form.previous'};
+ if ($ENV{'form.markondisp'}) { $previous=undef; }
+ &redirect_back($r,$feedurl,&mt('Changed display status').' ',
+ '0','0','',$previous);
return OK;
} elsif (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {
# ----------------------------------------------------------------- Hide/unhide
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
-
- my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'};
+ my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'};
+ my ($symb,$idx)=split(/\:\:\:/,$entry);
+ ($symb,my $feedurl)=&get_feedurl_and_clean_symb($symb);
- my ($symb,$idx)=split(/\:\:\:/,$entry);
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
+ my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
- my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+ my $currenthidden=$contrib{'hidden'};
+ my $currentstudenthidden=$contrib{'studenthidden'};
-
- 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);
- 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) {
- $currentstudenthidden.='.'.$idx.'.';
- }
- } else {
- $currenthidden=~s/\.$idx\.//g;
- }
- my %newhash=('hidden' => $currenthidden);
- if ( ($ENV{'form.hide'}) && (!$seeid) ) {
- $newhash{'studenthidden'} = $currentstudenthidden;
- }
+ if ($ENV{'form.hide'}) {
+ $currenthidden.='.'.$idx.'.';
+ unless ($seeid) {
+ $currentstudenthidden.='.'.$idx.'.';
+ }
+ } else {
+ $currenthidden=~s/\.$idx\.//g;
+ }
+ my %newhash=('hidden' => $currenthidden);
+ if ( ($ENV{'form.hide'}) && (!$seeid) ) {
+ $newhash{'studenthidden'} = $currentstudenthidden;
+ }
- &Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+ &Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
- &redirect_back($r,&Apache::lonnet::clutter($url),
- &mt('Changed discussion status').' ','0','0','',$ENV{'form.previous'});
- } elsif (($ENV{'form.threadedon'}) || ($ENV{'form.threadedoff'})) {
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- if ($ENV{'form.threadedon'}) {
+ &redirect_back($r,$feedurl,&mt('Changed discussion status').' ',
+ '0','0','',$ENV{'form.previous'});
+ return OK;
+ } elsif ($ENV{'form.cmd'}=~/^(threadedoff|threadedon)$/) {
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.symb'});
+ if ($ENV{'form.cmd'} eq 'threadedon') {
&Apache::lonnet::put('environment',{'threadeddiscussion' => 'on'});
&Apache::lonnet::appenv('environment.threadeddiscussion' => 'on');
} else {
&Apache::lonnet::del('environment',['threadeddiscussion']);
&Apache::lonnet::delenv('environment\.threadeddiscussion');
}
- my $symb=$ENV{'form.threadedon'}?$ENV{'form.threadedon'}:$ENV{'form.threadedoff'};
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
- &redirect_back($r,&Apache::lonnet::clutter($url),
- &mt('Changed discussion view mode').' ','0','0','',$ENV{'form.previous'});
+ &redirect_back($r,$feedurl,&mt('Changed discussion view mode').' ',
+ '0','0','',$ENV{'form.previous'});
+ return OK;
} elsif ($ENV{'form.deldisc'}) {
# --------------------------------------------------------------- Hide for good
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
-
- my $entry=$ENV{'form.deldisc'};
-
- my ($symb,$idx)=split(/\:\:\:/,$entry);
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
-
- my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
-
-
- my $currentdeleted=$contrib{'deleted'};
-
- $currentdeleted.='.'.$idx.'.';
-
- my %newhash=('deleted' => $currentdeleted);
-
- &Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
- $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
-
- &redirect_back($r,&Apache::lonnet::clutter($url),
- &mt('Changed discussion status').' ','0','0','',$ENV{'form.previous'});
+ my ($symb,$idx)=split(/\:\:\:/,$ENV{'form.deldisc'});
+ ($symb,my $feedurl)=&get_feedurl_and_clean_symb($symb);
+ my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+ my %newhash=('deleted' => $contrib{'deleted'}.".$idx.");
+ &Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'},
+ $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'});
+ return OK;
} elsif ($ENV{'form.preview'}) {
# -------------------------------------------------------- User wants a preview
- $r->content_type('text/html');
- $r->send_http_header;
&show_preview($r);
+ return OK;
} elsif ($ENV{'form.attach'}) {
# -------------------------------------------------------- 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']);
- my @currnewattach = ();
- my @currdelold = ();
- my @keepold = ();
+ my (@currnewattach,@currdelold,@keepold);
&process_attachments(\@currnewattach,\@currdelold,\@keepold);
if (exists($ENV{'form.addnewattach.filename'})) {
unless (length($ENV{'form.addnewattach'})>131072) {
@@ -3165,36 +3014,25 @@ ENDREDIR
push @currnewattach, $newattachment;
}
}
- my $attachmenturls = '';
+ my $attachmenturls;
+ my ($symb) = &get_feedurl_and_clean_symb($ENV{'form.attach'});
my $idx = $ENV{'form.idx'};
- my $symb = $ENV{'form.attach'};
if ($idx) {
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
$ENV{'course.'.$ENV{'request.course.id'}.'.num'});
$attachmenturls = $contrib{$idx.':attachmenturl'};
}
- &modify_attachments($r,\@currnewattach,\@currdelold,$symb,$idx,$attachmenturls);
- } elsif ($ENV{'form.chgreads'}) {
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($ENV{'form.chgreads'});
- &redirect_back($r,&Apache::lonnet::clutter($url),
- &mt('Changed read status').' ','0','0');
+ &modify_attachments($r,\@currnewattach,\@currdelold,$symb,$idx,
+ $attachmenturls);
+ return OK;
} elsif ($ENV{'form.export'}) {
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
- my $symb=$ENV{'form.export'};
- my $mode;
+ my ($symb,$feedurl) = &get_feedurl_and_clean_symb($ENV{'form.export'});
+ my $mode='board';
my $status='OPEN';
- my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
my $previous=$ENV{'form.previous'};
- my $feedurl = &Apache::lonnet::clutter($url);
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $mode = 'board';
- $feedurl=~s|^/adm/wrapper||;
- }
if ($feedurl =~ /\.(problem|exam|quiz|assess|survey|form|library)$/) {
$mode='problem';
$status=$Apache::inputtags::status[-1];
@@ -3205,69 +3043,79 @@ ENDREDIR
return OK;
} else {
# ------------------------------------------------------------- Normal feedback
- my $feedurl=$ENV{'form.postdata'};
- $feedurl=~s/^http\:\/\///;
- $feedurl=~s/^$ENV{'SERVER_NAME'}//;
- $feedurl=~s/^$ENV{'HTTP_HOST'}//;
- $feedurl=~s/\?.+$//;
+ my $feedurl=$ENV{'form.postdata'};
+ $feedurl=~s/^http\:\/\///;
+ $feedurl=~s/^$ENV{'SERVER_NAME'}//;
+ $feedurl=~s/^$ENV{'HTTP_HOST'}//;
+ $feedurl=~s/\?.+$//;
- 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 {
- $symb=&Apache::lonnet::symbread($feedurl);
- }
- unless ($symb) {
- $symb=$ENV{'form.symb'};
- if ($symb) {
+ 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);
+ $feedurl=&Apache::lonnet::clutter($url);
+ } elsif ($ENV{'form.origpage'}) {
+ $symb="";
+ } else {
+ $symb=&Apache::lonnet::symbread($feedurl);
+ }
+ 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);
+ my $goahead=1;
+ if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+ unless ($symb) { $goahead=0; }
+ }
+ # backward compatibility (bulletin boards used to be 'wrapped')
+ if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
+ $feedurl=~s|^/adm/wrapper||;
+ }
+ if (!$goahead) {
+ # Ambiguous Problem Resource
+ $r->internal_redirect('/adm/ambiguous');
+ return OK;
}
- }
- my $goahead=1;
- if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form)$/) {
- unless ($symb) { $goahead=0; }
- }
- # backward compatibility (bulletin boards used to be 'wrapped')
- if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
- $feedurl=~s|^/adm/wrapper||;
- }
- if ($goahead) {
# Go ahead with feedback, no ambiguous reference
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
-
- if (
- (
- ($feedurl=~m:^/res:) && ($feedurl!~m:^/res/adm:)
- )
- ||
- ($ENV{'request.course.id'} && ($feedurl!~m:^/adm:))
- ||
- ($ENV{'request.course.id'} && ($symb=~/^bulletin\_\_\_/))
- ) {
+ unless (
+ (
+ ($feedurl=~m:^/res:) && ($feedurl!~m:^/res/adm:)
+ )
+ ||
+ ($ENV{'request.course.id'} && ($feedurl!~m:^/adm:))
+ ||
+ ($ENV{'request.course.id'} && ($symb=~/^bulletin\_\_\_/))
+ ) {
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+# Unable to give feedback
+ &no_redirect_back($r,$feedurl);
+ }
# --------------------------------------------------- Print login screen header
- unless ($ENV{'form.sendit'}) {
- my $options=&screen_header($feedurl);
- if ($options) {
- &mail_screen($r,$feedurl,$options);
- } else {
- &fail_redirect($r,$feedurl);
+ unless ($ENV{'form.sendit'}) {
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ my $options=&screen_header($feedurl);
+ if ($options) {
+ &mail_screen($r,$feedurl,$options);
+ } else {
+ &fail_redirect($r,$feedurl);
+ }
+ return OK;
}
- } else {
# Get previous user input
my $prevattempts=&Apache::loncommon::get_previous_attempt(
- $symb,$ENV{'user.name'},$ENV{'user.domain'},
- $ENV{'request.course.id'});
+ $symb,$ENV{'user.name'},$ENV{'user.domain'},
+ $ENV{'request.course.id'});
# Get output from resource
my $usersaw=&resource_output($feedurl);
@@ -3275,26 +3123,28 @@ ENDREDIR
# 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'});
+ $symb,$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='';
- if (($ENV{'form.origpage'}) || ($ENV{'form.editdisc'}) || ($ENV{'form.replydisc'})) {
- my ($symb,$idx);
- if ($ENV{'form.replydisc'}) {
- ($symb,$idx)=split(/\:\:\:/,$ENV{'form.replydisc'});
- } elsif ($ENV{'form.editdisc'}) {
- ($symb,$idx)=split(/\:\:\:/,$ENV{'form.editdisc'});
- } elsif ($ENV{'form.origpage'}) {
- $symb = $ENV{'form.symb'};
- }
- my @currnewattach = ();
- my @deloldattach = ();
- my @keepold = ();
- &process_attachments(\@currnewattach,\@deloldattach,\@keepold);
- $symb=~s|(bulletin___\d+___)adm/wrapper/|$1|;
- $attachmenturl=&construct_attachmenturl(\@currnewattach,\@keepold,$symb,$idx);
+ if (($ENV{'form.origpage'}) || ($ENV{'form.editdisc'}) ||
+ ($ENV{'form.replydisc'})) {
+ my ($symb,$idx);
+ if ($ENV{'form.replydisc'}) {
+ ($symb,$idx)=split(/\:\:\:/,$ENV{'form.replydisc'});
+ } elsif ($ENV{'form.editdisc'}) {
+ ($symb,$idx)=split(/\:\:\:/,$ENV{'form.editdisc'});
+ } elsif ($ENV{'form.origpage'}) {
+ $symb = $ENV{'form.symb'};
+ }
+ &Apache::lonenc::check_decrypt(\$symb);
+ my @currnewattach = ();
+ my @deloldattach = ();
+ my @keepold = ();
+ &process_attachments(\@currnewattach,\@deloldattach,\@keepold);
+ $symb=~s|(bulletin___\d+___)adm/wrapper/|$1|;
+ $attachmenturl=&construct_attachmenturl(\@currnewattach,\@keepold,$symb,$idx);
} elsif ($ENV{'form.attachment.filename'}) {
unless (length($ENV{'form.attachment'})>131072) {
$attachmenturl=&Apache::lonnet::userfileupload('attachment',undef,'feedback');
@@ -3305,49 +3155,65 @@ ENDREDIR
# Assemble email
my ($email,$citations)=&assemble_email($feedurl,$message,$prevattempts,
- $usersaw,$useranswer);
+ $usersaw,$useranswer);
# Who gets this?
my ($typestyle,%to) = &decide_receiver($feedurl);
# Actually send mail
my ($status,$numsent)=&send_msg($feedurl,$email,$citations,
- $attachmenturl,%to);
+ $attachmenturl,%to);
# Discussion? Store that.
my $numpost=0;
- if ($ENV{'form.discuss'}) {
- my $subject = &clear_out_html($ENV{'form.subject'});
- $typestyle.=&adddiscuss($symb,$message,0,$attachmenturl,$subject);
- $numpost++;
- }
-
- if ($ENV{'form.anondiscuss'}) {
- my $subject = &clear_out_html($ENV{'form.subject'});
- $typestyle.=&adddiscuss($symb,$message,1,$attachmenturl,$subject);
+ if ($ENV{'form.discuss'} || $ENV{'form.anondiscuss'}) {
+ my $subject = &clear_out_html($ENV{'form.subject'});
+ my $anonmode=(defined($ENV{'form.anondiscuss'}));
+ $typestyle.=&adddiscuss($symb,$message,$anonmode,$attachmenturl,
+ $subject);
$numpost++;
}
-
-
+
# Receipt screen and redirect back to where came from
&redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$status,$ENV{'form.previous'});
-
- }
- } else {
-# Unable to give feedback
- &no_redirect_back($r,$feedurl);
- }
- } else {
-# Ambiguous Problem Resource
- if ( &Apache::lonnet::mod_perl_version() == 2 ) {
- &Apache::lonnet::cleanenv();
- }
- $r->internal_redirect('/adm/ambiguous');
}
-}
return OK;
}
+sub wrap_symb {
+ my ($ressymb)=@_;
+ if ($ressymb =~ /bulletin___\d+___/) {
+ unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
+ $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
+ }
+ }
+ return $ressymb;
+}
+sub dewrapper {
+ my ($feedurl)=@_;
+ if ($$feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) {
+ $$feedurl=~s|^/adm/wrapper||;
+ }
+}
+
+sub get_feedurl {
+ my ($symb)=@_;
+ my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
+ my $feedurl = &Apache::lonnet::clutter($url);
+ &dewrapper(\$feedurl);
+ return $feedurl;
+}
+
+sub get_feedurl_and_clean_symb {
+ my ($symb)=@_;
+ &Apache::lonenc::check_decrypt(\$symb);
+# backward compatibility (bulletin boards used to be 'wrapped')
+ unless ($symb =~ m|bulletin___\d+___adm/wrapper|) {
+ $symb=~s|(bulletin___\d+___)|$1adm/wrapper|;
+ }
+ my $feedurl = &get_feedurl($symb);
+ return ($symb,$feedurl);
+}
1;
__END__
|