--- loncom/interface/lonquickgrades.pm 2021/12/14 02:44:05 1.49.6.8 +++ loncom/interface/lonquickgrades.pm 2023/10/06 20:36:59 1.49.6.8.2.4 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Quick Student Grades Display # -# $Id: lonquickgrades.pm,v 1.49.6.8 2021/12/14 02:44:05 raeburn Exp $ +# $Id: lonquickgrades.pm,v 1.49.6.8.2.4 2023/10/06 20:36:59 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -85,7 +85,7 @@ sub real_handler { unless ($cangrade) { # Check for critical messages and redirect if present. - my ($redirect,$url) = &Apache::loncommon::critical_redirect(300); + my ($redirect,$url) = &Apache::loncommon::critical_redirect(300,'grades'); if ($redirect) { &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => $url); @@ -101,10 +101,14 @@ sub real_handler { $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'}; + } + my ($cid,$cnum,$cdom); + if ($reinitresult) { + $cid = $env{'request.course.id'}; + $cnum = $env{'course.'.$cid.'.num'}; + $cdom = $env{'course.'.$cid.'.domain'}; + } + if (($reinitresult eq 'main') || ($reinitresult eq 'both')) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; &startpage($r,$showPoints); @@ -136,9 +140,19 @@ ENDCLOSE $r->print($closure); } } + if (($reinitresult eq 'supp') || ($reinitresult eq 'both')) { + my $possdel; + if ($reinitresult eq 'supp') { + $possdel = 1; + } + my ($supplemental,$refs_updated) = &Apache::loncommon::get_supplemental($cnum,$cdom,'',$possdel); + unless ($refs_updated) { + &Apache::loncommon::set_supp_httprefs($cnum,$cdom,$supplemental); + } + } } - unless ($reinitresult eq 'update') { + unless (($reinitresult eq 'main') || ($reinitresult eq 'both')) { # Send header, don't cache this page &Apache::loncommon::no_cache($r); $r->send_http_header; @@ -193,9 +207,32 @@ ENDCLOSE $topLevelRight,$topLevelAttempted) = &getData($showPoints,$uname,$udom); if (ref($navmap)) { - &outputTable($r,$showPoints,$notshowTotals,$navmap,$totalParts,$totalPossible, - $totalRight,$totalAttempted,$topLevelParts,$topLevelRight, - $topLevelAttempted); + my $nostdtotals; + if ($showPoints) { + if ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'standard') { + my $hidetotals = $env{'course.'.$env{'request.course.id'}.'.hidetotals'}; + if ($hidetotals eq 'all') { + $nostdtotals = 1; + } elsif ($hidetotals ne '') { + my $usec; + if (($uname eq $env{'user.name'}) && ($env{'user.domain'})) { + $usec = $env{'request.user.section'}; + } elsif ($cangrade) { + $usec = &Apache::lonnet::getsection($udom,$uname,$env{'request.course.id'}); + } + if ($usec ne '') { + my %secnototals; + map { $secnototals{$_} = 1; } split(/,/,$hidetotals); + if ($secnototals{$usec}) { + $nostdtotals = 1; + } + } + } + } + } + &outputTable($r,$showPoints,$notshowTotals,$nostdtotals,$navmap, + $totalParts,$totalPossible,$totalRight,$totalAttempted, + $topLevelParts,$topLevelRight,$topLevelAttempted); } else { if ($cangrade) { $r->print("\n\n"); } my $requrl = $r->uri; @@ -274,7 +311,7 @@ sub getData { if ($curRes == $iterator->BEGIN_MAP()) {$depth++;} if ($curRes == $iterator->END_MAP()) { $depth--; } - if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) + if (ref($curRes) && $curRes->is_gradable() && !$curRes->randomout) { # Get number of correct, incorrect parts my $parts = $curRes->parts(); @@ -370,8 +407,8 @@ sub getData { sub outputTable { - my ($r,$showPoints,$notshowTotals,$navmap,$totalParts,$totalPossible,$totalRight, - $totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)=@_; + my ($r,$showPoints,$notshowTotals,$nostdtotals,$navmap,$totalParts,$totalPossible, + $totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)=@_; my @start = (255, 255, 192); my @end = (0, 192, 0); @@ -456,16 +493,18 @@ sub outputTable { # show totals (if applicable), close table # if ($showPoints) { - my $maxHelpLink = &Apache::loncommon::help_open_topic("Quick_Grades_Possibly_Correct"); + unless ($nostdtotals) { + my $maxHelpLink = &Apache::loncommon::help_open_topic("Quick_Grades_Possibly_Correct"); - $title = $showPoints ? "Points" : "Parts Done"; - my $totaltitle = $showPoints ? &mt("Awarded Total Points") : &mt("Total Parts Done"); - $r->print(&Apache::loncommon::start_data_table_row() - .''.$totaltitle.': '.$totalRight.'
'); - $r->print(&mt('Max Possible To Date')." $maxHelpLink: $totalPossible
"); - $title = $showPoints ? "Points" : "Parts"; - $r->print(&mt("Total $title In Course").': '.$totalParts.'' - .&Apache::loncommon::end_data_table_row()); + $title = $showPoints ? "Points" : "Parts Done"; + my $totaltitle = $showPoints ? &mt("Awarded Total Points") : &mt("Total Parts Done"); + $r->print(&Apache::loncommon::start_data_table_row() + .''.$totaltitle.': '.$totalRight.'
'); + $r->print(&mt('Max Possible To Date')." $maxHelpLink: $totalPossible
"); + $title = $showPoints ? "Points" : "Parts"; + $r->print(&mt("Total $title In Course").': '.$totalParts.'' + .&Apache::loncommon::end_data_table_row()); + } } $r->print(&Apache::loncommon::end_data_table()); @@ -486,6 +525,8 @@ sub startGradeScreen { my $showPoints = $env{'course.'.$env{'request.course.id'}.'.grading'} eq 'standard'; + my $hidetotals = + $env{'course.'.$env{'request.course.id'}.'.hidetotals'}; my $notshowSPRSlink = (($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'external') || ($env{'course.'.$env{'request.course.id'}.'.grading'} eq 'externalnototals')); @@ -511,6 +552,20 @@ sub startGradeScreen { push(@notes,&mt('Students do not see total points.')) if ($notshowTotals); push(@notes,&mt('Students do not see link to spreadsheet.')) if ($notshowSPRSlink); push(@notes,&mt('Students will see points based on problem weights.')) if ($showPoints); + if (($showPoints) && ($hidetotals ne '')) { + if ($hidetotals eq 'all') { + push(@notes,&mt('Students do not see course totals.')); + } else { + my @secs = split(/,/,$hidetotals); + if (@secs == 1) { + push(@notes,&mt('Students in section [_1] do not see course totals.', + $hidetotals)); + } elsif (@secs > 1) { + push(@notes,&mt('Students in sections [_1] do not see course totals.', + join(', ',@secs))); + } + } + } push(@notes,&mt('Students will see link to spreadsheet.')) if ($showSPRSlink); push(@notes,&Apache::lonhtmlcommon::coursepreflink(&mt('Grade display settings'),'grading')); $r->print(&Apache::loncommon::head_subbox(join('  ',@notes)));