version 1.285, 2010/01/24 15:30:04
|
version 1.308, 2011/12/10 23:16:36
|
Line 49 use LONCAPA;
|
Line 49 use LONCAPA;
|
|
|
sub discussion_open { |
sub discussion_open { |
my ($status,$symb)=@_; |
my ($status,$symb)=@_; |
|
# Advanced roles can always discuss |
if ($env{'request.role.adv'}) { return 1; } |
if ($env{'request.role.adv'}) { return 1; } |
|
# Get discussion closing date |
|
my $close=&Apache::lonnet::EXT('resource.0.discussend',$symb); |
|
# If it is defined and in the future, the instructor wants this discussion to be open |
|
if (defined($close) && $close ne '' && $close > time) { |
|
return 1; |
|
} |
|
# It was not explicitly open, check if the problem is available. |
|
# If the problem is not available, close the discussion |
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',$symb); |
# The problem is available, but check if the instructor explictly closed discussion |
if (defined($close) && $close ne '' && $close < time) { |
if (defined($close) && $close ne '' && $close < time) { |
return 0; |
return 0; |
} |
} |
Line 126 sub list_discussion {
|
Line 135 sub list_discussion {
|
$crs=~s/\_/\//g; |
$crs=~s/\_/\//g; |
my $encsymb=&Apache::lonenc::check_encrypt($ressymb); |
my $encsymb=&Apache::lonenc::check_encrypt($ressymb); |
my $viewgrades=(&Apache::lonnet::allowed('vgr',$crs) |
my $viewgrades=(&Apache::lonnet::allowed('vgr',$crs) |
&& ($ressymb=~/\.(problem|exam|quiz|assess|survey|form|task)$/)); |
&& ($ressymb=~/$LONCAPA::assess_re/)); |
|
|
my %usernamesort = (); |
my %usernamesort = (); |
my %namesort =(); |
my %namesort =(); |
Line 272 sub list_discussion {
|
Line 281 sub list_discussion {
|
my $maxdepth=0; |
my $maxdepth=0; |
my %anonhash=(); |
my %anonhash=(); |
my $anoncnt=0; |
my $anoncnt=0; |
my $target=''; |
|
unless ($env{'browser.interface'} eq 'textual' || |
|
$env{'environment.remote'} eq 'off' ) { |
|
$target='target="LONcom"'; |
|
} |
|
|
|
my $now = time; |
my $now = time; |
$discinfo{$visitkey} = $visit; |
$discinfo{$visitkey} = $visit; |
|
|
&Apache::lonnet::put('nohist_'.$cid.'_discuss',\%discinfo,$env{'user.domain'},$env{'user.name'}); |
&Apache::lonnet::put('nohist_'.$cid.'_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,$encsymb,$target,$readkey,$showunmark,$showonlyunread,$totposters,\@rolefilter,\@sectionpick,\@grouppick,$classgroups,$statusfilter,$toggkey,$outputtarget,\%anonhash,$anoncnt,$group); |
&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,$readkey,$showunmark,$showonlyunread,$totposters,\@rolefilter,\@sectionpick,\@grouppick,$classgroups,$statusfilter,$toggkey,$outputtarget,\%anonhash,$anoncnt,$group); |
|
|
my $discussion=''; |
my $discussion=''; |
my $manifestfile; |
my $manifestfile; |
Line 317 sub list_discussion {
|
Line 321 sub list_discussion {
|
'dpwn' => 'Deleted posts will no longer be visible to you and other students', |
'dpwn' => 'Deleted posts will no longer be visible to you and other students', |
'bwco' => 'but will continue to be visible to your instructor', |
'bwco' => 'but will continue to be visible to your instructor', |
'depo' => 'Deleted posts will no longer be visible to you or anyone else.', |
'depo' => 'Deleted posts will no longer be visible to you or anyone else.', |
|
'discussions' => 'DISCUSSIONS' |
); |
); |
|
|
my $currdisp = $lt{'allposts'}; |
my $currdisp = $lt{'allposts'}; |
Line 368 sub list_discussion {
|
Line 373 sub list_discussion {
|
# Print the discusssion |
# Print the discusssion |
if ($outputtarget eq 'tex') { |
if ($outputtarget eq 'tex') { |
$discussion.='<tex>{\tiny \vskip 0 mm\noindent\makebox[2 cm][b]{\hrulefill}'. |
$discussion.='<tex>{\tiny \vskip 0 mm\noindent\makebox[2 cm][b]{\hrulefill}'. |
'\textbf{DISCUSSIONS}\makebox[2 cm][b]{\hrulefill}'. |
'\textbf{'.$lt{'discussions'}.'}\makebox[2 cm][b]{\hrulefill}\vskip 0 mm'. |
'\vskip 0 mm\noindent\textbf{'.$lt{'cuse'}.'}:\vskip 0 mm'. |
|
'\noindent\textbf{'.$lt{'disa'}.'}: \textit{'.$currdisp.'}\vskip 0 mm'. |
'\noindent\textbf{'.$lt{'disa'}.'}: \textit{'.$currdisp.'}\vskip 0 mm'. |
'\noindent\textbf{'.$lt{'npce'}.'}: \textit{'.$currmark.'}}</tex>'; |
'\noindent\textbf{'.$lt{'npce'}.'}: \textit{'.$currmark.'}}</tex>'; |
} elsif ($outputtarget eq 'export') { |
} elsif ($outputtarget eq 'export') { |
Line 416 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 420 imscp_v1p1.xsd http://www.imsglobal.org/
|
} |
} |
} else { |
} else { |
my $colspan=$maxdepth+1; |
my $colspan=$maxdepth+1; |
#JW |
|
$discussion.= &Apache::lonhtmlcommon::scripttag(qq| |
$discussion.= &Apache::lonhtmlcommon::scripttag(qq| |
function verifydelete (caller,symb,idx,newflag,previous,groupparm) { |
function verifydelete (caller,symb,idx,newflag,previous,groupparm) { |
var symbparm = symb+':::'+idx |
var symbparm = symb+':::'+idx |
Line 514 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 517 imscp_v1p1.xsd http://www.imsglobal.org/
|
$threadinsert='<br /><strong>Reply: '.$thisdepth.'</strong>'; |
$threadinsert='<br /><strong>Reply: '.$thisdepth.'</strong>'; |
} |
} |
$discussionitems[$alldiscussion{$post}]=~s/<\/td><td([^>]*)>/$threadinsert<\/td><td TeXwidth="65 mm" align="left">/; |
$discussionitems[$alldiscussion{$post}]=~s/<\/td><td([^>]*)>/$threadinsert<\/td><td TeXwidth="65 mm" align="left">/; |
$discussionitems[$alldiscussion{$post}]=~s/<a([^>]+)>(Edit|Hide|Delete|Reply|Submissions)<\/a>//g; |
|
$discussionitems[$alldiscussion{$post}]=~s/(<b>|<\/b>|<\/a>|<a([^>]+)>)//g; |
$discussionitems[$alldiscussion{$post}]=~s/(<b>|<\/b>|<\/a>|<a([^>]+)>)//g; |
|
|
$discussionitems[$alldiscussion{$post}]='<tex>\vskip 0 mm\noindent\makebox[2 cm][b]{\hrulefill}</tex>'.$discussionitems[$alldiscussion{$post}]; |
$discussionitems[$alldiscussion{$post}]='<tex>\vskip 0 mm\noindent\makebox[2 cm][b]{\hrulefill}</tex>'.$discussionitems[$alldiscussion{$post}]; |
Line 719 END
|
Line 721 END
|
$attachnum += @{$currnewattach}; |
$attachnum += @{$currnewattach}; |
} |
} |
} |
} |
if (&discussion_open($status)) { |
if ((&discussion_open($status)) && ($outputtarget ne 'tex')) { |
if (($group ne '') && ($mode eq 'board')) { |
if (($group ne '') && ($mode eq 'board')) { |
if (&check_group_priv($group,'pgd') eq 'ok') { |
if ((&check_group_priv($group,'pgd') eq 'ok') && |
|
($ressymb =~ m{^bulletin___\d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$})) { |
$discussion .= |
$discussion .= |
&postingform_display($mode,$ressymb,$now,$subject, |
&postingform_display($mode,$ressymb,$now,$subject, |
$comment,$outputtarget,$attachnum, |
$comment,$outputtarget,$attachnum, |
Line 729 END
|
Line 732 END
|
$group,$crstype); |
$group,$crstype); |
} |
} |
} else { |
} else { |
$discussion.= |
if (&Apache::lonnet::allowed('pch',$env{'request.course.id'}. |
&postingform_display($mode,$ressymb,$now,$subject, |
($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) { |
$comment,$outputtarget,$attachnum, |
|
$currnewattach,$currdelold,'',$crstype); |
$discussion.= |
|
&postingform_display($mode,$ressymb,$now,$subject, |
|
$comment,$outputtarget,$attachnum, |
|
$currnewattach,$currdelold,'',$crstype); |
|
} else { |
|
$discussion.= '<span class="LC_feedback_link">'. |
|
&mt('This discussion is closed.').'</span>'; |
|
} |
} |
} |
} |
} |
} else { |
if (!(&discussion_open($status)) && ($outputtarget ne 'tex')) { |
|
$discussion.= '<span class="LC_feedback_link">'. |
|
&mt('This discussion is closed.').'</span>'; |
|
} |
|
} elsif ($outputtarget ne 'tex') { |
$discussion.='<div class="LC_feedback_link">'; |
$discussion.='<div class="LC_feedback_link">'; |
if (&discussion_open($status) && |
if (&discussion_open($status) && |
&Apache::lonnet::allowed('pch', |
&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'}:''))) { |
if ($outputtarget ne 'tex') { |
$discussion.= &send_feedback_link($ressymb); |
$discussion.= &send_feedback_link($ressymb,$target); |
if ($env{'request.role.adv'}) { |
|
my $close = &Apache::lonnet::EXT('resource.0.discussend',$ressymb); |
|
if (defined($close) && $close ne '' && $close < time) { |
|
$discussion .= ' '.&mt('(Closed for [_1] roles)', |
|
&Apache::lonnet::plaintext('st',$crstype)); |
|
} |
} |
} |
} |
} else { |
if ($outputtarget ne 'tex') { |
$discussion.= '<span class="LC_feedback_link">'.&mt('This discussion is closed.').'</span>'; |
$discussion.= &send_message_link($ressymb); |
|
} |
} |
$discussion.='</div>'; |
$discussion.= &send_message_link($ressymb).'</div>'; |
} |
} |
return $discussion; |
return $discussion; |
} |
} |
|
|
|
|
|
sub discussion_link { |
|
my ($ressymb,$linktext,$cmd,$item,$flag,$prev,$adds)=@_; |
|
my $link='/adm/feedback?inhibitmenu=yes&modal=yes&'.$cmd.'='.&escape($ressymb).':::'.$item; |
|
if ($flag) { $link .= '&previous='.$prev; } |
|
if ($adds) { $link .= $adds; } |
|
return &Apache::loncommon::modal_link($link,$linktext,600,400); |
|
} |
|
|
|
|
sub send_feedback_link { |
sub send_feedback_link { |
my ($ressymb,$target) = @_; |
my ($ressymb) = @_; |
my $output = '<span class="LC_feedback_link">'. |
return '<span class="LC_feedback_link">'. |
' <a href="/adm/feedback?replydisc='. |
&discussion_link($ressymb, |
&escape($ressymb).':::" '.$target.'>'. |
'<img alt="" class="LC_noBorder" src="'. |
'<img alt="" class="LC_noBorder" src="'. |
&Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif'). |
&Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif'). |
'" border="0" /><span class="LC_menubuttons_inline_text">'.&mt('Post Discussion').'</span>', |
'" border="0" /><span class="LC_menubuttons_inline_text">'.&mt('Post Discussion').'</span></a></span>'; |
'replydisc'). |
return $output; |
'</span>'; |
} |
} |
|
|
sub send_message_link { |
sub send_message_link { |
Line 769 sub send_message_link {
|
Line 797 sub send_message_link {
|
my $output = '<span class="LC_message_link">'. |
my $output = '<span class="LC_message_link">'. |
' <a href="/adm/feedback?sendmessageonly=1&symb='. |
' <a href="/adm/feedback?sendmessageonly=1&symb='. |
&escape($ressymb).'"><img alt="" class="LC_noBorder" src="'. |
&escape($ressymb).'"><img alt="" class="LC_noBorder" src="'. |
&Apache::loncommon::lonhttpdurl('/res/adm/pages/com.png'). |
&Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png'). |
'" border="0" /><span class="LC_menubuttons_inline_text">'.&mt('Send Feedback').'</span></a></span>'; |
'" border="0" /><span class="LC_menubuttons_inline_text">'.&mt('Send Feedback').'</span></a></span>'; |
return $output; |
return $output; |
} |
} |
Line 780 sub action_links_bar {
|
Line 808 sub action_links_bar {
|
'<table width="100%" class="LC_disc_action_table"><tr>'. |
'<table width="100%" class="LC_disc_action_table"><tr>'. |
'<td class="LC_disc_action_left">'; |
'<td class="LC_disc_action_left">'; |
my $escsymb=&escape($ressymb); |
my $escsymb=&escape($ressymb); |
if ($visible>2) { |
if ($visible) { |
$discussion .= '<a href="/adm/feedback?cmd=threadedon&symb='.$escsymb; |
$discussion .= '<a href="/adm/feedback?cmd=threadedon&symb='.$escsymb; |
if ($newpostsflag) { |
if ($newpostsflag) { |
$discussion .= '&previous='.$prevread; |
$discussion .= '&previous='.$prevread; |
Line 839 sub postingform_display {
|
Line 867 sub postingform_display {
|
if ($crstype eq 'Community') { |
if ($crstype eq 'Community') { |
$lt{'note'} = &mt('Note: in anonymous discussion, your name is visible only to community facilitators'); |
$lt{'note'} = &mt('Note: in anonymous discussion, your name is visible only to community facilitators'); |
} |
} |
my $postingform = (<<ENDDISCUSS); |
my ($postingform,$textareaclass); |
|
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
|
$postingform = &Apache::lonhtmlcommon::htmlareaselectactive(); |
|
$textareaclass = 'class="LC_richDefaultOff"'; |
|
if ($env{'request.course.id'}) { |
|
unless (($env{'course.'.$env{'request.course.id'}.'.allow_limited_html_in_feedback'} =~ /^\s*yes\s*$/i) || ($env{'form.sendmessageonly'})) { |
|
undef($textareaclass); |
|
} |
|
} |
|
} |
|
$postingform .= (<<ENDDISCUSS); |
<form action="/adm/feedback" method="post" name="mailform" enctype="multipart/form-data"> <input type="submit" name="discuss" value="$lt{'podi'}" /> |
<form action="/adm/feedback" method="post" name="mailform" enctype="multipart/form-data"> <input type="submit" name="discuss" value="$lt{'podi'}" /> |
<input type="submit" name="anondiscuss" value="$lt{'poan'}" /> <input type="hidden" name="symb" value="$ressymb" /> |
<input type="submit" name="anondiscuss" value="$lt{'poan'}" /> <input type="hidden" name="symb" value="$ressymb" /> |
<input type="hidden" name="sendit" value="true" /> |
<input type="hidden" name="sendit" value="true" /> |
Line 847 sub postingform_display {
|
Line 885 sub postingform_display {
|
<br /><a name="newpost"></a> |
<br /><a name="newpost"></a> |
<font size="1">$lt{'note'}</font><br /> |
<font size="1">$lt{'note'}</font><br /> |
<b>$lt{'title'}:</b> <input type="text" name="subject" value="$subject" size="30" /><br /><br /> |
<b>$lt{'title'}:</b> <input type="text" name="subject" value="$subject" size="30" /><br /><br /> |
<textarea name="comment" cols="80" rows="14" >$comment</textarea> |
<textarea name="comment" cols="80" rows="14" id="comment" $textareaclass>$comment</textarea> |
ENDDISCUSS |
ENDDISCUSS |
if ($env{'form.origpage'}) { |
if ($env{'form.origpage'}) { |
$postingform .= '<input type="hidden" name="origpage" value="'. |
$postingform .= '<input type="hidden" name="origpage" value="'. |
Line 869 ENDDISCUSS
|
Line 907 ENDDISCUSS
|
$postingform .= &add_blog_checkbox($crstype); |
$postingform .= &add_blog_checkbox($crstype); |
} |
} |
$postingform .= "</form>\n"; |
$postingform .= "</form>\n"; |
if ($outputtarget ne 'tex') { |
$postingform .= &generate_attachments_button('',$attachnum,$ressymb, |
$postingform .= &generate_attachments_button('',$attachnum,$ressymb, |
|
$now,$currnewattach, |
$now,$currnewattach, |
$currdelold,'',$mode, |
$currdelold,'',$mode, |
$blockblog); |
$blockblog); |
if ((ref($currnewattach) eq 'ARRAY') && (@{$currnewattach} > 0)) { |
if ((ref($currnewattach) eq 'ARRAY') && (@{$currnewattach} > 0)) { |
$newattachmsg = '<br /><b>'.$lt{'newa'}.'</b><br />'; |
$newattachmsg = '<br /><b>'.$lt{'newa'}.'</b><br />'; |
if (@{$currnewattach} > 1) { |
if (@{$currnewattach} > 1) { |
$newattachmsg .= '<ol>'; |
$newattachmsg .= '<ol>'; |
foreach my $item (@{$currnewattach}) { |
foreach my $item (@{$currnewattach}) { |
$item =~ m#.*/([^/]+)$#; |
$item =~ m#.*/([^/]+)$#; |
$newattachmsg .= '<li><a href="'.$item.'">'.$1.'</a></li>'."\n"; |
$newattachmsg .= '<li><a href="'.$item.'">'.$1.'</a></li>'."\n"; |
} |
} |
$newattachmsg .= '</ol>'."\n"; |
$newattachmsg .= '</ol>'."\n"; |
} else { |
} else { |
$$currnewattach[0] =~ m#.*/([^/]+)$#; |
$$currnewattach[0] =~ m#.*/([^/]+)$#; |
$newattachmsg .= '<a href="'.$$currnewattach[0].'">'.$1.'</a><br />'."\n"; |
$newattachmsg .= '<a href="'.$$currnewattach[0].'">'.$1.'</a><br />'."\n"; |
} |
} |
} |
|
$postingform .= $newattachmsg; |
|
$postingform .= &generate_preview_button(); |
|
} |
} |
|
$postingform .= $newattachmsg; |
|
$postingform .= &generate_preview_button(); |
return $postingform; |
return $postingform; |
} |
} |
|
|
sub build_posting_display { |
sub build_posting_display { |
my ($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,$grouppick,$classgroups,$statusfilter,$toggkey,$outputtarget,$anonhash,$anoncnt,$group) = @_; |
my ($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,$readkey,$showunmark,$showonlyunread,$totposters,$rolefilter,$sectionpick,$grouppick,$classgroups,$statusfilter,$toggkey,$outputtarget,$anonhash,$anoncnt,$group) = @_; |
my @original=(); |
my @original=(); |
my @index=(); |
my @index=(); |
my $skip_group_check = 0; |
my $skip_group_check = 0; |
Line 911 sub build_posting_display {
|
Line 947 sub build_posting_display {
|
if ((@{$grouppick} == 0) || (grep(/^all$/,@{$grouppick}))) { |
if ((@{$grouppick} == 0) || (grep(/^all$/,@{$grouppick}))) { |
$skip_group_check = 1; |
$skip_group_check = 1; |
} |
} |
|
my (%deletions,%hiddens); |
|
if ($contrib{'deleted'}) { |
|
my $deleted = $contrib{'deleted'}; |
|
$deleted =~ s/^\.//; |
|
$deleted =~ s/\.$//; |
|
%deletions = map { $_ => 1 } (split(/\.\./,$deleted)); |
|
} |
|
if ($contrib{'hidden'}) { |
|
my $hidden = $contrib{'hidden'}; |
|
$hidden =~ s/^\.//; |
|
$hidden =~ s/\.$//; |
|
%hiddens = map { $_ => 1 } (split(/\.\./,$hidden)); |
|
} |
if ($contrib{'version'}) { |
if ($contrib{'version'}) { |
my $oldest = $contrib{'1:timestamp'}; |
my $oldest = $contrib{'1:timestamp'}; |
if ($prevread eq '0') { |
if ($prevread eq '0') { |
Line 924 sub build_posting_display {
|
Line 973 sub build_posting_display {
|
} |
} |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
for (my $id=1;$id<=$contrib{'version'};$id++) { |
my $idx=$id; |
my $idx=$id; |
|
next if ($contrib{$idx.':deleted'}); |
|
next if ($contrib{$idx.':hidden'}); |
my $posttime = $contrib{$idx.':timestamp'}; |
my $posttime = $contrib{$idx.':timestamp'}; |
if ($prevread <= $posttime) { |
if ($prevread <= $posttime) { |
$$newpostsflag = 1; |
$$newpostsflag = 1; |
} |
} |
my $hidden=($contrib{'hidden'}=~/\.$idx\./); |
|
my $studenthidden=($contrib{'studenthidden'}=~/\.$idx\./); |
my $studenthidden=($contrib{'studenthidden'}=~/\.$idx\./); |
my $deleted=($contrib{'deleted'}=~/\.$idx\./); |
|
my $origindex='0.'; |
my $origindex='0.'; |
my $numoldver=0; |
my $numoldver=0; |
if ($contrib{$idx.':replyto'}) { |
if ($contrib{$idx.':replyto'}) { |
Line 954 sub build_posting_display {
|
Line 1003 sub build_posting_display {
|
} else { |
} else { |
$$replies[$$depth[$idx]]=1; |
$$replies[$$depth[$idx]]=1; |
} |
} |
unless ((($hidden) && (!$seeid)) || ($deleted)) { |
unless ((($hiddens{$idx}) && (!$seeid)) || ($deletions{$idx})) { |
$$visible++; |
$$visible++; |
if ($contrib{$idx.':history'}) { |
if ($contrib{$idx.':history'}) { |
if ($contrib{$idx.':history'} =~ /:/) { |
if ($contrib{$idx.':history'} =~ /:/) { |
Line 988 sub build_posting_display {
|
Line 1037 sub build_posting_display {
|
$message.=$attachtxt{$numoldver}; |
$message.=$attachtxt{$numoldver}; |
$subject=$subjects{$numoldver}; |
$subject=$subjects{$numoldver}; |
if ($message) { |
if ($message) { |
if ($hidden) { |
if ($hiddens{$idx}) { |
$message='<font color="#888888">'.$message.'</font>'; |
$message='<font color="#888888">'.$message.'</font>'; |
if ($studenthidden) { |
if ($studenthidden) { |
$message .='<br /><br />Deleted by poster (student).'; |
$message .='<br /><br />Deleted by poster (student).'; |
Line 1015 sub build_posting_display {
|
Line 1064 sub build_posting_display {
|
$contrib{$idx.':senderdomain'}).' ('. |
$contrib{$idx.':senderdomain'}).' ('. |
$contrib{$idx.':sendername'}.':'. |
$contrib{$idx.':sendername'}.':'. |
$contrib{$idx.':senderdomain'}.')'; |
$contrib{$idx.':senderdomain'}.')'; |
|
$sender = '<b>'.$sender.'</b>'; |
if ($contrib{$idx.':anonymous'}) { |
if ($contrib{$idx.':anonymous'}) { |
$sender.=' <font color="red"><b>['.$$anonhash{$key}.']</b></font> '. |
$sender.=' <font color="red"><b>['.$$anonhash{$key}.']</b></font> '. |
$screenname; |
$screenname; |
Line 1051 sub build_posting_display {
|
Line 1101 sub build_posting_display {
|
} else { |
} else { |
@{$$namesort{$lastname}{$firstname}} = ("$idx"); |
@{$$namesort{$lastname}{$firstname}} = ("$idx"); |
} |
} |
if (&editing_allowed($escsymb.':::'.$idx,$group)) { |
if ($outputtarget ne 'tex') { |
if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) { |
if (&editing_allowed($escsymb.':::'.$idx,$group)) { |
$sender.=' <a href="/adm/feedback?editdisc='. |
if (($env{'user.domain'} eq $contrib{$idx.':senderdomain'}) && ($env{'user.name'} eq $contrib{$idx.':sendername'})) { |
$escsymb.':::'.$idx; |
$sender.=' '. |
if ($$newpostsflag) { |
&discussion_link($symb,&mt('Edit'),'editdisc',$idx,$$newpostsflag,$prevread,&group_args($group)); |
$sender .= '&previous='.$prevread; |
unless ($seeid) { |
} |
my $grpargs = &group_args($group); |
$sender .= &group_args($group); |
$sender.=" <a href=\"javascript:verifydelete('studentdelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')"; |
$sender .= '" '.$target.'>'.&mt('Edit').'</a>'; |
$sender .= '">'.&mt('Delete').'</a>'; |
|
} |
unless ($seeid) { |
|
my $grpargs = &group_args($group); |
|
$sender.=" <a href=\"javascript:verifydelete('studentdelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')"; |
|
$sender .= '">'.&mt('Delete').'</a>'; |
|
} |
} |
} |
} |
} |
if ($seeid) { |
if ($seeid) { |
if ($hiddens{$idx}) { |
if ($hidden) { |
unless ($studenthidden) { |
unless ($studenthidden) { |
$sender.=' '. |
$sender.=' <a href="/adm/feedback?unhide='. |
&discussion_link($symb,&mt('Make Visible'),'unhide',$idx,$$newpostsflag,$prevread,&group_args($group)); |
$escsymb.':::'.$idx; |
|
if ($$newpostsflag) { |
|
$sender .= '&previous='.$prevread; |
|
} |
} |
$sender .= '">'.&mt('Make Visible').'</a>'; |
} else { |
} |
$sender.=' '. |
} else { |
&discussion_link($symb,&mt('Hide'),'hide',$idx,$$newpostsflag,$prevread,&group_args($group)); |
$sender.=' <a href="/adm/feedback?hide='. |
} |
$escsymb.':::'.$idx; |
my $grpargs = &group_args($group); |
if ($$newpostsflag) { |
$sender.= |
$sender .= '&previous='.$prevread; |
" <a href=\"javascript:verifydelete('seeiddelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')\">"; |
} |
$sender .= &mt('Delete').'</a>'; |
$sender .= &group_args($group); |
} |
$sender .= '">'.&mt('Hide').'</a>'; |
|
} |
|
my $grpargs = &group_args($group); |
|
$sender.= |
|
" <a href=\"javascript:verifydelete('seeiddelete','$escsymb','$idx','$$newpostsflag','$prevread','$grpargs')\">"; |
|
$sender .= &mt('Delete').'</a>'; |
|
} |
} |
} else { |
} else { |
if ($screenname) { |
if ($screenname) { |
$sender='<i>'.$screenname.'</i>'; |
$sender='<i>'.$screenname.'</i>'; |
} else { |
} else { |
$sender='<i>'.$$anonhash{$key}.'</i>'; |
$sender='<i>'.$$anonhash{$key}.'</i>'; |
} |
} |
|
$sender = '<b>'.$sender.'</b>'; |
# Set up for sorting by domain, then username for anonymous |
# Set up for sorting by domain, then username for anonymous |
unless (defined($$usernamesort{'__anon'})) { |
unless (defined($$usernamesort{'__anon'})) { |
%{$$usernamesort{'__anon'}} = (); |
%{$$usernamesort{'__anon'}} = (); |
Line 1117 sub build_posting_display {
|
Line 1155 sub build_posting_display {
|
@{$$namesort{'__anon'}{'__anon'}} = ("$idx"); |
@{$$namesort{'__anon'}{'__anon'}} = ("$idx"); |
} |
} |
} |
} |
if (&discussion_open($status)) { |
if ($outputtarget ne 'tex') { |
if (($group ne '') && |
if (&discussion_open($status)) { |
(&check_group_priv($group,'pgd') eq 'ok')) { |
if (($group ne '') && |
$sender.=' <a href="/adm/feedback?replydisc='. |
(&check_group_priv($group,'pgd') eq 'ok')) { |
$escsymb.':::'.$idx; |
$sender.=' '. |
if ($$newpostsflag) { |
&discussion_link($symb,&mt('Reply'),'replydisc',$idx,$$newpostsflag,$prevread,&group_args($group)); |
$sender .= '&previous='.$prevread; |
} elsif (&Apache::lonnet::allowed('pch', |
} |
$env{'request.course.id'}. |
$sender .= &group_args($group); |
($env{'request.course.sec'}?'/'. |
$sender .= '" '.$target.'>'.&mt('Reply').'</a>'; |
$env{'request.course.sec'}:''))) { |
} elsif (&Apache::lonnet::allowed('pch', |
$sender.=' '. |
$env{'request.course.id'}. |
&discussion_link($symb,&mt('Reply'),'replydisc',$idx,$$newpostsflag,$prevread); |
($env{'request.course.sec'}?'/'. |
|
$env{'request.course.sec'}:''))) { |
|
$sender.=' <a href="/adm/feedback?replydisc='. |
|
$escsymb.':::'.$idx; |
|
if ($$newpostsflag) { |
|
$sender .= '&previous='.$prevread; |
|
} |
} |
$sender .= '" '.$target.'>'.&mt('Reply').'</a>'; |
|
} |
} |
} |
if ($viewgrades) { |
if ($viewgrades) { |
$vgrlink=&Apache::loncommon::submlink(&mt('Submissions'), |
$vgrlink=&Apache::loncommon::submlink('Submissions', |
$contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$ressymb); |
$contrib{$idx.':sendername'},$contrib{$idx.':senderdomain'},$ressymb); |
} |
} |
if ($$dischash{$readkey}=~/\.$idx\./) { |
if ($$dischash{$readkey}=~/\.$idx\./) { |
$ctlink = '<label><b>'.&mt('Mark unread').'?</b> <input type="checkbox" name="postunread_'.$idx.'" /></label>'; |
$ctlink = '<label><b>'.&mt('Mark unread').'?</b> <input type="checkbox" name="postunread_'.$idx.'" /></label>'; |
} else { |
} else { |
$ctlink = '<label><b>'.&mt('Mark read').'?</b> <input type="checkbox" name="postread_'.$idx.'" /></label>'; |
$ctlink = '<label><b>'.&mt('Mark read').'?</b> <input type="checkbox" name="postread_'.$idx.'" /></label>'; |
} |
} |
} |
} |
} |
#figure out at what position this needs to print |
#figure out at what position this needs to print |
Line 1163 sub build_posting_display {
|
Line 1194 sub build_posting_display {
|
if ($outputtarget eq 'export') { |
if ($outputtarget eq 'export') { |
%{$$imsitems{$idx}} = (); |
%{$$imsitems{$idx}} = (); |
$$imsitems{$idx}{'isvisible'}='true'; |
$$imsitems{$idx}{'isvisible'}='true'; |
if ($hidden) { |
if ($hiddens{$idx}) { |
$$imsitems{$idx}{'isvisible'}='false'; |
$$imsitems{$idx}{'isvisible'}='false'; |
} |
} |
$$imsitems{$idx}{'title'}=$subjects{$numoldver}; |
$$imsitems{$idx}{'title'}=$subjects{$numoldver}; |
Line 1245 sub build_posting_display {
|
Line 1276 sub build_posting_display {
|
$$newitem{$idx} = 1; |
$$newitem{$idx} = 1; |
$$discussionitems[$idx] .= ' |
$$discussionitems[$idx] .= ' |
<table border="0" width="100%"> |
<table border="0" width="100%"> |
<tr><td align="left"><font color="#FF0000"><b>'.&mt('NEW').'</b></font></td>'; |
<tr><td align="left"><font color="#FF0000"><b>'.&mt('NEW').' </b></font></td>'; |
} else { |
} else { |
$$newitem{$idx} = 0; |
$$newitem{$idx} = 0; |
$$discussionitems[$idx] .= ' |
$$discussionitems[$idx] .= ' |
Line 1254 sub build_posting_display {
|
Line 1285 sub build_posting_display {
|
} |
} |
$$discussionitems[$idx] .= '<td align="left"> '. |
$$discussionitems[$idx] .= '<td align="left"> '. |
'<b>'.$subject.'</b> '. |
'<b>'.$subject.'</b> '. |
'<b>'.$sender.'</b> '.$vgrlink.' ('. |
$sender.' '.$vgrlink.' ('. |
&Apache::lonlocal::locallocaltime($posttime).')</td>'; |
&Apache::lonlocal::locallocaltime($posttime).')</td>'; |
if ($$dischash{$toggkey}) { |
if ($$dischash{$toggkey}) { |
$$discussionitems[$idx].='<td align="right"> '. |
$$discussionitems[$idx].='<td align="right"> '. |
Line 1266 sub build_posting_display {
|
Line 1297 sub build_posting_display {
|
my @postversions = (); |
my @postversions = (); |
$$discussionitems[$idx] .= &mt('This post has been edited by the author.'); |
$$discussionitems[$idx] .= &mt('This post has been edited by the author.'); |
if ($seeid) { |
if ($seeid) { |
$$discussionitems[$idx] .= ' <a href="/adm/feedback?allversions='.$escsymb.':::'.$idx; |
$$discussionitems[$idx] .= ' '. |
$$discussionitems[$idx] .= &group_args($group); |
&discussion_link($symb,&mt('Display all versions'),'allversions',$idx,$$newpostsflag,$prevread,&group_args($group)); |
$$discussionitems[$idx] .= '">'.&mt('Display all versions').'</a>'; |
|
} |
} |
$$discussionitems[$idx].='<br/>'.&mt('Earlier version(s) were posted on: '); |
$$discussionitems[$idx].='<br/>'.&mt('Earlier version(s) were posted on: '); |
if ($contrib{$idx.':history'} =~ m/:/) { |
if ($contrib{$idx.':history'} =~ m/:/) { |
Line 1396 sub get_post_contents {
|
Line 1426 sub get_post_contents {
|
my ($timesent,$attachmsg); |
my ($timesent,$attachmsg); |
my %currattach = (); |
my %currattach = (); |
$timesent = &Apache::lonlocal::locallocaltime($postversions[$i]); |
$timesent = &Apache::lonlocal::locallocaltime($postversions[$i]); |
&newline_to_br(\$messages->{$i}); |
unless (&contains_block_html($messages->{$i})) { |
|
&newline_to_br(\$messages->{$i}); |
|
} |
$$messages{$i}=&Apache::lontexconvert::msgtexconverted($$messages{$i}); |
$$messages{$i}=&Apache::lontexconvert::msgtexconverted($$messages{$i}); |
$$subjects{$i}=~s/\n/\<br \/\>/g; |
$$subjects{$i}=~s/\n/\<br \/\>/g; |
$$subjects{$i}=&Apache::lontexconvert::msgtexconverted($$subjects{$i}); |
$$subjects{$i}=&Apache::lontexconvert::msgtexconverted($$subjects{$i}); |
Line 1664 END
|
Line 1696 END
|
</script> |
</script> |
END |
END |
|
|
|
my ($textareaheader,$textareaclass); |
|
if (&Apache::lonhtmlcommon::htmlareabrowser()) { |
|
$textareaheader = &Apache::lonhtmlcommon::htmlareaselectactive(); |
|
$textareaclass = 'class="LC_richDefaultOff"'; |
|
if ($env{'request.course.id'}) { |
|
unless (($env{'course.'.$env{'request.course.id'}.'.allow_limited_html_in_feedback'} =~ /^\s*yes\s*$/i) || ($env{'form.sendmessageonly'})) { |
|
undef($textareaclass); |
|
} |
|
} |
|
} |
|
|
# Breadcrumbs |
# Breadcrumbs |
my $brcrum = [{'href' => '', |
my $brcrum = [{'href' => '', |
'text' => 'Resource Feedback and Discussion'}]; |
'text' => 'Resource Feedback and Discussion'}]; |
|
|
my %onload = ('onload' => 'window.focus();setposttype();'); |
my %onload = ('onload' => 'window.focus();setposttype();'); |
|
my %parms=('add_entries' => \%onload); |
|
if ($env{'form.modal'} ne 'yes') { 'bread_crumbs' => $brcrum } |
my $start_page= |
my $start_page= |
&Apache::loncommon::start_page('Resource Feedback and Discussion',$js, |
&Apache::loncommon::start_page('Resource Feedback and Discussion',$js,\%parms); |
{'add_entries' => \%onload, |
|
'bread_crumbs' => $brcrum,}); |
|
|
|
if ($quote ne '') { |
if ($quote ne '') { |
&newline_to_br(\$quote); |
$quote = &HTML::Entities::decode($quote); |
|
unless (&contains_block_html($quote)) { |
|
&newline_to_br(\$quote); |
|
} |
$quote='<blockquote>'.&Apache::lontexconvert::msgtexconverted($quote).'</blockquote>'; |
$quote='<blockquote>'.&Apache::lontexconvert::msgtexconverted($quote).'</blockquote>'; |
} |
} |
|
|
Line 1686 $start_page
|
Line 1732 $start_page
|
enctype="multipart/form-data"> |
enctype="multipart/form-data"> |
$prevtag |
$prevtag |
<input type="hidden" name="postdata" value="$feedurl" /> |
<input type="hidden" name="postdata" value="$feedurl" /> |
|
<input type="hidden" name="modal" value="$env{'form.modal'}" /> |
END |
END |
if ($env{'form.replydisc'}) { |
if ($env{'form.replydisc'}) { |
$r->print(<<END); |
$r->print(<<END); |
Line 1700 END
|
Line 1747 END
|
$r->print(<<END); |
$r->print(<<END); |
$options<hr /> |
$options<hr /> |
$quote |
$quote |
<p>$lt{'myqu'}</p> |
<p>$lt{'myqu'} |
|
$textareaheader |
|
</p> |
<p> |
<p> |
$latexHelp |
$latexHelp |
</p> |
</p> |
<p> |
<p> |
$lt{'title'}: <input type="text" name="subject" size="30" value="$subject" /></p> |
$lt{'title'}: <input type="text" name="subject" size="30" value="$subject" /></p> |
<p> |
<p> |
<textarea name="comment" id="comment" cols="60" rows="10">$comment |
<textarea name="comment" id="comment" cols="60" rows="10" $textareaclass>$comment |
</textarea></p> |
</textarea></p> |
END |
END |
if ( ($env{'form.editdisc'}) || ($env{'form.replydisc'}) ) { |
if ( ($env{'form.editdisc'}) || ($env{'form.replydisc'}) ) { |
Line 1785 END
|
Line 1834 END
|
} |
} |
} |
} |
$r->print(&generate_preview_button(). |
$r->print(&generate_preview_button(). |
&Apache::lonhtmlcommon::htmlareaselectactive('comment'). |
|
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
|
|
} |
} |
Line 2234 sub print_showposters {
|
Line 2282 sub print_showposters {
|
my $group = $env{'form.group'}; |
my $group = $env{'form.group'}; |
my $ressymb = &wrap_symb($symb); |
my $ressymb = &wrap_symb($symb); |
if (($group ne '') && |
if (($group ne '') && |
($ressymb =~ m|^bulletin___ \d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$|)) { |
($ressymb =~ m|^bulletin___\d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$|)) { |
if (&check_group_priv($group,'dgp') eq 'ok') { |
if (&check_group_priv($group,'dgp') eq 'ok') { |
$seeid = 1; |
$seeid = 1; |
} |
} |
Line 2395 sub fail_redirect {
|
Line 2443 sub fail_redirect {
|
my ($r,$feedurl) = @_; |
my ($r,$feedurl) = @_; |
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; |
if ($feedurl=~/^\/adm\//) { $feedurl.='?register=1' }; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'sorr' => 'Sorry, no recipients ...', |
'sorr' => 'Sorry, no recipients ...', |
); |
); |
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
$r->print(&Apache::loncommon::start_page('Feedback not sent',undef, |
$r->print(&Apache::loncommon::start_page('Feedback not sent',undef, |
Line 2507 sub redirect_back {
|
Line 2555 sub redirect_back {
|
} |
} |
&Apache::lonenc::check_encrypt(\$feedurl); |
&Apache::lonenc::check_encrypt(\$feedurl); |
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
my %onload; |
my %parms=('only_body' => 1); |
if ($env{'environment.remote'} ne 'off') { |
if ($env{'form.modal'}) { |
$onload{'onload'} = |
$parms{'add_entries'}={'onLoad' => 'document.forms.reldt.submit()'}; |
"if (window.name!='loncapaclient') { this.document.reldt.submit(); self.window.close(); }"; |
} else { |
|
$parms{'redirect'}=[0,$feedurl]; |
} |
} |
my $start_page= |
my $start_page= |
&Apache::loncommon::start_page('Feedback sent',undef, |
&Apache::loncommon::start_page('Feedback sent',undef,\%parms); |
{'redirect' => [0,$feedurl], |
|
'only_body' => 1, |
|
'add_entries' => \%onload}); |
|
my $end_page = &Apache::loncommon::end_page(); |
my $end_page = &Apache::loncommon::end_page(); |
$r->print(<<ENDREDIR); |
$r->print(<<ENDREDIR); |
$start_page |
$start_page |
Line 2542 ENDREDIR
|
Line 2588 ENDREDIR
|
|
|
sub no_redirect_back { |
sub no_redirect_back { |
my ($r,$feedurl) = @_; |
my ($r,$feedurl) = @_; |
my $nofeed=&mt('Sorry, no feedback possible on this resource ...'); |
my $nofeed=&mt('Sorry, no feedback possible on this resource ...'); |
|
|
my %onload; |
my %onload; |
if ($env{'environment.remote'} ne 'off') { |
|
$onload{'onload'} = |
|
"if (window.name!='loncapaclient') { self.window.close(); }"; |
|
} |
|
|
|
my %body_options = ('only_body' => 1, |
my %body_options = ('only_body' => 1, |
'bgcolor' => '#FFFFFF', |
'bgcolor' => '#FFFFFF', |
Line 2575 ENDNOREDIRTWO
|
Line 2617 ENDNOREDIRTWO
|
} |
} |
|
|
sub screen_header { |
sub screen_header { |
my ($feedurl,$symb) = @_; |
my ($feedurl,$symb,$group) = @_; |
my $crscontent = &mt('Question/Comment/Feedback about course content'); |
my $crscontent = &mt('Question/Comment/Feedback about course content'); |
my $crspolicy = &mt('Question/Comment/Feedback about course policy'); |
my $crspolicy = &mt('Question/Comment/Feedback about course policy'); |
my $contribdisc = &mt('Contribution to course discussion of resource'); |
my $contribdisc = &mt('Contribution to course discussion of resource'); |
Line 2624 sub screen_header {
|
Line 2666 sub screen_header {
|
} |
} |
if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) { |
if (($env{'request.course.id'}) && (!$env{'form.sendmessageonly'})) { |
my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('boards'); |
my ($blocked,$blocktext) = &Apache::loncommon::blocking_status('boards'); |
if (!$blocked && &discussion_open(undef,$symb) && |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
&Apache::lonnet::allowed('pch', |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
$env{'request.course.id'}. |
my $realsymb = $symb; |
($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:''))) { |
if ($symb=~/^bulletin___/) { |
|
my $filename=(&Apache::lonnet::decode_symb($symb))[2]; |
|
$filename=~s|^adm/wrapper/||; |
|
$realsymb=&Apache::lonnet::symbread($filename); |
|
} |
|
if (!$blocked && &discussion_open(undef,$realsymb) && |
|
(&Apache::lonnet::allowed('pch', |
|
$env{'request.course.id'}. |
|
($env{'request.course.sec'}?'/'.$env{'request.course.sec'}:'')) || |
|
(($group ne '') && ($symb =~ m{^bulletin___\d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$}) && (&check_group_priv($group,'pgd') eq 'ok')))) { |
$discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '. |
$discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '. |
$contribdisc. |
$contribdisc. |
'</label><br /><label><input type="radio" name="discuss" value="anon" /> '. |
'</label><br /><label><input type="radio" name="discuss" value="anon" /> '. |
Line 2641 sub screen_header {
|
Line 2692 sub screen_header {
|
} |
} |
} |
} |
if ($msgoptions) { |
if ($msgoptions) { |
$msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/com.png').'" />' |
$msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png').'" />' |
.' '.&mt('Send Feedback').'</h2><p>'.&Apache::lonhtmlcommon::coursepreflink(&mt('Feedback Settings'),'feedback').'</p>' |
.' '.&mt('Send Feedback').'</h2><p>'.&Apache::lonhtmlcommon::coursepreflink(&mt('Feedback Settings'),'feedback').'</p>' |
.$msgoptions; |
.$msgoptions; |
} |
} |
Line 2667 sub resource_output {
|
Line 2718 sub resource_output {
|
} |
} |
|
|
sub clear_out_html { |
sub clear_out_html { |
my ($message,$override,$ignore_htmlarea)=@_; |
my ($message,$override)=@_; |
if (!$ignore_htmlarea |
|
&& !&Apache::lonhtmlcommon::htmlareablocked()) { return $message; } |
|
# Always allow the <m>-tag |
# Always allow the <m>-tag |
my %html=(M=>1); |
my %html=(M=>1); |
# Check if more is allowed |
# Check if more is allowed |
Line 2680 sub clear_out_html {
|
Line 2729 sub clear_out_html {
|
# <BLOCKQUOTE> <DIV .*> <DIV> <IMG> <M> <SPAN> <H1> <H2> <H3> <H4> <SUB> |
# <BLOCKQUOTE> <DIV .*> <DIV> <IMG> <M> <SPAN> <H1> <H2> <H3> <H4> <SUB> |
# <SUP> <TABLE> <TR> <TD> <TH> <TBODY> |
# <SUP> <TABLE> <TR> <TD> <TH> <TBODY> |
%html=(B=>1, I=>1, P=>1, A=>1, LI=>1, OL=>1, UL=>1, EM=>1, |
%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, PRE=>1, DIV=>1, IMG=>1, |
M=>1, ALGEBRA=>1, SUB=>1, SUP=>1, SPAN=>1, |
M=>1, CHEM=>1, ALGEBRA=>1, SUB=>1, SUP=>1, SPAN=>1, |
H1=>1, H2=>1, H3=>1, H4=>1, H5=>1, H6=>1, |
H1=>1, H2=>1, H3=>1, H4=>1, H5=>1, H6=>1, |
TABLE=>1, TR=>1, TD=>1, TH=>1, TBODY=>1); |
TABLE=>1, TR=>1, TD=>1, TH=>1, TBODY=>1); |
} |
} |
Line 2768 sub send_msg {
|
Line 2817 sub send_msg {
|
} |
} |
|
|
sub adddiscuss { |
sub adddiscuss { |
my ($symb,$email,$anon,$attachmenturl,$subject)=@_; |
my ($symb,$email,$anon,$attachmenturl,$subject,$group)=@_; |
my $status=''; |
my $status=''; |
my $realsymb; |
my $realsymb; |
if ($symb=~/^bulletin___/) { |
if ($symb=~/^bulletin___/) { |
Line 2776 sub adddiscuss {
|
Line 2825 sub adddiscuss {
|
$filename=~s|^adm/wrapper/||; |
$filename=~s|^adm/wrapper/||; |
$realsymb=&Apache::lonnet::symbread($filename); |
$realsymb=&Apache::lonnet::symbread($filename); |
} |
} |
|
my ($cnum,$cdom); |
|
if ($env{'request.course.id'}) { |
|
$cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
$cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
} |
if (&discussion_open(undef,$realsymb) && |
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'}:'')) || |
|
(($group ne '') && (&check_group_priv($group,'pgd') eq 'ok') && |
|
($symb =~ m{^bulletin___\d+___adm/wrapper/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard$})))) { |
|
|
my %contrib=('message' => $email, |
my %contrib=('message' => $email, |
'sendername' => $env{'user.name'}, |
'sendername' => $env{'user.name'}, |
Line 2929 sub show_preview {
|
Line 2985 sub show_preview {
|
&newline_to_br(\$message); |
&newline_to_br(\$message); |
$message=&Apache::lonspeller::markeduptext($message); |
$message=&Apache::lonspeller::markeduptext($message); |
$message=&Apache::lontexconvert::msgtexconverted($message); |
$message=&Apache::lontexconvert::msgtexconverted($message); |
my $subject=&clear_out_html($env{'form.subject'},undef,1); |
my $subject=&clear_out_html($env{'form.subject'}); |
$subject=~s/\n/\<br \/\>/g; |
$subject=~s/\n/\<br \/\>/g; |
$subject=&Apache::lontexconvert::msgtexconverted($subject); |
$subject=&Apache::lontexconvert::msgtexconverted($subject); |
|
|
Line 2950 sub show_preview {
|
Line 3006 sub show_preview {
|
} |
} |
|
|
sub contains_block_html { |
sub contains_block_html { |
my ($message)=@_; |
my ($message)=@_; |
return ($message =~ m/ |
return ($message =~ m{ |
<(br|h1|h2|h3|h4|h5|h6|p|ol|ul|table|pre|address|blockquote|center|div) |
<(br|h1|h2|h3|h4|h5|h6|p|ol|ul|table|pre|address|blockquote|center|div) |
[\s]* |
\s* |
([\w]+\=['"][\w]+['"])* |
(\w+\=['"]\w+['"])* |
[\s]* |
\s* |
( |
( |
[\s]*[\/]>| |
\s*/>| |
>.*<\/\1[\s]*> |
>.*</\1\s*> |
)/xs ); |
)}xs |
|
); |
} |
} |
|
|
sub tidy_html { |
sub tidy_html { |
Line 3035 END
|
Line 3092 END
|
# Breadcrumbs |
# Breadcrumbs |
my $brcrum = [{'href' => '', |
my $brcrum = [{'href' => '', |
'text' => 'Discussion Post Attachments'}]; |
'text' => 'Discussion Post Attachments'}]; |
|
my %parms=(); |
|
if ($env{'form.modal'} ne 'yes') { 'bread_crumbs' => $brcrum } |
|
|
my $start_page = |
my $start_page = |
&Apache::loncommon::start_page('Discussion Post Attachments',$js, |
&Apache::loncommon::start_page('Discussion Post Attachments',$js,\%parms); |
{'bread_crumbs' => $brcrum,}); |
|
|
|
my $orig_subject = &unescape($env{'form.subject'}); |
my $orig_subject = &unescape($env{'form.subject'}); |
my $subject=&clear_out_html($orig_subject,undef,1); |
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 3398 sub handler {
|
Line 3457 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','cmd','symb','onlyunread','allposts','onlyunmark','previous','markread','markonread','markondisp','toggoff','toggon','modifydisp','changes','navtime','navmaps','navurl','sortposts','applysort','rolefilter','statusfilter','sectionpick','groupick','posterlist','userpick','attach','origpage','currnewattach','deloldattach','keepold','allversions','export','sendmessageonly','group','ref']); |
['modal','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','groupick','posterlist','userpick','attach','origpage','currnewattach','deloldattach','keepold','allversions','export','sendmessageonly','group','ref']); |
my $group = $env{'form.group'}; |
my $group = $env{'form.group'}; |
my %attachmax = ( |
my %attachmax = ( |
text => &mt('(128 KB max size)'), |
text => &mt('(128 KB max size)'), |
Line 3449 sub handler {
|
Line 3508 sub handler {
|
# Breadcrumbs |
# Breadcrumbs |
my $brcrum = [{'href' => '', |
my $brcrum = [{'href' => '', |
'text' => 'Discussion Post Versions'}]; |
'text' => 'Discussion Post Versions'}]; |
|
|
|
my %parms=(); |
|
if ($env{'form.modal'} ne 'yes') { 'bread_crumbs' => $brcrum } |
|
|
$r->print(&Apache::loncommon::start_page('Discussion Post Versions',undef, |
$r->print(&Apache::loncommon::start_page('Discussion Post Versions',undef,\%parms)); |
{'bread_crumbs' => $brcrum,}) |
|
); |
|
|
|
my $crs='/'.$env{'request.course.id'}; |
my $crs='/'.$env{'request.course.id'}; |
if ($env{'request.course.sec'}) { |
if ($env{'request.course.sec'}) { |
Line 3556 sub handler {
|
Line 3616 sub handler {
|
$r->send_http_header; |
$r->send_http_header; |
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif'); |
my %onload; |
my %onload; |
if ($env{'environment.remote'} ne 'off') { |
|
$onload{'onload'} = |
|
"if (window.name!='loncapaclient') { this.document.reldt.submit(); self.window.close(); }"; |
|
} |
|
|
|
my $start_page= |
my $start_page= |
&Apache::loncommon::start_page('New posts marked as read',undef, |
&Apache::loncommon::start_page('New posts marked as read',undef, |
Line 3748 ENDREDIR
|
Line 3804 ENDREDIR
|
my $mode='board'; |
my $mode='board'; |
my $status='OPEN'; |
my $status='OPEN'; |
my $previous=$env{'form.previous'}; |
my $previous=$env{'form.previous'}; |
if ($feedurl =~ /\.(problem|exam|quiz|assess|survey|form|library|task)$/) { |
if ($feedurl =~ /$LONCAPA::assess_re/) { |
$mode='problem'; |
$mode='problem'; |
$status=$Apache::inputtags::status[-1]; |
$status=$Apache::inputtags::status[-1]; |
} |
} |
Line 3788 ENDREDIR
|
Line 3844 ENDREDIR
|
&dewrapper(\$feedurl); |
&dewrapper(\$feedurl); |
} |
} |
my $goahead=1; |
my $goahead=1; |
if ($feedurl=~/\.(problem|exam|quiz|assess|survey|form|task)$/) { |
if ($feedurl=~/$LONCAPA::assess_re/) { |
unless ($symb) { $goahead=0; } |
unless ($symb) { $goahead=0; } |
} |
} |
if (!$goahead) { |
if (!$goahead) { |
Line 3826 ENDREDIR
|
Line 3882 ENDREDIR
|
return OK; |
return OK; |
} |
} |
} |
} |
my $options=&screen_header($feedurl,$symb); |
my $options=&screen_header($feedurl,$symb,$group); |
if ($options) { |
if ($options) { |
&mail_screen($r,$feedurl,$options,$symb,$attachmax{'text'}); |
&mail_screen($r,$feedurl,$options,$symb,$attachmax{'text'}); |
} else { |
} else { |
Line 3882 ENDREDIR
|
Line 3938 ENDREDIR
|
} |
} |
} |
} |
# Filter HTML out of message (could be nasty) |
# Filter HTML out of message (could be nasty) |
my $message=&clear_out_html($env{'form.comment'}); |
my $override; |
|
if ($env{'form.discuss'} =~ /^(?:author|question|course|policy)$/) { |
|
$override = 1; |
|
} |
|
my $message=&clear_out_html($env{'form.comment'},$override); |
|
|
# Assemble email |
# Assemble email |
my ($email,$citations)=&assemble_email($message,$prevattempts, |
my ($email,$citations)=&assemble_email($message,$prevattempts, |
Line 3892 ENDREDIR
|
Line 3952 ENDREDIR
|
my ($typestyle,%to) = &Apache::lonmsg::decide_receiver($feedurl); |
my ($typestyle,%to) = &Apache::lonmsg::decide_receiver($feedurl); |
|
|
# Actually send mail |
# Actually send mail |
my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'}, |
my ($status,$numsent)=&send_msg(&clear_out_html($env{'form.subject'}), |
undef,1), |
|
$feedurl,$email,$citations, |
$feedurl,$email,$citations, |
$attachmenturl,$usersymb,%to); |
$attachmenturl,$usersymb,%to); |
|
|
Line 3902 ENDREDIR
|
Line 3961 ENDREDIR
|
if ( ($env{'form.discuss'} ne '' |
if ( ($env{'form.discuss'} ne '' |
&& $env{'form.discuss'} !~ /^(?:author|question|course|policy)/) |
&& $env{'form.discuss'} !~ /^(?:author|question|course|policy)/) |
|| $env{'form.anondiscuss'} ne '') { |
|| $env{'form.anondiscuss'} ne '') { |
my $subject = &clear_out_html($env{'form.subject'},undef,1); |
my $subject = &clear_out_html($env{'form.subject'}); |
my $anonmode=($env{'form.discuss'} eq 'anon' || $env{'form.anondiscuss'} ); |
my $anonmode=($env{'form.discuss'} eq 'anon' || $env{'form.anondiscuss'} ); |
$typestyle.=&adddiscuss($symb,$message,$anonmode,$attachmenturl, |
$typestyle.=&adddiscuss($symb,$message,$anonmode,$attachmenturl, |
$subject); |
$subject,$group); |
$numpost++; |
$numpost++; |
} |
} |
|
|
Line 3913 ENDREDIR
|
Line 3972 ENDREDIR
|
|
|
my $blog=''; |
my $blog=''; |
if ($env{'form.blog'}) { |
if ($env{'form.blog'}) { |
my $subject = &clear_out_html($env{'form.subject'},undef,1); |
my $subject = &clear_out_html($env{'form.subject'}); |
$status.=&Apache::lonrss::addentry($env{'user.name'}, |
$status.=&Apache::lonrss::addentry($env{'user.name'}, |
$env{'user.domain'}, |
$env{'user.domain'}, |
'CourseBlog_'.$env{'request.course.id'}, |
'CourseBlog_'.$env{'request.course.id'}, |