'.
'';
if ($visible>2) {
@@ -482,7 +475,6 @@ imscp_v1p1.xsd http://www.imsglobal.org/
my $postfilename = $alldiscussion{$_}.'-'.$imsitems{$alldiscussion{$_}}{'timestamp'}.'.html';
if ($manifestok) {
if (($depth[$alldiscussion{$_}] <= $currdepth) && ($alldiscussion{$_} != $firstidx)) {
- print STDERR "depth is $depth[$alldiscussion{$_}], currdepth is $currdepth, idx is $alldiscussion{$_}, firstidx is $firstidx\n";
print $manifestfile ' '."\n";
}
$currdepth = $depth[$alldiscussion{$_}];
@@ -570,7 +562,8 @@ END
-
+
+
END
}
if ($outputtarget eq 'export') {
@@ -608,7 +601,7 @@ END
undef(%oldENV);
$discussion .= 'Download the zip file from Discussion Posting Archive ';
if ($copyresult) {
- $discussion .= 'The following errors occurred during export - '.$copyresult;
+ $discussion .= 'The following errors occurred during export - '.$copyresult;
}
} else {
$discussion .= ' Unfortunately you will not be able to retrieve an archive of the discussion posts at this time, because there was a problem creating a manifest file. ';
@@ -626,8 +619,8 @@ END
my $subject = '';
if ($ENV{'form.origpage'}) {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['addnewattach','deloldattach','delnewattach','timestamp','idx','subject','comment']);
- $subject = &HTML::Entities::encode($ENV{'form.subject'},'<>&"');
- $comment = &HTML::Entities::encode($ENV{'form.comment'},'<>&"');
+ $subject = &Apache::lonnet::unescape($ENV{'form.subject'});
+ $comment = &Apache::lonnet::unescape($ENV{'form.comment'});
my @keepold = ();
&process_attachments(\@currnewattach,\@currdelold,\@keepold);
if (@currnewattach > 0) {
@@ -682,7 +675,7 @@ ENDDISCUSS
($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
if ($outputtarget ne 'tex') {
$discussion.='';
}
@@ -696,8 +689,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'});
@@ -989,6 +982,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;
@@ -1056,12 +1050,14 @@ sub get_post_contents {
return $discussion;
}
}
- $$screenname=&Apache::loncommon::screenname(
- $$contrib{$idx.':sendername'},
- $$contrib{$idx.':senderdomain'});
- $$plainname=&Apache::loncommon::nickname(
- $$contrib{$idx.':sendername'},
- $$contrib{$idx.':senderdomain'});
+# $$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'});
my $sender=&Apache::loncommon::aboutmewrapper(
$$plainname,
$$contrib{$idx.':sendername'},
@@ -1159,22 +1155,23 @@ sub replicate_attachments {
$i ++;
}
my ($content,$rtncode);
- print STDERR "File to replicate is $$attachrefs{$id}{'filename'} in $1,$2\n";
my $uploadreply = &Apache::lonnet::getuploaded('GET',$$attachrefs{$id}{'filename'},$1,$2,$content,$rtncode);
if ($uploadreply eq 'ok') {
- my $attachcopy;
- if ($attachcopy = Apache::File->new('>'.$destination)) {
- print $attachcopy $content;
- close($attachcopy);
- } else {
- $response .= 'Error copying a file attachment to IMS package: '.$!.' '."\n";
- }
+ my $attachcopy;
+ if ($attachcopy = Apache::File->new('>'.$destination)) {
+ print $attachcopy $content;
+ close($attachcopy);
+ } else {
+ $response .= 'Error copying file attachment - '.$5.' to IMS package: '.$!.' '."\n";
+ }
} else {
- print STDERR "return code from lonnet was $rtncode\n";
+ &Apache::lonnet::logthis("Replication of attachment failed when building IMS export of discussion posts - domain: $1, course: $2, file: $$attachrefs{$id}{'filename'} -error: $rtncode");
+ $response .= 'Error copying file attachment - '.$5.' to IMS package: '.$rtncode.' '."\n";
}
}
}
}
+ return $response;
}
sub mail_screen {
@@ -1316,8 +1313,8 @@ END
}
if ($ENV{'form.origpage'}) {
- $subject = $ENV{'form.subject'};
- $comment = $ENV{'form.comment'};
+ $subject = &Apache::lonnet::unescape($ENV{'form.subject'});
+ $comment = &Apache::lonnet::unescape($ENV{'form.comment'});
&process_attachments(\@currnewattach,\@currdelold,\@keepold);
}
my $latexHelp=&Apache::loncommon::helpLatexCheatsheet();
@@ -1480,10 +1477,7 @@ 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||;
- }
+ &dewrapper(\$feedurl);
my $function = &Apache::loncommon::get_users_function();
my $tabcolor = &Apache::loncommon::designparm($function.'.tabbg',
@@ -1681,10 +1675,8 @@ 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||;
- }
+
+ &dewrapper(\$feedurl);
my @sections = ();
my $section_sel = '';
my $numsections = 0;
@@ -1820,17 +1812,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 +1998,8 @@ 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||;
- }
+
+ &dewrapper(\$feedurl);
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
if ($previous > 0) {
$qrystr = 'previous='.$previous;
@@ -2050,6 +2032,7 @@ sub redirect_back {
$sectag = '';
}
}
+ $feedurl=&Apache::lonenc::check_encrypt($feedurl);
$r->print (<
@@ -2087,9 +2070,10 @@ sub no_redirect_back {
ENDNOREDIR
if ($feedurl!~/^\/adm\/feedback/) {
- $r->print('');
+ $r->print('');
}
-
+ $feedurl=&Apache::lonenc::check_encrypt($feedurl);
$r->print (<
@@ -2187,8 +2171,6 @@ sub clear_out_html {
sub assemble_email {
my ($feedurl,$message,$prevattempts,$usersaw,$useranswer)=@_;
my $email=<<"ENDEMAIL";
-Refers to $feedurl
-
$message
ENDEMAIL
my $citations=<<"ENDCITE";
@@ -2340,6 +2322,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'},
@@ -2441,7 +2424,8 @@ ENDPREVIEW
sub modify_attachments {
my ($r,$currnewattach,$currdelold,$symb,$idx,$attachmenturls)=@_;
- my $subject=&clear_out_html($ENV{'form.subject'});
+ my $orig_subject = &Apache::lonnet::unescape($ENV{'form.subject'});
+ my $subject=&clear_out_html($orig_subject);
$subject=~s/\n/\ /g;
$subject=&Apache::lontexconvert::msgtexconverted($subject);
my $timestamp=$ENV{'form.timestamp'};
@@ -2470,7 +2454,7 @@ $bodytag
- Subject:$subject
+ Subject: $subject
END
if ($idx) {
if ($attachmenturls) {
@@ -2577,7 +2561,7 @@ sub generate_attachments_button {
my $response = (<
Click to add/remove attachments: new();
+ my @allres=$navmap->retrieveResources();
+ foreach my $resource (@allres) {
+ if ($resource->hasDiscussion()) {
+ my $ressymb;
+ if ($resource->symb() =~ m-(___adm/\w+/\w+)/(\d+)/bulletinboard$-) {
+ $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard';
+ } else {
+ $ressymb = $resource->symb();
+ }
+ push @{$resourcesref}, $ressymb;
+ }
+ }
+ return;
+}
sub handler {
my $r = shift;
@@ -2729,13 +2731,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','navmaps','navurl','sortfilter','sortposts','applysort','rolefilter','statusfilter','sectionpick','posterlist','userpick','attach','origpage','currnewattach','deloldattach','keepold','allversions','export']);
+ ['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']);
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\./) {
@@ -2750,21 +2751,19 @@ 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 (<
@@ -2777,13 +2776,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 = ();
@@ -2791,120 +2787,90 @@ 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);
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.sortfilter'});
+ &print_sortfilter_options($r,$symb,$ENV{'form.previous'},$feedurl);
return OK;
- } elsif ($ENV{'form.navmaps'}) {
+ } elsif ($ENV{'form.navtime'}) {
my %discinfo = ();
my @resources = ();
- if ($ENV{'form.navmaps'} =~ /:/) {
- @resources = split/:/,$ENV{'form.navmaps'};
+ if (defined($ENV{'form.navmaps'})) {
+ if ($ENV{'form.navmaps'} =~ /:/) {
+ @resources = split/:/,$ENV{'form.navmaps'};
+ } else {
+ @resources = ("$ENV{'form.navmaps'}");
+ }
} else {
- @resources = ("$ENV{'form.navmaps'}");
+ &has_discussion(\@resources);
}
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.'
+ 'robb' => 'resources/bulletin boards.',
+ 'twnp' => 'There are currently no resources or bulletin boards with unread discussion postings.'
);
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/|;
}
}
my $lastkey = $ressymb.'_lastread';
- $discinfo{$lastkey} = time;
+ $discinfo{$lastkey} = $ENV{'form.navtime'};
+ }
+ 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'});
+ } else {
+ $textline = "$lt{'twnp'}";
}
- &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
$r->print (<
-$lt{'mnpa'} $numitems $lt{'robb'}
+$textline
Continue
@@ -2927,63 +2893,51 @@ ENDREDIR
} 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);
+ 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.markondisp'}) || ($ENV{'form.markonread'}) || ($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'}) || $ENV{'form.onlyunmark'} || $ENV{'form.toggoff'} || $ENV{'form.toggon'} ) {
+ } 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);
+ my $feedurl;
if ( ($ENV{'form.toggoff'}) || ($ENV{'form.toggon'}) ) {
-# ------------------------------ Modify setting for read/unread toggle for each post
+# ------------------------ 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'});
+ ($symb,$feedurl)=&get_feedurl_and_clean_symb($symb);
+ my %discinfo;
+ $discinfo{$symb.'_readtoggle'}=1;
+ if ($ENV{'form.toggoff'}) { $discinfo{$symb.'_readtoggle'}=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
+# --------- 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';
+ ($symb,$feedurl)=&get_feedurl_and_clean_symb($symb);
+ my %discinfo;
+ my $lastkey = $symb.'_lastread';
+ my $ondispkey = $symb.'_markondisp';
if ($ENV{'form.markondisp'}) {
$discinfo{$lastkey} = time;
$discinfo{$ondispkey} = 1;
} elsif ($ENV{'form.markonread'}) {
- if ( $previous > 0 ) {
- $discinfo{$lastkey} = $previous;
+ if ( $ENV{'form.previous'} > 0 ) {
+ $discinfo{$lastkey} = $ENV{'form.previous'};
}
$discinfo{$ondispkey} = 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'});
}
- if (($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'}) || ($ENV{'form.onlyunmark'}) ) {
-# ----------------------------------------------------------------- Modify display setting for this discussion
+ 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'};
@@ -2992,132 +2946,114 @@ ENDREDIR
} 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 = ();
+ ($symb,$feedurl)=&get_feedurl_and_clean_symb($symb);
+ my %discinfo;
if ($ENV{'form.allposts'}) {
- $discinfo{$ressymb.'_showonlyunread'} = 0;
- $discinfo{$ressymb.'_showonlyunmark'} = 0;
+ $discinfo{$symb.'_showonlyunread'} = 0;
+ $discinfo{$symb.'_showonlyunmark'} = 0;
} elsif ($ENV{'form.onlyunread'}) {
- $discinfo{$ressymb.'_showonlyunread'} = 1;
+ $discinfo{$symb.'_showonlyunread'} = 1;
} else {
- $discinfo{$ressymb.'_showonlyunmark'} = 1;
+ $discinfo{$symb.'_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');
+ &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.markread'}) {
-# ----------------------------------------------------------------- Mark new posts not NEW
+# ----------------------------------------------------- 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|;
- }
- 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');
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.markread'});
+ &Apache::lonnet::logthis("\n last read w symb ".$symb);
+ my %discinfo;
+ $discinfo{$symb.'_lastread'} = time;
+ &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',
+ \%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
+ &redirect_back($r,$feedurl,&mt('Changed reading status').' ',
+ '0','0');
return OK;
} elsif (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {
# ----------------------------------------------------------------- Hide/unhide
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
+ &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'});
+ &redirect_back($r,$feedurl,&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;
+ my $symb;
if ($ENV{'form.threadedon'}) {
+ $symb=$ENV{'form.threadedon'};
&Apache::lonnet::put('environment',{'threadeddiscussion' => 'on'});
&Apache::lonnet::appenv('environment.threadeddiscussion' => 'on');
} else {
+ $symb=$ENV{'form.threadedoff'};
&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'});
+ my ($symb,$feedurl)=&get_feedurl_and_clean_symb($symb);
+ &redirect_back($r,$feedurl,&mt('Changed discussion view mode').' ',
+ '0','0','',$ENV{'form.previous'});
} 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::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ 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,&Apache::lonnet::clutter($url),
- &mt('Changed discussion status').' ','0','0','',$ENV{'form.previous'});
+ $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'});
} elsif ($ENV{'form.preview'}) {
# -------------------------------------------------------- User wants a preview
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
&show_preview($r);
} elsif ($ENV{'form.attach'}) {
@@ -3125,9 +3061,7 @@ ENDREDIR
&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) {
@@ -3136,36 +3070,24 @@ 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);
} 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];
@@ -3174,71 +3096,81 @@ ENDREDIR
my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion');
$r->print($bodytag.$discussion);
return OK;
+ #FIXME deleted CHGREADS needs to be readded
} 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);
+ $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 ($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;
+ &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\_\_\_/))
+ ) {
+# 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'}) {
+ 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);
@@ -3246,26 +3178,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');
@@ -3276,49 +3210,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);
+ 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++;
}
-
- if ($ENV{'form.anondiscuss'}) {
- my $subject = &clear_out_html($ENV{'form.subject'});
- $typestyle.=&adddiscuss($symb,$message,1,$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__
| |