version 1.223, 2006/11/29 19:31:48
|
version 1.231, 2006/12/08 00:28:59
|
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 108 sub list_discussion {
|
Line 107 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) { $ressymb=&Apache::lonnet::symbread(); } |
unless ($ressymb) { return ''; } |
unless ($ressymb) { return ''; } |
$ressymb=&wrap_symb($ressymb); |
$ressymb=&wrap_symb($ressymb); |
my $encsymb=&Apache::lonenc::check_encrypt($ressymb); |
my $encsymb=&Apache::lonenc::check_encrypt($ressymb); |
Line 851 ENDDISCUSS
|
Line 850 ENDDISCUSS
|
if ($group ne '') { |
if ($group ne '') { |
$postingform .='<input type="hidden" name="group" value="'.$group.'" />'; |
$postingform .='<input type="hidden" name="group" value="'.$group.'" />'; |
} |
} |
|
my ($blockblog) = &blocking_posts('blogs'); |
|
if (!$blockblog) { |
|
$postingform .= &add_blog_checkbox(); |
|
} |
$postingform .= "</form>\n"; |
$postingform .= "</form>\n"; |
if ($outputtarget ne 'tex') { |
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); |
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) { |
Line 1556 END
|
Line 1560 END
|
if ($idx > 0) { |
if ($idx > 0) { |
my %subversions = (); |
my %subversions = (); |
&get_post_versions(\%subversions,$contrib{$idx.':subject'},1,$numoldver); |
&get_post_versions(\%subversions,$contrib{$idx.':subject'},1,$numoldver); |
$subject = &mt('Re: ')..$subversions{$numoldver}; |
$subject = &mt('Re: ').$subversions{$numoldver}; |
} |
} |
$subject = &HTML::Entities::encode($subject,'<>&"'); |
$subject = &HTML::Entities::encode($subject,'<>&"'); |
} else { |
} else { |
Line 1731 END
|
Line 1735 END
|
if (@currnewattach > 0) { |
if (@currnewattach > 0) { |
$attachnum += @currnewattach; |
$attachnum += @currnewattach; |
} |
} |
$r->print(&generate_attachments_button($postidx,$attachnum,$ressymb,$now,\@currnewattach,\@currdelold,$numoldver)); |
my ($blockblog) = &blocking_posts('blogs'); |
|
$r->print(&generate_attachments_button($postidx,$attachnum,$ressymb,$now,\@currnewattach,\@currdelold,$numoldver,'',$blockblog)); |
if ($attachnum > 0) { |
if ($attachnum > 0) { |
if (@currnewattach > 0) { |
if (@currnewattach > 0) { |
$newattachmsg .= '<br /><b>'.&mt('New attachments').'</b><br />'; |
$newattachmsg .= '<br /><b>'.&mt('New attachments').'</b><br />'; |
Line 2579 sub screen_header {
|
Line 2584 sub screen_header {
|
} |
} |
my ($blockblog) = &blocking_posts('blogs'); |
my ($blockblog) = &blocking_posts('blogs'); |
if (!$blockblog) { |
if (!$blockblog) { |
$discussoptions.='<br /><label><input type="checkbox" name="blog" /> '. |
$discussoptions.= &add_blog_checkbox(); |
&mt('Add to my public course blog').'</label>'; |
|
} |
} |
} |
} |
if ($msgoptions) { $msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/feedback.gif').'" />'.&mt('Sending Messages').'</h2>'.$msgoptions; } |
if ($msgoptions) { $msgoptions='<h2><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/feedback.gif').'" />'.&mt('Sending Messages').'</h2>'.$msgoptions; } |
Line 2706 sub decide_receiver {
|
Line 2710 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 2812 sub adddiscuss {
|
Line 2816 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 2866 sub adddiscuss {
|
Line 2871 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 2887 sub adddiscuss {
|
Line 2892 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 3078 sub process_attachments {
|
Line 3125 sub process_attachments {
|
} |
} |
|
|
sub generate_attachments_button { |
sub generate_attachments_button { |
my ($idx,$attachnum,$ressymb,$now,$currnewattach,$deloldattach,$numoldver,$mode) = @_; |
my ($idx,$attachnum,$ressymb,$now,$currnewattach,$deloldattach, |
|
$numoldver,$mode,$blockblog) = @_; |
my $origpage = $ENV{'REQUEST_URI'}; |
my $origpage = $ENV{'REQUEST_URI'}; |
my $att=$attachnum.' '.&mt("attachments"); |
my $att=$attachnum.' '.&mt("attachments"); |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
Line 3090 sub generate_attachments_button {
|
Line 3138 sub generate_attachments_button {
|
$lt{'clic'}: <input type="button" value="$att" |
$lt{'clic'}: <input type="button" value="$att" |
onClick="if (typeof(document.mailform.onsubmit)=='function') {document.mailform.onsubmit();};this.form.comment.value=escape(document.mailform.comment.value);this.form.subject.value=escape(document.mailform.subject.value); |
onClick="if (typeof(document.mailform.onsubmit)=='function') {document.mailform.onsubmit();};this.form.comment.value=escape(document.mailform.comment.value);this.form.subject.value=escape(document.mailform.subject.value); |
END |
END |
|
if (!$blockblog) { |
|
$response .= 'setblogvalue();'; |
|
} |
unless ($mode eq 'board') { |
unless ($mode eq 'board') { |
$response .= 'javascript:anonchk();'; |
$response .= 'javascript:anonchk();'; |
} |
} |
Line 3229 sub construct_attachmenturl {
|
Line 3280 sub construct_attachmenturl {
|
return $newattachmenturl; |
return $newattachmenturl; |
} |
} |
|
|
|
sub add_blog_checkbox { |
|
my ($checkstatus); |
|
if ($env{'form.blog'}) { |
|
$checkstatus = 'checked="checked"'; |
|
} |
|
my $output = ' |
|
<script type="text/javascript"> |
|
function setblogvalue() { |
|
if (document.mailform.blog.checked) { |
|
document.attachment.blog.value = 1; |
|
} else { |
|
document.attachment.blog.value = 0; |
|
} |
|
} |
|
</script><br /> |
|
<label><input type="checkbox" name="blog" '.$checkstatus.' /> '. |
|
&mt('Add to my public course blog').'</label><br />'."\n"; |
|
return $output; |
|
} |
|
|
sub has_discussion { |
sub has_discussion { |
my $resourcesref = shift; |
my $resourcesref = shift; |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
Line 3531 ENDREDIR
|
Line 3602 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 3560 ENDREDIR
|
Line 3640 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'}, |