version 1.283, 2009/12/22 06:14:35
|
version 1.320, 2012/01/04 20:12:40
|
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 292 sub list_discussion {
|
Line 296 sub list_discussion {
|
my $copyresult; |
my $copyresult; |
|
|
my $function = &Apache::loncommon::get_users_function(); |
my $function = &Apache::loncommon::get_users_function(); |
my $color = &Apache::loncommon::designparm($function.'.tabbg', |
|
$env{'user.domain'}); |
|
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
'cuse' => 'Current discussion settings', |
'cuse' => 'My settings for this discussion', |
'allposts' => 'All posts', |
'allposts' => 'All posts', |
'unread' => 'New posts only', |
'unread' => 'New posts only', |
'unmark' => 'Unread only', |
'unmark' => 'Unread only', |
Line 317 sub list_discussion {
|
Line 319 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 371 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 403 sub list_discussion {
|
Line 405 sub list_discussion {
|
my $manifestfilename = $tempexport.$manifest; |
my $manifestfilename = $tempexport.$manifest; |
if ($manifestfile = Apache::File->new('>'.$manifestfilename)) { |
if ($manifestfile = Apache::File->new('>'.$manifestfilename)) { |
$manifestok=1; |
$manifestok=1; |
print $manifestfile qq| |
print $manifestfile qq|<?xml version="1.0" encoding="UTF-8"?> |
<?xml version="1.0" encoding="UTF-8"?> |
|
<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1" xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2" |
<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1" xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2" |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
identifier="MANIFEST-$ressymb" xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 |
identifier="MANIFEST-$ressymb" xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 |
Line 417 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 418 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 439 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 439 imscp_v1p1.xsd http://www.imsglobal.org/
|
} |
} |
|); |
|); |
$discussion.='<form name="readchoices" method="post" action="/adm/feedback?chgreads='.$ressymb.'" >'. |
$discussion.='<form name="readchoices" method="post" action="/adm/feedback?chgreads='.$ressymb.'" >'. |
"\n".'<table class="LC_discussion">'; |
"\n".'<table width="100%" class="LC_discussion">'; |
$discussion .= &action_links_bar($colspan,$ressymb,$visible, |
$discussion .= &action_links_bar($colspan,$ressymb,$visible, |
$newpostsflag,$group, |
$newpostsflag,$group, |
$prevread,$markondisp); |
$prevread,$markondisp); |
Line 502 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 502 imscp_v1p1.xsd http://www.imsglobal.org/
|
my $thisdepth=$depth[$alldiscussion{$post}]; |
my $thisdepth=$depth[$alldiscussion{$post}]; |
if ($outputtarget ne 'tex' && $outputtarget ne 'export') { |
if ($outputtarget ne 'tex' && $outputtarget ne 'export') { |
for (1..$thisdepth) { |
for (1..$thisdepth) { |
$discussion.='<td> </td>'; |
$discussion.='<td> </td>'; |
} |
} |
} |
} |
my $colspan=$maxdepth-$thisdepth+1; |
my $colspan=$maxdepth-$thisdepth+1; |
Line 515 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 515 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 530 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 529 imscp_v1p1.xsd http://www.imsglobal.org/
|
print $manifestfile "\n". |
print $manifestfile "\n". |
'<item identifier="ITEM-'.$ressymb.'-'.$alldiscussion{$post}.'" isvisible="'. |
'<item identifier="ITEM-'.$ressymb.'-'.$alldiscussion{$post}.'" isvisible="'. |
$imsitems{$alldiscussion{$post}}{'isvisible'}.'" identifieref="RES-'.$ressymb.'-'.$alldiscussion{$post}.'">'. |
$imsitems{$alldiscussion{$post}}{'isvisible'}.'" identifieref="RES-'.$ressymb.'-'.$alldiscussion{$post}.'">'. |
'<title>'.$imsitems{$alldiscussion{$post}}{'title'}.'</title>'; |
'<title>'.$imsitems{$alldiscussion{$post}}{'title'}.'</title></item>'; |
$imsresources .= "\n". |
$imsresources .= "\n". |
'<resource identifier="RES-'.$ressymb.'-'.$alldiscussion{$post}.'" type="webcontent" href="'.$postfilename.'">'."\n". |
'<resource identifier="RES-'.$ressymb.'-'.$alldiscussion{$post}.'" type="webcontent" href="'.$postfilename.'">'."\n". |
'<file href="'.$postfilename.'">'."\n". |
'<file href="'.$postfilename.'">'."\n". |
$imsfiles{$alldiscussion{$post}}{$imsitems{$alldiscussion{$post}}{'currversion'}}."\n". |
$imsfiles{$alldiscussion{$post}}{$imsitems{$alldiscussion{$post}}{'currversion'}}.'</file>'."\n". |
'</resource>'; |
'</resource>'; |
} |
} |
my $postingfile; |
my $postingfile; |
Line 561 imscp_v1p1.xsd http://www.imsglobal.org/
|
Line 560 imscp_v1p1.xsd http://www.imsglobal.org/
|
unless ($outputtarget eq 'tex' || $outputtarget eq 'export') { |
unless ($outputtarget eq 'tex' || $outputtarget eq 'export') { |
my $colspan=$maxdepth+1; |
my $colspan=$maxdepth+1; |
$discussion .= <<END; |
$discussion .= <<END; |
<tr bgcolor="#FFFFFF"> |
<tr> |
<td colspan="$colspan" class="LC_disc_action_links_bar"> |
<td colspan="$colspan"> |
<table class="LC_disc_action_table"> |
<table width="100%"> |
<tr> |
<tr> |
<td align="left"> |
<td class="LC_disc_action_left"> |
<table border="0" cellpadding="0" cellspacing="4"> |
<font size="-1"><b>$lt{'cuse'}</b>: |
<tr> |
|
<td> |
|
<font size="-1"><b>$lt{'cuse'}</b>:</font></td> |
|
<td> </td> |
|
<td><font size="-1"> |
|
END |
END |
if ($newpostsflag) { |
if ($newpostsflag) { |
$discussion .= |
$discussion .= |
Line 588 END
|
Line 582 END
|
} |
} |
} |
} |
$discussion .= <<END; |
$discussion .= <<END; |
</font></td> |
<b><a href="$chglink">$lt{'chgt'}</a></b></font> |
<td> </td> |
|
<td align="left"> |
|
<font size="-1"><b><a href="$chglink">$lt{'chgt'}</a>?</b></font> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
</td> |
END |
END |
if ($sortposts) { |
if ($sortposts) { |
Line 603 END
|
Line 591 END
|
my %status_types = (); |
my %status_types = (); |
&sort_filter_names(\%sort_types,\%role_types,\%status_types,$crstype); |
&sort_filter_names(\%sort_types,\%role_types,\%status_types,$crstype); |
|
|
$discussion .= '<td><font size="-1"><b>'.&mt('Sorted by').'</b>: '.$sort_types{$sortposts}.'<br />'; |
$discussion .= '<td class="LC_disc_action_right"><font size="-1"><b>'.&mt('Sorted by').'</b>: '.$sort_types{$sortposts}.'<br />'; |
if (defined($env{'form.totposters'})) { |
if (defined($env{'form.totposters'})) { |
$discussion .= &mt('Posts by').':'; |
$discussion .= &mt('Posts by').':'; |
if ($totposters > 0) { |
if ($totposters > 0) { |
Line 638 END
|
Line 626 END
|
if ($filterchoice) { |
if ($filterchoice) { |
$discussion .= '<b>'.&mt('Filters').'</b>: '.$filterchoice; |
$discussion .= '<b>'.&mt('Filters').'</b>: '.$filterchoice; |
} |
} |
$discussion .= '</font></td>'; |
|
} |
} |
|
$discussion .= '</font></td>'; |
|
|
} |
} |
if ($dischash{$toggkey}) { |
if ($dischash{$toggkey}) { |
my $storebutton = &mt('Save read/unread changes'); |
my $storebutton = &mt('Save read/unread changes'); |
Line 658 END
|
Line 647 END
|
$discussion .= &action_links_bar($colspan,$ressymb,$visible, |
$discussion .= &action_links_bar($colspan,$ressymb,$visible, |
$newpostsflag,$group, |
$newpostsflag,$group, |
$prevread,$markondisp); |
$prevread,$markondisp); |
$discussion .= " |
$discussion .= "</table></form>\n"; |
</table> |
|
<br /><br /></form>\n"; |
|
} |
} |
if ($outputtarget eq 'export') { |
if ($outputtarget eq 'export') { |
if ($manifestok) { |
if ($manifestok) { |
Line 720 END
|
Line 707 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 730 END
|
Line 718 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,600); |
|
} |
|
|
|
|
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 770 sub send_message_link {
|
Line 783 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; |
} |
} |
|
|
sub action_links_bar { |
sub action_links_bar { |
my ($colspan,$ressymb,$visible,$newpostsflag,$group,$prevread,$markondisp) = @_; |
my ($colspan,$ressymb,$visible,$newpostsflag,$group,$prevread,$markondisp) = @_; |
my $discussion = '<tr><td class="LC_disc_action_links_bar" colspan="'.$colspan.'">'. |
my $discussion = '<tr><td colspan="'.$colspan.'">'. |
'<table width="100%" class="LC_disc_action_table"><tr>'. |
'<table width="100%"><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 793 sub action_links_bar {
|
Line 806 sub action_links_bar {
|
$discussion .= '&previous='.$prevread; |
$discussion .= '&previous='.$prevread; |
} |
} |
$discussion .= &group_args($group); |
$discussion .= &group_args($group); |
$discussion .='">'.&mt('Chronological View').'</a> |
$discussion .='">'.&mt('Chronological View').'</a> '; |
<a href="/adm/feedback?cmd=sortfilter&symb='.$escsymb; |
|
|
my $otherviewurl='/adm/feedback?cmd=sortfilter&symb='.$escsymb.'&inhibitmenu=yes&modal=yes'; |
if ($newpostsflag) { |
if ($newpostsflag) { |
$discussion .= '&previous='.$prevread; |
$otherviewurl .= '&previous='.$prevread; |
} |
} |
$discussion .= &group_args($group); |
$otherviewurl .= &group_args($group); |
$discussion .='">'.&mt('Sorting/Filtering options').'</a>'.(' ' x2); |
$discussion .= &Apache::loncommon::modal_link($otherviewurl,&mt('Other Views ...'),800,340); |
|
$discussion .= '<br />'; |
} |
} |
$discussion .='<a href="/adm/feedback?export='.$escsymb; |
$discussion .='<a href="/adm/feedback?export='.$escsymb; |
if ($newpostsflag) { |
if ($newpostsflag) { |
$discussion .= '&previous='.$prevread; |
$discussion .= '&previous='.$prevread; |
} |
} |
$discussion .= &group_args($group); |
$discussion .= &group_args($group); |
$discussion .= '">'.&mt('Export').'?</a> </td>'; |
$discussion .= '">'.&mt('Export').'</a></td>'; |
if ($newpostsflag) { |
if ($newpostsflag) { |
if (!$markondisp) { |
if (!$markondisp) { |
$discussion .='<td class="LC_disc_action_right"><a href="/adm/preferences?action=changediscussions'; |
$discussion .='<td class="LC_disc_action_right"><a href="/adm/preferences?action=changediscussions'; |
$discussion .= &group_args($group); |
$discussion .= &group_args($group); |
$discussion .= '">'. |
$discussion .= '">'. |
&mt('Preferences on what is marked as NEW'). |
&mt('My general preferences on what is marked as NEW'). |
'</a><br /><a href="/adm/feedback?markread=1&symb='.$escsymb; |
'</a><br /><a href="/adm/feedback?markread=1&symb='.$escsymb; |
$discussion .= &group_args($group); |
$discussion .= &group_args($group); |
$discussion .= '">'.&mt('Mark NEW posts no longer new').'</a></td>'; |
$discussion .= '">'.&mt('Mark NEW posts no longer new').'</a></td>'; |
Line 840 sub postingform_display {
|
Line 855 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 848 sub postingform_display {
|
Line 873 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 870 ENDDISCUSS
|
Line 895 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 912 sub build_posting_display {
|
Line 935 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 925 sub build_posting_display {
|
Line 961 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 955 sub build_posting_display {
|
Line 991 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 989 sub build_posting_display {
|
Line 1025 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 1016 sub build_posting_display {
|
Line 1052 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 1052 sub build_posting_display {
|
Line 1089 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 1118 sub build_posting_display {
|
Line 1143 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 1164 sub build_posting_display {
|
Line 1182 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 1244 sub build_posting_display {
|
Line 1262 sub build_posting_display {
|
unless ($$notshown{$idx} == 1) { |
unless ($$notshown{$idx} == 1) { |
if ($prevread > 0 && $prevread <= $posttime) { |
if ($prevread > 0 && $prevread <= $posttime) { |
$$newitem{$idx} = 1; |
$$newitem{$idx} = 1; |
$$discussionitems[$idx] .= ' |
$$discussionitems[$idx] .= '<font color="#FF0000"><b>'.&mt('NEW').' </b></font>'; |
<table border="0" width="100%"> |
|
<tr><td align="left"><font color="#FF0000"><b>'.&mt('NEW').'</b></font></td>'; |
|
} else { |
} else { |
$$newitem{$idx} = 0; |
$$newitem{$idx} = 0; |
$$discussionitems[$idx] .= ' |
|
<table border="0" width="100%"> |
|
<tr><td align="left"> </td>'; |
|
} |
} |
$$discussionitems[$idx] .= '<td align="left"> '. |
$$discussionitems[$idx] .= '<b>'.$subject.'</b> '. |
'<b>'.$subject.'</b> '. |
$sender.' '.$vgrlink.' ('. |
'<b>'.$sender.'</b> '.$vgrlink.' ('. |
&Apache::lonlocal::locallocaltime($posttime).')'; |
&Apache::lonlocal::locallocaltime($posttime).')</td>'; |
|
if ($$dischash{$toggkey}) { |
if ($$dischash{$toggkey}) { |
$$discussionitems[$idx].='<td align="right"> '. |
$$discussionitems[$idx].=' '.$ctlink; |
$ctlink.'</td>'; |
|
} |
} |
$$discussionitems[$idx].= '</tr></table><blockquote>'. |
$$discussionitems[$idx].= '<br /><blockquote>'. |
$message.'</blockquote>'; |
$message.'</blockquote>'; |
if ($contrib{$idx.':history'}) { |
if ($contrib{$idx.':history'}) { |
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 1397 sub get_post_contents {
|
Line 1407 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 1411 sub get_post_contents {
|
Line 1423 sub get_post_contents {
|
foreach my $key (sort(keys(%currattach))) { |
foreach my $key (sort(keys(%currattach))) { |
if ($$allattachments{$key}{'filename'} =~ m-^/uploaded/([^/]+/[^/]+)(/feedback)?(/?\d*)/([^/]+)$-) { |
if ($$allattachments{$key}{'filename'} =~ m-^/uploaded/([^/]+/[^/]+)(/feedback)?(/?\d*)/([^/]+)$-) { |
my $fname = $1.$3.'/'.$4; |
my $fname = $1.$3.'/'.$4; |
$$imsfiles{$idx}{$i} .= '<file href="'.$fname.'">'."\n"; |
$$imsfiles{$idx}{$i} .= '<file href="'.$fname.'" />'."\n"; |
$$attachtxt{$i}.= '<a href="'.$fname.'">'.$4.'</a><br />'; |
$$attachtxt{$i}.= '<a href="'.$fname.'">'.$4.'</a><br />'; |
} |
} |
} |
} |
Line 1623 END
|
Line 1635 END
|
$comment = &unescape($env{'form.comment'}); |
$comment = &unescape($env{'form.comment'}); |
&process_attachments(\@currnewattach,\@currdelold,\@keepold); |
&process_attachments(\@currnewattach,\@currdelold,\@keepold); |
} |
} |
my $latexHelp=&Apache::loncommon::helpLatexCheatsheet(undef,undef,1); |
my $latexHelp=&Apache::loncommon::helpLatexCheatsheet(undef,undef,1,($env{'form.modal'}?'popup':0)); |
my $send=&mt('Send'); |
my $send=&mt('Send'); |
my $alert = &mt('Please select a feedback type.'); |
my $alert = &mt('Please select a feedback type.'); |
my $js= <<END; |
my $js= <<END; |
Line 1665 END
|
Line 1677 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>'; |
} |
} |
|
my $header=''; |
|
unless ($env{'form.modal'}) { |
|
$header="<h2><tt>$restitle</tt></h2>"; |
|
} |
$r->print(<<END); |
$r->print(<<END); |
$start_page |
$start_page |
<h2><tt>$restitle</tt></h2> |
$header |
<form action="/adm/feedback" method="post" name="mailform" |
<form action="/adm/feedback" method="post" name="mailform" |
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 1699 END
|
Line 1729 END
|
END |
END |
} |
} |
$r->print(<<END); |
$r->print(<<END); |
$options<hr /> |
$options |
$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> |
<p> |
|
END |
END |
if ( ($env{'form.editdisc'}) || ($env{'form.replydisc'}) ) { |
if ( ($env{'form.editdisc'}) || ($env{'form.replydisc'}) ) { |
if ($env{'form.origpage'}) { |
if ($env{'form.origpage'}) { |
Line 1732 END
|
Line 1763 END
|
} |
} |
} else { |
} else { |
$r->print(<<END); |
$r->print(<<END); |
|
<p> |
$lt{'atta'} $attachmaxtext: <input type="file" name="attachment" /> |
$lt{'atta'} $attachmaxtext: <input type="file" name="attachment" /> |
</p> |
</p> |
END |
END |
Line 1786 END
|
Line 1818 END
|
} |
} |
} |
} |
$r->print(&generate_preview_button(). |
$r->print(&generate_preview_button(). |
&Apache::lonhtmlcommon::htmlareaselectactive('comment'). |
|
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
|
|
} |
} |
Line 2133 END
|
Line 2164 END
|
$start_page |
$start_page |
<form name="modifyshown" method="post" action="/adm/feedback"> |
<form name="modifyshown" method="post" action="/adm/feedback"> |
<b>$lt{'diso'}</b><br/> $lt{'prca'} |
<b>$lt{'diso'}</b><br/> $lt{'prca'} |
<br /><br /> |
<br /> |
<table border="0"> |
<table border="0"> |
<tr> |
<tr> |
<th>$lt{'soor'}</th> |
<th>$lt{'soor'}</th> |
Line 2198 $start_page
|
Line 2229 $start_page
|
</tr> |
</tr> |
</table> |
</table> |
<br /> |
<br /> |
<br /> |
<input type="hidden" name="inhibitmenu" value="$env{'form.inhibitmenu'}" /> |
|
<input type="hidden" name="modal" value="$env{'form.modal'}" /> |
<input type="hidden" name="previous" value="$previous" /> |
<input type="hidden" name="previous" value="$previous" /> |
<input type="hidden" name="applysort" value="$symb" /> |
<input type="hidden" name="applysort" value="$symb" /> |
<input type="button" name="sub" value="$lt{'stor'}" onclick="verifyFilter()" /> |
<input type="button" name="sub" value="$lt{'stor'}" onclick="verifyFilter()" /> |
Line 2235 sub print_showposters {
|
Line 2267 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 2323 END
|
Line 2355 END
|
$r->print(<<END); |
$r->print(<<END); |
<br /> |
<br /> |
<input type="hidden" name="sortposts" value="$sortposts" /> |
<input type="hidden" name="sortposts" value="$sortposts" /> |
|
<input type="hidden" name="modal" value="$env{'form.modal'}" /> |
<input type="hidden" name="userpick" value="$symb" /> |
<input type="hidden" name="userpick" value="$symb" /> |
<input type="button" name="store" value="Display posts" onclick="javascript:document.pickpostersform.submit()" /> |
<input type="button" name="store" value="Display posts" onclick="javascript:document.pickpostersform.submit()" /> |
</form> |
</form> |
Line 2396 sub fail_redirect {
|
Line 2429 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 2508 sub redirect_back {
|
Line 2541 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 2543 ENDREDIR
|
Line 2574 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 2576 ENDNOREDIRTWO
|
Line 2603 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 2625 sub screen_header {
|
Line 2652 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 2642 sub screen_header {
|
Line 2678 sub screen_header {
|
} |
} |
} |
} |
if ($msgoptions) { |
if ($msgoptions) { |
$msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/com.png').'" />' |
$msgoptions='<tr><th><img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png').'" />' |
.' '.&mt('Send Feedback').'</h2><p>'.&Apache::lonhtmlcommon::coursepreflink(&mt('Feedback Settings'),'feedback').'</p>' |
.'<br />'.&mt('Send Feedback').'<br />'.&Apache::lonhtmlcommon::coursepreflink(&mt('Feedback Settings'),'feedback').'</th>'. |
.$msgoptions; |
'<td>'.$msgoptions.'</td></tr>'; |
} |
} |
if ($discussoptions) { |
if ($discussoptions) { |
$discussoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif').'" />' |
$discussoptions='<tr><th><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif').'" alt="" />' |
.' '.&mt('Discussion Contributions').'</h2><p>'.&Apache::lonhtmlcommon::coursepreflink(&mt('Discussion Settings'),'discussion').'</p>' |
.'<br />'.&mt('Discussion Contributions').'<br />'.&Apache::lonhtmlcommon::coursepreflink(&mt('Discussion Settings'),'discussion').'</th>'. |
.$discussoptions; |
'<td>'.$discussoptions.'</td></tr>'; |
} |
} |
return $msgoptions.$discussoptions; |
return &Apache::loncommon::start_data_table().$msgoptions.$discussoptions.&Apache::loncommon::end_data_table(); |
} |
} |
|
|
sub resource_output { |
sub resource_output { |
Line 2668 sub resource_output {
|
Line 2704 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 2681 sub clear_out_html {
|
Line 2715 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 2753 sub send_msg {
|
Line 2787 sub send_msg {
|
} |
} |
} |
} |
|
|
|
# Records of number of feedback messages are kept under the "symb" called "_feedback" |
my %record=&Apache::lonnet::restore('_feedback'); |
# There are two entries within the framework of a course: |
my ($temp)=keys(%record); |
# - the URLs for which feedback was provided |
unless ($temp=~/^error\:/) { |
# - the total number of contributions |
my %newrecord=(); |
if ($sendsomething) { |
$newrecord{'resource'}=$feedurl; |
my %record=&getfeedbackrecords(); |
$newrecord{'subnumber'}=$record{'subnumber'}+1; |
my ($temp)=keys(%record); |
unless (&Apache::lonnet::cstore(\%newrecord,'_feedback') eq 'ok') { |
unless ($temp=~/^error\:/) { |
$status.='<br />'.&mt('Not registered').'<br />'; |
my %newrecord=(); |
} |
$newrecord{'resource'}=$feedurl; |
|
$newrecord{'subnumber'}=$record{'subnumber'}+1; |
|
unless (&Apache::lonnet::cstore(\%newrecord,'_feedback') eq 'ok') { |
|
$status.='<br />'.&mt('Not registered').'<br />'; |
|
} |
|
} |
} |
} |
|
|
return ($status,$sendsomething); |
return ($status,$sendsomething); |
} |
} |
|
|
|
# Routine to get the complete feedback records |
|
|
|
sub getfeedbackrecords { |
|
my ($uname,$udom,$course)=@_; |
|
unless ($uname) { $uname=$env{'user.name'}; } |
|
unless ($udom) { $udom=$env{'user.domain'}; } |
|
unless ($course) { $course=$env{'request.course.id'}; } |
|
my %record=&Apache::lonnet::restore('_feedback',$course,$udom,$uname); |
|
return %record; |
|
} |
|
|
|
# Routine to get feedback statistics |
|
|
|
sub getfeedbackstats { |
|
my %record=&getfeedbackrecords(@_); |
|
my $subnumber=$record{'subnumber'}; |
|
my $points=0; |
|
my $likes=0; |
|
foreach my $key (keys(%record)) { |
|
if ($key=~/^\d+\:points$/) { |
|
$points+=$record{$key}; |
|
} |
|
if ($key=~/^\d+\:likes$/) { |
|
$likes+=$record{$key}; |
|
} |
|
} |
|
return ($subnumber,$points,$likes); |
|
} |
|
|
|
# Store feedback credit |
|
|
|
sub storefeedbackpoints { |
|
my ($points,$uname,$udom,$course)=@_; |
|
unless ($points) { $points=0; } |
|
unless ($uname) { $uname=$env{'user.name'}; } |
|
unless ($udom) { $udom=$env{'user.domain'}; } |
|
unless ($course) { $course=$env{'request.course.id'}; } |
|
my %record=('grader_user' => $env{'user.name'}, |
|
'grader_domain' => $env{'user.domain'}, |
|
'points' => $points); |
|
return &Apache::lonnet::cstore(\%record,'_feedback'); |
|
} |
|
|
|
# Store feedback "likes" |
|
|
|
sub storefeedbacklikes { |
|
my ($likes,$uname,$udom,$course)=@_; |
|
unless ($likes) { $likes=0; } |
|
if ($likes>0) { $likes=1; } |
|
if ($likes<0) { $likes=-1; } |
|
unless ($uname) { $uname=$env{'user.name'}; } |
|
unless ($udom) { $udom=$env{'user.domain'}; } |
|
unless ($course) { $course=$env{'request.course.id'}; } |
|
my %record=('likes_user' => $env{'user.name'}, |
|
'likes_domain' => $env{'user.domain'}, |
|
'likes' => $likes); |
|
return &Apache::lonnet::cstore(\%record,'_feedback'); |
|
} |
|
|
|
|
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 2777 sub adddiscuss {
|
Line 2875 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 2930 sub show_preview {
|
Line 3035 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 2951 sub show_preview {
|
Line 3056 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 3036 END
|
Line 3142 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 3399 sub handler {
|
Line 3507 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 3450 sub handler {
|
Line 3558 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 3557 sub handler {
|
Line 3666 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 3749 ENDREDIR
|
Line 3854 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 3789 ENDREDIR
|
Line 3894 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 3827 ENDREDIR
|
Line 3932 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 3883 ENDREDIR
|
Line 3988 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 3893 ENDREDIR
|
Line 4002 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 3903 ENDREDIR
|
Line 4011 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 3914 ENDREDIR
|
Line 4022 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'}, |