--- loncom/interface/lonfeedback.pm 2002/10/11 20:52:13 1.34 +++ loncom/interface/lonfeedback.pm 2003/02/18 15:47:40 1.41 @@ -1,7 +1,7 @@ # The LearningOnline Network # Feedback # -# $Id: lonfeedback.pm,v 1.34 2002/10/11 20:52:13 www Exp $ +# $Id: lonfeedback.pm,v 1.41 2003/02/18 15:47:40 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -179,20 +179,20 @@ ENDNOREDIRTWO sub screen_header { my ($feedurl) = @_; my $options=''; - if (($feedurl=~/^\/res/) && ($feedurl!~/^\/res\/adm/)) { + if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) { $options= '
Feedback to resource author';
}
- if ($ENV{'course.'.$ENV{'request.course.id'}.'.question.email'}) {
+ if (&feedback_available(1)) {
$options.=
'
Question about resource content';
}
- if ($ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'}) {
+ if (&feedback_available(0,1)) {
$options.=
'
'.
'Question/Comment/Feedback about course content';
}
- if ($ENV{'course.'.$ENV{'request.course.id'}.'.policy.email'}) {
+ if (&feedback_available(0,0,1)) {
$options.=
'
'.
'Question/Comment/Feedback about course policy';
@@ -226,15 +226,29 @@ sub resource_output {
}
sub clear_out_html {
- my $message=$ENV{'form.comment'};
- $message=~s/\<\/*m\s*\>//g;
- $message=~s/\\<\;/g;
- $message=~s/\>/\>\;/g;
+ my ($message,$override)=@_;
+ my $cid=$ENV{'request.course.id'};
+ if (($ENV{"course.$cid.allow_limited_html_in_feedback"} =~ m/yes/i) ||
+ ($override)) {
+ # allows
','0','0');
+ } elsif ($ENV{'form.deldisc'}) {
+# --------------------------------------------------------------- Hide for good
+ $r->content_type('text/html');
+ $r->send_http_header;
+
+ my $entry=$ENV{'form.deldisc'};
+
+ my ($symb,$idx)=split(/\:\:\:/,$entry);
+ my ($map,$ind,$url)=split(/\_\_\_/,$symb);
+
+ my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+
+
+ my $currentdeleted=$contrib{'deleted'};
+
+ $currentdeleted.='.'.$idx.'.';
+
+ my %newhash=('deleted' => $currentdeleted);
+
+ &Apache::lonnet::store(\%newhash,$symb,$ENV{'request.course.id'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
+
+ &redirect_back($r,&Apache::lonnet::clutter($url),
+ 'Changed discussion status ','0','0');
} elsif ($ENV{'form.preview'}) {
# -------------------------------------------------------- User wants a preview
&show_preview($r);
@@ -477,13 +552,18 @@ sub handler {
# Get output from resource
my $usersaw=&resource_output($feedurl);
+# Get resource answer
+ my $useranswer=&Apache::loncommon::get_student_answers(
+ $symb,$ENV{'user.name'},$ENV{'user.domain'},
+ $ENV{'request.course.id'});
+
# Filter HTML out of message (could be nasty)
- my $message=&clear_out_html;
+ my $message=&clear_out_html($ENV{'form.comment'});
# Assemble email
my ($email,$citations)=&assemble_email($feedurl,$message,$prevattempts,
- $usersaw);
-
+ $usersaw,$useranswer);
+
# Who gets this?
my ($typestyle,%to) = &decide_receiver($feedurl);
+ #
+ my %html=(B=>1, I=>1, P=>1, A=>1, LI=>1, OL=>1, UL=>1, EM=>1,
+ BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, DIV=>1, IMG=>1);
+
+ $message =~ s/\<(\/?\s*(\w+)[^\>\<]*)/
+ {($html{uc($2)}&(length($1)<1000))?"\<$1":"\<$1"}/ge;
+ $message =~ s/(\\s*(\w+)[^\<\>]*)\>/
+ {($html{uc($2)}&(length($1)<1000))?"$1\>":"$1\>"}/ge;
+ } else {
+ $message=~s/\<\/*m\s*\>//g;
+ $message=~s/\\<\;/g;
+ $message=~s/\>/\>\;/g;
+ }
return $message;
}
sub assemble_email {
- my ($feedurl,$message,$prevattempts,$usersaw)=@_;
+ my ($feedurl,$message,$prevattempts,$usersaw,$useranswer)=@_;
my $email=<<"ENDEMAIL";
Refers to $feedurl
@@ -246,46 +260,80 @@ $prevattempts
Original screen output (if applicable)
$usersaw
+Correct Answer(s) (if applicable)
+$useranswer
ENDCITE
return ($email,$citations);
}
+sub secapply {
+ my $rec=shift;
+ my $defaultflag=shift;
+ $rec=~s/\s+//g;
+ $rec=~s/\@/\:/g;
+ my ($adr,$sections)=($rec=~/^([^\(]+)\(([^\)]+)\)/);
+ if ($sections) {
+ foreach (split(/\;/,$sections)) {
+ if (($_ eq $ENV{'request.course.sec'}) ||
+ ($defaultflag && ($_ eq '*'))) {
+ return $adr;
+ }
+ }
+ } else {
+ return $rec;
+ }
+ return '';
+}
+
sub decide_receiver {
- my ($feedurl) = @_;
+ my ($feedurl,$author,$question,$course,$policy,$defaultflag) = @_;
my $typestyle='';
my %to=();
- if ($ENV{'form.author'}) {
+ if ($ENV{'form.author'}||$author) {
$typestyle.='Submitting as Author Feedback
';
$feedurl=~/^\/res\/(\w+)\/(\w+)\//;
$to{$2.':'.$1}=1;
}
- if ($ENV{'form.question'}) {
+ if ($ENV{'form.question'}||$question) {
$typestyle.='Submitting as Question
';
foreach (split(/\,/,
$ENV{'course.'.$ENV{'request.course.id'}.'.question.email'})
) {
- $to{$_}=1;
+ my $rec=&secapply($_,$defaultflag);
+ if ($rec) { $to{$rec}=1; }
}
}
- if ($ENV{'form.course'}) {
+ if ($ENV{'form.course'}||$course) {
$typestyle.='Submitting as Comment
';
foreach (split(/\,/,
$ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'})
) {
- $to{$_}=1;
+ my $rec=&secapply($_,$defaultflag);
+ if ($rec) { $to{$rec}=1; }
}
}
- if ($ENV{'form.policy'}) {
+ if ($ENV{'form.policy'}||$policy) {
$typestyle.='Submitting as Policy Feedback
';
foreach (split(/\,/,
$ENV{'course.'.$ENV{'request.course.id'}.'.policy.email'})
) {
- $to{$_}=1;
+ my $rec=&secapply($_,$defaultflag);
+ if ($rec) { $to{$rec}=1; }
}
}
+ if ((scalar(%to) eq '0') && (!$defaultflag)) {
+ ($typestyle,%to)=
+ &decide_receiver($feedurl,$author,$question,$course,$policy,1);
+ }
return ($typestyle,%to);
}
+sub feedback_available {
+ my ($question,$course,$policy)=@_;
+ my ($typestyle,%to)=&decide_receiver('',0,$question,$course,$policy);
+ return scalar(%to);
+}
+
sub send_msg {
my ($feedurl,$email,$citations,%to)=@_;
my $status='';
@@ -294,7 +342,7 @@ sub send_msg {
if ($_) {
my $declutter=&Apache::lonnet::declutter($feedurl);
unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$_),
- 'Feedback ['.$declutter.']',$email,$citations)=~/ok/) {
+ 'Feedback ['.$declutter.']',$email,$citations,$feedurl)=~/ok/) {
$status.='
Error sending message to '.$_.'
';
} else {
$sendsomething++;
@@ -390,7 +438,7 @@ sub handler {
# --------------------------- Get query string for limited number of parameters
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['hide','unhide','postdata','preview']);
+ ['hide','unhide','deldisc','postdata','preview']);
if (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {
# ----------------------------------------------------------------- Hide/unhide
@@ -422,6 +470,33 @@ sub handler {
&redirect_back($r,&Apache::lonnet::clutter($url),
'Changed discussion status