--- loncom/interface/lonfeedback.pm	2006/12/06 19:03:37	1.229
+++ loncom/interface/lonfeedback.pm	2006/12/08 00:28:59	1.231
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Feedback
 #
-# $Id: lonfeedback.pm,v 1.229 2006/12/06 19:03:37 albertel Exp $
+# $Id: lonfeedback.pm,v 1.231 2006/12/08 00:28:59 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -107,7 +107,7 @@ sub list_discussion {
 	$crs.='_'.$env{'request.course.sec'};
     }
     $crs=~s/\_/\//g;
-    unless ($ressymb) {	$ressymb=&Apache::lonnet::symbread(); }
+    unless ($ressymb) { $ressymb=&Apache::lonnet::symbread(); }
     unless ($ressymb) { return ''; }
     $ressymb=&wrap_symb($ressymb);
     my $encsymb=&Apache::lonenc::check_encrypt($ressymb);
@@ -2710,7 +2710,7 @@ sub decide_receiver {
   my %to=();
   if ($env{'form.discuss'} eq 'author' ||$author) {
     $typestyle.='Submitting as Author Feedback<br />';
-    $feedurl=~ {^/res/($LONCAPA::domain_re)/($LONCAPA::username_re)/};
+    $feedurl=~ m{^/res/($LONCAPA::domain_re)/($LONCAPA::username_re)/};
     $to{$2.':'.$1}=1;
   }
   if ($env{'form.discuss'} eq 'question' ||$question) {
@@ -2816,10 +2816,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 +2871,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.='<br />'.&mt('Updating discussion time').': '.
         &Apache::lonnet::put('discussiontimes',\%storenewentry,
                      $env{'course.'.$env{'request.course.id'}.'.domain'},
@@ -2891,6 +2892,48 @@ sub adddiscuss {
     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
 
 sub show_preview {
@@ -3559,7 +3602,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 +3640,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'},