version 1.120, 2004/08/31 18:28:18
|
version 1.138, 2004/11/15 23:02:45
|
Line 36 use Apache::loncommon();
|
Line 36 use Apache::loncommon();
|
use Apache::lontexconvert(); |
use Apache::lontexconvert(); |
use Apache::lonlocal; # must not have () |
use Apache::lonlocal; # must not have () |
use Apache::lonhtmlcommon(); |
use Apache::lonhtmlcommon(); |
|
use Apache::lonnavmaps; |
|
use Apache::lonenc(); |
use HTML::LCParser(); |
use HTML::LCParser(); |
use Apache::lonspeller(); |
use Apache::lonspeller(); |
use Cwd; |
use Cwd; |
|
|
sub discussion_open { |
sub discussion_open { |
my ($status)=@_; |
my ($status,$symb)=@_; |
if (defined($status) && |
if (defined($status) && |
!($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER' |
!($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER' |
|| $status eq 'OPEN')) { |
|| $status eq 'OPEN')) { |
return 0; |
return 0; |
} |
} |
my $close=&Apache::lonnet::EXT('resource.0.discussend'); |
my $close=&Apache::lonnet::EXT('resource.0.discussend',$symb); |
if (defined($close) && $close ne '' && $close < time) { |
if (defined($close) && $close ne '' && $close < time) { |
return 0; |
return 0; |
} |
} |
Line 59 sub discussion_visible {
|
Line 61 sub discussion_visible {
|
if (not &discussion_open($status)) { |
if (not &discussion_open($status)) { |
my $hidden=&Apache::lonnet::EXT('resource.0.discusshide'); |
my $hidden=&Apache::lonnet::EXT('resource.0.discusshide'); |
if (lc($hidden) eq 'yes' or $hidden eq '' or !defined($hidden)) { |
if (lc($hidden) eq 'yes' or $hidden eq '' or !defined($hidden)) { |
return 0; |
if (!$ENV{'request.role.adv'}) { return 0; } |
} |
} |
} |
} |
return 1; |
return 1; |
} |
} |
|
|
sub list_discussion { |
sub list_discussion { |
my ($mode,$status,$symb)=@_; |
my ($mode,$status,$ressymb)=@_; |
my $outputtarget=$ENV{'form.grade_target'}; |
my $outputtarget=$ENV{'form.grade_target'}; |
if (defined($ENV{'form.export'})) { |
if (defined($ENV{'form.export'})) { |
if($ENV{'form.export'}) { |
if($ENV{'form.export'}) { |
Line 84 sub list_discussion {
|
Line 86 sub list_discussion {
|
$crs.='_'.$ENV{'request.course.sec'}; |
$crs.='_'.$ENV{'request.course.sec'}; |
} |
} |
$crs=~s/\_/\//g; |
$crs=~s/\_/\//g; |
unless ($symb) { |
unless ($ressymb) { $ressymb=&Apache::lonnet::symbread(); } |
$symb=&Apache::lonnet::symbread(); |
unless ($ressymb) { return ''; } |
} |
$ressymb=&wrap_symb($ressymb); |
unless ($symb) { return ''; } |
my $encsymb=&Apache::lonenc::check_encrypt($ressymb); |
|
my $viewgrades=(&Apache::lonnet::allowed('vgr',$crs) |
|
&& ($ressymb=~/\.(problem|exam|quiz|assess|survey|form)$/)); |
|
|
my %usernamesort = (); |
my %usernamesort = (); |
my %namesort =(); |
my %namesort =(); |
my %subjectsort = (); |
my %subjectsort = (); |
# backward compatibility (bulletin boards used to be 'wrapped') |
|
my $ressymb=$symb; |
|
if ($mode eq 'board') { |
|
unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) { |
|
$ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|; |
|
} |
|
} |
|
|
|
# Get discussion display settings for this discussion |
# Get discussion display settings for this discussion |
my $lastkey = $ressymb.'_lastread'; |
my $lastkey = $ressymb.'_lastread'; |
Line 123 sub list_discussion {
|
Line 121 sub list_discussion {
|
# Retain identification of "NEW" posts identified in last display, if continuing 'previous' browsing of posts. |
# Retain identification of "NEW" posts identified in last display, if continuing 'previous' browsing of posts. |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['previous','sortposts','rolefilter','statusfilter','sectionpick','totposters']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['previous','sortposts','rolefilter','statusfilter','sectionpick','totposters']); |
my $sortposts = $ENV{'form.sortposts'}; |
my $sortposts = $ENV{'form.sortposts'}; |
my $rolefilter = $ENV{'form.rolefilter'}; |
|
my $statusfilter = $ENV{'form.statusfilter'}; |
my $statusfilter = $ENV{'form.statusfilter'}; |
my $sectionpick = $ENV{'form.sectionpick'}; |
my $sectionpick = $ENV{'form.sectionpick'}; |
my $totposters = $ENV{'form.totposters'}; |
my $totposters = $ENV{'form.totposters'}; |
Line 139 sub list_discussion {
|
Line 136 sub list_discussion {
|
# Get information about students and non-students in course for filtering display of posts |
# Get information about students and non-students in course for filtering display of posts |
my %roleshash = (); |
my %roleshash = (); |
my %roleinfo = (); |
my %roleinfo = (); |
if ($rolefilter) { |
if ($ENV{'form.rolefilter'}) { |
%roleshash = &Apache::lonnet::dump('nohist_userroles',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
%roleshash = &Apache::lonnet::dump('nohist_userroles',$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
foreach (keys %roleshash) { |
foreach (keys %roleshash) { |
my ($role,$uname,$udom,$sec) = split/:/,$_; |
my ($role,$uname,$udom,$sec) = split/:/,$_; |
Line 165 sub list_discussion {
|
Line 162 sub list_discussion {
|
} |
} |
|
|
# Get discussion display default settings for user |
# Get discussion display default settings for user |
my %userenv = &Apache::lonnet::get('environment',['discdisplay','discmarkread'],$ENV{'user.domain'},$ENV{'user.name'}); |
if ($ENV{'environment.discdisplay'} eq 'unread') { |
my $discdisplay=$userenv{'discdisplay'}; |
|
if ($discdisplay eq 'unread') { |
|
$showonlyunread = 1; |
$showonlyunread = 1; |
} |
} |
my $discmarkread=$userenv{'discmarkread'}; |
if ($ENV{'environment.discmarkread'} eq 'ondisp') { |
if ($discmarkread eq 'ondisp') { |
|
$markondisp = 1; |
$markondisp = 1; |
} |
} |
|
|
# Override user's default if user specified display setting for this discussion |
# Override user's default if user specified display setting for this discussion |
if (defined($dischash{$ondispkey})) { |
if (defined($dischash{$ondispkey})) { |
$markondisp = $dischash{$ondispkey}; |
unless ($dischash{$ondispkey} eq '') { |
|
$markondisp = $dischash{$ondispkey}; |
|
} |
} |
} |
if ($markondisp) { |
if ($markondisp) { |
$discinfo{$lastkey} = time; |
$discinfo{$lastkey} = time; |
} |
} |
|
|
if (defined($dischash{$showkey})) { |
if (defined($dischash{$showkey})) { |
$showonlyunread = $dischash{$showkey}; |
unless ($dischash{$showkey} eq '') { |
|
$showonlyunread = $dischash{$showkey}; |
|
} |
} |
} |
|
|
if (defined($dischash{$markkey})) { |
if (defined($dischash{$markkey})) { |
$showunmark = $dischash{$markkey}; |
unless ($dischash{$markkey} eq '') { |
|
$showunmark = $dischash{$markkey}; |
|
} |
} |
} |
|
|
if (defined($dischash{$visitkey})) { |
if (defined($dischash{$visitkey})) { |
$visit = $dischash{$visitkey}; |
unless ($dischash{$visitkey} eq '') { |
|
$visit = $dischash{$visitkey}; |
|
} |
} |
} |
$visit ++; |
$visit ++; |
|
|
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
my $viewgrades=(&Apache::lonnet::allowed('vgr',$crs) |
|
&& ($symb=~/\.(problem|exam|quiz|assess|survey|form)$/)); |
|
my @discussionitems=(); |
my @discussionitems=(); |
my %shown = (); |
my %shown = (); |
my @posteridentity=(); |
my @posteridentity=(); |
Line 224 sub list_discussion {
|
Line 224 sub list_discussion {
|
$discinfo{$visitkey} = $visit; |
$discinfo{$visitkey} = $visit; |
|
|
&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'}); |
&build_posting_display(\%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); |
&build_posting_display(\%usernamesort,\%subjectsort,\%namesort,\%notshown,\%newitem,\%dischash,\%shown,\%alldiscussion,\%imsitems,\%imsfiles,\%roleinfo,\@discussionitems,\@replies,\@depth,\@posters,\$maxdepth,\$visible,\$newpostsflag,\$current,$status,$viewgrades,$seeid,$prevread,$sortposts,$encsymb,$target,$readkey,$showunmark,$showonlyunread,$totposters,$ENV{'form.rolefilter'},$sectionpick,$statusfilter,$toggkey,$outputtarget); |
|
|
my $discussion=''; |
my $discussion=''; |
my $manifestfile; |
my $manifestfile; |
Line 324 sub list_discussion {
|
Line 324 sub list_discussion {
|
# open manifest file |
# open manifest file |
my $manifest = '/imsmanifest.xml'; |
my $manifest = '/imsmanifest.xml'; |
my $manifestfilename = $tempexport.$manifest; |
my $manifestfilename = $tempexport.$manifest; |
print STDERR "manifestfilename is $manifestfilename\n"; |
|
if ($manifestfile = Apache::File->new('>'.$manifestfilename)) { |
if ($manifestfile = Apache::File->new('>'.$manifestfilename)) { |
$manifestok=1; |
$manifestok=1; |
print $manifestfile qq| |
print $manifestfile qq| |
Line 355 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 354 imscp_v1p1.xsd http://www.imsglobal.org/
|
} |
} |
</script> |
</script> |
|; |
|; |
$discussion.='<form name="readchoices" method="post" action="/adm/feedback?chgreads='.$symb.'"><table bgcolor="#AAAAAA" cellpadding="2" cellspacing="2" border="0">'; |
$discussion.='<form name="readchoices" method="post" action="/adm/feedback?chgreads='.$ressymb.'" ><table bgcolor="#AAAAAA" cellpadding="2" cellspacing="2" border="0">'; |
$discussion .='<tr><td bgcolor="#DDDDBB" colspan="'.$colspan.'">'. |
$discussion .='<tr><td bgcolor="#DDDDBB" colspan="'.$colspan.'">'. |
'<table border="0" width="100%" bgcolor="#DDDDBB"><tr>'; |
'<table border="0" width="100%" bgcolor="#DDDDBB"><tr>'; |
if ($visible>2) { |
if ($visible>2) { |
$discussion.='<td align="left">'. |
$discussion.='<td align="left">'. |
'<a href="/adm/feedback?threadedon='.$ressymb; |
'<a href="/adm/feedback?cmd=threadedon&symb='.$ressymb; |
if ($newpostsflag) { |
if ($newpostsflag) { |
$discussion .= '&previous='.$prevread; |
$discussion .= '&previous='.$prevread; |
} |
} |
$discussion .='">'.&mt('Threaded View').'</a> '. |
$discussion .='">'.&mt('Threaded View').'</a> '. |
'<a href="/adm/feedback?threadedoff='.$ressymb; |
'<a href="/adm/feedback?cmd=threadedoff&symb='.$ressymb; |
if ($newpostsflag) { |
if ($newpostsflag) { |
$discussion .= '&previous='.$prevread; |
$discussion .= '&previous='.$prevread; |
} |
} |
$discussion .='">'.&mt('Chronological View').'</a> |
$discussion .='">'.&mt('Chronological View').'</a> |
<a href= "/adm/feedback?sortfilter='.$ressymb; |
<a href= "/adm/feedback?cmd=sortfilter&symb='.$ressymb; |
if ($newpostsflag) { |
if ($newpostsflag) { |
$discussion .= '&previous='.$prevread; |
$discussion .= '&previous='.$prevread; |
} |
} |
Line 385 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 384 imscp_v1p1.xsd http://www.imsglobal.org/
|
$discussion .= '">'.&mt('Export').'?</a> </td>'; |
$discussion .= '">'.&mt('Export').'?</a> </td>'; |
if ($newpostsflag) { |
if ($newpostsflag) { |
if (!$markondisp) { |
if (!$markondisp) { |
$discussion .='<td align="right"><a href="/adm/feedback?markread='.$ressymb.'">'.&mt('Mark NEW posts no longer new').'</a> '; |
$discussion .='<td align="right"><a href="/adm/feedback?markread=1&symb='.$ressymb.'">'.&mt('Mark NEW posts no longer new').'</a> '; |
} else { |
} else { |
$discussion .= '<td> </td>'; |
$discussion .= '<td> </td>'; |
} |
} |
Line 474 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 473 imscp_v1p1.xsd http://www.imsglobal.org/
|
my $postfilename = $alldiscussion{$_}.'-'.$imsitems{$alldiscussion{$_}}{'timestamp'}.'.html'; |
my $postfilename = $alldiscussion{$_}.'-'.$imsitems{$alldiscussion{$_}}{'timestamp'}.'.html'; |
if ($manifestok) { |
if ($manifestok) { |
if (($depth[$alldiscussion{$_}] <= $currdepth) && ($alldiscussion{$_} != $firstidx)) { |
if (($depth[$alldiscussion{$_}] <= $currdepth) && ($alldiscussion{$_} != $firstidx)) { |
print STDERR "depth is $depth[$alldiscussion{$_}], currdepth is $currdepth, idx is $alldiscussion{$_}, firstidx is $firstidx\n"; |
|
print $manifestfile ' </item>'."\n"; |
print $manifestfile ' </item>'."\n"; |
} |
} |
$currdepth = $depth[$alldiscussion{$_}]; |
$currdepth = $depth[$alldiscussion{$_}]; |
Line 600 END
|
Line 598 END
|
undef(%oldENV); |
undef(%oldENV); |
$discussion .= 'Download the zip file from <a href="'.$imszipfile.'">Discussion Posting Archive</a><br />'; |
$discussion .= 'Download the zip file from <a href="'.$imszipfile.'">Discussion Posting Archive</a><br />'; |
if ($copyresult) { |
if ($copyresult) { |
$discussion .= 'The following errors occurred during export - '.$copyresult; |
$discussion .= 'The following errors occurred during export - <br />'.$copyresult; |
} |
} |
} else { |
} else { |
$discussion .= '<br />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.<br />'; |
$discussion .= '<br />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.<br />'; |
Line 618 END
|
Line 616 END
|
my $subject = ''; |
my $subject = ''; |
if ($ENV{'form.origpage'}) { |
if ($ENV{'form.origpage'}) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['addnewattach','deloldattach','delnewattach','timestamp','idx','subject','comment']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['addnewattach','deloldattach','delnewattach','timestamp','idx','subject','comment']); |
$subject = &HTML::Entities::encode($ENV{'form.subject'},'<>&"'); |
$subject = &Apache::lonnet::unescape($ENV{'form.subject'}); |
$comment = &HTML::Entities::encode($ENV{'form.comment'},'<>&"'); |
$comment = &Apache::lonnet::unescape($ENV{'form.comment'}); |
my @keepold = (); |
my @keepold = (); |
&process_attachments(\@currnewattach,\@currdelold,\@keepold); |
&process_attachments(\@currnewattach,\@currdelold,\@keepold); |
if (@currnewattach > 0) { |
if (@currnewattach > 0) { |
$attachnum += @currnewattach; |
$attachnum += @currnewattach; |
} |
} |
} |
} |
$discussion.=(<<ENDDISCUSS); |
if (&discussion_open($status)) { |
|
$discussion.=(<<ENDDISCUSS); |
<form action="/adm/feedback" method="post" name="mailform" enctype="multipart/form-data"> |
<form action="/adm/feedback" method="post" name="mailform" enctype="multipart/form-data"> |
<input type="submit" name="discuss" value="Post Discussion" /> |
<input type="submit" name="discuss" value="Post Discussion" /> |
<input type="submit" name="anondiscuss" value="Post Anonymous Discussion" /> |
<input type="submit" name="anondiscuss" value="Post Anonymous Discussion" /> |
Line 665 ENDDISCUSS
|
Line 664 ENDDISCUSS
|
$discussion.=$newattachmsg; |
$discussion.=$newattachmsg; |
$discussion.=&generate_preview_button(); |
$discussion.=&generate_preview_button(); |
} |
} |
|
} |
} else { |
} else { |
if (&discussion_open($status) && |
if (&discussion_open($status) && |
&Apache::lonnet::allowed('pch', |
&Apache::lonnet::allowed('pch', |
Line 672 ENDDISCUSS
|
Line 672 ENDDISCUSS
|
($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) { |
($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) { |
if ($outputtarget ne 'tex') { |
if ($outputtarget ne 'tex') { |
$discussion.='<table bgcolor="#BBBBBB"><tr><td><a href="/adm/feedback?replydisc='. |
$discussion.='<table bgcolor="#BBBBBB"><tr><td><a href="/adm/feedback?replydisc='. |
$symb.':::" '.$target.'>'. |
$ressymb.':::" '.$target.'>'. |
'<img src="/adm/lonMisc/chat.gif" border="0" />'. |
'<img src="/adm/lonMisc/chat.gif" border="0" />'. |
&mt('Post Discussion').'</a></td></tr></table>'; |
&mt('Post Discussion').'</a></td></tr></table>'; |
} |
} |
Line 686 sub build_posting_display {
|
Line 686 sub build_posting_display {
|
|
|
my @original=(); |
my @original=(); |
my @index=(); |
my @index=(); |
|
my $symb=&Apache::lonenc::check_decrypt($ressymb); |
my %contrib=&Apache::lonnet::restore($ressymb,$ENV{'request.course.id'}, |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
|
Line 979 sub build_posting_display {
|
Line 979 sub build_posting_display {
|
$$shown{$idx} = 1; |
$$shown{$idx} = 1; |
} else { |
} else { |
foreach my $role (@{$$roleinfo{$poster}}) { |
foreach my $role (@{$$roleinfo{$poster}}) { |
|
&Apache::lonnet::logthis("\n rolematch $rolematch\nrole $role"); |
if ($role =~ m/^$rolematch$/) { |
if ($role =~ m/^$rolematch$/) { |
$$shown{$idx} = 1; |
$$shown{$idx} = 1; |
last; |
last; |
Line 1046 sub get_post_contents {
|
Line 1047 sub get_post_contents {
|
return $discussion; |
return $discussion; |
} |
} |
} |
} |
$$screenname=&Apache::loncommon::screenname( |
# $$screenname=&Apache::loncommon::screenname( |
$$contrib{$idx.':sendername'}, |
# $$contrib{$idx.':sendername'}, |
$$contrib{$idx.':senderdomain'}); |
# $$contrib{$idx.':senderdomain'}); |
$$plainname=&Apache::loncommon::nickname( |
# $$plainname=&Apache::loncommon::nickname( |
$$contrib{$idx.':sendername'}, |
# $$contrib{$idx.':sendername'}, |
$$contrib{$idx.':senderdomain'}); |
# $$contrib{$idx.':senderdomain'}); |
|
($$screenname,$$plainname)=($$contrib{$idx.':screenname'}, |
|
$$contrib{$idx.':plainname'}); |
my $sender=&Apache::loncommon::aboutmewrapper( |
my $sender=&Apache::loncommon::aboutmewrapper( |
$$plainname, |
$$plainname, |
$$contrib{$idx.':sendername'}, |
$$contrib{$idx.':sendername'}, |
Line 1149 sub replicate_attachments {
|
Line 1152 sub replicate_attachments {
|
$i ++; |
$i ++; |
} |
} |
my ($content,$rtncode); |
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); |
my $uploadreply = &Apache::lonnet::getuploaded('GET',$$attachrefs{$id}{'filename'},$1,$2,$content,$rtncode); |
if ($uploadreply eq 'ok') { |
if ($uploadreply eq 'ok') { |
my $attachcopy; |
my $attachcopy; |
if ($attachcopy = Apache::File->new('>'.$destination)) { |
if ($attachcopy = Apache::File->new('>'.$destination)) { |
print $attachcopy $content; |
print $attachcopy $content; |
close($attachcopy); |
close($attachcopy); |
} else { |
} else { |
$response .= 'Error copying a file attachment to IMS package: '.$!.'<br />'."\n"; |
$response .= 'Error copying file attachment - '.$5.' to IMS package: '.$!.'<br />'."\n"; |
} |
} |
} else { |
} 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.'<br />'."\n"; |
} |
} |
} |
} |
} |
} |
} |
} |
|
return $response; |
} |
} |
|
|
sub mail_screen { |
sub mail_screen { |
Line 1306 END
|
Line 1310 END
|
} |
} |
|
|
if ($ENV{'form.origpage'}) { |
if ($ENV{'form.origpage'}) { |
$subject = $ENV{'form.subject'}; |
$subject = &Apache::lonnet::unescape($ENV{'form.subject'}); |
$comment = $ENV{'form.comment'}; |
$comment = &Apache::lonnet::unescape($ENV{'form.comment'}); |
&process_attachments(\@currnewattach,\@currdelold,\@keepold); |
&process_attachments(\@currnewattach,\@currdelold,\@keepold); |
} |
} |
my $latexHelp=&Apache::loncommon::helpLatexCheatsheet(); |
my $latexHelp=&Apache::loncommon::helpLatexCheatsheet(); |
Line 1470 END
|
Line 1474 END
|
|
|
sub print_display_options { |
sub print_display_options { |
my ($r,$symb,$previous,$dispchgA,$dispchgB,$markchg,$toggchg,$feedurl) = @_; |
my ($r,$symb,$previous,$dispchgA,$dispchgB,$markchg,$toggchg,$feedurl) = @_; |
# backward compatibility (bulletin boards used to be 'wrapped') |
&Apache::loncommon::content_type($r,'text/html'); |
if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) { |
$r->send_http_header; |
$feedurl=~s|^/adm/wrapper||; |
|
} |
|
|
|
my $function = &Apache::loncommon::get_users_function(); |
my $function = &Apache::loncommon::get_users_function(); |
my $tabcolor = &Apache::loncommon::designparm($function.'.tabbg', |
my $tabcolor = &Apache::loncommon::designparm($function.'.tabbg', |
Line 1654 $lt{'sdpf'}<br/> $lt{'prca'} <ol><li>$l
|
Line 1656 $lt{'sdpf'}<br/> $lt{'prca'} <ol><li>$l
|
</table> |
</table> |
<br /> |
<br /> |
<br /> |
<br /> |
|
<input type="hidden" name="symb" value="$symb" /> |
<input type="hidden" name="previous" value="$previous" /> |
<input type="hidden" name="previous" value="$previous" /> |
<input type="hidden" name="$dispchgA" value=""/> |
<input type="hidden" name="$dispchgA" value=""/> |
<input type="hidden" name="$dispchgB" value=""/> |
<input type="hidden" name="$dispchgB" value=""/> |
Line 1671 END
|
Line 1674 END
|
|
|
sub print_sortfilter_options { |
sub print_sortfilter_options { |
my ($r,$symb,$previous,$feedurl) = @_; |
my ($r,$symb,$previous,$feedurl) = @_; |
# backward compatibility (bulletin boards used to be 'wrapped') |
|
if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) { |
&Apache::loncommon::content_type($r,'text/html'); |
$feedurl=~s|^/adm/wrapper||; |
$r->send_http_header; |
} |
|
my @sections = (); |
my @sections = (); |
my $section_sel = ''; |
my $section_sel = ''; |
my $numsections = 0; |
my $numsections = 0; |
Line 1810 END
|
Line 1813 END
|
|
|
sub print_showposters { |
sub print_showposters { |
my ($r,$symb,$previous,$feedurl,$sortposts) = @_; |
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') |
# backward compatibility (bulletin boards used to be 'wrapped') |
my $ressymb=$symb; |
my $ressymb=&wrap_symb($symb); |
if ($ressymb =~ /bulletin___\d+___/) { |
|
unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) { |
|
$ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|; |
|
} |
|
} |
|
my $crs='/'.$ENV{'request.course.id'}; |
my $crs='/'.$ENV{'request.course.id'}; |
if ($ENV{'request.course.sec'}) { |
if ($ENV{'request.course.sec'}) { |
$crs.='_'.$ENV{'request.course.sec'}; |
$crs.='_'.$ENV{'request.course.sec'}; |
Line 1977 sub get_post_attachments {
|
Line 1972 sub get_post_attachments {
|
return; |
return; |
} |
} |
|
|
sub build_ims_export { |
|
my ($r,$symb,$previous,$feedurl) = @_; |
|
# backward compatibility (bulletin boards used to be 'wrapped') |
|
if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) { |
|
$feedurl=~s|^/adm/wrapper||; |
|
} |
|
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 @depth=(); |
|
my %alldiscussion=(); |
|
my @discussionitems=(); |
|
my %usernamesort = (); |
|
my %subjectsort = (); |
|
my %namesort = (); |
|
my %notshown = (); |
|
my %newitem = (); |
|
my %dischash = (); |
|
my %shown = (); |
|
my %roleinfo = (); |
|
my @posters=(); |
|
my $maxdepth=0; |
|
my $visible=0; |
|
my $newpostsflag=0; |
|
my $status; |
|
my $viewgrades; |
|
my $seeid; |
|
my $prevread; |
|
my $sortposts; |
|
my $ressymb; |
|
my $target; |
|
my $readkey; |
|
my $showunmark; |
|
my $showonlyunread; |
|
|
|
} |
|
|
|
|
|
|
|
sub fail_redirect {; |
sub fail_redirect {; |
my ($r,$feedurl) = @_; |
my ($r,$feedurl) = @_; |
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; |
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; |
Line 2028 sub fail_redirect {;
|
Line 1984 sub fail_redirect {;
|
<body bgcolor="#FFFFFF"> |
<body bgcolor="#FFFFFF"> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<b>Sorry, no recipients ...</b> |
<b>Sorry, no recipients ...</b> |
<a href="$feedurl">Continue</a> |
<br /><a href="$feedurl">Continue</a> |
</body> |
</body> |
</html> |
</html> |
ENDFAILREDIR |
ENDFAILREDIR |
Line 2043 sub redirect_back {
|
Line 1999 sub redirect_back {
|
my $userpicktag = ''; |
my $userpicktag = ''; |
my $qrystr = ''; |
my $qrystr = ''; |
my $prevtag = ''; |
my $prevtag = ''; |
# backward compatibility (bulletin boards used to be 'wrapped') |
|
if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) { |
&Apache::loncommon::content_type($r,'text/html'); |
$feedurl=~s|^/adm/wrapper||; |
$r->send_http_header; |
} |
|
|
&dewrapper(\$feedurl); |
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; |
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; |
if ($previous > 0) { |
if ($previous > 0) { |
$qrystr = 'previous='.$previous; |
$qrystr = 'previous='.$previous; |
Line 2079 sub redirect_back {
|
Line 2036 sub redirect_back {
|
$sectag = '<input type="hidden" name="sectionpick" value="'.$secpick.'" />'; |
$sectag = '<input type="hidden" name="sectionpick" value="'.$secpick.'" />'; |
} |
} |
} |
} |
|
$feedurl=&Apache::lonenc::check_encrypt($feedurl); |
$r->print (<<ENDREDIR); |
$r->print (<<ENDREDIR); |
<html> |
<html> |
<head> |
<head> |
Line 2099 $roletag
|
Line 2057 $roletag
|
$sectag |
$sectag |
$userpicktag |
$userpicktag |
</form> |
</form> |
<a href="$feedurl">Continue</a> |
<br /><a href="$feedurl">Continue</a> |
</body> |
</body> |
</html> |
</html> |
ENDREDIR |
ENDREDIR |
Line 2116 sub no_redirect_back {
|
Line 2074 sub no_redirect_back {
|
ENDNOREDIR |
ENDNOREDIR |
|
|
if ($feedurl!~/^\/adm\/feedback/) { |
if ($feedurl!~/^\/adm\/feedback/) { |
$r->print('<meta HTTP-EQUIV="Refresh" CONTENT="2; url='.$feedurl.'">'); |
$r->print('<meta HTTP-EQUIV="Refresh" CONTENT="2; url='. |
|
&Apache::lonenc::check_encrypt($feedurl).'">'); |
} |
} |
|
$feedurl=&Apache::lonenc::check_encrypt($feedurl); |
$r->print (<<ENDNOREDIRTWO); |
$r->print (<<ENDNOREDIRTWO); |
</head> |
</head> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { self.close(); }'> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { self.close(); }'> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<b>$nofeed</b> |
<b>$nofeed</b> |
<a href="$feedurl">$continue</a> |
<br /><a href="$feedurl">$continue</a> |
</body> |
</body> |
</html> |
</html> |
ENDNOREDIRTWO |
ENDNOREDIRTWO |
Line 2216 sub clear_out_html {
|
Line 2175 sub clear_out_html {
|
sub assemble_email { |
sub assemble_email { |
my ($feedurl,$message,$prevattempts,$usersaw,$useranswer)=@_; |
my ($feedurl,$message,$prevattempts,$usersaw,$useranswer)=@_; |
my $email=<<"ENDEMAIL"; |
my $email=<<"ENDEMAIL"; |
Refers to <a href="$feedurl">$feedurl</a> |
|
|
|
$message |
$message |
ENDEMAIL |
ENDEMAIL |
my $citations=<<"ENDCITE"; |
my $citations=<<"ENDCITE"; |
Line 2334 sub send_msg {
|
Line 2291 sub send_msg {
|
sub adddiscuss { |
sub adddiscuss { |
my ($symb,$email,$anon,$attachmenturl,$subject)=@_; |
my ($symb,$email,$anon,$attachmenturl,$subject)=@_; |
my $status=''; |
my $status=''; |
if (&discussion_open() && |
my $realsymb; |
|
if ($symb=~/^bulletin___/) { |
|
my $filename=(&Apache::lonnet::decode_symb($symb))[2]; |
|
$filename=~s|^adm/wrapper/||; |
|
$realsymb=&Apache::lonnet::symbread($filename); |
|
} |
|
if (&discussion_open(undef,$realsymb) && |
&Apache::lonnet::allowed('pch',$ENV{'request.course.id'}. |
&Apache::lonnet::allowed('pch',$ENV{'request.course.id'}. |
($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) { |
($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) { |
|
|
Line 2363 sub adddiscuss {
|
Line 2326 sub adddiscuss {
|
$contrib{'history'} = ''; |
$contrib{'history'} = ''; |
my $numoldver = 0; |
my $numoldver = 0; |
my ($oldsymb,$oldidx)=split(/\:\:\:/,$ENV{'form.editdisc'}); |
my ($oldsymb,$oldidx)=split(/\:\:\:/,$ENV{'form.editdisc'}); |
|
&Apache::lonenc::check_decrypt(\$oldsymb); |
$oldsymb=~s|(bulletin___\d+___)adm/wrapper/|$1|; |
$oldsymb=~s|(bulletin___\d+___)adm/wrapper/|$1|; |
# get timestamp for last post and history |
# get timestamp for last post and history |
my %oldcontrib=&Apache::lonnet::restore($oldsymb,$ENV{'request.course.id'}, |
my %oldcontrib=&Apache::lonnet::restore($oldsymb,$ENV{'request.course.id'}, |
Line 2438 sub adddiscuss {
|
Line 2402 sub adddiscuss {
|
|
|
sub show_preview { |
sub show_preview { |
my $r=shift; |
my $r=shift; |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->send_http_header; |
my $message=&clear_out_html($ENV{'form.comment'}); |
my $message=&clear_out_html($ENV{'form.comment'}); |
$message=~s/\n/\<br \/\>/g; |
$message=~s/\n/\<br \/\>/g; |
$message=&Apache::lonspeller::markeduptext($message); |
$message=&Apache::lonspeller::markeduptext($message); |
Line 2464 ENDPREVIEW
|
Line 2430 ENDPREVIEW
|
|
|
sub modify_attachments { |
sub modify_attachments { |
my ($r,$currnewattach,$currdelold,$symb,$idx,$attachmenturls)=@_; |
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/\<br \/\>/g; |
$subject=~s/\n/\<br \/\>/g; |
$subject=&Apache::lontexconvert::msgtexconverted($subject); |
$subject=&Apache::lontexconvert::msgtexconverted($subject); |
my $timestamp=$ENV{'form.timestamp'}; |
my $timestamp=$ENV{'form.timestamp'}; |
Line 2493 $bodytag
|
Line 2460 $bodytag
|
<table border="2"> |
<table border="2"> |
<tr> |
<tr> |
<td> |
<td> |
<b>Subject:</b>$subject</b><br /><br /> |
<b>Subject:</b> $subject</b><br /><br /> |
END |
END |
if ($idx) { |
if ($idx) { |
if ($attachmenturls) { |
if ($attachmenturls) { |
Line 2600 sub generate_attachments_button {
|
Line 2567 sub generate_attachments_button {
|
my $response = (<<END); |
my $response = (<<END); |
<form name="attachment" action="/adm/feedback?attach=$ressymb" method="post"> |
<form name="attachment" action="/adm/feedback?attach=$ressymb" method="post"> |
Click to add/remove attachments: <input type="button" value="$att" |
Click to add/remove attachments: <input type="button" value="$att" |
onClick="this.form.subject.value=document.mailform.subject.value;this.form.comment.value=document.mailform.comment.value; |
onClick="if (typeof(document.mailform.onsubmit)=='function') {document.mailform.onsubmit();};this.form.comment.value=escape(document.mailform.comment.value);this.form.subject.value=escape(document.mailform.subject.value); |
END |
END |
unless ($mode eq 'board') { |
unless ($mode eq 'board') { |
$response .= 'javascript:anonchk();'; |
$response .= 'javascript:anonchk();'; |
Line 2740 sub construct_attachmenturl {
|
Line 2707 sub construct_attachmenturl {
|
} |
} |
return $newattachmenturl; |
return $newattachmenturl; |
} |
} |
|
|
|
sub has_discussion { |
|
my $resourcesref = shift; |
|
my $navmap = Apache::lonnavmaps::navmap->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 { |
sub handler { |
my $r = shift; |
my $r = shift; |
Line 2752 sub handler {
|
Line 2737 sub handler {
|
# --------------------------- Get query string for limited number of parameters |
# --------------------------- Get query string for limited number of parameters |
|
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&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','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'}) { |
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 $readkey = $symb.'_read'; |
my %readinghash = (); |
|
my $chgcount = 0; |
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) { |
foreach my $key (keys %ENV) { |
if ($key =~ m/^form\.postunread_(\d+)/) { |
if ($key =~ m/^form\.postunread_(\d+)/) { |
if ($readinghash{$readkey} =~ /\.$1\./) { |
if ($readinghash{$readkey} =~ /\.$1\./) { |
Line 2773 sub handler {
|
Line 2757 sub handler {
|
} |
} |
} |
} |
if ($chgcount > 0) { |
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'); |
&redirect_back($r,$feedurl,&mt('Marked postings read/unread').'<br />', |
$r->send_http_header; |
'0','0','',$ENV{'form.previous'},'','','',); |
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').'<br />','0','0','',$previous,'','','',); |
|
return OK; |
return OK; |
} |
} |
if ($ENV{'form.allversions'}) { |
if ($ENV{'form.allversions'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
my $bodytag=&Apache::loncommon::bodytag('Discussion Post Versions', |
my $bodytag=&Apache::loncommon::bodytag('Discussion Post Versions'); |
'',''); |
|
$r->print (<<END); |
$r->print (<<END); |
<html> |
<html> |
<head> |
<head> |
Line 2800 END
|
Line 2780 END
|
if ($ENV{'request.course.sec'}) { |
if ($ENV{'request.course.sec'}) { |
$crs.='_'.$ENV{'request.course.sec'}; |
$crs.='_'.$ENV{'request.course.sec'}; |
} |
} |
$crs=~s/\_/\//g; |
$crs=~s|_|/|g; |
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
my ($symb,$idx)=split(/\:\:\:/,$ENV{'form.allversions'}); |
my ($symb,$idx)=split(/\:\:\:/,$ENV{'form.allversions'}); |
my $ressymb=$symb; |
($symb)=&get_feedurl_and_clean_symb($symb); |
unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) { |
|
$ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|; |
|
} |
|
if ($idx > 0) { |
if ($idx > 0) { |
my %messages = (); |
my %messages = (); |
my %subjects = (); |
my %subjects = (); |
Line 2814 END
|
Line 2791 END
|
my %allattachments = (); |
my %allattachments = (); |
my %imsfiles = (); |
my %imsfiles = (); |
my ($screenname,$plainname); |
my ($screenname,$plainname); |
my %contrib=&Apache::lonnet::restore($ressymb,$ENV{'request.course.id'}, |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$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(&get_post_contents(\%contrib,$idx,$seeid,'allversions',\%messages,\%subjects,\%allattachments,\%attachmsgs,\%imsfiles,\$screenname,\$plainname)); |
$r->print($discussion); |
|
} |
} |
return OK; |
return OK; |
} |
} |
if ($ENV{'form.posterlist'}) { |
if ($ENV{'form.posterlist'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.applysort'}); |
$r->send_http_header; |
&print_showposters($r,$symb,$ENV{'form.previous'},$feedurl, |
my $symb=$ENV{'form.posterlist'}; |
$ENV{'form.sortposts'}); |
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); |
|
return OK; |
return OK; |
} |
} |
if ($ENV{'form.userpick'}) { |
if ($ENV{'form.userpick'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
my @posters = &Apache::loncommon::get_env_multiple('form.stuinfo'); |
$r->send_http_header; |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.userpick'}); |
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 $numpicks = @posters; |
my $numpicks = @posters; |
if (defined($ENV{'form.userpick'})) { |
my %discinfo; |
my %discinfo = (); |
$discinfo{$symb.'_userpick'} = join('&',@posters); |
$discinfo{$ressymb.'_userpick'} = join('&',@posters); |
&Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss', |
&Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'}); |
\%discinfo,$ENV{'user.domain'},$ENV{'user.name'}); |
} |
&redirect_back($r,$feedurl,&mt('Changed sort/filter').'<br />','0','0', |
my $feedurl = &Apache::lonnet::clutter($url); |
'',$ENV{'form.previous'},$ENV{'form.sortposts'},'','','', |
# backward compatibility (bulletin boards used to be 'wrapped') |
$numpicks); |
if ($feedurl=~m|^/adm/wrapper/adm/.*/bulletinboard$|) { |
|
$feedurl=~s|^/adm/wrapper||; |
|
} |
|
&redirect_back($r,$feedurl,&mt('Changed sort/filter').'<br />','0','0','',$previous,$sort,'','','',$numpicks); |
|
return OK; |
return OK; |
} |
} |
if ($ENV{'form.applysort'}) { |
if ($ENV{'form.applysort'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.applysort'}); |
$r->send_http_header; |
&redirect_back($r,$feedurl,&mt('Changed sort/filter').'<br />','0','0', |
my $symb=$ENV{'form.applysort'}; |
'',$ENV{'form.previous'},$ENV{'form.sortposts'}, |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
$ENV{'form.rolefilter'},$ENV{'form.statusfilter'}, |
my $previous=$ENV{'form.previous'}; |
$ENV{'form.secpick'}); |
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').'<br />','0','0','',$previous,$sort,$rolefilter,$statusfilter,$secpick); |
|
return OK; |
return OK; |
} elsif ($ENV{'form.sortfilter'}) { |
} elsif ($ENV{'form.cmd'} eq 'sortfilter') { |
&Apache::loncommon::content_type($r,'text/html'); |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.symb'}); |
$r->send_http_header; |
&print_sortfilter_options($r,$symb,$ENV{'form.previous'},$feedurl); |
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); |
|
return OK; |
return OK; |
} elsif ($ENV{'form.navmaps'}) { |
} elsif ($ENV{'form.navtime'}) { |
my %discinfo = (); |
my %discinfo = (); |
my @resources = (); |
my @resources = (); |
if ($ENV{'form.navmaps'} =~ /:/) { |
if (defined($ENV{'form.navmaps'})) { |
@resources = split/:/,$ENV{'form.navmaps'}; |
if ($ENV{'form.navmaps'} =~ /:/) { |
|
@resources = split/:/,$ENV{'form.navmaps'}; |
|
} else { |
|
@resources = ("$ENV{'form.navmaps'}"); |
|
} |
} else { |
} else { |
@resources = ("$ENV{'form.navmaps'}"); |
&has_discussion(\@resources); |
} |
} |
my $numitems = @resources; |
my $numitems = @resources; |
my $feedurl = '/adm/navmaps'; |
my $feedurl = '/adm/navmaps'; |
if ($ENV{'form.navurl'}) { |
if ($ENV{'form.navurl'}) { $feedurl .= '?'.$ENV{'form.navurl'}; } |
$feedurl .= '?'.$ENV{'form.navurl'}; |
|
} |
|
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'mnpa' => 'Marked "New" posts as read in a total of', |
'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) { |
foreach (@resources) { |
# backward compatibility (bulletin boards used to be 'wrapped') |
# backward compatibility (bulletin boards used to be 'wrapped') |
my $ressymb=$_; |
my $ressymb=$_; |
|
&Apache::lonenc::check_decrypt(\$ressymb); |
if ($ressymb =~ m/bulletin___\d+___/) { |
if ($ressymb =~ m/bulletin___\d+___/) { |
unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) { |
unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) { |
$ressymb=~s|(bulletin___\d+___)|$1adm/wrapper/|; |
$ressymb=~s|(bulletin___\d+___)|$1adm/wrapper/|; |
} |
} |
} |
} |
my $lastkey = $ressymb.'_lastread'; |
my $lastkey = $ressymb.'_lastread'; |
$discinfo{$lastkey} = time; |
$discinfo{$lastkey} = $ENV{'form.navtime'}; |
|
} |
|
my $textline = "<b>$lt{'mnpa'} $numitems $lt{'robb'}</b>"; |
|
if ($numitems > 0) { |
|
&Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss', |
|
\%discinfo,$ENV{'user.domain'},$ENV{'user.name'}); |
|
} else { |
|
$textline = "<b>$lt{'twnp'}</b>"; |
} |
} |
&Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'}); |
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
$r->print (<<ENDREDIR); |
$r->print (<<ENDREDIR); |
Line 2939 END
|
Line 2878 END
|
</head> |
</head> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'> |
<body bgcolor="#FFFFFF" onLoad='if (window.name!="loncapaclient") { this.document.reldt.submit(); self.close(); }'> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<img align="right" src="/adm/lonIcons/lonlogos.gif" /> |
<b>$lt{'mnpa'} $numitems $lt{'robb'}</b> |
$textline |
<form name="reldt" action="$feedurl" target="loncapaclient"> |
<form name="reldt" action="$feedurl" target="loncapaclient"> |
</form> |
</form> |
<a href="$feedurl">Continue</a> |
<br /><a href="$feedurl">Continue</a> |
</body> |
</body> |
</html> |
</html> |
ENDREDIR |
ENDREDIR |
return OK; |
return OK; |
} elsif ($ENV{'form.modifydisp'}) { |
} elsif ($ENV{'form.modifydisp'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.modifydisp'}); |
$r->send_http_header; |
my ($dispchgA,$dispchgB,$markchg,$toggchg) = |
my $symb=$ENV{'form.modifydisp'}; |
split(/_/,$ENV{'form.changes'}); |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
&print_display_options($r,$symb,$ENV{'form.previous'},$dispchgA, |
my $previous=$ENV{'form.previous'}; |
$dispchgB,$markchg,$toggchg,$feedurl); |
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; |
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'} || |
&Apache::loncommon::content_type($r,'text/html'); |
$ENV{'form.allposts'} || $ENV{'form.onlyunread'} || |
$r->send_http_header; |
$ENV{'form.onlyunmark'} || $ENV{'form.toggoff'} || |
my $previous=$ENV{'form.previous'}; |
$ENV{'form.toggon'} || $ENV{'form.markread'}) { |
my ($map,$ind,$url); |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.symb'}); |
if ( ($ENV{'form.toggoff'}) || ($ENV{'form.toggon'}) ) { |
my %discinfo; |
# ------------------------------ 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'}; |
if ($ENV{'form.toggoff'}) { $discinfo{$symb.'_readtoggle'}=0; } |
my $ressymb = $symb; |
if ($ENV{'form.toggon'}) { $discinfo{$symb.'_readtoggle'}=1; } |
($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
# --------- Modify setting for identification of 'NEW' posts in this discussion |
unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) { |
if ($ENV{'form.markondisp'}) { |
$ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|; |
$discinfo{$symb.'_lastread'} = time; |
} |
$discinfo{$symb.'_markondisp'} = 1; |
my %discinfo = (); |
} |
my $toggkey = $ressymb.'_readtoggle'; |
if ($ENV{'form.markonread'}) { |
if ($ENV{'form.toggon'}) { |
if ( $ENV{'form.previous'} > 0 ) { |
$discinfo{$toggkey} = 1; |
$discinfo{$symb.'_lastread'} = $ENV{'form.previous'}; |
} elsif ($ENV{'form.toggoff'}) { |
} |
$discinfo{$toggkey} = 0; |
$discinfo{$symb.'_markondisp'} = 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').'<br />','0','0','',$previous); |
|
} else { |
|
&redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0'); |
|
} |
|
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|; |
|
} |
} |
my %discinfo = (); |
# --------------------------------- Modify display setting for this discussion |
my $lastkey = $ressymb.'_lastread'; |
if ($ENV{'form.allposts'}) { |
$discinfo{$lastkey} = time; |
$discinfo{$symb.'_showonlyunread'} = 0; |
&Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'}); |
$discinfo{$symb.'_showonlyunmark'} = 0; |
&redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed reading status').'<br />','0','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').'<br />', |
|
'0','0','',$previous); |
return OK; |
return OK; |
} elsif (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) { |
} elsif (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) { |
# ----------------------------------------------------------------- Hide/unhide |
# ----------------------------------------------------------------- Hide/unhide |
&Apache::loncommon::content_type($r,'text/html'); |
my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'}; |
$r->send_http_header; |
my ($symb,$idx)=split(/\:\:\:/,$entry); |
|
($symb,my $feedurl)=&get_feedurl_and_clean_symb($symb); |
|
|
my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'}; |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
my ($symb,$idx)=split(/\:\:\:/,$entry); |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
|
|
|
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
my $currenthidden=$contrib{'hidden'}; |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
my $currentstudenthidden=$contrib{'studenthidden'}; |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
|
|
|
my $crs='/'.$ENV{'request.course.id'}; |
my $currenthidden=$contrib{'hidden'}; |
if ($ENV{'request.course.sec'}) { |
my $currentstudenthidden=$contrib{'studenthidden'}; |
$crs.='_'.$ENV{'request.course.sec'}; |
|
} |
|
$crs=~s/\_/\//g; |
|
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
|
|
my $crs='/'.$ENV{'request.course.id'}; |
if ($ENV{'form.hide'}) { |
if ($ENV{'request.course.sec'}) { |
$currenthidden.='.'.$idx.'.'; |
$crs.='_'.$ENV{'request.course.sec'}; |
unless ($seeid) { |
} |
$currentstudenthidden.='.'.$idx.'.'; |
$crs=~s/\_/\//g; |
} |
my $seeid=&Apache::lonnet::allowed('rin',$crs); |
} else { |
|
$currenthidden=~s/\.$idx\.//g; |
if ($ENV{'form.hide'}) { |
} |
$currenthidden.='.'.$idx.'.'; |
my %newhash=('hidden' => $currenthidden); |
unless ($seeid) { |
if ( ($ENV{'form.hide'}) && (!$seeid) ) { |
$currentstudenthidden.='.'.$idx.'.'; |
$newhash{'studenthidden'} = $currentstudenthidden; |
} |
} |
} 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'}, |
&Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
|
&redirect_back($r,&Apache::lonnet::clutter($url), |
&redirect_back($r,$feedurl,&mt('Changed discussion status').'<br />', |
&mt('Changed discussion status').'<br />','0','0','',$ENV{'form.previous'}); |
'0','0','',$ENV{'form.previous'}); |
} elsif (($ENV{'form.threadedon'}) || ($ENV{'form.threadedoff'})) { |
return OK; |
&Apache::loncommon::content_type($r,'text/html'); |
} elsif ($ENV{'form.cmd'}=~/^(threadedoff|threadedon)$/) { |
$r->send_http_header; |
my ($symb,$feedurl)=&get_feedurl_and_clean_symb($ENV{'form.symb'}); |
if ($ENV{'form.threadedon'}) { |
if ($ENV{'form.cmd'} eq 'threadedon') { |
&Apache::lonnet::put('environment',{'threadeddiscussion' => 'on'}); |
&Apache::lonnet::put('environment',{'threadeddiscussion' => 'on'}); |
&Apache::lonnet::appenv('environment.threadeddiscussion' => 'on'); |
&Apache::lonnet::appenv('environment.threadeddiscussion' => 'on'); |
} else { |
} else { |
&Apache::lonnet::del('environment',['threadeddiscussion']); |
&Apache::lonnet::del('environment',['threadeddiscussion']); |
&Apache::lonnet::delenv('environment\.threadeddiscussion'); |
&Apache::lonnet::delenv('environment\.threadeddiscussion'); |
} |
} |
my $symb=$ENV{'form.threadedon'}?$ENV{'form.threadedon'}:$ENV{'form.threadedoff'}; |
&redirect_back($r,$feedurl,&mt('Changed discussion view mode').'<br />', |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
'0','0','',$ENV{'form.previous'}); |
&redirect_back($r,&Apache::lonnet::clutter($url), |
return OK; |
&mt('Changed discussion view mode').'<br />','0','0','',$ENV{'form.previous'}); |
|
} elsif ($ENV{'form.deldisc'}) { |
} elsif ($ENV{'form.deldisc'}) { |
# --------------------------------------------------------------- Hide for good |
# --------------------------------------------------------------- Hide for good |
&Apache::loncommon::content_type($r,'text/html'); |
my ($symb,$idx)=split(/\:\:\:/,$ENV{'form.deldisc'}); |
$r->send_http_header; |
($symb,my $feedurl)=&get_feedurl_and_clean_symb($symb); |
|
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
my $entry=$ENV{'form.deldisc'}; |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
my ($symb,$idx)=split(/\:\:\:/,$entry); |
my %newhash=('deleted' => $contrib{'deleted'}.".$idx."); |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
&Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
&redirect_back($r,$feedurl,&mt('Changed discussion status').'<br />', |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
'0','0','',$ENV{'form.previous'}); |
|
return OK; |
|
|
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').'<br />','0','0','',$ENV{'form.previous'}); |
|
} elsif ($ENV{'form.preview'}) { |
} elsif ($ENV{'form.preview'}) { |
# -------------------------------------------------------- User wants a preview |
# -------------------------------------------------------- User wants a preview |
$r->content_type('text/html'); |
|
$r->send_http_header; |
|
&show_preview($r); |
&show_preview($r); |
|
return OK; |
} elsif ($ENV{'form.attach'}) { |
} elsif ($ENV{'form.attach'}) { |
# -------------------------------------------------------- Work on attachments |
# -------------------------------------------------------- Work on attachments |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$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']); |
my @currnewattach = (); |
my (@currnewattach,@currdelold,@keepold); |
my @currdelold = (); |
|
my @keepold = (); |
|
&process_attachments(\@currnewattach,\@currdelold,\@keepold); |
&process_attachments(\@currnewattach,\@currdelold,\@keepold); |
if (exists($ENV{'form.addnewattach.filename'})) { |
if (exists($ENV{'form.addnewattach.filename'})) { |
unless (length($ENV{'form.addnewattach'})>131072) { |
unless (length($ENV{'form.addnewattach'})>131072) { |
Line 3159 ENDREDIR
|
Line 3013 ENDREDIR
|
push @currnewattach, $newattachment; |
push @currnewattach, $newattachment; |
} |
} |
} |
} |
my $attachmenturls = ''; |
my $attachmenturls; |
|
my ($symb) = &get_feedurl_and_clean_symb($ENV{'form.attach'}); |
my $idx = $ENV{'form.idx'}; |
my $idx = $ENV{'form.idx'}; |
my $symb = $ENV{'form.attach'}; |
|
if ($idx) { |
if ($idx) { |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
$attachmenturls = $contrib{$idx.':attachmenturl'}; |
$attachmenturls = $contrib{$idx.':attachmenturl'}; |
} |
} |
&modify_attachments($r,\@currnewattach,\@currdelold,$symb,$idx,$attachmenturls); |
&modify_attachments($r,\@currnewattach,\@currdelold,$symb,$idx, |
} elsif ($ENV{'form.chgreads'}) { |
$attachmenturls); |
&Apache::loncommon::content_type($r,'text/html'); |
return OK; |
$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').'<br />','0','0'); |
|
} elsif ($ENV{'form.export'}) { |
} elsif ($ENV{'form.export'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->send_http_header; |
$r->send_http_header; |
my $symb=$ENV{'form.export'}; |
my ($symb,$feedurl) = &get_feedurl_and_clean_symb($ENV{'form.export'}); |
my $mode; |
my $mode='board'; |
my $status='OPEN'; |
my $status='OPEN'; |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
|
my $previous=$ENV{'form.previous'}; |
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)$/) { |
if ($feedurl =~ /\.(problem|exam|quiz|assess|survey|form|library)$/) { |
$mode='problem'; |
$mode='problem'; |
$status=$Apache::inputtags::status[-1]; |
$status=$Apache::inputtags::status[-1]; |
} |
} |
my $discussion = &list_discussion($mode,$status,$symb); |
my $discussion = &list_discussion($mode,$status,$symb); |
# &build_ims_export($r,$symb,$previous,$feedurl); |
|
my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion'); |
my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion'); |
$r->print($bodytag.$discussion); |
$r->print($bodytag.$discussion); |
return OK; |
return OK; |
} else { |
} else { |
# ------------------------------------------------------------- Normal feedback |
# ------------------------------------------------------------- Normal feedback |
my $feedurl=$ENV{'form.postdata'}; |
my $feedurl=$ENV{'form.postdata'}; |
$feedurl=~s/^http\:\/\///; |
$feedurl=~s/^http\:\/\///; |
$feedurl=~s/^$ENV{'SERVER_NAME'}//; |
$feedurl=~s/^$ENV{'SERVER_NAME'}//; |
$feedurl=~s/^$ENV{'HTTP_HOST'}//; |
$feedurl=~s/^$ENV{'HTTP_HOST'}//; |
$feedurl=~s/\?.+$//; |
$feedurl=~s/\?.+$//; |
|
|
my $symb; |
my $symb; |
if ($ENV{'form.replydisc'}) { |
if ($ENV{'form.replydisc'}) { |
$symb=(split(/\:\:\:/,$ENV{'form.replydisc'}))[0]; |
$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 ($map,$id,$url)=&Apache::lonnet::decode_symb($symb); |
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 |
# Go ahead with feedback, no ambiguous reference |
&Apache::loncommon::content_type($r,'text/html'); |
unless ( |
$r->send_http_header; |
( |
|
($feedurl=~m:^/res:) && ($feedurl!~m:^/res/adm:) |
if ( |
) |
( |
|| |
($feedurl=~m:^/res:) && ($feedurl!~m:^/res/adm:) |
($ENV{'request.course.id'} && ($feedurl!~m:^/adm:)) |
) |
|| |
|| |
($ENV{'request.course.id'} && ($symb=~/^bulletin\_\_\_/)) |
($ENV{'request.course.id'} && ($feedurl!~m:^/adm:)) |
) { |
|| |
&Apache::loncommon::content_type($r,'text/html'); |
($ENV{'request.course.id'} && ($symb=~/^bulletin\_\_\_/)) |
$r->send_http_header; |
) { |
# Unable to give feedback |
|
&no_redirect_back($r,$feedurl); |
|
} |
# --------------------------------------------------- Print login screen header |
# --------------------------------------------------- Print login screen header |
unless ($ENV{'form.sendit'}) { |
unless ($ENV{'form.sendit'}) { |
my $options=&screen_header($feedurl); |
&Apache::loncommon::content_type($r,'text/html'); |
if ($options) { |
$r->send_http_header; |
&mail_screen($r,$feedurl,$options); |
my $options=&screen_header($feedurl); |
} else { |
if ($options) { |
&fail_redirect($r,$feedurl); |
&mail_screen($r,$feedurl,$options); |
|
} else { |
|
&fail_redirect($r,$feedurl); |
|
} |
|
return OK; |
} |
} |
} else { |
|
|
|
# Get previous user input |
# Get previous user input |
my $prevattempts=&Apache::loncommon::get_previous_attempt( |
my $prevattempts=&Apache::loncommon::get_previous_attempt( |
$symb,$ENV{'user.name'},$ENV{'user.domain'}, |
$symb,$ENV{'user.name'},$ENV{'user.domain'}, |
$ENV{'request.course.id'}); |
$ENV{'request.course.id'}); |
|
|
# Get output from resource |
# Get output from resource |
my $usersaw=&resource_output($feedurl); |
my $usersaw=&resource_output($feedurl); |
Line 3270 ENDREDIR
|
Line 3122 ENDREDIR
|
# Get resource answer (need to allow student to view grades for this to work) |
# Get resource answer (need to allow student to view grades for this to work) |
&Apache::lonnet::appenv(('allowed.vgr'=>'F')); |
&Apache::lonnet::appenv(('allowed.vgr'=>'F')); |
my $useranswer=&Apache::loncommon::get_student_answers( |
my $useranswer=&Apache::loncommon::get_student_answers( |
$symb,$ENV{'user.name'},$ENV{'user.domain'}, |
$symb,$ENV{'user.name'},$ENV{'user.domain'}, |
$ENV{'request.course.id'}); |
$ENV{'request.course.id'}); |
&Apache::lonnet::delenv('allowed.vgr'); |
&Apache::lonnet::delenv('allowed.vgr'); |
# Get attachments, if any, and not too large |
# Get attachments, if any, and not too large |
my $attachmenturl=''; |
my $attachmenturl=''; |
if (($ENV{'form.origpage'}) || ($ENV{'form.editdisc'}) || ($ENV{'form.replydisc'})) { |
if (($ENV{'form.origpage'}) || ($ENV{'form.editdisc'}) || |
my ($symb,$idx); |
($ENV{'form.replydisc'})) { |
if ($ENV{'form.replydisc'}) { |
my ($symb,$idx); |
($symb,$idx)=split(/\:\:\:/,$ENV{'form.replydisc'}); |
if ($ENV{'form.replydisc'}) { |
} elsif ($ENV{'form.editdisc'}) { |
($symb,$idx)=split(/\:\:\:/,$ENV{'form.replydisc'}); |
($symb,$idx)=split(/\:\:\:/,$ENV{'form.editdisc'}); |
} elsif ($ENV{'form.editdisc'}) { |
} elsif ($ENV{'form.origpage'}) { |
($symb,$idx)=split(/\:\:\:/,$ENV{'form.editdisc'}); |
$symb = $ENV{'form.symb'}; |
} elsif ($ENV{'form.origpage'}) { |
} |
$symb = $ENV{'form.symb'}; |
my @currnewattach = (); |
} |
my @deloldattach = (); |
&Apache::lonenc::check_decrypt(\$symb); |
my @keepold = (); |
my @currnewattach = (); |
&process_attachments(\@currnewattach,\@deloldattach,\@keepold); |
my @deloldattach = (); |
$symb=~s|(bulletin___\d+___)adm/wrapper/|$1|; |
my @keepold = (); |
$attachmenturl=&construct_attachmenturl(\@currnewattach,\@keepold,$symb,$idx); |
&process_attachments(\@currnewattach,\@deloldattach,\@keepold); |
|
$symb=~s|(bulletin___\d+___)adm/wrapper/|$1|; |
|
$attachmenturl=&construct_attachmenturl(\@currnewattach,\@keepold,$symb,$idx); |
} elsif ($ENV{'form.attachment.filename'}) { |
} elsif ($ENV{'form.attachment.filename'}) { |
unless (length($ENV{'form.attachment'})>131072) { |
unless (length($ENV{'form.attachment'})>131072) { |
$attachmenturl=&Apache::lonnet::userfileupload('attachment',undef,'feedback'); |
$attachmenturl=&Apache::lonnet::userfileupload('attachment',undef,'feedback'); |
Line 3300 ENDREDIR
|
Line 3154 ENDREDIR
|
|
|
# Assemble email |
# Assemble email |
my ($email,$citations)=&assemble_email($feedurl,$message,$prevattempts, |
my ($email,$citations)=&assemble_email($feedurl,$message,$prevattempts, |
$usersaw,$useranswer); |
$usersaw,$useranswer); |
|
|
# Who gets this? |
# Who gets this? |
my ($typestyle,%to) = &decide_receiver($feedurl); |
my ($typestyle,%to) = &decide_receiver($feedurl); |
|
|
# Actually send mail |
# Actually send mail |
my ($status,$numsent)=&send_msg($feedurl,$email,$citations, |
my ($status,$numsent)=&send_msg($feedurl,$email,$citations, |
$attachmenturl,%to); |
$attachmenturl,%to); |
|
|
# Discussion? Store that. |
# Discussion? Store that. |
|
|
my $numpost=0; |
my $numpost=0; |
if ($ENV{'form.discuss'}) { |
if ($ENV{'form.discuss'} || $ENV{'form.anondiscuss'}) { |
my $subject = &clear_out_html($ENV{'form.subject'}); |
my $subject = &clear_out_html($ENV{'form.subject'}); |
$typestyle.=&adddiscuss($symb,$message,0,$attachmenturl,$subject); |
my $anonmode=(defined($ENV{'form.anondiscuss'})); |
|
$typestyle.=&adddiscuss($symb,$message,$anonmode,$attachmenturl, |
|
$subject); |
$numpost++; |
$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 |
# 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,$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; |
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; |
1; |
__END__ |
__END__ |