--- loncom/interface/lonfeedback.pm 2006/12/06 19:06:40 1.230
+++ loncom/interface/lonfeedback.pm 2006/12/09 16:07:34 1.234
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Feedback
#
-# $Id: lonfeedback.pm,v 1.230 2006/12/06 19:06:40 albertel Exp $
+# $Id: lonfeedback.pm,v 1.234 2006/12/09 16:07:34 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -74,6 +74,9 @@ sub discussion_visible {
sub list_discussion {
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'};
if (defined($env{'form.export'})) {
if($env{'form.export'}) {
@@ -85,7 +88,12 @@ sub list_discussion {
$outputtarget = 'export';
}
}
- if (not &discussion_visible($status)) { return ''; }
+ if (not &discussion_visible($status)) {
+ if ($mode ne 'board') {
+ &Apache::lonenc::check_encrypt(\$ressymb);
+ return &send_message_link($ressymb);
+ }
+ }
if ($group ne '' && $mode eq 'board') {
if (&check_group_priv($group,'vgb') ne 'ok') {
return '';
@@ -94,7 +102,11 @@ sub list_discussion {
my ($blocked,$blocktext) = &blocking_posts('boards',1);
if ($blocked) {
- return $blocktext;
+ &Apache::lonenc::check_encrypt(\$ressymb);
+ if ($mode ne 'board') {
+ $blocktext.='
'.&send_message_link($ressymb);
+ }
+ return $blocktext;
}
my @bgcols = ("#cccccc","#eeeeee");
@@ -107,9 +119,6 @@ sub list_discussion {
$crs.='_'.$env{'request.course.sec'};
}
$crs=~s/\_/\//g;
- unless ($ressymb) { $ressymb=&Apache::lonnet::symbread(); }
- unless ($ressymb) { return ''; }
- $ressymb=&wrap_symb($ressymb);
my $encsymb=&Apache::lonenc::check_encrypt($ressymb);
my $viewgrades=(&Apache::lonnet::allowed('vgr',$crs)
&& ($ressymb=~/\.(problem|exam|quiz|assess|survey|form|task)$/));
@@ -722,26 +731,45 @@ END
}
}
} else {
- $discussion.='
'.
@@ -806,7 +834,7 @@ sub blocking_posts {
if ($showstatus) {
my $showstart = &Apache::lonlocal::locallocaltime($startblock);
my $showend = &Apache::lonlocal::locallocaltime($endblock);
- $output = &mt('Discussion postings will not be viewable for resources in this course between [_1] and [_2] because communication is being blocked.',$showstart, $showend).' '.
+ $output = ' '.&mt('Discussion postings will not be viewable for resources in this course between [_1] and [_2] because communication is being blocked.',$showstart, $showend).' '.
&Apache::loncommon::build_block_table($startblock,$endblock,
\%setters);
}
@@ -1728,6 +1756,7 @@ END
if ($env{'form.editdisc'} || $env{'form.replydisc'}) {
my $now = time;
my $ressymb = $symb;
+ &Apache::lonenc::check_encrypt(\$ressymb);
my $postidx = '';
if ($env{'form.editdisc'}) {
$postidx = $idx;
@@ -2471,7 +2500,7 @@ sub redirect_back {
$feedurl .= '?group='.$group.$refarg;
}
}
- $feedurl=&Apache::lonenc::check_encrypt($feedurl);
+ &Apache::lonenc::check_encrypt(\$feedurl);
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');
my %onload;
if ($env{'environment.remote'} ne 'off') {
@@ -2528,7 +2557,7 @@ sub no_redirect_back {
my $end_page = &Apache::loncommon::end_page();
- $feedurl=&Apache::lonenc::check_encrypt($feedurl);
+ &Apache::lonenc::check_encrypt(\$feedurl);
my $logo=&Apache::loncommon::lonhttpdurl('/adm/lonIcons/lonlogos.gif');
$r->print (< '.
- &mt('Contribution to course discussion of resource');
+ $discussoptions=' '.
- ''.&mt('Change Screenname').'';
- }
+ &mt('Anonymous contribution to course discussion of resource').
+ ' ('.&mt('name only visible to course faculty').') '.
+ ''.&mt('Change Screenname').'';
}
my ($blockblog) = &blocking_posts('blogs');
if (!$blockblog) {
@@ -2816,10 +2842,11 @@ sub adddiscuss {
$contrib{'anonymous'}='true';
}
if (($symb) && ($email)) {
+ my $now = time;
if ($env{'form.editdisc'}) {
$contrib{'ip'}=$ENV{'REMOTE_ADDR'};
$contrib{'host'}=$Apache::lonnet::perlvar{'lonHostID'};
- $contrib{'timestamp'} = time;
+ $contrib{'timestamp'} = $now;
$contrib{'history'} = '';
my $numoldver = 0;
my ($oldsymb,$oldidx)=split(/\:\:\:/,$env{'form.editdisc'});
@@ -2870,7 +2897,7 @@ sub adddiscuss {
$env{'course.'.$env{'request.course.id'}.'.domain'},
$env{'course.'.$env{'request.course.id'}.'.num'});
}
- my %storenewentry=($symb => time);
+ my %storenewentry=($symb => $now);
$status.=' '.&mt('Updating discussion time').': '.
&Apache::lonnet::put('discussiontimes',\%storenewentry,
$env{'course.'.$env{'request.course.id'}.'.domain'},
@@ -2891,6 +2918,48 @@ sub adddiscuss {
return $status.' ';
}
+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
sub show_preview {
@@ -3559,7 +3628,16 @@ ENDREDIR
if ( ($env{'form.hide'}) && (!$seeid) ) {
$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'},
$env{'course.'.$env{'request.course.id'}.'.domain'},
$env{'course.'.$env{'request.course.id'}.'.num'});
@@ -3588,6 +3666,11 @@ ENDREDIR
my %contrib=&Apache::lonnet::restore($symb,$env{'request.course.id'},
$env{'course.'.$env{'request.course.id'}.'.domain'},
$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.");
&Apache::lonnet::store(\%newhash,$symb,$env{'request.course.id'},
$env{'course.'.$env{'request.course.id'}.'.domain'},
@@ -3698,13 +3781,22 @@ ENDREDIR
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
# Unable to give feedback
+ &Apache::lonenc::check_encrypt(\$feedurl);
&no_redirect_back($r,$feedurl);
return OK;
}
# --------------------------------------------------- Print login screen header
unless ($env{'form.sendit'}) {
+ &Apache::lonenc::check_encrypt(\$feedurl);
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
+ if (($env{'form.replydisc'}) || ($env{'form.editdisc'})) {
+ my ($blocked,$blocktext) = &blocking_posts('boards',1);
+ if ($blocked) {
+ $r->print(&blocked_reply_or_edit($blocktext));
+ return OK;
+ }
+ }
my $options=&screen_header($feedurl,$symb);
if ($options) {
&mail_screen($r,$feedurl,$options);
@@ -3796,6 +3888,15 @@ ENDREDIR
&redirect_back($r,$feedurl,$typestyle,$numsent,$numpost,$blog,$status,$env{'form.previous'},undef,undef,undef,undef,undef,undef,$group);
}
return OK;
+}
+
+sub blocked_reply_or_edit {
+ my ($blocktext) = @_;
+ return
+ &Apache::loncommon::start_page('Resource Feedback and Discussion').
+ $blocktext.'
'.
+ &mt('Back to previous page').
+ &Apache::loncommon::end_page();
}
sub wrap_symb {
|