Diff for /loncom/interface/lonwhatsnew.pm between versions 1.36 and 1.37

version 1.36, 2005/12/06 16:37:28 version 1.37, 2005/12/15 00:53:29
Line 300  sub display_actions_box() { Line 300  sub display_actions_box() {
         $timediff = time;          $timediff = time;
     }       } 
     my $starttime = $now - $timediff;      my $starttime = $now - $timediff;
       my $countunread = 1;
   
     my %headings = &Apache::lonlocal::texthash(      my %headings = &Apache::lonlocal::texthash(
                 coursediscussion =>  'Unread course discussion posts',                  coursediscussion =>  'Unread course discussion posts',
                 handgrading =>  'Problems requiring handgrading',                  handgrading =>  'Problems requiring handgrading',
                 haserrors => 'Problems with errors',                  haserrors => 'Problems with errors',
                 versionchanges => 'Resources in course with version changes '.$interval,                  versionchanges => 'Resources in course with version changes '.$interval,
                 coursenormalmail => 'New course message',                  coursenormalmail => 'New course messages',
                 coursecritmail => 'New critical messages in course',                  coursecritmail => 'New critical messages in course',
     );      );
   
Line 337  sub display_actions_box() { Line 338  sub display_actions_box() {
     }      }
   
     if ($needitems) {      if ($needitems) {
         &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,$rowColor1,$rowColor2,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime);          &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,$rowColor1,$rowColor2,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread);
     }      }
     if ($show{'coursenormalmail'}) {      if ($show{'coursenormalmail'}) {
         &getnormalmail(\@newmsgs);          &getnormalmail(\@newmsgs);
Line 365  sub display_actions_box() { Line 366  sub display_actions_box() {
             if ($displayed == $halfway) {              if ($displayed == $halfway) {
                 $r->print('</td><td width="5%">&nbsp;</td><td align="left" valign="top" width-"50%">');                  $r->print('</td><td width="5%">&nbsp;</td><td align="left" valign="top" width-"50%">');
             }              }
             &display_launcher($r,$actionitem,$checkallowed,$tabbg,$rowColor1,$rowColor2,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,$interval);              &display_launcher($r,$actionitem,$checkallowed,$tabbg,$rowColor1,$rowColor2,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,$interval,$countunread);
             $displayed ++;               $displayed ++; 
         }          }
     }      }
Line 481  sub display_launcher { Line 482  sub display_launcher {
     my ($r,$action,$checkallowed,$tabbg,$rowColor1,$rowColor2,$show,      my ($r,$action,$checkallowed,$tabbg,$rowColor1,$rowColor2,$show,
         $headings,$res_title,$tograde,$ungraded,$bombs,$bombed,$changed,          $headings,$res_title,$tograde,$ungraded,$bombs,$bombed,$changed,
         $warnings,$triggered,$newdiscussions,$unread,$msgcount,$newmsgs,          $warnings,$triggered,$newdiscussions,$unread,$msgcount,$newmsgs,
                                        $critmsgcount,$critmsgs,$interval) = @_;                            $critmsgcount,$critmsgs,$interval,$countunread) = @_;
   
     if ($$checkallowed{$action}) {      if ($$checkallowed{$action}) {
         &start_box($r,$tabbg,$show,$headings,$action);          &start_box($r,$tabbg,$show,$headings,$action);
Line 501  sub display_launcher { Line 502  sub display_launcher {
                                                         $rowColor1,$rowColor2);                                                          $rowColor1,$rowColor2);
             } elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION              } elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION
                 &display_coursediscussion($r,$newdiscussions,$unread,                  &display_coursediscussion($r,$newdiscussions,$unread,
                                              $res_title,$rowColor1,$rowColor2);                                  $countunread,$res_title,$rowColor1,$rowColor2);
             } elsif ($action eq 'coursenormalmail') { # NORMAL MESSAGES              } elsif ($action eq 'coursenormalmail') { # NORMAL MESSAGES
                 &display_coursenormalmail($r,$msgcount,$newmsgs,$rowColor1,                  &display_coursenormalmail($r,$msgcount,$newmsgs,$rowColor1,
                                                                    $rowColor2);                                                                     $rowColor2);
Line 518  sub display_launcher { Line 519  sub display_launcher {
 sub getitems {  sub getitems {
     my ($unread,$ungraded,$bombed,$triggered,$changed,$newdiscussions,      my ($unread,$ungraded,$bombed,$triggered,$changed,$newdiscussions,
         $tograde,$bombs,$warnings,$rowColor1,$rowColor2,$threshold,$cdom,$crs,          $tograde,$bombs,$warnings,$rowColor1,$rowColor2,$threshold,$cdom,$crs,
                                              $res_title,$show,$starttime) = @_;                                   $res_title,$show,$starttime,$countunread) = @_;
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     # force retrieve Resource to seed the part id cache we'll need it later      # force retrieve Resource to seed the part id cache we'll need it later
     my @allres=$navmap->retrieveResources(undef,sub {if ($_[0]->is_problem) { $_[0]->parts();} return 1;});      my @allres=$navmap->retrieveResources(undef,
                        sub {if ($_[0]->is_problem) { $_[0]->parts();} return 1;});
     my %lastreadtime;      my %lastreadtime;
     my %resourcetracker;      my %resourcetracker;
       my $discussiontime;
   
 # Resource version changes  # Resource version changes
     if ($$show{'versionchanges'}) {      if ($$show{'versionchanges'}) {
         &checkversions($cdom,$crs,$navmap,$changed,$starttime);          &checkversions($cdom,$crs,$navmap,$changed,$starttime);
     }      }
   
     if ($$show{'coursediscussions'}) {         if ($$show{'coursediscussion'}) {   
         my %lastread = &Apache::lonnet::dump('nohist_'.          my %lastread = &Apache::lonnet::dump('nohist_'.
                         $env{'request.course.id'}.'_discuss',                          $env{'request.course.id'}.'_discuss',
                         $env{'user.domain'},$env{'user.name'},'lastread');                          $env{'user.domain'},$env{'user.name'},'lastread');
Line 559  sub getitems { Line 562  sub getitems {
         $$res_title{$symb} = $title;          $$res_title{$symb} = $title;
         my $ressymb = $resource->wrap_symb();          my $ressymb = $resource->wrap_symb();
   
 # Check for unread discussion postings  # Check if there are unread discussion postings
         if ($$show{'coursediscussion'}) {          if ($$show{'coursediscussion'}) {
             &check_discussions($cdom,$crs,$resource,$symb,$ressymb,$title,              &check_discussions($cdom,$crs,$resource,$symb,$ressymb,$title,
                                        $newdiscussions,$unread,\%lastreadtime);                                                        $newdiscussions,$unread);
         }          }
   
 # Check for ungraded problems  # Check for ungraded problems
Line 585  sub getitems { Line 588  sub getitems {
         }          }
   
     }      }
       my $hasdiscussion = @{$newdiscussions};
       if ($$show{'coursediscussion'} && $hasdiscussion) { # Get time of last post; 
           $discussiontime = $navmap->{DISCUSSION_TIME};
           foreach my $ressymb (@{$newdiscussions}) {
               $$unread{$ressymb}{'lastpost'} = $$discussiontime{$ressymb};
           }
           if ($countunread) { #Get count of unread postings for each resource 
               my $discussiondata = $navmap->get_discussion_data();
               foreach my $ressymb (@{$newdiscussions}) {
                   &get_discussions($cdom,$crs,$discussiondata,$ressymb,
                                                          $unread,\%lastreadtime);
               }
           }
       }
 }  }
   
 sub check_discussions {  sub check_discussions {
     my ($cdom,$crs,$resource,$symb,$ressymb,$title,$newdiscussions,$unread,      my ($cdom,$crs,$resource,$symb,$ressymb,$title,$newdiscussions,
                                                            $lastreadtime) = @_;                                                                     $unread) = @_;
 # Check for unread discussion postings  
     if ($resource->hasDiscussion()) {      if ($resource->hasDiscussion()) {
         my $prevread = 0;  
         my $unreadcount = 0;  
         %{$$unread{$ressymb}} = ();          %{$$unread{$ressymb}} = ();
         $$unread{$ressymb}{'title'} = $title;          $$unread{$ressymb}{'title'} = $title;
         $$unread{$ressymb}{'symb'} = $symb;          $$unread{$ressymb}{'symb'} = $symb;
         if (defined($$lastreadtime{$ressymb})) {          push(@{$newdiscussions}, $ressymb);
             $prevread = $$lastreadtime{$ressymb};      }
   }
   
   sub get_discussions {
       my ($cdom,$crs,$discussiondata,$ressymb,$unread,$lastreadtime) = @_;
       my $prevread = 0;
       my $unreadcount = 0;
       if (defined($$lastreadtime{$ressymb})) {
           $prevread = $$lastreadtime{$ressymb};
       }
       my $version = $$discussiondata{'version:'.$ressymb};
       if ($version) {
           my $hiddenflag = 0;
           my $deletedflag = 0;
           my ($hidden,$deleted);
           for (my $id=$version; $id>0; $id--) {
               my $vkeys=$$discussiondata{$id.':keys:'.$ressymb};
               my @keys=split(/:/,$vkeys);
               if (grep/^hidden$/,@keys) {
                   unless ($hiddenflag) {
                       $hidden = $$discussiondata{$id.':'.$ressymb.':hidden'};
                       $hiddenflag = 1;
                   }
               }
               if (grep/^deleted$/,@keys) {
                   unless ($deletedflag) {
                       $deleted = $$discussiondata{$id.':'.$ressymb.':deleted'};
                       $deletedflag = 1;
                   }
               }
               if ($deletedflag && $hiddenflag) {
                   last;
               }
         }          }
         my %contrib = &Apache::lonnet::restore($ressymb,          for (my $id=$version; $id>0; $id--) {
                                          $env{'request.course.id'},$cdom,$crs);              unless (($hidden =~/\.$id\./) || ($deleted =~/\.$id\./)) {
         if ($contrib{'version'}) {                  if ($prevread <$$discussiondata{$id.':'.$ressymb.':timestamp'}) {
             for (my $id=1;$id<=$contrib{'version'};$id++) {                      unless((exists($$discussiondata{$id.':'.$ressymb.':hidden'})) ||
                 unless (($contrib{'hidden'}=~/\.$id\./) ||                            (exists($$discussiondata{$id.':'.$ressymb.':deleted'}))) {
                         ($contrib{'deleted'}=~/\.$id\./)) {  
                     if ($prevread <$contrib{$id.':timestamp'}) {  
                         $$unread{$ressymb}{$unreadcount} = $id.': '.$contrib{$id.':subject'};  
                         $unreadcount ++;                          $unreadcount ++;
                           $$unread{$ressymb}{$unreadcount} = $id.': '.
                                    $$discussiondata{$id.':'.$ressymb.':subject'};
                     }                      }
                 }                  }
             }              }
         }          }
         if ($unreadcount) { push(@{$newdiscussions}, $ressymb); }          $$unread{$ressymb}{'unreadcount'} = $unreadcount;
     }      }
 }  }
   
   
 sub check_handgraded {  sub check_handgraded {
     my ($resource,$symb,$title,$cdom,$cnum,$ungraded,$tograde) = @_;      my ($resource,$symb,$title,$cdom,$cnum,$ungraded,$tograde) = @_;
     if ($resource->is_problem()) {      if ($resource->is_problem()) {
Line 1072  sub display_versionchanges { Line 1119  sub display_versionchanges {
 }  }
     
 sub display_coursediscussion {  sub display_coursediscussion {
     my ($r,$newdiscussions,$unread,$res_title,$rowColor1,$rowColor2) = @_;      my ($r,$newdiscussions,$unread,$countunread,$res_title,$rowColor1,
                                                                 $rowColor2) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                 'loca' => 'Location',                  'loca' => 'Location',
                 'type' => 'Type',                  'type' => 'Type',
                 'numn' => 'Number of new posts',                  'numn' => 'Number of new posts',
                 'noun' => 'No unread posts in course discussions',                  'noun' => 'No unread posts in course discussions',
                   'tmlp' => 'Time of last post', 
     );      );
     my $rowColor;      my $rowColor;
     if (@{$newdiscussions} > 0) {      if (@{$newdiscussions} > 0) {
         $r->print('<tr bgcolor="#cccccc"><td><b><small>'.$lt{'loca'}.          $r->print('<tr bgcolor="#cccccc"><td><b><small>'.$lt{'loca'}.
                   '</small></b></td><td><b><small>'.$lt{'type'}.                    '</small></b></td><td><b><small>'.$lt{'type'}.
                   '</small></b><td align="right"><b><small>'.$lt{'numn'}.                    '</small></b>');
                   '</small></b></td></tr>');          if ($countunread) {
               $r->print('<td><b><small>'.$lt{'tmlp'}.'</small></b></td>'.
                         '<td align="right"><b><small>'.$lt{'numn'}.
                         '</small></b></td>');
           } else {
               $r->print('<td align="right"><b><small>'.$lt{'tmlp'}.
                            '</small></b></td>');
           }
           $r->print("</tr>\n");
         @{$newdiscussions} = sort { &cmp_title($a,$b,$res_title) }          @{$newdiscussions} = sort { &cmp_title($a,$b,$res_title) }
                                                             @{$newdiscussions};                                                              @{$newdiscussions};
         my $rowNum = 0;          my $rowNum = 0;
Line 1095  sub display_coursediscussion { Line 1152  sub display_coursediscussion {
             if ($feedurl =~ /bulletinboard/) {              if ($feedurl =~ /bulletinboard/) {
                 $type = 'Bulletin Board';                  $type = 'Bulletin Board';
             }              }
             my $unreadnum = keys(%{$$unread{$ressymb}});              if ($rowNum %2 == 1) {
             $unreadnum = $unreadnum - 2;                  $rowColor = $rowColor1;
             if ($unreadnum > 0) {              } else {
                 if ($rowNum %2 == 1) {                  $rowColor = $rowColor2;
                     $rowColor = $rowColor1;  
                 } else {  
                     $rowColor = $rowColor2;  
                 }  
                 $r->print('<tr bgcolor="'.$rowColor.'"><td><small><a href="'.$feedurl.'?symb='.$$unread{$ressymb}{symb}.'">'.$forum_title.'</a>&nbsp;</td><td><small>'.$type.'</small></td><td align="right">'.$unreadnum.'&nbsp;</td></tr>');  
                 $rowNum ++;  
             }              }
               my $lastpost = &Apache::lonnavmaps::timeToHumanString(
                                                  $$unread{$ressymb}{'lastpost'});
               $r->print('<tr bgcolor="'.$rowColor.'"><td><small><a href="'.$feedurl.'?symb='.$$unread{$ressymb}{symb}.'">'.$forum_title.'</a>&nbsp;</td><td><small>'.$type.'&nbsp;</small></td>');
               if ($countunread) {
                   my $unreadnum = $$unread{$ressymb}{'unreadcount'};
                   $r->print('<td><small>'.$lastpost.'<small></td><td align="right">'.
                             '<small>',$unreadnum.'&nbsp;</small></td>');
               } else {
                   $r->print('<td align="right"><small>'.$lastpost.'</small></td>');
               }
               $r->print("</tr>\n");
               $rowNum ++;
         }          }
     } else {      } else {
         $r->print('<tr><td bgcolor="#ffffff"><br><center>&nbsp;<i><b><small>'.          $r->print('<tr><td bgcolor="#ffffff"><br><center>&nbsp;<i><b><small>'.

Removed from v.1.36  
changed lines
  Added in v.1.37


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>