[LON-CAPA-cvs] cvs: loncom /interface lonfeedback.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Tue, 25 May 2004 22:16:06 -0000


This is a MIME encoded message

--raeburn1085523366
Content-Type: text/plain

raeburn		Tue May 25 18:16:06 2004 EDT

  Modified files:              
    /loncom/interface	lonfeedback.pm 
  Log:
  Interface changes. User can toggle two settings:
  1. display all posts/only new posts
  2. new posts considered read when (a) users marks as read, or (b) automatically, following
  display.
  Settings for specific discussion override 'global' user preferences.  If no global or local preferences have been set, default is to display all posts, and require user to iclick a link to mark new posts as read.
  
  
--raeburn1085523366
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20040525181606.txt"

Index: loncom/interface/lonfeedback.pm
diff -u loncom/interface/lonfeedback.pm:1.83 loncom/interface/lonfeedback.pm:1.84
--- loncom/interface/lonfeedback.pm:1.83	Tue May 11 06:42:41 2004
+++ loncom/interface/lonfeedback.pm	Tue May 25 18:16:05 2004
@@ -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.84 2004/05/25 22:16:05 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -43,6 +43,8 @@
 	  || $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 +70,11 @@
     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 +86,30 @@
     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 +133,7 @@
     my @replies=();
     my %alldiscussion=();
     my %notshown = ();
+    my %newitem = ();
     my $maxdepth=0;
 
     my $target='';
@@ -124,17 +143,19 @@
     }
     
     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 +273,16 @@
                     if ($showonlyunread && $prevread > $posttime) {
                         $notshown{$idx} = 1;
                     } else {
-                        $discussionitems[$idx]='<p><table border="0" width="100%"><tr>';
                         if ($prevread > 0 && $prevread <= $posttime) {
-                            $discussionitems[$idx] .= '<td align="left" bgcolor="#FFFFFF"><font color="#FF0000">NEW</font></td>';
+                            $newitem{$idx} = 1;
+                            $discussionitems[$idx] .= '
+                             <p><table border="0" width="100%">
+                              <tr><td align="left"><font color="#FF0000"><b>NEW</b></font></td>';
+                        } else {
+                            $newitem{$idx} = 0;
+                            $discussionitems[$idx] .= '
+                             <p><table border="0" width="100%">
+                              <tr><td align="left">&nbsp;</td>';
                         }
                         $discussionitems[$idx] .= '<td align ="left">&nbsp;&nbsp;'.
                             '<b>'.$subject.'</b>&nbsp;&nbsp;'.
@@ -268,31 +296,83 @@
     }
 
     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.='<table bgcolor="#AAAAAA" cellpadding="2" cellspacing="2" border="0">';
-	if ($visible>2) {
-	    my $colspan=$maxdepth+1;
-	    $discussion.='<tr><td bgcolor="DDDDBB" colspan="'.$colspan.'">'.
-            '<table border="0" width="100%" bgcolor="#DDDDBB"><tr><td align="left">'.
-            '<a href="/adm/feedback?threadedon='.$ressymb.'">'.&mt('Threaded View').'</a>&nbsp;&nbsp;'.
-            '<a href="/adm/feedback?threadedoff='.$ressymb.'">'.&mt('Chronological View').'</a>&nbsp;&nbsp;</td>'.
-            '<td align="right"><a href="/adm/feedback?';
-            if ($showonlyunread) {
-                $discussion .= 'allposts='.$ressymb;
-                if ($newpostsflag) {
-                    $discussion .= '&previous='.$prevread;
-                }
-                $discussion .='">'.&mt('Show all posts').'?';
+	my $colspan=$maxdepth+1;
+        $discussion .= '<tr bgcolor="#FFFFFF"><td colspan="'.$colspan.'" valign="top">'.
+        '<table border="0" bgcolor="#FFFFFF" width="100%" cellspacing="2" cellpadding="2">'.
+        '<tr><td align="left"><b>'.$lt{'cuse'}.'</b></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td align="right"><b>'.$lt{'chgt'}.'</b></td></tr>'.
+        '<tr><td>'.$lt{'disa'}.':&nbsp;<i>'.$currdisp.'</i></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td align="right"><a href="'.$displink.'">'.$dispchange.'</a></td></tr>'.
+        '<tr><td>'.$lt{'npce'}.':&nbsp;<i>'.$currmark.'</i></td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td align="right"><a href="'.$marklink.'">'.$markchange.'</a></td></tr>'.
+        '</table></td></tr>'.
+        '<tr><td bgcolor="#DDDDBB" colspan="'.$colspan.'">'.
+        '<table border="0" width="100%" bgcolor="#DDDDBB"><tr>';
+        if ($visible>2) {
+	    $discussion.='<td align="left">'.
+            '<a href="/adm/feedback?threadedon='.$ressymb;
+            if ($newpostsflag) {
+                $discussion .= '&previous='.$prevread;
+            }
+            $discussion .='">'.&mt('Threaded View').'</a>&nbsp;&nbsp;'.
+            '<a href="/adm/feedback?threadedoff='.$ressymb;
+            if ($newpostsflag) {
+                $discussion .= '&previous='.$prevread;
+            }
+            $discussion .='">'.&mt('Chronological View').'</a>&nbsp;&nbsp;</td>';
+	} 
+        if ($newpostsflag) {
+            if (!$markondisp) {
+                $discussion .='<td align="right"><a href="/adm/feedback?markread='.$ressymb.'">'.&mt('Mark new posts as read').'</a>&nbsp;&nbsp;';
             } else {
-                $discussion .= 'onlyunread='.$ressymb;
-                if ($newpostsflag) {
-                    $discussion .= '&previous='.$prevread;
-                }
-                $discussion .= '">'.&mt('Show only unread posts').'?';
+                $discussion .= '<td>&nbsp;</td>';
             }
-            $discussion .= '</a>&nbsp;&nbsp;</td></tr></table></td></tr>';
-	}
+        } else {
+            $discussion .= '<td>&nbsp;</td>';
+        }
+        $discussion .= '</tr></table></td></tr>';
+
         my $numhidden = keys %notshown;
         if ($numhidden > 0) {
             my $colspan = $maxdepth+1;
@@ -313,7 +393,7 @@
 		    $discussion.='<td>&nbsp;&nbsp;&nbsp;</td>';
 	        }
 	        my $colspan=$maxdepth-$thisdepth+1;
-                $discussion.='<td  bgcolor="#CCCCCC" colspan="'.$colspan.'">'.
+                $discussion.='<td  bgcolor="'.$bgcols[$newitem{$alldiscussion{$_}}].'" colspan="'.$colspan.'">'.
                              $discussionitems[$alldiscussion{$_}].
 	                     '</td></tr>';
 	    }
@@ -813,28 +893,73 @@
 # --------------------------- Get query string for limited number of parameters
 
    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
-         ['hide','unhide','deldisc','postdata','preview','replydisc','threadedon','threadedoff','onlyunread','allposts','previous']);
+         ['hide','unhide','deldisc','postdata','preview','replydisc','threadedon','threadedoff','onlyunread','allposts','previous','markread','markonread','markondisp']);
+
+  if (($ENV{'form.markondisp'}) || ($ENV{'form.markonread'})) {
+# ---------------------- Modify setting for identification of 'NEW' posts in this discussion
 
-  if (($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'})) {
+      &Apache::loncommon::content_type($r,'text/html');
+      $r->send_http_header;
+      my $symb=$ENV{'form.markondisp'}?$ENV{'form.markondisp'}:$ENV{'form.markonread'};
+      my $ressymb = $symb;
+      my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
+      unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
+          $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
+      }
+                                                                                          
+      my %discinfo = ();
+      my $lastkey = $ressymb.'_lastread';
+      my $ondispkey = $ressymb.'_markondisp';
+      if ($ENV{'form.markondisp'}) {
+          $discinfo{$lastkey} = time;
+          $discinfo{$ondispkey} = 1;
+      } elsif ($ENV{'form.markonread'}) {
+          if ( defined($ENV{'previous'}) ) {
+              $discinfo{$lastkey} = $ENV{'previous'};
+          }
+          $discinfo{$ondispkey} = 0;
+      }
+      &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
+      if ($ENV{'form.markondisp'}) {
+          &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0');
+      } else {
+          &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0','',$ENV{'form.previous'});
+      }
+      return OK;
+  } elsif (($ENV{'form.allposts'}) || ($ENV{'form.onlyunread'})) {
 # ----------------------------------------------------------------- Modify display setting for this discussion 
       &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;
       my $symb=$ENV{'form.allposts'}?$ENV{'form.allposts'}:$ENV{'form.onlyunread'};
+      my $ressymb = $symb;
       my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
-      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 %readinghash = ();
-                                                                                 
-      if ($contrib{'version'}) {
-          if ($ENV{'form.allposts'}) {
-              $readinghash{$symb.'_showonlyunread'} = 0;
-          } elsif ($ENV{'form.onlyunread'}) {
-              $readinghash{$symb.'_showonlyunread'} = 1;
-          }
-          &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%readinghash,$ENV{'user.domain'},$ENV{'user.name'});
+      unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
+          $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
+      }
+      my %discinfo = ();
+      if ($ENV{'form.allposts'}) {
+          $discinfo{$ressymb.'_showonlyunread'} = 0;
+      } elsif ($ENV{'form.onlyunread'}) {
+          $discinfo{$ressymb.'_showonlyunread'} = 1;
+      }
+      &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
+      &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed display status').'<br />','0','0','',$ENV{'form.previous'});
+      return OK;
+  } elsif ($ENV{'form.markread'}) {
+# ----------------------------------------------------------------- Mark new posts as read
+      &Apache::loncommon::content_type($r,'text/html');
+      $r->send_http_header;
+      my $symb=$ENV{'form.markread'};
+      my $ressymb = $symb;
+      my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb);
+      unless ($ressymb =~ m|bulletin___\d+___adm/wrapper|) {
+          $ressymb=~s|(bulletin___\d+___)|$1adm/wrapper|;
       }
-      &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed reading status').'<br />','0','0','',$ENV{'form.previous'});
+      my %discinfo = ();
+      my $lastkey = $ressymb.'_lastread';
+      $discinfo{$lastkey} = time;
+      &Apache::lonnet::put('nohist_'.$ENV{'request.course.id'}.'_discuss',\%discinfo,$ENV{'user.domain'},$ENV{'user.name'});
+      &redirect_back($r,&Apache::lonnet::clutter($url),&mt('Changed reading status').'<br />','0','0');
       return OK;
   } elsif (($ENV{'form.hide'}) || ($ENV{'form.unhide'})) {
 # ----------------------------------------------------------------- Hide/unhide

--raeburn1085523366--