--- loncom/interface/lonquickgrades.pm 2017/12/31 15:49:03 1.113 +++ loncom/interface/lonquickgrades.pm 2020/08/10 19:28:21 1.117 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Quick Student Grades Display # -# $Id: lonquickgrades.pm,v 1.113 2017/12/31 15:49:03 raeburn Exp $ +# $Id: lonquickgrades.pm,v 1.117 2020/08/10 19:28:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -83,6 +83,24 @@ sub real_handler { my $reinitresult; + if ($env{'request.course.id'}) { + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my ($blocked,$blocktext) = + &Apache::loncommon::blocking_status('grades',$cnum,$cdom); + if ($blocked) { + my $checkrole = "cm./$cdom/$cnum"; + if ($env{'request.course.sec'} ne '') { + $checkrole .= "/$env{'request.course.sec'}"; + } + unless ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) && + ($env{'request.role'} !~ m{^st\./$cdom/$cnum})) { + &grades_blocked($r,$blocktext,$showPoints); + return OK; + } + } + } + unless ($cangrade) { # Check for critical messages and redirect if present. my ($redirect,$url) = &Apache::loncommon::critical_redirect(300,'grades'); @@ -243,6 +261,29 @@ ENDCLOSE } +sub grades_blocked { + my ($r,$blocktext,$caller) = @_; + my $title = 'Points Display'; + if ($caller eq 'spreadsheet') { + $title = 'Spreadsheet'; + } elsif ($env{'course.'.$env{'request.course.id'}.'.grading'} ne 'standard') { + $title = 'Completed Problems Display'; + } + my $brcrum = [{href=>"/adm/quickgrades",text => $title}]; + &Apache::lonhtmlcommon::clear_breadcrumbs(); + &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/quickgrades', + text=> $title}); + my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs($title); + &Apache::loncommon::content_type($r,'text/html'); + &Apache::loncommon::no_cache($r); + $r->send_http_header; + $r->print(&Apache::loncommon::start_page($title). + $breadcrumbs. + $blocktext. + &Apache::loncommon::end_page()); + return; +} + sub getStudentCatGrade { my ($uname,$udom,%categories)=@_; my ($navmap,$totalParts,$totalPossible,$totalRight,$totalAttempted,$topLevelParts,$topLevelRight,$topLevelAttempted)= @@ -293,9 +334,18 @@ sub startGradeScreen { $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'}); + if ((!$allowed_to_view) && ($env{'request.course.sec'} ne '')) { + $allowed_to_view = &Apache::lonnet::allowed('vgr', + "$env{'request.course.id'}/$env{'request.course.sec'}"); + } - my $allowed_to_view = &Apache::lonnet::allowed('vgr',$env{'request.course.id'}); - my $allowed_to_edit = &Apache::lonnet::allowed('mgr',$env{'request.course.id'}); + my $allowed_to_edit = &Apache::lonnet::allowed('mgr',$env{'request.course.id'}); + if ((!$allowed_to_edit) && ($env{'request.course.sec'} ne '')) { + $allowed_to_edit = &Apache::lonnet::allowed('mgr', + "$env{'request.course.id'}/$env{'request.course.sec'}"); + } if ($allowed_to_view) { my @notes; @@ -444,7 +494,8 @@ sub getData { if ($curRes == $iterator->BEGIN_MAP()) {$depth++;} if ($curRes == $iterator->END_MAP()) { $depth--; } - if (ref($curRes) && $curRes->is_gradable() && !$curRes->randomout) + if (ref($curRes) && $curRes->is_gradable() && !$curRes->randomout && + ($curRes->deeplink ne 'absent')) { # Get number of correct, incorrect parts my $parts = $curRes->parts();