version 1.225, 2006/11/30 08:51:20
|
version 1.232, 2006/12/08 20:09:29
|
Line 44 use HTML::LCParser();
|
Line 44 use HTML::LCParser();
|
use Apache::lonspeller(); |
use Apache::lonspeller(); |
use Apache::longroup; |
use Apache::longroup; |
use Cwd; |
use Cwd; |
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA; |
use LONCAPA; |
|
|
sub discussion_open { |
sub discussion_open { |
Line 75 sub discussion_visible {
|
Line 74 sub discussion_visible {
|
|
|
sub list_discussion { |
sub list_discussion { |
my ($mode,$status,$ressymb,$imsextras,$group)=@_; |
my ($mode,$status,$ressymb,$imsextras,$group)=@_; |
|
unless ($ressymb) { $ressymb=&Apache::lonnet::symbread(); } |
|
unless ($ressymb) { return ''; } |
|
$ressymb=&wrap_symb($ressymb); |
my $outputtarget=$env{'form.grade_target'}; |
my $outputtarget=$env{'form.grade_target'}; |
if (defined($env{'form.export'})) { |
if (defined($env{'form.export'})) { |
if($env{'form.export'}) { |
if($env{'form.export'}) { |
Line 86 sub list_discussion {
|
Line 88 sub list_discussion {
|
$outputtarget = 'export'; |
$outputtarget = 'export'; |
} |
} |
} |
} |
if (not &discussion_visible($status)) { return ''; } |
if (not &discussion_visible($status)) { |
|
if ($mode ne 'board') { |
|
my $encsymb=&Apache::lonenc::check_encrypt($ressymb); |
|
return &send_message_link($encsymb); |
|
} |
|
} |
if ($group ne '' && $mode eq 'board') { |
if ($group ne '' && $mode eq 'board') { |
if (&check_group_priv($group,'vgb') ne 'ok') { |
if (&check_group_priv($group,'vgb') ne 'ok') { |
return ''; |
return ''; |
Line 95 sub list_discussion {
|
Line 102 sub list_discussion {
|
|
|
my ($blocked,$blocktext) = &blocking_posts('boards',1); |
my ($blocked,$blocktext) = &blocking_posts('boards',1); |
if ($blocked) { |
if ($blocked) { |
return $blocktext; |
if ($mode ne 'board') { |
|
my $encsymb=&Apache::lonenc::check_encrypt($ressymb); |
|
return $blocktext.'<br />'.&send_message_link($encsymb); |
|
} |
} |
} |
|
|
my @bgcols = ("#cccccc","#eeeeee"); |
my @bgcols = ("#cccccc","#eeeeee"); |
Line 108 sub list_discussion {
|
Line 118 sub list_discussion {
|
$crs.='_'.$env{'request.course.sec'}; |
$crs.='_'.$env{'request.course.sec'}; |
} |
} |
$crs=~s/\_/\//g; |
$crs=~s/\_/\//g; |
unless ($ressymb) { $ressymb=&Apache::lonnet::symbread(); } |
|
unless ($ressymb) { return ''; } |
|
$ressymb=&wrap_symb($ressymb); |
|
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=~/\.(problem|exam|quiz|assess|survey|form|task)$/)); |
Line 723 END
|
Line 730 END
|
} |
} |
} |
} |
} else { |
} else { |
$discussion.='<table bgcolor="#BBBBBB"><tr><td>'; |
$discussion.='<table class="LC_feedback_link"><tr><td>'; |
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') { |
if ($outputtarget ne 'tex') { |
$discussion.='<a href="/adm/feedback?replydisc='. |
$discussion.= &send_feedback_link($ressymb,$target). |
&escape($ressymb).':::" '.$target.'>'. |
'<br />'; |
'<img alt="" src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif').'" border="0" />'. |
|
&mt('Post Discussion').'</a><br />'; |
|
} |
} |
} |
} |
$discussion.='<a href="/adm/feedback?sendmessageonly=1&symb='. |
if ($outputtarget ne 'tex') { |
&escape($ressymb). |
$discussion.= &send_message_link($ressymb); |
'"><img alt="" src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/feedback.gif').'" border="0" />'. |
} |
&mt('Send Message').'</a></td></tr></table>'; |
$discussion.='</td></tr></table>'; |
} |
} |
return $discussion; |
return $discussion; |
} |
} |
|
|
|
sub send_feedback_link { |
|
my ($ressymb,$target) = @_; |
|
my $output = '<span class="LC_feedback_link">'. |
|
' <a href="/adm/feedback?replydisc='. |
|
&escape($ressymb).':::" '.$target.'>'. |
|
'<img alt="" src="'. |
|
&Apache::loncommon::lonhttpdurl('/adm/lonMisc/chat.gif'). |
|
'" border="0" />'.&mt('Post Discussion').'</a></span>'; |
|
return $output; |
|
} |
|
|
|
sub send_message_link { |
|
my ($ressymb) = @_; |
|
my $output = '<span class="LC_feedback_link">'. |
|
' <a href="/adm/feedback?sendmessageonly=1&symb='. |
|
&escape($ressymb).'"><img alt="" src="'. |
|
&Apache::loncommon::lonhttpdurl('/adm/lonMisc/feedback.gif'). |
|
'" border="0" />'.&mt('Send Message').'</a></span>'; |
|
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 bgcolor="#DDDDBB" colspan="'.$colspan.'">'. |
my $discussion = '<tr><td bgcolor="#DDDDBB" colspan="'.$colspan.'">'. |
Line 2711 sub decide_receiver {
|
Line 2737 sub decide_receiver {
|
my %to=(); |
my %to=(); |
if ($env{'form.discuss'} eq 'author' ||$author) { |
if ($env{'form.discuss'} eq 'author' ||$author) { |
$typestyle.='Submitting as Author Feedback<br />'; |
$typestyle.='Submitting as Author Feedback<br />'; |
$feedurl=~/^\/res\/(\w+)\/(\w+)\//; |
$feedurl=~ m{^/res/($LONCAPA::domain_re)/($LONCAPA::username_re)/}; |
$to{$2.':'.$1}=1; |
$to{$2.':'.$1}=1; |
} |
} |
if ($env{'form.discuss'} eq 'question' ||$question) { |
if ($env{'form.discuss'} eq 'question' ||$question) { |
Line 2817 sub adddiscuss {
|
Line 2843 sub adddiscuss {
|
$contrib{'anonymous'}='true'; |
$contrib{'anonymous'}='true'; |
} |
} |
if (($symb) && ($email)) { |
if (($symb) && ($email)) { |
|
my $now = time; |
if ($env{'form.editdisc'}) { |
if ($env{'form.editdisc'}) { |
$contrib{'ip'}=$ENV{'REMOTE_ADDR'}; |
$contrib{'ip'}=$ENV{'REMOTE_ADDR'}; |
$contrib{'host'}=$Apache::lonnet::perlvar{'lonHostID'}; |
$contrib{'host'}=$Apache::lonnet::perlvar{'lonHostID'}; |
$contrib{'timestamp'} = time; |
$contrib{'timestamp'} = $now; |
$contrib{'history'} = ''; |
$contrib{'history'} = ''; |
my $numoldver = 0; |
my $numoldver = 0; |
my ($oldsymb,$oldidx)=split(/\:\:\:/,$env{'form.editdisc'}); |
my ($oldsymb,$oldidx)=split(/\:\:\:/,$env{'form.editdisc'}); |
Line 2871 sub adddiscuss {
|
Line 2898 sub adddiscuss {
|
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
} |
} |
my %storenewentry=($symb => time); |
my %storenewentry=($symb => $now); |
$status.='<br />'.&mt('Updating discussion time').': '. |
$status.='<br />'.&mt('Updating discussion time').': '. |
&Apache::lonnet::put('discussiontimes',\%storenewentry, |
&Apache::lonnet::put('discussiontimes',\%storenewentry, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
Line 2892 sub adddiscuss {
|
Line 2919 sub adddiscuss {
|
return $status.'<br />'; |
return $status.'<br />'; |
} |
} |
|
|
|
sub get_discussion_info { |
|
my ($idx,%contrib) = @_; |
|
my $changelast = 0; |
|
my $count = 0; |
|
my $hiddenflag = 0; |
|
my $deletedflag = 0; |
|
my ($hidden,$deleted,%info,$newlastdisc); |
|
my $version = $contrib{'version'}; |
|
if ($version) { |
|
for (my $id=$version; $id>0; $id--) { |
|
my $vkeys=$contrib{$id.':keys'}; |
|
my @keys=split(/:/,$vkeys); |
|
if (grep(/^hidden$/,@keys)) { |
|
if (!$hiddenflag) { |
|
$hidden = $contrib{$id.':hidden'}; |
|
$hiddenflag = 1; |
|
} |
|
} elsif (grep(/^deleted$/,@keys)) { |
|
if (!$deletedflag) { |
|
$deleted = $contrib{$id.':deleted'}; |
|
$deletedflag = 1; |
|
} |
|
} else { |
|
if (($hidden !~/\.$id\./) && ($deleted !~/\.$id\./)) { |
|
$count++; |
|
$info{$count}{'id'} = $id; |
|
$info{$count}{'timestamp'}=$contrib{$id.':timestamp'}; |
|
} |
|
} |
|
} |
|
if ($info{'1'}{'id'} == $idx) { |
|
$changelast = 1; |
|
if ($count > 1) { |
|
$newlastdisc = $info{'2'}{'timestamp'}; |
|
} else { |
|
$newlastdisc = 0; |
|
} |
|
} |
|
} |
|
return ($changelast,$newlastdisc); |
|
} |
|
|
# ----------------------------------------------------------- Preview function |
# ----------------------------------------------------------- Preview function |
|
|
sub show_preview { |
sub show_preview { |
Line 3560 ENDREDIR
|
Line 3629 ENDREDIR
|
if ( ($env{'form.hide'}) && (!$seeid) ) { |
if ( ($env{'form.hide'}) && (!$seeid) ) { |
$newhash{'studenthidden'} = $currentstudenthidden; |
$newhash{'studenthidden'} = $currentstudenthidden; |
} |
} |
|
if ($env{'form.hide'}) { |
|
my $changelast = 0; |
|
my $newlast; |
|
($changelast,$newlast) = &get_discussion_info($idx,%contrib); |
|
if ($changelast) { |
|
&Apache::lonnet::put('discussiontimes',{$symb => $newlast}, |
|
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
|
$env{'course.'.$env{'request.course.id'}.'.num'}); |
|
} |
|
} |
&Apache::lonnet::store(\%newhash,$symb,$env{'request.course.id'}, |
&Apache::lonnet::store(\%newhash,$symb,$env{'request.course.id'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
Line 3589 ENDREDIR
|
Line 3667 ENDREDIR
|
my %contrib=&Apache::lonnet::restore($symb,$env{'request.course.id'}, |
my %contrib=&Apache::lonnet::restore($symb,$env{'request.course.id'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
$env{'course.'.$env{'request.course.id'}.'.num'}); |
|
my ($changelast,$newlast) = &get_discussion_info($idx,%contrib); |
|
if ($changelast) { |
|
&Apache::lonnet::put('discussiontimes',{$symb => $newlast}, |
|
$env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); |
|
} |
my %newhash=('deleted' => $contrib{'deleted'}.".$idx."); |
my %newhash=('deleted' => $contrib{'deleted'}.".$idx."); |
&Apache::lonnet::store(\%newhash,$symb,$env{'request.course.id'}, |
&Apache::lonnet::store(\%newhash,$symb,$env{'request.course.id'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |