version 1.44, 2003/06/04 22:05:22
|
version 1.61, 2003/09/19 16:12:50
|
Line 52 use Apache::lonmsg();
|
Line 52 use Apache::lonmsg();
|
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::lontexconvert(); |
use Apache::lontexconvert(); |
|
|
|
sub list_discussion { |
|
my ($mode,$status,$symb)=@_; |
|
my $discussiononly=0; |
|
if ($mode eq 'board') { $discussiononly=1; } |
|
unless ($ENV{'request.course.id'}) { return ''; } |
|
my $crs='/'.$ENV{'request.course.id'}; |
|
if ($ENV{'request.course.sec'}) { |
|
$crs.='_'.$ENV{'request.course.sec'}; |
|
} |
|
$crs=~s/\_/\//g; |
|
unless ($symb) { |
|
$symb=&Apache::lonnet::symbread(); |
|
} |
|
unless ($symb) { return ''; } |
|
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'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}, |
|
$ENV{'course.'.$ENV{'request.course.id'}.'.num'}); |
|
if ($contrib{'version'}) { |
|
unless ($discussiononly) { |
|
$discussion.= |
|
'<address><hr />'; |
|
} |
|
my $idx; |
|
for ($idx=1;$idx<=$contrib{'version'};$idx++) { |
|
my $hidden=($contrib{'hidden'}=~/\.$idx\./); |
|
my $deleted=($contrib{'deleted'}=~/\.$idx\./); |
|
unless ((($hidden) && (!$seeid)) || ($deleted)) { |
|
my $message=$contrib{$idx.':message'}; |
|
$message=~s/\n/\<br \/\>/g; |
|
$message=&Apache::lontexconvert::msgtexconverted($message); |
|
if ($contrib{$idx.':attachmenturl'}) { |
|
my ($fname,$ft) |
|
=($contrib{$idx.':attachmenturl'}=~/\/(\w+)\.(\w+)$/); |
|
$message.='<p>Attachment: <a href="'. |
|
&Apache::lonnet::tokenwrapper( |
|
$contrib{$idx.':attachmenturl'}). |
|
'"><tt>'.$fname.'.'.$ft.'</tt></a>'; |
|
} |
|
if ($message) { |
|
if ($hidden) { |
|
$message='<font color="#888888">'.$message.'</font>'; |
|
} |
|
my $screenname=&Apache::loncommon::screenname( |
|
$contrib{$idx.':sendername'}, |
|
$contrib{$idx.':senderdomain'}); |
|
my $plainname=&Apache::loncommon::nickname( |
|
$contrib{$idx.':sendername'}, |
|
$contrib{$idx.':senderdomain'}); |
|
|
|
my $sender='Anonymous'; |
|
if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { |
|
$sender=&Apache::loncommon::aboutmewrapper( |
|
$plainname, |
|
$contrib{$idx.':sendername'}, |
|
$contrib{$idx.':senderdomain'}).' ('. |
|
$contrib{$idx.':sendername'}.' at '. |
|
$contrib{$idx.':senderdomain'}.')'; |
|
if ($contrib{$idx.':anonymous'}) { |
|
$sender.=' [anonymous] '. |
|
$screenname; |
|
} |
|
if ($seeid) { |
|
if ($hidden) { |
|
$sender.=' <a href="/adm/feedback?unhide='. |
|
$symb.':::'.$idx.'">Make Visible</a>'; |
|
} else { |
|
$sender.=' <a href="/adm/feedback?hide='. |
|
$symb.':::'.$idx.'">Hide</a>'; |
|
} |
|
$sender.=' <a href="/adm/feedback?deldisc='. |
|
$symb.':::'.$idx.'">Delete</a>'; |
|
} |
|
} else { |
|
if ($screenname) { |
|
$sender='<i>'.$screenname.'</i>'; |
|
} |
|
} |
|
my $vgrlink; |
|
if ($viewgrades) { |
|
$vgrlink=&Apache::loncommon::submlink('Submissions', |
|
$contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$symb); |
|
} |
|
$discussion.='<p><b>'.$sender.'</b> '.$vgrlink.' ('. |
|
localtime($contrib{$idx.':timestamp'}). |
|
'):<blockquote>'.$message. |
|
'</blockquote></p>'; |
|
} |
|
} |
|
} |
|
unless ($discussiononly) { |
|
$discussion.='</address>'; |
|
} |
|
} |
|
if ($discussiononly) { |
|
$discussion.=(<<ENDDISCUSS); |
|
<form action="/adm/feedback" method="post" name="mailform" enctype="multipart/form-data"> |
|
<input type="submit" name="discuss" value="Post Discussion" /> |
|
<input type="submit" name="anondiscuss" value="Post Anonymous Discussion" /> |
|
<input type="hidden" name="symb" value="$symb" /> |
|
<input type="hidden" name="sendit" value="true" /> |
|
<br /> |
|
<font size="1">Note: in anonymous discussion, your name is visible only to |
|
course faculty</font><br /> |
|
<textarea name=comment cols=60 rows=10 wrap=hard></textarea> |
|
<p> |
|
Attachment (128 KB max size): <input type="file" name="attachment" /> |
|
</p> |
|
</form> |
|
ENDDISCUSS |
|
$discussion.=&generate_preview_button(); |
|
} |
|
return $discussion; |
|
} |
|
|
sub mail_screen { |
sub mail_screen { |
my ($r,$feedurl,$options) = @_; |
my ($r,$feedurl,$options) = @_; |
my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion'); |
my $bodytag=&Apache::loncommon::bodytag('Resource Feedback and Discussion', |
|
'','onLoad="window.focus();"'); |
|
my $title=&Apache::lonnet::gettitle($feedurl); |
|
if (!$title) { $title = $feedurl; } |
|
my $latexHelp = Apache::loncommon::helpLatexCheatsheet(); |
$r->print(<<ENDDOCUMENT); |
$r->print(<<ENDDOCUMENT); |
<html> |
<html> |
<head> |
<head> |
Line 103 sub mail_screen {
|
Line 224 sub mail_screen {
|
</script> |
</script> |
</head> |
</head> |
$bodytag |
$bodytag |
<h2><tt>$feedurl</tt></h2> |
<h2><tt>$title</tt></h2> |
<form action="/adm/feedback" method="post" name="mailform" |
<form action="/adm/feedback" method="post" name="mailform" |
enctype="multipart/form-data"> |
enctype="multipart/form-data"> |
<input type=hidden name=postdata value="$feedurl"> |
<input type=hidden name=postdata value="$feedurl"> |
Please check at least one of the following feedback types: |
Please check at least one of the following feedback types: |
$options<hr> |
$options<hr> |
My question/comment/feedback:<p> |
My question/comment/feedback:<p> |
|
$latexHelp |
<textarea name=comment cols=60 rows=10 wrap=hard> |
<textarea name=comment cols=60 rows=10 wrap=hard> |
</textarea><p> |
</textarea><p> |
Attachment (128 KB max size): <input type="file" name="attachment" /> |
Attachment (128 KB max size): <input type="file" name="attachment" /> |
Line 148 sub redirect_back {
|
Line 270 sub redirect_back {
|
<meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl"> |
<meta HTTP-EQUIV="Refresh" CONTENT="2; url=$feedurl"> |
</head> |
</head> |
<html> |
<html> |
<body bgcolor="#FFFFFF"> |
<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> |
$typestyle |
$typestyle |
<b>Sent $sendsomething message(s), and $sendposts post(s).</b> |
<b>Sent $sendsomething message(s), and $sendposts post(s).</b> |
<font color=red>$status</font> |
<font color=red>$status</font> |
|
<form name="reldt" action="$feedurl" target="loncapaclient"> |
|
</form> |
</body> |
</body> |
</html> |
</html> |
ENDREDIR |
ENDREDIR |
Line 172 ENDNOREDIR
|
Line 296 ENDNOREDIR
|
$r->print (<<ENDNOREDIRTWO); |
$r->print (<<ENDNOREDIRTWO); |
</head> |
</head> |
<html> |
<html> |
<body bgcolor="#FFFFFF"> |
<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>Sorry, no feedback possible on this resource ...</b> |
<b>Sorry, no feedback possible on this resource ...</b> |
</body> |
</body> |
Line 182 ENDNOREDIRTWO
|
Line 306 ENDNOREDIRTWO
|
|
|
sub screen_header { |
sub screen_header { |
my ($feedurl) = @_; |
my ($feedurl) = @_; |
my $options=''; |
my $msgoptions=''; |
|
my $discussoptions=''; |
if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) { |
if (($feedurl=~/^\/res\//) && ($feedurl!~/^\/res\/adm/)) { |
$options= |
$msgoptions= |
'<p><input type=checkbox name=author> Feedback to resource author'; |
'<p><input type=checkbox name=author> Feedback to resource author'; |
} |
} |
if (&feedback_available(1)) { |
if (&feedback_available(1)) { |
$options.= |
$msgoptions.= |
'<br><input type=checkbox name=question> Question about resource content'; |
'<br><input type=checkbox name=question> Question about resource content'; |
} |
} |
if (&feedback_available(0,1)) { |
if (&feedback_available(0,1)) { |
$options.= |
$msgoptions.= |
'<br><input type=checkbox name=course> '. |
'<br><input type=checkbox name=course> '. |
'Question/Comment/Feedback about course content'; |
'Question/Comment/Feedback about course content'; |
} |
} |
if (&feedback_available(0,0,1)) { |
if (&feedback_available(0,0,1)) { |
$options.= |
$msgoptions.= |
'<br><input type=checkbox name=policy> '. |
'<br><input type=checkbox name=policy> '. |
'Question/Comment/Feedback about course policy'; |
'Question/Comment/Feedback about course policy'; |
} |
} |
Line 206 sub screen_header {
|
Line 331 sub screen_header {
|
if (&Apache::lonnet::allowed('pch', |
if (&Apache::lonnet::allowed('pch', |
$ENV{'request.course.id'}. |
$ENV{'request.course.id'}. |
($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) { |
($ENV{'request.course.sec'}?'/'.$ENV{'request.course.sec'}:''))) { |
$options.='<br><input type=checkbox name=discuss> '. |
$discussoptions='<input type="checkbox" name="discuss" onClick="this.form.anondiscuss.checked=false;"> '. |
'<b>Contribution to course discussion of resource</b>'; |
'Contribution to course discussion of resource'; |
$options.='<br><input type=checkbox name=anondiscuss> '. |
$discussoptions.='<br><input type="checkbox" name="anondiscuss" onClick="this.form.discuss.checked=false;"> '. |
'<b>Anonymous contribution to course discussion of resource</b>'. |
'Anonymous contribution to course discussion of resource'. |
' (name only visible to course faculty)'; |
' <i>(name only visible to course faculty)</i>'; |
} |
} |
} |
} |
return $options; |
if ($msgoptions) { $msgoptions='<h2>Sending Messages</h2>'.$msgoptions; } |
|
if ($discussoptions) { |
|
$discussoptions='<h2>Discussion Contributions</h2>'.$discussoptions; } |
|
return $msgoptions.$discussoptions; |
} |
} |
|
|
sub resource_output { |
sub resource_output { |
my ($feedurl) = @_; |
my ($feedurl) = @_; |
my $usersaw=&Apache::lonnet::ssi($feedurl); |
my $usersaw=&Apache::lonnet::ssi_body($feedurl); |
$usersaw=~s/\<body[^\>]*\>//gi; |
$usersaw=~s/\<body[^\>]*\>//gi; |
$usersaw=~s/\<\/body\>//gi; |
$usersaw=~s/\<\/body\>//gi; |
$usersaw=~s/\<html\>//gi; |
$usersaw=~s/\<html\>//gi; |
Line 237 sub clear_out_html {
|
Line 365 sub clear_out_html {
|
# allows <B> <I> <P> <A> <LI> <OL> <UL> <EM> <BR> <TT> <STRONG> |
# allows <B> <I> <P> <A> <LI> <OL> <UL> <EM> <BR> <TT> <STRONG> |
# <BLOCKQUOTE> <DIV .*> <DIV> <IMG> |
# <BLOCKQUOTE> <DIV .*> <DIV> <IMG> |
my %html=(B=>1, I=>1, P=>1, A=>1, LI=>1, OL=>1, UL=>1, EM=>1, |
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); |
BR=>1, TT=>1, STRONG=>1, BLOCKQUOTE=>1, DIV=>1, IMG=>1, |
|
M=>1); |
|
|
$message =~ s/\<(\/?\s*(\w+)[^\>\<]*)/ |
$message =~ s/\<(\/?\s*(\w+)[^\>\<]*)/ |
{($html{uc($2)}&(length($1)<1000))?"\<$1":"\<$1"}/ge; |
{($html{uc($2)}&&(length($1)<1000))?"\<$1":"\<$1"}/ge; |
$message =~ s/(\<?\s*(\w+)[^\<\>]*)\>/ |
$message =~ s/(\<?\s*(\w+)[^\<\>]*)\>/ |
{($html{uc($2)}&(length($1)<1000))?"$1\>":"$1\>"}/ge; |
{($html{uc($2)}&&(length($1)<1000))?"$1\>":"$1\>"}/ge; |
} else { |
} else { |
$message=~s/\<\/*m\s*\>//g; |
|
$message=~s/\</\<\;/g; |
$message=~s/\</\<\;/g; |
$message=~s/\>/\>\;/g; |
$message=~s/\>/\>\;/g; |
} |
} |
Line 454 sub handler {
|
Line 582 sub handler {
|
my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'}; |
my $entry=$ENV{'form.hide'}?$ENV{'form.hide'}:$ENV{'form.unhide'}; |
|
|
my ($symb,$idx)=split(/\:\:\:/,$entry); |
my ($symb,$idx)=split(/\:\:\:/,$entry); |
my ($map,$ind,$url)=split(/\_\_\_/,$symb); |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
|
|
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'}, |
Line 484 sub handler {
|
Line 612 sub handler {
|
my $entry=$ENV{'form.deldisc'}; |
my $entry=$ENV{'form.deldisc'}; |
|
|
my ($symb,$idx)=split(/\:\:\:/,$entry); |
my ($symb,$idx)=split(/\:\:\:/,$entry); |
my ($map,$ind,$url)=split(/\_\_\_/,$symb); |
my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
|
|
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'}, |
Line 517 sub handler {
|
Line 645 sub handler {
|
unless ($symb) { |
unless ($symb) { |
$symb=$ENV{'form.symb'}; |
$symb=$ENV{'form.symb'}; |
if ($symb) { |
if ($symb) { |
my ($map,$id,$url)=split(/\_\_\_/,$symb); |
my ($map,$id,$url)=&Apache::lonnet::decode_symb($symb); |
$feedurl=&Apache::lonnet::clutter($url); |
$feedurl=&Apache::lonnet::clutter($url); |
} |
} |
} |
} |
Line 558 sub handler {
|
Line 686 sub handler {
|
# Get output from resource |
# Get output from resource |
my $usersaw=&resource_output($feedurl); |
my $usersaw=&resource_output($feedurl); |
|
|
# Get resource answer |
# Get resource answer (need to allow student to view grades for this to work) |
|
&Apache::lonnet::appenv(('allowed.vgr'=>'F')); |
my $useranswer=&Apache::loncommon::get_student_answers( |
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'); |
# Get attachments, if any, and not too large |
# Get attachments, if any, and not too large |
my $attachmenturl=''; |
my $attachmenturl=''; |
if ($ENV{'form.attachment.filename'}) { |
if ($ENV{'form.attachment.filename'}) { |
Line 607 sub handler {
|
Line 737 sub handler {
|
} |
} |
} else { |
} else { |
# Ambiguous Problem Resource |
# Ambiguous Problem Resource |
$r->internal_redirect('/adm/ambiguous'); |
if ( &Apache::lonnet::mod_perl_version() == 2 ) { |
|
&Apache::lonnet::cleanenv(); |
|
} |
|
$r->internal_redirect('/adm/ambiguous'); |
} |
} |
} |
} |
return OK; |
return OK; |