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

version 1.47, 2009/02/26 16:17:30 version 1.56, 2010/12/03 22:00:28
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # Created Nov. 14, 2002 by Jeremy Bowers  
   
 package Apache::lonquickgrades;  package Apache::lonquickgrades;
   
Line 62  sub real_handler { Line 61  sub real_handler {
     &Apache::loncommon::no_cache($r);      &Apache::loncommon::no_cache($r);
     $r->send_http_header;      $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 =       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'));
       my $notshowTotals=
           $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)) {  
         my $requrl = $r->uri;  
         $env{'user.error.msg'} = "$requrl:bre:0:0:Navamp initialization failed.";  
         return HTTP_NOT_ACCEPTABLE;  
     }  
   
     # Keep this hash in sync with %statusIconMap in lonnavmaps; they  
     # should match color/icon  
     my $res = $navmap->firstResource(); # temp resource to access constants  
    
     # Header  
     my $title = "Grading and Statistics";#$showPoints ? "Points Display" : "Completed Problems Display";      my $title = "Grading and Statistics";#$showPoints ? "Points Display" : "Completed Problems Display";
     my $brcrum = [{href=>"/adm/quickgrades",text => "Points Display"}];      my $brcrum = [{href=>"/adm/quickgrades",text => "Points Display"}];
     $r->print(&Apache::loncommon::start_page($title,undef,      $r->print(&Apache::loncommon::start_page($title,undef,
                                             {'bread_crumbs' => $brcrum})                                              {'bread_crumbs' => $brcrum})
              );               );
   
     if (!$showPoints && !$notshowSPRSlink ) {      &startGradeScreen($r,'quick');
         $r->print('<p>'  
                  .&mt('This screen shows how many problems (or problem parts) you have completed'      $r->rflush();
                      .', and how many you have not yet done.'  
                      .' You can also look at [_1]a detailed score sheet[_2].'  #    my $uname='korte';
                      ,'<a href="/adm/studentcalc">','</a>')  #    my $udom='gerd';
                  .'</p>');  
       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;
   
     $r->print('<p class="LC_info">'.&mt('This may take a few moments to display.').'</p>');  }
   
     $r->rflush();  sub startGradeScreen {
       my ($r,$mode)=@_;
   
     # End navmap using boilerplate      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 'externalnototals')
         || ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'categories'));
       my $notshowTotals=
           $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'externalnototals';
       my $showCategories=
           $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'categories';
   
       my $allowed_to_view =  &Apache::lonnet::allowed('vgr',$env{'request.course.id'});
       my $allowed_to_edit =  &Apache::lonnet::allowed('mgr',$env{'request.course.id'});
   
       if ($allowed_to_view) {
          $r->print('<div id="LC_head_subbox">');
          if ($notshowTotals)  { $r->print ('&nbsp;'.&mt('Students do not see total points.').'&nbsp;'); }
          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>');
       }
   
   
       $r->print("\n".'<ul class="LC_TabContentBigger" id="main">');
       $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) || ($allowed_to_view)) {
          $r->print("\n".'<li'.($mode eq 'spreadsheet'?' class="active"':'').'><a href="/adm/'.($allowed_to_view?'classcalc':'studentcalc').'"><b>'.
                                                                    &mt('Spreadsheet').'</b></a></li>');
       }
       $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;">');
   }
   
   sub endGradeScreen {
      my ($r)=@_;
      $r->print('</div></div></div>');
   }
   
   
   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 215  sub real_handler { Line 272  sub real_handler {
         }          }
         $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 230  sub real_handler { Line 293  sub real_handler {
     $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 / ".&mt('Total').'</td>'      $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 250  sub real_handler { Line 322  sub real_handler {
             if ($total > 0) {              if ($total > 0) {
                 my $ratio;                  my $ratio;
                 $ratio = $correct / $total;                  $ratio = $correct / $total;
                 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.';">');
                                   
Line 262  sub real_handler { Line 334  sub real_handler {
     $r->print('<td valign="top">'      $r->print('<td valign="top">'
                              .$thisIndent                               .$thisIndent
                              .'<span class="LC_nobreak">'                               .'<span class="LC_nobreak">'
                              .$correct.' / '.$attempted.' / '.$total                               .$correct.' / '.$attempted.($notshowTotals?'':' / '.$total)
                              .'</span></td>'                               .'</span></td>'
                              .&Apache::loncommon::end_data_table_row()                               .&Apache::loncommon::end_data_table_row()
                     );                      );
Line 270  sub real_handler { Line 342  sub real_handler {
     $r->print('<td valign="top">'      $r->print('<td valign="top">'
                              .$thisIndent                               .$thisIndent
                              .'<span class="LC_nobreak">'                               .'<span class="LC_nobreak">'
                              .$correct.' / '.$total                               .$correct.($notshowTotals?'':' / '.$total)
                              .'</span></td>'                               .'</span></td>'
                              .&Apache::loncommon::end_data_table_row());                               .&Apache::loncommon::end_data_table_row());
  }   }
Line 291  sub real_handler { Line 363  sub real_handler {
                  .&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;  }
   
   #
   # Outputting category-based grades.
   #
   
   sub outputCategories {
   
       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.47  
changed lines
  Added in v.1.56


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