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

raeburn raeburn@source.lon-capa.org
Sat, 20 Dec 2008 01:39:47 -0000


raeburn		Sat Dec 20 01:39:47 2008 EDT

  Modified files:              
    /loncom/interface	lonwhatsnew.pm 
  Log:
  - Check that navmap object could be created to avoid ISE when retrieving information for handgrading, bombs, version changes, problems above threshold and new discussion posts.
  - For each of these items included for display, show a warning and a link to the roles page to re-select the course if no navmap object available.
  
  
Index: loncom/interface/lonwhatsnew.pm
diff -u loncom/interface/lonwhatsnew.pm:1.83 loncom/interface/lonwhatsnew.pm:1.84
--- loncom/interface/lonwhatsnew.pm:1.83	Fri Dec 12 15:48:05 2008
+++ loncom/interface/lonwhatsnew.pm	Sat Dec 20 01:39:47 2008
@@ -1,5 +1,5 @@
 #
-# $Id: lonwhatsnew.pm,v 1.83 2008/12/12 15:48:05 raeburn Exp $
+# $Id: lonwhatsnew.pm,v 1.84 2008/12/20 01:39:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -490,8 +490,9 @@
         }
     }
 
+    my $itemserror;
     if ($needitems) {
-        &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread);
+        $itemserror = &getitems(\%unread,\%ungraded,\%bombed,\%triggered,\%changed,\@newdiscussions,\@tograde,\@bombs,\@warnings,\%threshold,$cdom,$crs,\%res_title,\%show,$starttime,$countunread);
     }
     if ($show{'coursenormalmail'}) {
         $msgcount = &getnormalmail(\@newmsgs);
@@ -533,7 +534,7 @@
             if ($displayed == $halfway) {
                 $r->print('</td><td>&nbsp;</td><td class="LC_right_col" >');
             }
-            &display_launcher($r,$actionitem,$refpage,$checkallowed,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,\%interval,$countunread,\%expired,$expirecount,\%activated,$activecount,$crstype);
+            &display_launcher($r,$actionitem,$refpage,$checkallowed,\%show,\%headings,\%res_title,\@tograde,\%ungraded,\@bombs,\%bombed,\%changed,\@warnings,\%triggered,\@newdiscussions,\%unread,$msgcount,\@newmsgs,$critmsgcount,\@critmsgs,\%interval,$countunread,\%expired,$expirecount,\%activated,$activecount,$crstype,$itemserror);
             $displayed ++; 
         }
     }
@@ -786,23 +787,23 @@
         $tograde,$ungraded,$bombs,$bombed,$changed,$warnings,$triggered,
         $newdiscussions,$unread,$msgcount,$newmsgs,$critmsgcount,$critmsgs,
         $interval,$countunread,$expired,$expirecount,$activated,$activecount,
-        $crstype) = @_;
+        $crstype,$itemserror) = @_;
 
     if ($$checkallowed{$action}) {
         &start_box($r,$show,$headings,$action,$refpage,$action);
         if ($$show{$action}) {
             if ($action eq 'handgrading') {    # UNGRADED ITEMS
-                &display_handgrade($r,$tograde,$ungraded);
+                &display_handgrade($r,$tograde,$ungraded,$itemserror);
             } elsif ($action eq 'haserrors') { # BOMBS
-                &display_haserrors($r,$bombs,$bombed,$res_title);
+                &display_haserrors($r,$bombs,$bombed,$res_title,$itemserror);
             } elsif ($action eq 'versionchanges') { # VERSION CHANGES
-                &display_versionchanges($r,$changed,$res_title,$interval->{'versions'});
+                &display_versionchanges($r,$changed,$res_title,$interval->{'versions'},$itemserror);
             } elsif ($action eq 'abovethreshold') { # DEGDIFF/AV. TRIES TRIGGERS
                 &display_abovethreshold($r,$refpage,$warnings,$triggered,
-					$res_title);
+					$res_title,$itemserror);
             } elsif ($action eq 'coursediscussion') { # UNREAD COURSE DISCUSSION
                 &display_coursediscussion($r,$newdiscussions,$unread,
-                                $countunread,$res_title);
+                                $countunread,$res_title,$itemserror);
             } elsif ($action eq 'coursenormalmail') { # NORMAL MESSAGES
                 &display_coursenormalmail($r,$msgcount,$newmsgs);
             } elsif ($action eq 'coursecritmail') { # CRITICAL MESSAGES
@@ -825,6 +826,10 @@
         $tograde,$bombs,$warnings,$threshold,$cdom,$crs,$res_title,$show,
         $starttime,$countunread) = @_;
     my $navmap = Apache::lonnavmaps::navmap->new();
+    if (!defined($navmap)) {
+        my $itemserror = '<span class="LC_warning">'.&mt('An error occurred retrieving information about the course.').'<br />'.&mt('It is recommended that you [_1]re-select the course[_2].','<a href="/adm/roles">','</a>').'</span>';
+        return $itemserror;
+    }
     # 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;});
@@ -883,6 +888,7 @@
         }
 
     }
+    return; 
 }
 
 sub check_discussions {
@@ -1446,7 +1452,7 @@
 }
 
 sub display_handgrade {
-    my ($r,$tograde,$ungraded) = @_;
+    my ($r,$tograde,$ungraded,$itemserror) = @_;
     my %lt = &Apache::lonlocal::texthash(
                         'prna' => 'Problem Name',
                         'nmun' => 'Number ungraded',
@@ -1469,13 +1475,15 @@
             } 
             $r->print('<tr'.$css_class.'><td><a href="'.$linkurl.'">'.$$ungraded{$res}{title}.'</a></td><td class="LC_right_item">'.$$ungraded{$res}{count}.'</td></tr>');
         }
+    } elsif ($itemserror) {
+        $r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>');
     } else {
         $r->print('<tr class="LC_empty_row"><td>'.$lt{'nopr'}.'</td></tr>');
     }
 }
 
 sub display_haserrors {
-    my ($r,$bombs,$bombed,$res_title) = @_;
+    my ($r,$bombs,$bombed,$res_title,$itemserror) = @_;
     my $bombnum = 0;
     my %lt = &Apache::lonlocal::texthash(
                                    reso => 'Resource',
@@ -1494,6 +1502,8 @@
                       '</td><td class="LC_right_item">'.
                       $$bombed{$bomb}{errorcount}.'</td></tr>');
         }
+    } elsif ($itemserror) {
+        $r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>');
     } else {
         $r->print('<tr class="LC_empty_row"><td>'.$lt{'noer'}.'</td></tr>');
     }
@@ -1501,7 +1511,7 @@
 }
 
 sub display_abovethreshold {
-    my ($r,$refpage,$warnings,$triggered,$res_title) = @_;
+    my ($r,$refpage,$warnings,$triggered,$res_title,$itemserror) = @_;
     my %lt = &Apache::lonlocal::texthash(
                  reso => 'Resource',
                  part => 'Part',
@@ -1557,13 +1567,15 @@
             }
         }
         $r->print('<tr class="LC_info_row"><td colspan="7" class="LC_right_item"><br /><input type="submit" name="counters" value="'.$lt{'rese'}.'" /></td></tr></form>');
+    } elsif ($itemserror) {
+        $r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>');
     } else {
         $r->print('<tr class="LC_empty_row"><td>'.$lt{'nopr'}.'</td></tr>');
     }
 }
 
 sub display_versionchanges {
-    my ($r,$changed,$res_title,$interval) = @_;
+    my ($r,$changed,$res_title,$interval,$itemserror) = @_;
     my %lt = &Apache::lonlocal::texthash(
         'reso' => 'Resource',
         'revd' => 'Last revised',
@@ -1590,6 +1602,8 @@
                       $$changed{$item}{'current'}.'</td><td>'.
                       $$changed{$item}{'version'}.'</td></tr>');
         }
+    } elsif ($itemserror) {
+        $r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>');
     } else {
         $r->print('<tr class="LC_empty_row"><td>'
                  .&mt('No '.$interval).'</td></tr>');
@@ -1655,7 +1669,7 @@
 }
  
 sub display_coursediscussion {
-    my ($r,$newdiscussions,$unread,$countunread,$res_title) = @_;
+    my ($r,$newdiscussions,$unread,$countunread,$res_title,$itemserror) = @_;
     my $lctype = lc(&Apache::loncommon::course_type());
     my %lt = &Apache::lonlocal::texthash(
                 'loca' => 'Location',
@@ -1703,6 +1717,8 @@
             }
             $r->print("</tr>\n");
         }
+    } elsif ($itemserror) {
+        $r->print('<tr class="LC_empty_row"><td>'.$itemserror.'</td></tr>');
     } else {
         $r->print('<tr class="LC_empty_row"><td>'.$lt{'noun'}.'</td></tr>');
     }