Diff for /loncom/interface/lonquickgrades.pm between versions 1.101 and 1.114

version 1.101, 2011/06/04 19:49:28 version 1.114, 2018/11/13 03:59:00
Line 29 Line 29
 package Apache::lonquickgrades;  package Apache::lonquickgrades;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http REDIRECT);
 use POSIX;  use POSIX;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
Line 37  use Apache::lonnet; Line 37  use Apache::lonnet;
 use Apache::grades;  use Apache::grades;
 use Apache::loncoursedata;  use Apache::loncoursedata;
 use Apache::lonstudentassessment;  use Apache::lonstudentassessment;
   use Apache::lonuserstate;
   
   use Time::HiRes;
   use Spreadsheet::WriteExcel;
   use Spreadsheet::WriteExcel::Utility();
   #
   # Excel data
   #
   my $excel_sheet;
   my $excel_workbook;
   my $filename;
   my $format;
   my $request_aborted;
   my $header_row;
   my $cols_output;
   my %prog_state;
   
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
Line 59  sub real_handler { Line 76  sub real_handler {
         return OK;          return OK;
     }      }
   
     # Send header, don't cache this page      my $cangrade=&Apache::lonnet::allowed('mgr');
     &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')
       || ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'categories'));        || ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'categories'));
     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;
   
     my $title = "Grading and Statistics";#$showPoints ? "Points Display" : "Completed Problems Display";      unless ($cangrade) {
     my $brcrum = [{href=>"/adm/quickgrades",text => "Points Display"}];          # Check for critical messages and redirect if present.
     $r->print(&Apache::loncommon::start_page($title,undef,          my ($redirect,$url) = &Apache::loncommon::critical_redirect(300,'grades');
                                             {'bread_crumbs' => $brcrum})          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>';
               %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);
               }
           } elsif ((&Apache::loncommon::course_type() eq 'Placement') &&
                    (!$env{'request.role.adv'})) {
               my $furl = &Apache::lonpageflip::first_accessible_resource();
               &Apache::loncommon::content_type($r,'text/html');
               $r->header_out(Location => $furl);
               return REDIRECT;
           }
       }
   
       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();
   
     &startGradeScreen($r,'quick');      &startGradeScreen($r,'quick');
   
     my $cangrade=&Apache::lonnet::allowed('mgr');  
 #  #
 # Pick student  # Pick student
 #  #
Line 128  sub real_handler { Line 198  sub real_handler {
         if ($env{'form.udom'}) { $udom=$env{'form.udom'}; }          if ($env{'form.udom'}) { $udom=$env{'form.udom'}; }
         if ($env{'form.id'}) { $stdid=$env{'form.id'}; }          if ($env{'form.id'}) { $stdid=$env{'form.id'}; }
         if (($stdid) && ($udom)) {          if (($stdid) && ($udom)) {
             $uname=(&Apache::lonnet::idget($udom,$stdid))[1];              $uname=(&Apache::lonnet::idget($udom,[$stdid],'ids'))[1];
         }          }
         if (($stdid) && (!$uname)) {          if (($stdid) && (!$uname)) {
             $r->print('<p><span class="LC_warning">'.&mt("Unknown Student/Employee ID: [_1]",$stdid).'</span></p>');              $r->print('<p><span class="LC_warning">'.&mt("Unknown Student/Employee ID: [_1]",$stdid).'</span></p>');
Line 149  sub real_handler { Line 219  sub real_handler {
     }      }
     $r->rflush();      $r->rflush();
   
       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 ($navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)=      my ($navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)=
        &getData($showPoints,$uname,$udom);         &getData($showPoints,$uname,$udom);
   
Line 193  sub getAllStudentData { Line 271  sub getAllStudentData {
     }      }
 }  }
   
   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})
                );
   }
   
 sub startGradeScreen {  sub startGradeScreen {
     my ($r,$mode)=@_;      my ($r,$mode)=@_;
Line 236  sub startGradeScreen { Line 322  sub startGradeScreen {
                                                                  &mt('Statistics and Reports').'</b></a></li>');                                                                   &mt('Statistics and Reports').'</b></a></li>');
   
        $r->print("\n".'<li'.($mode eq 'chart'?' class="active"':'').'><a href="/adm/statistics?reportSelected=student_assessment"><b>'.         $r->print("\n".'<li'.($mode eq 'chart'?' class="active"':'').'><a href="/adm/statistics?reportSelected=student_assessment"><b>'.
                                                                  &mt('Assessment Overview Chart').'</b></a></li>');                                                                   &mt('Assessment Chart').'</b></a></li>');
   
     }      }
     if ($allowed_to_edit) {      if ($allowed_to_edit) {
Line 245  sub startGradeScreen { Line 331  sub startGradeScreen {
        if ($env{'form.symb'}) {         if ($env{'form.symb'}) {
           $r->print("\n".'<li'.($mode eq 'probgrading'?' class="active"':'').'><a href="/adm/grades?symb='.            $r->print("\n".'<li'.($mode eq 'probgrading'?' class="active"':'').'><a href="/adm/grades?symb='.
                                               &Apache::lonhtmlcommon::entity_encode($env{'form.symb'}).                                                &Apache::lonhtmlcommon::entity_encode($env{'form.symb'}).
                                               '&command=gradingmenu"><b>&nbsp;&nbsp;&nbsp;&nbsp;'.                                                '&amp;command=gradingmenu"><b>&nbsp;&nbsp;&nbsp;&nbsp;'.
                                               &mt('Problem Grading').'&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');                                                &mt('Problem Grading').'&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
   
        }         }
Line 259  sub endGradeScreen { Line 345  sub endGradeScreen {
    $r->print('</div></div></div>'.&Apache::loncommon::end_page());     $r->print('</div></div></div>'.&Apache::loncommon::end_page());
 }  }
   
   # -----------
   
   
   sub excel_cleanup {
       undef ($excel_sheet);
       undef ($excel_workbook);
       undef ($filename);
       undef ($format);
   }
   
   
   sub excel_initialize {
       my ($r) = @_;
   
       &excel_cleanup();
   
       # Create sheet
       ($excel_workbook,$filename,$format)=
           &Apache::loncommon::create_workbook($r);
       return if (! defined($excel_workbook));
      #
      # Add a worksheet
       my $sheetname = $env{'course.'.$env{'request.course.id'}.'.description'};
       $sheetname = &Apache::loncommon::clean_excel_name($sheetname);
       $excel_sheet = $excel_workbook->addworksheet($sheetname);
      #
      # Put the course description in the header
       $excel_sheet->write($header_row,$cols_output++,
                      $env{'course.'.$env{'request.course.id'}.'.description'},
                           $format->{'h1'});
   } 
   
   sub excel_finish {
       my ($r) = @_;
       if ($request_aborted || ! defined($excel_sheet)) {
           &excel_cleanup();
           return;
       }
       #
       # Write the excel file
       $excel_workbook->close();
       #
       # Close the progress window
       &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
       #
       # Tell the user where to get their excel file
       $r->print('<br />'.
                 '<a href="'.$filename.'">'.&mt('Your Excel spreadsheet').'</a>'."\n");
       $r->rflush();
       &excel_cleanup();
       return;
   }
   
   
   #
   # CSV data
   #
   # -----------
   
   #
   # Go through the complete course and collect data
   #
   
 sub getData {  sub getData {
   
Line 296  sub getData { Line 444  sub getData {
         if ($curRes == $iterator->BEGIN_MAP()) {$depth++;}          if ($curRes == $iterator->BEGIN_MAP()) {$depth++;}
         if ($curRes == $iterator->END_MAP()) { $depth--; }          if ($curRes == $iterator->END_MAP()) { $depth--; }
   
         if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout)          if (ref($curRes) && $curRes->is_gradable() && !$curRes->randomout && 
               ($curRes->deeplink ne 'absent'))
         {          {
             # Get number of correct, incorrect parts              # Get number of correct, incorrect parts
             my $parts = $curRes->parts();              my $parts = $curRes->parts();

Removed from v.1.101  
changed lines
  Added in v.1.114


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.