--- loncom/interface/lonfeedback.pm 2003/09/19 16:12:50 1.61
+++ loncom/interface/lonfeedback.pm 2004/04/28 21:13:13 1.78
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Feedback
#
-# $Id: lonfeedback.pm,v 1.61 2003/09/19 16:12:50 www Exp $
+# $Id: lonfeedback.pm,v 1.78 2004/04/28 21:13:13 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -25,24 +25,7 @@
#
# http://www.lon-capa.org/
#
-# (Internal Server Error Handler
-#
-# (Login Screen
-# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14,
-# 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9 Gerd Kortemeyer)
-#
-# 3/1/1 Gerd Kortemeyer)
-#
-# 3/1,2/3,2/5,2/6,2/8 Gerd Kortemeyer
-# 2/9 Guy Albertelli
-# 2/10 Gerd Kortemeyer
-# 2/13 Guy Albertelli
-# 7/25 Gerd Kortemeyer
-# 7/26 Guy Albertelli
-# 7/26,8/10,10/1,11/5,11/6,12/27,12/29 Gerd Kortemeyer
-# YEAR=2002
-# 1/1,1/16 Gerd Kortemeyer
-#
+###
package Apache::lonfeedback;
@@ -51,9 +34,15 @@ use Apache::Constants qw(:common);
use Apache::lonmsg();
use Apache::loncommon();
use Apache::lontexconvert();
+use Apache::lonlocal;
sub list_discussion {
my ($mode,$status,$symb)=@_;
+# &Apache::lonnet::logthis("status is $status");
+ if (!($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER'
+ || $status eq 'OPEN')) {
+ return '';
+ }
my $discussiononly=0;
if ($mode eq 'board') { $discussiononly=1; }
unless ($ENV{'request.course.id'}) { return ''; }
@@ -66,32 +55,84 @@ sub list_discussion {
$symb=&Apache::lonnet::symbread();
}
unless ($symb) { return ''; }
+
+ my %dischash = &Apache::lonnet::restore($symb,$ENV{'request.course.id'}.'_discuss',$ENV{'user.domain'},$ENV{'user.name'});
+ my %readids = ();
+ my $showonlyunread;
+ foreach my $key (keys %dischash) {
+ if ($key eq 'showonlyunread') {
+ $showonlyunread = $dischash{$key};
+ } else {
+ if ($dischash{$key} eq 'read') {
+ $readids{$key} = 1;
+ }
+ }
+ }
+
my $seeid=&Apache::lonnet::allowed('rin',$crs);
- my $viewgrades=&Apache::lonnet::allowed('vgr',$crs);
- my $discussion='';
- my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
+ my $viewgrades=(&Apache::lonnet::allowed('vgr',$crs)
+ && ($symb=~/\.(problem|exam|quiz|assess|survey|form)$/));
+ my @discussionitems=();
+ # backward compatibility (bulletin boards used to be 'wrapped')
+ my $ressymb=$symb;
+ if ($mode eq 'board') {
+ $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
+ }
+ 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 $visible=0;
+ my @depth=();
+ my @original=();
+ my @index=();
+ my @replies=();
+ my %alldiscussion=();
+ my $maxdepth=0;
+
+ my $target='';
+ unless ($ENV{'browser.interface'} eq 'textual' ||
+ $ENV{'environment.remote'} eq 'off' ) {
+ $target='target="LONcom"';
+ }
if ($contrib{'version'}) {
- unless ($discussiononly) {
- $discussion.=
- '
';
- }
- my $idx;
- for ($idx=1;$idx<=$contrib{'version'};$idx++) {
+ for (my $id=1;$id<=$contrib{'version'};$id++) {
+ my $idx=$id;
my $hidden=($contrib{'hidden'}=~/\.$idx\./);
my $deleted=($contrib{'deleted'}=~/\.$idx\./);
+ my $origindex='0.';
+ if (($contrib{$idx.':replyto'}) && ($ENV{'environment.threadeddiscussion'})) {
+# this is a follow-up message
+ $original[$idx]=$original[$contrib{$idx.':replyto'}];
+ $depth[$idx]=$depth[$contrib{$idx.':replyto'}]+1;
+ $origindex=$index[$contrib{$idx.':replyto'}];
+ if ($depth[$idx]>$maxdepth) { $maxdepth=$depth[$idx]; }
+ } else {
+# this is an original message
+ $original[$idx]=0;
+ $depth[$idx]=0;
+ }
+ if ($replies[$depth[$idx]]) {
+ $replies[$depth[$idx]]++;
+ } else {
+ $replies[$depth[$idx]]=1;
+ }
unless ((($hidden) && (!$seeid)) || ($deleted)) {
+ $visible++;
my $message=$contrib{$idx.':message'};
$message=~s/\n/\ /g;
$message=&Apache::lontexconvert::msgtexconverted($message);
+ my $subject=$contrib{$idx.':subject'};
+ if (defined($subject)) {
+ $subject=~s/\n/\ /g;
+ $subject=&Apache::lontexconvert::msgtexconverted($subject);
+ }
if ($contrib{$idx.':attachmenturl'}) {
my ($fname,$ft)
=($contrib{$idx.':attachmenturl'}=~/\/(\w+)\.(\w+)$/);
- $message.='Attachment: '.$fname.'.'.$ft.' ';
+ '">'.$fname.'.'.$ft.'
';
}
if ($message) {
if ($hidden) {
@@ -104,7 +145,7 @@ sub list_discussion {
$contrib{$idx.':sendername'},
$contrib{$idx.':senderdomain'});
- my $sender='Anonymous';
+ my $sender=&mt('Anonymous');
if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {
$sender=&Apache::loncommon::aboutmewrapper(
$plainname,
@@ -113,59 +154,138 @@ sub list_discussion {
$contrib{$idx.':sendername'}.' at '.
$contrib{$idx.':senderdomain'}.')';
if ($contrib{$idx.':anonymous'}) {
- $sender.=' [anonymous] '.
+ $sender.=' ['.&mt('anonymous').'] '.
$screenname;
}
if ($seeid) {
if ($hidden) {
$sender.=' Make Visible ';
+ $ressymb.':::'.$idx.'">'.&mt('Make Visible').'';
} else {
$sender.=' Hide ';
+ $ressymb.':::'.$idx.'">'.&mt('Hide').'';
}
$sender.=' Delete ';
+ $ressymb.':::'.$idx.'">'.&mt('Delete').'';
}
} else {
if ($screenname) {
$sender=''.$screenname.' ';
}
}
+ if (&Apache::lonnet::allowed('pch',
+ $ENV{'request.course.id'}.
+ ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
+ $sender.=' '.&mt('Reply').' ';
+ }
my $vgrlink;
+ my $ctlink;
+ if ($readids{$idx} == 1) {
+ $ctlink = ''.&mt('Mark unread').'? '.
+ ' ';
+ } else {
+ $ctlink = ''.&mt('Mark read').'? '.
+ ' ';
+ }
if ($viewgrades) {
$vgrlink=&Apache::loncommon::submlink('Submissions',
$contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$symb);
}
- $discussion.=''.$sender.' '.$vgrlink.' ('.
- localtime($contrib{$idx.':timestamp'}).
- '):
'.$message.
- ' ';
- }
- }
+#figure out at what position this needs to print
+ my $thisindex=$idx;
+ if ($ENV{'environment.threadeddiscussion'}) {
+ $thisindex=$origindex.substr('00'.$replies[$depth[$idx]],-2,2);
+ }
+ $alldiscussion{$thisindex}=$idx;
+ $index[$idx]=$thisindex;
+ $discussionitems[$idx]='
'.
+ ''.$subject.' '.
+ $sender.' '.$vgrlink.' ('.
+ localtime($contrib{$idx.':timestamp'}).
+ ') '.$ctlink.' ';
+ if ($showonlyunread && $readids{$idx}) {
+ $discussionitems[$idx] .= 'Check "Show all posts?" or "Mark unread?", then "Save read settings" to display message
';
+ } else {
+ $discussionitems[$idx] .= ''.$message.' ';
+ }
+ }
+ }
+ }
+ }
+ my $discussion='';
+ if ($visible) {
+# Print a the discusssion
+ $discussion .= ' ';
}
if ($discussiononly) {
$discussion.=(<
-
+
Note: in anonymous discussion, your name is visible only to
course faculty
-
+Title:
+
Attachment (128 KB max size):
ENDDISCUSS
$discussion.=&generate_preview_button();
- }
+ } else {
+ if (&Apache::lonnet::allowed('pch',
+ $ENV{'request.course.id'}.
+ ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
+ $discussion.='';
+ }
+ }
return $discussion;
}
@@ -175,13 +295,29 @@ sub mail_screen {
'','onLoad="window.focus();"');
my $title=&Apache::lonnet::gettitle($feedurl);
if (!$title) { $title = $feedurl; }
+ my $quote='';
+ my $subject = '';
+ if ($ENV{'form.replydisc'}) {
+ my ($symb,$idx)=split(/\:\:\:/,$ENV{'form.replydisc'});
+ my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+ unless (($contrib{'hidden'}=~/\.$idx\./) || ($contrib{'deleted'}=~/\.$idx\./)) {
+ my $message=$contrib{$idx.':message'};
+ $message=~s/\n/\ /g;
+ $quote=''.&Apache::lontexconvert::msgtexconverted($message).' ';
+ $subject = 'Re: '.$contrib{$idx.':subject'};
+ }
+ }
my $latexHelp = Apache::loncommon::helpLatexCheatsheet();
+ my $send=&mt('Send');
$r->print(<
The LearningOnline Network with CAPA
-
$bodytag
$title
ENDDOCUMENT
@@ -247,14 +390,15 @@ $r->print(&generate_preview_button().'
sub fail_redirect {
my ($r,$feedurl) = @_;
+ if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
$r->print (<
Feedback not sent
-
-
+
+
-
-
+
Sorry, no recipients ...
@@ -263,18 +407,19 @@ ENDFAILREDIR
sub redirect_back {
my ($r,$feedurl,$typestyle,$sendsomething,$sendposts,$status) = @_;
+ if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' };
$r->print (<
Feedback sent
-
+
-
-
+
$typestyle
Sent $sendsomething message(s), and $sendposts post(s).
-$status
+$status
@@ -285,8 +430,9 @@ ENDREDIR
sub no_redirect_back {
my ($r,$feedurl) = @_;
$r->print (<
Feedback not sent
-
+
ENDNOREDIR
if ($feedurl!~/^\/adm\/feedback/) {
@@ -295,9 +441,8 @@ ENDNOREDIR
$r->print (<
-
-
+
Sorry, no feedback possible on this resource ...
@@ -305,43 +450,47 @@ ENDNOREDIRTWO
}
sub screen_header {
- my ($feedurl) = @_;
- my $msgoptions='';
- my $discussoptions='';
- if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) {
- $msgoptions=
- ' Feedback to resource author';
- }
- if (&feedback_available(1)) {
- $msgoptions.=
- ' Question about resource content';
- }
- if (&feedback_available(0,1)) {
- $msgoptions.=
- ' '.
- 'Question/Comment/Feedback about course content';
- }
- if (&feedback_available(0,0,1)) {
- $msgoptions.=
- ' '.
- 'Question/Comment/Feedback about course policy';
- }
-
- if ($ENV{'request.course.id'}) {
- if (&Apache::lonnet::allowed('pch',
- $ENV{'request.course.id'}.
- ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
- $discussoptions=' '.
- 'Contribution to course discussion of resource';
- $discussoptions.=' '.
- 'Anonymous contribution to course discussion of resource'.
- ' (name only visible to course faculty) ';
+ my ($feedurl) = @_;
+ my $msgoptions='';
+ my $discussoptions='';
+ unless ($ENV{'form.replydisc'}) {
+ if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) {
+ $msgoptions=
+ '
'.
+ &mt('Feedback to resource author').'
';
+ }
+ if (&feedback_available(1)) {
+ $msgoptions.=
+ ' '.
+ &mt('Question about resource content');
+ }
+ if (&feedback_available(0,1)) {
+ $msgoptions.=
+ ' '.
+ &mt('Question/Comment/Feedback about course content');
+ }
+ if (&feedback_available(0,0,1)) {
+ $msgoptions.=
+ ' '.
+ &mt('Question/Comment/Feedback about course policy');
+ }
+ }
+ if ($ENV{'request.course.id'}) {
+ if (&Apache::lonnet::allowed('pch',
+ $ENV{'request.course.id'}.
+ ($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
+ $discussoptions=' '.
+ &mt('Contribution to course discussion of resource');
+ $discussoptions.=' '.
+ &mt('Anonymous contribution to course discussion of resource').
+ ' ('.&mt('name only visible to course faculty').') ';
}
- }
- if ($msgoptions) { $msgoptions='Sending Messages '.$msgoptions; }
- if ($discussoptions) {
- $discussoptions='Discussion Contributions '.$discussoptions; }
- return $msgoptions.$discussoptions;
+ }
+ if ($msgoptions) { $msgoptions=' '.&mt('Sending Messages').' '.$msgoptions; }
+ if ($discussoptions) {
+ $discussoptions=' '.&mt('Discussion Contributions').' '.$discussoptions; }
+ return $msgoptions.$discussoptions;
}
sub resource_output {
@@ -389,7 +538,7 @@ ENDEMAIL
my $citations=<<"ENDCITE";
Previous attempts of student (if applicable)
$prevattempts
-
+
Original screen output (if applicable)
$usersaw
Correct Answer(s) (if applicable)
@@ -436,7 +585,7 @@ sub decide_receiver {
}
}
if ($ENV{'form.course'}||$course) {
- $typestyle.='Submitting as Comment ';
+ $typestyle.='Submitting as Comment ';
foreach (split(/\,/,
$ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'})
) {
@@ -445,7 +594,7 @@ sub decide_receiver {
}
}
if ($ENV{'form.policy'}||$policy) {
- $typestyle.='Submitting as Policy Feedback ';
+ $typestyle.='Submitting as Policy Feedback ';
foreach (split(/\,/,
$ENV{'course.'.$ENV{'request.course.id'}.'.policy.email'})
) {
@@ -476,7 +625,7 @@ sub send_msg {
unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$_),
'Feedback ['.$declutter.']',$email,$citations,$feedurl,
$attachmenturl)=~/ok/) {
- $status.=' Error sending message to '.$_.' ';
+ $status.=' '.&mt('Error sending message to').' '.$_.' ';
} else {
$sendsomething++;
}
@@ -490,7 +639,7 @@ sub send_msg {
$newrecord{'resource'}=$feedurl;
$newrecord{'subnumber'}=$record{'subnumber'}+1;
unless (&Apache::lonnet::cstore(\%newrecord,'_feedback') eq 'ok') {
- $status.=' Not registered ';
+ $status.=' '.&mt('Not registered').' ';
}
}
@@ -498,7 +647,7 @@ sub send_msg {
}
sub adddiscuss {
- my ($symb,$email,$anon,$attachmenturl)=@_;
+ my ($symb,$email,$anon,$attachmenturl,$subject)=@_;
my $status='';
if (&Apache::lonnet::allowed('pch',$ENV{'request.course.id'}.
($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) {
@@ -511,7 +660,11 @@ sub adddiscuss {
$ENV{'environment.middlename'}.' '.
$ENV{'environment.lastname'}.' '.
$ENV{'enrironment.generation'},
- 'attachmenturl'=> $attachmenturl);
+ 'attachmenturl'=> $attachmenturl,
+ 'subject' => $subject);
+ if ($ENV{'form.replydisc'}) {
+ $contrib{'replyto'}=(split(/\:\:\:/,$ENV{'form.replydisc'}))[1];
+ }
if ($anon) {
$contrib{'anonymous'}='true';
}
@@ -521,7 +674,7 @@ sub adddiscuss {
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
$ENV{'course.'.$ENV{'request.course.id'}.'.num'});
my %storenewentry=($symb => time);
- $status.=' Updating discussion time: '.
+ $status.=' '.&mt('Updating discussion time').': '.
&Apache::lonnet::put('discussiontimes',\%storenewentry,
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
$ENV{'course.'.$ENV{'request.course.id'}.'.num'});
@@ -532,13 +685,13 @@ sub adddiscuss {
my %newrecord=();
$newrecord{'resource'}=$symb;
$newrecord{'subnumber'}=$record{'subnumber'}+1;
- $status.=' Registering: '.
+ $status.=' '.&mt('Registering').': '.
&Apache::lonnet::cstore(\%newrecord,'_discussion');
}
} else {
$status.='Failed.';
}
- return $status.' ';
+ return $status.' ';
}
# ----------------------------------------------------------- Preview function
@@ -548,23 +701,30 @@ sub show_preview {
my $message=&clear_out_html($ENV{'form.comment'});
$message=~s/\n/\ /g;
$message=&Apache::lontexconvert::msgtexconverted($message);
+ my $subject=&clear_out_html($ENV{'form.subject'});
+ $subject=~s/\n/\ /g;
+ $subject=&Apache::lontexconvert::msgtexconverted($subject);
$r->print(''.
+ 'Subject: '.$subject.' '.
$message.'
');
}
sub generate_preview_button {
+ my $pre=&mt("Show Preview");
return(<
+
-
+
ENDPREVIEW
}
+
sub handler {
my $r = shift;
if ($r->header_only) {
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
return OK;
}
@@ -572,11 +732,78 @@ sub handler {
# --------------------------- Get query string for limited number of parameters
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['hide','unhide','deldisc','postdata','preview']);
+# ['hide','unhide','deldisc','postdata','preview','replydisc','threadedon','threadedoff']);
+ ['hide','unhide','deldisc','postdata','preview','replydisc','threadedon','threadedoff','markread','markunread','storereads','onlyunread','allposts','chgreads']);
+
+ if (($ENV{'form.markread'}) || ($ENV{'form.markunread'})) {
+# ----------------------------------------------------------------- Modify read/unread for all
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ my $symb=$ENV{'form.markread'}?$ENV{'form.markread'}:$ENV{'form.markunread'};
+ my $ressymb = $symb;
+ my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
+ $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
+ 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 %readinghash = ();
+
+ if ($contrib{'version'}) {
+ for (my $id=1;$id<=$contrib{'version'};$id++) {
+ my $msgid = $id.':message';
+ if (defined($contrib{$msgid})) {
+ if ($ENV{'form.markread'}) {
+ $readinghash{$id} = 'read';
+ } else {
+ $readinghash{$id} = 'unread';
+ }
+ }
+ }
+ if ($ENV{'form.allposts'}) {
+ $readinghash{'showonlyunread'} = 0;
+ } elsif ($ENV{'form.onlyunread'}) {
+ $readinghash{'showonlyunread'} = 1;
+ }
+ &Apache::lonnet::cstore(\%readinghash,$symb,$ENV{'request.course.id'}.'_discuss',$ENV{'user.domain'},$ENV{'user.name'});
+ }
+
+ &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed reading status'),'0','0');
+ return OK;
+ } else {
+ my $symb = $ENV{'form.discsymb'};
+ my %readinghash = ();
+ my $chgcount = 0;
+ foreach my $key (keys %ENV) {
+ if ($key =~ m/^form\.postunread_(\d+)/) {
+ $readinghash{$1} = 'unread';
+ $chgcount ++;
+ } elsif ($key =~ m/^form\.postread_(\d+)/) {
+ $readinghash{$1} = 'read';
+ $chgcount ++;
+ }
+ }
+ if ($ENV{'form.allposts'}) {
+ $readinghash{'showonlyunread'} = 0;
+ $chgcount ++;
+ } elsif ($ENV{'form.onlyunread'}) {
+ $readinghash{'showonlyunread'} = 1;
+ $chgcount ++;
+ }
+
+ if ($chgcount > 0) {
+ &Apache::lonnet::cstore(\%readinghash,$symb,$ENV{'request.course.id'}.'_discuss',$ENV{'user.domain'},$ENV{'user.name'});
+ }
+ }
- if (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {
+ if ($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');
+ } elsif (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {
# ----------------------------------------------------------------- Hide/unhide
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'};
@@ -603,10 +830,24 @@ sub handler {
$ENV{'course.'.$ENV{'request.course.id'}.'.num'});
&redirect_back($r,&Apache::lonnet::clutter($url),
- 'Changed discussion status','0','0');
+ &mt('Changed read status').' ','0','0');
+ } elsif (($ENV{'form.threadedon'}) || ($ENV{'form.threadedoff'})) {
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ if ($ENV{'form.threadedon'}) {
+ &Apache::lonnet::put('environment',{'threadeddiscussion' => 'on'});
+ &Apache::lonnet::appenv('environment.threadeddiscussion' => 'on');
+ } else {
+ &Apache::lonnet::del('environment',['threadeddiscussion']);
+ &Apache::lonnet::delenv('environment\.threadeddiscussion');
+ }
+ my $symb=$ENV{'form.threadedon'}?$ENV{'form.threadedon'}:$ENV{'form.threadedoff'};
+ my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
+ &redirect_back($r,&Apache::lonnet::clutter($url),
+ &mt('Changed discussion view mode').' ','0','0');
} elsif ($ENV{'form.deldisc'}) {
# --------------------------------------------------------------- Hide for good
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
my $entry=$ENV{'form.deldisc'};
@@ -630,9 +871,11 @@ sub handler {
$ENV{'course.'.$ENV{'request.course.id'}.'.num'});
&redirect_back($r,&Apache::lonnet::clutter($url),
- 'Changed discussion status
','0','0');
+ &mt('Changed discussion status').' ','0','0');
} elsif ($ENV{'form.preview'}) {
# -------------------------------------------------------- User wants a preview
+ $r->content_type('text/html');
+ $r->send_http_header;
&show_preview($r);
} else {
# ------------------------------------------------------------- Normal feedback
@@ -640,8 +883,16 @@ sub handler {
$feedurl=~s/^http\:\/\///;
$feedurl=~s/^$ENV{'SERVER_NAME'}//;
$feedurl=~s/^$ENV{'HTTP_HOST'}//;
+ $feedurl=~s/\?.+$//;
- my $symb=&Apache::lonnet::symbread($feedurl);
+ 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);
+ } else {
+ $symb=&Apache::lonnet::symbread($feedurl);
+ }
unless ($symb) {
$symb=$ENV{'form.symb'};
if ($symb) {
@@ -653,10 +904,13 @@ sub handler {
if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form)$/) {
unless ($symb) { $goahead=0; }
}
-
+ # backward compatibility (bulltin 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
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
if (
@@ -717,12 +971,14 @@ sub handler {
my $numpost=0;
if ($ENV{'form.discuss'}) {
- $typestyle.=&adddiscuss($symb,$message,0,$attachmenturl);
+ my $subject = &clear_out_html($ENV{'form.subject'});
+ $typestyle.=&adddiscuss($symb,$message,0,$attachmenturl,$subject);
$numpost++;
}
if ($ENV{'form.anondiscuss'}) {
- $typestyle.=&adddiscuss($symb,$message,1,$attachmenturl);
+ my $subject = &clear_out_html($ENV{'form.subject'});
+ $typestyle.=&adddiscuss($symb,$message,1,$attachmenturl,$subject);
$numpost++;
}