--- loncom/interface/lonfeedback.pm 2004/05/11 10:42:41 1.83
+++ loncom/interface/lonfeedback.pm 2004/06/03 14:28:39 1.88
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Feedback
#
-# $Id: lonfeedback.pm,v 1.83 2004/05/11 10:42:41 raeburn Exp $
+# $Id: lonfeedback.pm,v 1.88 2004/06/03 14:28:39 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -34,7 +34,8 @@ use Apache::Constants qw(:common);
use Apache::lonmsg();
use Apache::loncommon();
use Apache::lontexconvert();
-use Apache::lonlocal;
+use Apache::lonlocal; # must not have ()
+use Apache::lonhtmlcommon();
sub list_discussion {
my ($mode,$status,$symb)=@_;
@@ -43,6 +44,8 @@ sub list_discussion {
|| $status eq 'OPEN')) {
return '';
}
+
+ my @bgcols = ("#cccccc","#eeeeee");
my $discussiononly=0;
if ($mode eq 'board') { $discussiononly=1; }
unless ($ENV{'request.course.id'}) { return ''; }
@@ -68,8 +71,11 @@ sub list_discussion {
my $lastkey = $ressymb.'_lastread';
my $showkey = $ressymb.'_showonlyunread';
my $visitkey = $ressymb.'_visit';
- my %dischash = &Apache::lonnet::get('nohist_'.$ENV{'request.course.id'}.'_discuss',[$lastkey,$showkey,$visitkey],$ENV{'user.domain'},$ENV{'user.name'});
+ my $ondispkey = $ressymb.'_markondisp';
+ my %dischash = &Apache::lonnet::get('nohist_'.$ENV{'request.course.id'}.'_discuss',[$lastkey,$showkey,$visitkey,$ondispkey],$ENV{'user.domain'},$ENV{'user.name'});
+ my %discinfo = ();
my $showonlyunread = 0;
+ my $markondisp = 0;
my $prevread = 0;
my $previous = 0;
my $visit = 0;
@@ -81,17 +87,30 @@ sub list_discussion {
if ($previous > 0) {
$prevread = $previous;
} elsif (defined($dischash{$lastkey})) {
- $prevread = $dischash{$lastkey};
+ unless ($dischash{$lastkey} eq '') {
+ $prevread = $dischash{$lastkey};
+ }
}
-# Get discussion display default setting for user
- my %userenv = &Apache::lonnet::get('environment',['discdisplay'],$ENV{'user.domain'},$ENV{'user.name'});
+# Get discussion display default settings for user
+ my %userenv = &Apache::lonnet::get('environment',['discdisplay','discmarkread'],$ENV{'user.domain'},$ENV{'user.name'});
my $discdisplay=$userenv{'discdisplay'};
if ($discdisplay eq 'unread') {
$showonlyunread = 1;
}
+ my $discmarkread=$userenv{'discmarkread'};
+ if ($discmarkread eq 'ondisp') {
+ $markondisp = 1;
+ }
+
+# Override user's default if user specified display setting for this discussion
+ if (defined($dischash{$ondispkey})) {
+ $markondisp = $dischash{$ondispkey};
+ }
+ if ($markondisp) {
+ $discinfo{$lastkey} = time;
+ }
-# Override user's default if user specified display setting for this discussion
if (defined($dischash{$showkey})) {
$showonlyunread = $dischash{$showkey};
}
@@ -115,6 +134,7 @@ sub list_discussion {
my @replies=();
my %alldiscussion=();
my %notshown = ();
+ my %newitem = ();
my $maxdepth=0;
my $target='';
@@ -124,17 +144,19 @@ sub list_discussion {
}
my $now = time;
- my %discinfo = ();
$discinfo{$visitkey} = $visit;
- $discinfo{$lastkey} = $now;
&Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
if ($contrib{'version'}) {
+ my $oldest = $contrib{'1:timestamp'};
+ if ($prevread eq '0') {
+ $prevread = $oldest-1;
+ }
for (my $id=1;$id<=$contrib{'version'};$id++) {
my $idx=$id;
my $posttime = $contrib{$idx.':timestamp'};
- if ($prevread > 0 && $prevread <= $posttime) {
+ if ($prevread <= $posttime) {
$newpostsflag = 1;
}
my $hidden=($contrib{'hidden'}=~/\.$idx\./);
@@ -252,9 +274,16 @@ sub list_discussion {
if ($showonlyunread && $prevread > $posttime) {
$notshown{$idx} = 1;
} else {
- $discussionitems[$idx]='
';
if ($prevread > 0 && $prevread <= $posttime) {
- $discussionitems[$idx] .= 'NEW | ';
+ $newitem{$idx} = 1;
+ $discussionitems[$idx] .= '
+
+ NEW | ';
+ } else {
+ $newitem{$idx} = 0;
+ $discussionitems[$idx] .= '
+
+ | ';
}
$discussionitems[$idx] .= ' '.
''.$subject.' '.
@@ -268,31 +297,83 @@ sub list_discussion {
}
my $discussion='';
+
+ my $function = &Apache::loncommon::get_users_function();
+ my $color = &Apache::loncommon::designparm($function.'.tabbg',
+ $ENV{'user.domain'});
+ my %lt = &Apache::lonlocal::texthash(
+ 'cuse' => 'Current settings for this discussion',
+ 'allposts' => 'All posts',
+ 'unread' => 'New posts only',
+ 'ondisp' => 'Once displayed',
+ 'onmark' => 'Once marked read',
+ 'disa' => 'Posts to be displayed',
+ 'npce' => 'Posts cease to be marked "NEW"',
+ 'chgt' => 'Change to ',
+ );
+
+ my $currdisp = $lt{'allposts'};
+ my $currmark = $lt{'onmark'};
+ my $dispchange = $lt{'unread'};
+ my $markchange = $lt{'ondisp'};
+ my $displink = '/adm/feedback?onlyunread='.$ressymb;
+ my $marklink = '/adm/feedback?markondisp='.$ressymb;
+
+ if ($markondisp) {
+ $currmark = $lt{'ondisp'};
+ $markchange = $lt{'onmark'};
+ $marklink = '/adm/feedback?markonread='.$ressymb;
+ if ($newpostsflag) {
+ $marklink .= '&previous='.$prevread;
+ }
+ }
+
+ if ($showonlyunread) {
+ $currdisp = $lt{'unread'};
+ $dispchange = $lt{'allposts'};
+ $displink = '/adm/feedback?allposts='.$ressymb;
+ }
+
+ if ($newpostsflag) {
+ $displink .= '&previous='.$prevread;
+ }
+
if ($visible) {
# Print the discusssion
$discussion.=' |