Diff for /loncom/interface/lonquickgrades.pm between versions 1.49.6.5.2.1 and 1.51

version 1.49.6.5.2.1, 2020/05/25 16:45:31 version 1.51, 2010/11/29 22:37:26
Line 29 Line 29
 package Apache::lonquickgrades;  package Apache::lonquickgrades;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http);
 use POSIX;  use POSIX;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::grades;  use Apache::grades;
 use Apache::lonuserstate;  
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
Line 58  sub real_handler { Line 57  sub real_handler {
         return OK;          return OK;
     }      }
   
     my $showPoints =      # Send header, don't cache this page
         $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'standard';      &Apache::loncommon::no_cache($r);
       $r->send_http_header;
     my $reinitresult;  
   
     unless (&Apache::lonnet::allowed('mgr')) {  
         # Check for critical messages and redirect if present.  
         my ($redirect,$url) = &Apache::loncommon::critical_redirect(300,'grades');  
         if ($redirect) {  
             &Apache::loncommon::content_type($r,'text/html');  
             $r->header_out(Location => $url);  
             return REDIRECT;  
         }  
   
         # Check if course needs to be re-initialized  
         my $loncaparev = $r->dir_config('lonVersion');  
         ($reinitresult,my @reinit) = &Apache::loncommon::needs_coursereinit($loncaparev);  
   
         if ($reinitresult eq 'switch') {  
             &Apache::loncommon::content_type($r,'text/html');  
             $r->send_http_header;  
             $r->print(&Apache::loncommon::check_release_result(@reinit));  
             return OK;  
         } elsif ($reinitresult eq 'update') {  
             my $cid = $env{'request.course.id'};  
             my $cnum = $env{'course.'.$cid.'.num'};  
             my $cdom = $env{'course.'.$cid.'.domain'};  
             &Apache::loncommon::content_type($r,'text/html');  
             $r->send_http_header;  
             &startpage($r,$showPoints);  
             my $preamble = '<div id="LC_update_'.$cid.'" class="LC_info">'.  
                            '<br />'.  
                            &mt('Your course session is being updated because of recent changes by course personnel.').  
                            ' '.&mt('Please be patient.').'<br /></div>'.  
                            '<div style="padding:0;clear:both;margin:0;border:0"></div>';  
             my %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble);  
             &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Updating course'));  
             $r->rflush();  
             my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum");  
             &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished'));  
             &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);  
             my $closure = <<ENDCLOSE;  
 <script type="text/javascript">  
 // <![CDATA[  
 \$("#LC_update_$cid").hide('slow');  
 // ]]>  
 </script>  
 ENDCLOSE  
             if ($ferr) {  
                 $r->print($closure.&Apache::loncommon::end_page());  
                 my $requrl = $r->uri;  
                 $env{'user.error.msg'}="$requrl:bre:0:0:Course not initialized";  
                 $env{'user.reinit'} = 1;  
                 return HTTP_NOT_ACCEPTABLE;  
             } else {  
                $r->print($closure);  
             }  
         }  
     }  
   
     unless ($reinitresult eq 'update') {  
         # Send header, don't cache this page  
         &Apache::loncommon::no_cache($r);  
         $r->send_http_header;  
         &startpage($r,$showPoints);  
     }  
     $r->rflush();  
   
       my $showPoints = 
           $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'standard';
     my $notshowSPRSlink =       my $notshowSPRSlink = 
         (($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'external')          (($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'external')
       || ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'externalnototals'));        || ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'externalnototals'));
     my $notshowTotals=      my $notshowTotals=
         $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'externalnototals';          $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'externalnototals';
       my $showCategories=
           $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'categories';
   
     # Create the nav map  
     my $navmap = Apache::lonnavmaps::navmap->new();  
   
     if (!defined($navmap)) {      # Header
         my $requrl = $r->uri;      my $title = "Grading and Statistics";#$showPoints ? "Points Display" : "Completed Problems Display";
         $env{'user.error.msg'} = "$requrl:bre:0:0:Navamp initialization failed.";      my $brcrum = [{href=>"/adm/quickgrades",text => "Points Display"}];
         return HTTP_NOT_ACCEPTABLE;      $r->print(&Apache::loncommon::start_page($title,undef,
     }                                              {'bread_crumbs' => $brcrum})
                );
   
     # Keep this hash in sync with %statusIconMap in lonnavmaps; they  
     # should match color/icon  
     my $res = $navmap->firstResource(); # temp resource to access constants  
    
     if (!$showPoints && !$notshowSPRSlink ) {      if (!$showPoints && !$notshowSPRSlink ) {
         $r->print('<p>'          $r->print('<p>'
                  .&mt('This screen shows how many problems (or problem parts) you have completed'                   .&mt('This screen shows how many problems (or problem parts) you have completed'
Line 157  ENDCLOSE Line 91  ENDCLOSE
     $r->print('<p class="LC_info">'.&mt('This may take a few moments to display.').'</p>');      $r->print('<p class="LC_info">'.&mt('This may take a few moments to display.').'</p>');
   
     $r->rflush();      $r->rflush();
       my ($navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)=&getData($showPoints);
       &outputTable($r,$showPoints,$notshowTotals,
                    $navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted);
       return OK;
   
   }
   
   sub getData {
   
     # End navmap using boilerplate      my ($showPoints)=@_;
   
       # Create the nav map
       my $navmap = Apache::lonnavmaps::navmap->new();
   
       my $res = $navmap->firstResource(); # temp resource to access constants
   
     my $iterator = $navmap->getIterator(undef, undef, undef, 1);      my $iterator = $navmap->getIterator(undef, undef, undef, 1);
     my $depth = 1;      my $depth = 1;
Line 273  ENDCLOSE Line 220  ENDCLOSE
         }          }
         $curRes = $iterator->next();          $curRes = $iterator->next();
     }      }
       return ($navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted);
   }
   
     $iterator = $navmap->getIterator(undef, undef, undef, 1);  #
     $depth = 1;  # Outputting everything.
     $iterator->next(); # ignore first BEGIN_MAP  #
     $curRes = $iterator->next();  
   sub outputTable {
   
       my ($r,$showPoints,$notshowTotals,
              $navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)=@_;
   
     my @start = (255, 255, 192);      my @start = (255, 255, 192);
     my @end   = (0, 192, 0);      my @end   = (0, 192, 0);
Line 290  ENDCLOSE Line 243  ENDCLOSE
              .'<th>'.&mt('Folder').'</th>');               .'<th>'.&mt('Folder').'</th>');
     my $title = &mt($showPoints ? "Points Scored" : "Done");      my $title = &mt($showPoints ? "Points Scored" : "Done");
     if ($totalAttempted) {      if ($totalAttempted) {
  $title .= " / " . &mt("Attempted");          $title .= " / " . &mt("Attempted");
     }      }
     $r->print("<th>$title".($notshowTotals?'':" / ".&mt('Total')).'</th>'      $r->print("<th>$title".($notshowTotals?'':" / ".&mt('Total')).'</th>'
              .&Apache::loncommon::end_data_table_header_row());               .&Apache::loncommon::end_data_table_header_row());
   #
   # Output of folder scores
   #
   
       my $iterator = $navmap->getIterator(undef, undef, undef, 1);
       my $depth = 1;
       $iterator->next(); # ignore first BEGIN_MAP
       my $curRes = $iterator->next();
   
     while ($depth > 0) {      while ($depth > 0) {
         if ($curRes == $iterator->BEGIN_MAP()) {$depth++;}          if ($curRes == $iterator->BEGIN_MAP()) {$depth++;}
         if ($curRes == $iterator->END_MAP()) { $depth--; }          if ($curRes == $iterator->END_MAP()) { $depth--; }
Line 341  ENDCLOSE Line 303  ENDCLOSE
     # If there were any problems at the top level, print an extra "catchall"      # If there were any problems at the top level, print an extra "catchall"
     if ($topLevelParts > 0) {      if ($topLevelParts > 0) {
         my $ratio = $topLevelRight / $topLevelParts;          my $ratio = $topLevelRight / $topLevelParts;
         my $color = &mixColors(\@start, \@end, $ratio);          my $color = mixColors(\@start, \@end, $ratio);
         $r->print(&Apache::loncommon::start_data_table_row()          $r->print(&Apache::loncommon::start_data_table_row()
                  .'<td style="background-color:'.$color.';">');                   .'<td style="background-color:'.$color.';">');
         $r->print(&mt("Problems Not Contained In A Folder")."</td><td>");          $r->print(&mt("Problems Not Contained In A Folder")."</td><td>");
Line 349  ENDCLOSE Line 311  ENDCLOSE
                  .&Apache::loncommon::end_data_table_row());                   .&Apache::loncommon::end_data_table_row());
     }      }
   
   #
   # show totals (if applicable), close table
   #
     if ($showPoints) {      if ($showPoints) {
  my $maxHelpLink = &Apache::loncommon::help_open_topic("Quick_Grades_Possibly_Correct");          my $maxHelpLink = Apache::loncommon::help_open_topic("Quick_Grades_Possibly_Correct");
   
  $title = $showPoints ? "Points" : "Parts Done";          $title = $showPoints ? "Points" : "Parts Done";
  my $totaltitle = $showPoints ? &mt("Awarded Total Points") : &mt("Total Parts Done");          my $totaltitle = $showPoints ? &mt("Awarded Total Points") : &mt("Total Parts Done");
  $r->print(&Apache::loncommon::start_data_table_row()          $r->print(&Apache::loncommon::start_data_table_row()
                  .'<td colspan="2" align="right">'.$totaltitle.': <b>'.$totalRight.'</b><br />');                   .'<td colspan="2" align="right">'.$totaltitle.': <b>'.$totalRight.'</b><br />');
  $r->print(&mt('Max Possible To Date')." $maxHelpLink: <b>$totalPossible</b><br />");          $r->print(&mt('Max Possible To Date')." $maxHelpLink: <b>$totalPossible</b><br />");
  $title = $showPoints ? "Points" : "Parts";          $title = $showPoints ? "Points" : "Parts";
  $r->print(&mt("Total $title In Course").': <b>'.$totalParts.'</b></td>'          $r->print(&mt("Total $title In Course").': <b>'.$totalParts.'</b></td>'
                  .&Apache::loncommon::end_data_table_row());                   .&Apache::loncommon::end_data_table_row());
     }      }
   
     $r->print(&Apache::loncommon::end_data_table()      $r->print(&Apache::loncommon::end_data_table()
              .&Apache::loncommon::end_page());               .&Apache::loncommon::end_page());
   
     return OK;  
 }  
   
 sub startpage {  
     my ($r,$showPoints) = @_;  
     my $title = "Grading and Statistics";#$showPoints ? "Points Display" : "Completed Problems Display";  
     my $brcrum = [{href=>"/adm/quickgrades",text => "Points Display"}];  
     $r->print(&Apache::loncommon::start_page($title,undef,  
                                             {'bread_crumbs' => $brcrum})  
              );  
 }  }
   
 # Pass this two refs to arrays for the start and end color, and a number  # Pass this two refs to arrays for the start and end color, and a number
 # from 0 to 1 for how much of the latter you want to mix in. It will  # from 0 to 1 for how much of the latter you want to mix in. It will
 # return a string ready to show ("#FFC309");  # return a string ready to show ("#FFC309");
   
 sub mixColors {  sub mixColors {
     my $start = shift;      my $start = shift;
     my $end = shift;      my $end = shift;

Removed from v.1.49.6.5.2.1  
changed lines
  Added in v.1.51


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