Diff for /loncom/interface/lonquickgrades.pm between versions 1.49.6.4 and 1.56

version 1.49.6.4, 2018/09/11 02:44:58 version 1.56, 2010/12/03 22:00:28
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;
     }      }
   
       # Send header, don't cache this page
       &Apache::loncommon::no_cache($r);
       $r->send_http_header;
   
     my $showPoints =      my $showPoints =
         $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'standard';          $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'standard';
       my $notshowSPRSlink =
           (($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'external')
         || ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'externalnototals'));
       my $notshowTotals=
           $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'externalnototals';
       my $showCategories=
           $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'categories';
   
     my $reinitresult;  
   
     unless (&Apache::lonnet::allowed('mgr')) {      my $title = "Grading and Statistics";#$showPoints ? "Points Display" : "Completed Problems Display";
         # Check for critical messages and redirect if present.      my $brcrum = [{href=>"/adm/quickgrades",text => "Points Display"}];
         my ($redirect,$url) = &Apache::loncommon::critical_redirect(300);      $r->print(&Apache::loncommon::start_page($title,undef,
         if ($redirect) {                                              {'bread_crumbs' => $brcrum})
             &Apache::loncommon::content_type($r,'text/html');               );
             $r->header_out(Location => $url);  
             return REDIRECT;  
         }  
   
         # Check if course needs to be re-initialized      &startGradeScreen($r,'quick');
         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>';  
             %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();      $r->rflush();
   
     my $notshowSPRSlink =   #    my $uname='korte';
   #    my $udom='gerd';
   
       my $uname;
       my $udom;
   
       my ($navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)=
          &getData($showPoints,$uname,$udom);
   
       if ($showCategories) {
          &outputCategories($r,$showPoints,$notshowTotals,
                    $navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted);
       } else {
          &outputTable($r,$showPoints,$notshowTotals,
                    $navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted);
       }
       &endGradeScreen($r);
       return OK;
   
   }
   
   sub startGradeScreen {
       my ($r,$mode)=@_;
   
       my $showPoints =
           $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'standard';
       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')
         || ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'categories'));
     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 $allowed_to_view =  &Apache::lonnet::allowed('vgr',$env{'request.course.id'});
     my $navmap = Apache::lonnavmaps::navmap->new();      my $allowed_to_edit =  &Apache::lonnet::allowed('mgr',$env{'request.course.id'});
   
     if (!defined($navmap)) {      if ($allowed_to_view) {
         my $requrl = $r->uri;         $r->print('<div id="LC_head_subbox">');
         $env{'user.error.msg'} = "$requrl:bre:0:0:Navamp initialization failed.";         if ($notshowTotals)  { $r->print ('&nbsp;'.&mt('Students do not see total points.').'&nbsp;'); }
         return HTTP_NOT_ACCEPTABLE;         if ($notshowSPRSlink){ $r->print ('&nbsp;'.&mt('Students do not see link to spreadsheet.').'&nbsp;'); }
          if ($showPoints)     { $r->print ('&nbsp;'.&mt('Students will see points based on problem weights.').'&nbsp;'); }
          if ($showCategories) { $r->print ('&nbsp;'.&mt('Students will see points based on categories.').'&nbsp;'); }
          $r->print('&nbsp;'.&Apache::lonhtmlcommon::coursepreflink(&mt('Grade display settings'),'grading').'</div>');
     }      }
   
     # Keep this hash in sync with %statusIconMap in lonnavmaps; they  
     # should match color/icon      $r->print("\n".'<ul class="LC_TabContentBigger" id="main">');
     my $res = $navmap->firstResource(); # temp resource to access constants      $r->print("\n".'<li'.($mode eq 'quick'?' class="active"':'').'><a href="/adm/quickgrades"><b>'.
                                              ($showPoints?&mt('Points'):($showCategories?&mt('Grades'):&mt('Completion'))).'</b></a></li>');
     if (!$showPoints && !$notshowSPRSlink ) {  
         $r->print('<p>'      if (!($showPoints || $notshowSPRSlink) || ($allowed_to_view)) {
                  .&mt('This screen shows how many problems (or problem parts) you have completed'         $r->print("\n".'<li'.($mode eq 'spreadsheet'?' class="active"':'').'><a href="/adm/'.($allowed_to_view?'classcalc':'studentcalc').'"><b>'.
                      .', and how many you have not yet done.'                                                                   &mt('Spreadsheet').'</b></a></li>');
                      .' You can also look at [_1]a detailed score sheet[_2].'  
                      ,'<a href="/adm/studentcalc">','</a>')  
                  .'</p>');  
     }      }
       $r->print("\n".'</ul>'."\n");
       $r->print('<div class="LC_Box" style="clear:both;margin:0;"><div id="maincoursedoc" style="margin:0 0;padding:0 0;"><div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">');
   }
   
     $r->print('<p class="LC_info">'.&mt('This may take a few moments to display.').'</p>');  sub endGradeScreen {
      my ($r)=@_;
      $r->print('</div></div></div>');
   }
   
     $r->rflush();  
   
     # End navmap using boilerplate  sub getData {
   
       my ($showPoints,$uname,$udom)=@_;
   
       &Apache::lonnet::logthis("About to call with $uname $udom");
   
       # Create the nav map
       my $navmap = Apache::lonnavmaps::navmap->new($uname,$udom);
   
       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 272  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 288  ENDCLOSE Line 293  ENDCLOSE
     $r->print(&Apache::loncommon::start_data_table()      $r->print(&Apache::loncommon::start_data_table()
              .&Apache::loncommon::start_data_table_header_row()               .&Apache::loncommon::start_data_table_header_row()
              .'<th>'.&mt('Folder').'</th>');               .'<th>'.&mt('Folder').'</th>');
     $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 355  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 363  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) = @_;  # Outputting category-based grades.
     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,  sub outputCategories {
                                             {'bread_crumbs' => $brcrum})  
              );      my ($r,$showPoints,$notshowTotals,
              $navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)=@_;
 }  }
   
 # 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.4  
changed lines
  Added in v.1.56


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.