![]()
+ 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;
}
@@ -250,42 +264,74 @@ 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 +340,7 @@ sub send_msg {
if ($_) {
my $declutter=&Apache::lonnet::declutter($feedurl);
unless (&Apache::lonmsg::user_normal_msg(split(/\:/,$_),
- 'Feedback ['.$declutter.']',$email,$citations) eq 'ok') {
+ 'Feedback ['.$declutter.']',$email,$citations)=~/ok/) {
$status.='
Error sending message to '.$_.'
';
} else {
$sendsomething++;
@@ -390,7 +436,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 +468,33 @@ sub handler {
&redirect_back($r,&Apache::lonnet::clutter($url),
'Changed discussion status
','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);
@@ -478,7 +551,7 @@ sub handler {
my $usersaw=&resource_output($feedurl);
# 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,