--- loncom/homework/grades.pm 2020/11/08 22:23:52 1.777 +++ loncom/homework/grades.pm 2021/01/23 20:24:53 1.782 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.777 2020/11/08 22:23:52 raeburn Exp $ +# $Id: grades.pm,v 1.782 2021/01/23 20:24:53 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1166,8 +1166,31 @@ LISTJAVASCRIPT $nocompmsg = ''; } $gradeTable .= &Apache::lonhtmlcommon::row_title($viewtitle) - .$submission_options - .&Apache::lonhtmlcommon::row_closure() + .$submission_options; +# Check if any gradable + my $showmore; + if ($perm{'mgr'}) { + my @sections; + if ($env{'request.course.sec'} ne '') { + @sections = ($env{'request.course.sec'}); + } else { + @sections = &Apache::loncommon::get_env_multiple('form.section'); + } + if (grep(/^all$/,@sections)) { + $showmore = 1; + } else { + foreach my $sec (@sections) { + if (&canmodify($sec)) { + $showmore = 1; + last; + } + } + } + } + + if ($showmore) { + $gradeTable .= + &Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title(&mt('Send Messages')) .'' .'' .&Apache::lonhtmlcommon::row_closure(); - $gradeTable .= &Apache::lonhtmlcommon::row_title(&mt('Grading Increments')) + $gradeTable .= + &Apache::lonhtmlcommon::row_title(&mt('Grading Increments')) .''; + } $gradeTable .= &build_section_inputs(). ''."\n". @@ -3977,7 +4002,26 @@ sub viewgrades { } my ($common_header,$specific_header,@sections,$section_display); - @sections = &Apache::loncommon::get_env_multiple('form.section'); + if ($env{'request.course.sec'} ne '') { + @sections = ($env{'request.course.sec'}); + } else { + @sections = &Apache::loncommon::get_env_multiple('form.section'); + } + +# Check if Save button should be usable + my $disabled = ' disabled="disabled"'; + if ($perm{'mgr'}) { + if (grep(/^all$/,@sections)) { + undef($disabled); + } else { + foreach my $sec (@sections) { + if (&canmodify($sec)) { + undef($disabled); + last; + } + } + } + } if (grep(/^all$/,@sections)) { @sections = ('all'); if ($group_display) { @@ -4169,7 +4213,7 @@ sub viewgrades { } $result.=&Apache::loncommon::end_data_table(); $result.=''."\n"; - $result.=''."\n"; if ($ctr == 0) { my $stu_status = join(' or ',&Apache::loncommon::get_env_multiple('form.Status')); @@ -5409,10 +5453,14 @@ sub displayPage { } $curRes = $iterator->next(); } + my $disabled; + unless (&canmodify($usec)) { + $disabled = ' disabled="disabled"'; + } $studentTable.= ''."\n". - ''. ''."\n"; $request->print($studentTable); @@ -10382,37 +10430,47 @@ sub grading_menu { $fields{'command'} = 'initialverifyreceipt'; my $url5 = &Apache::lonhtmlcommon::build_url('grades/',\%fields); - + + my %permissions; + if ($perm{'mgr'}) { + $permissions{'either'} = 'F'; + $permissions{'mgr'} = 'F'; + } + if ($perm{'vgr'}) { + $permissions{'either'} = 'F'; + $permissions{'vgr'} = 'F'; + } + my @menu = ({ categorytitle=>'Hand Grading', items =>[ { linktext => 'Select individual students to grade', url => $url1a, - permission => 'F', + permission => $permissions{'either'}, icon => 'grade_students.png', linktitle => 'Grade current resource for a selection of students.' }, { linktext => 'Grade ungraded submissions', url => $url1b, - permission => 'F', + permission => $permissions{'either'}, icon => 'ungrade_sub.png', linktitle => 'Grade all submissions that have not been graded yet.' }, { linktext => 'Grading table', url => $url1c, - permission => 'F', + permission => $permissions{'either'}, icon => 'grading_table.png', linktitle => 'Grade current resource for all students.' }, { linktext => 'Grade page/folder for one student', url => $url1d, - permission => 'F', + permission => $permissions{'either'}, icon => 'grade_PageFolder.png', linktitle => 'Grade all resources in current page/sequence/folder for one student.' }, { linktext => 'Download submissions', url => $url1e, - permission => 'F', + permission => $permissions{'either'}, icon => 'download_sub.png', linktitle => 'Download all students submissions.' }]}, @@ -10421,25 +10479,25 @@ sub grading_menu { { linktext => 'Upload Scores', url => $url2, - permission => 'F', + permission => $permissions{'mgr'}, icon => 'uploadscores.png', linktitle => 'Specify a file containing the class scores for current resource.' }, { linktext => 'Process Clicker', url => $url3, - permission => 'F', + permission => $permissions{'mgr'}, icon => 'addClickerInfoFile.png', linktitle => 'Specify a file containing the clicker information for this resource.' }, { linktext => 'Grade/Manage/Review Bubblesheets', url => $url4, - permission => 'F', + permission => $permissions{'mgr'}, icon => 'bubblesheet.png', linktitle => 'Grade bubblesheet exams, upload/download bubblesheet data files, and review previously graded bubblesheet exams.' }, { linktext => 'Verify Receipt Number', url => $url5, - permission => 'F', + permission => $permissions{'either'}, icon => 'receipt_number.png', linktitle => 'Verify a system-generated receipt number for correct problem solution.' } @@ -10574,6 +10632,14 @@ sub selectfield { (&substatus_options, 'select_form_order' => ['yes','queued','graded','incorrect','all']); } + + # + # PrepareClasslist() needs to be called to avoid getting a sections list + # for a different course from the @Sections global in lonstatistics.pm, + # populated by an earlier request. + # + &Apache::lonstatistics::PrepareClasslist(); + my $result='
@@ -11337,61 +11403,6 @@ sub select_problem { $r->print(''); } -sub css_links { - my ($currsymb,$level) = @_; - my ($links,@symbs,%cssrefs,%httpref); - if ($level eq 'map') { - my $navmap = Apache::lonnavmaps::navmap->new(); - if (ref($navmap)) { - my ($map,undef,$url)=&Apache::lonnet::decode_symb($currsymb); - my @resources = $navmap->retrieveResources($map,sub { $_[0]->is_problem() },0,0); - foreach my $res (@resources) { - if (ref($res)) { - if ($res->symb()) { - push(@symbs,$res->symb()); - } - } - } - } - } else { - @symbs = ($currsymb); - } - foreach my $symb (@symbs) { - my $css_href = &Apache::lonnet::EXT('resource.0.cssfile',$symb); - if ($css_href =~ /\S/) { - unless ($css_href =~ m{https?://}) { - my ($map,undef,$url)=&Apache::lonnet::decode_symb($symb); - my $proburl = &Apache::lonnet::clutter($url); - my ($probdir) = ($proburl =~ m{(.+)/[^/]+$}); - unless ($css_href =~ m{^/}) { - $css_href = &Apache::lonnet::hreflocation($probdir,$css_href); - } - if ($css_href =~ m{^/(res|uploaded)/}) { - unless (($httpref{'httpref.'.$css_href}) | - (&Apache::lonnet::is_on_map($css_href))) { - my $thisurl = $proburl; - if ($env{'httpref.'.$proburl}) { - $thisurl = $env{'httpref.'.$proburl}; - } - $httpref{'httpref.'.$css_href} = $thisurl; - } - } - } - $cssrefs{$css_href} = 1; - } - } - if (keys(%httpref)) { - &Apache::lonnet::appenv(\%httpref); - } - if (keys(%cssrefs)) { - foreach my $css_href (keys(%cssrefs)) { - next unless ($css_href =~ m{^(/res/|/uploaded/|https?://)}); - $links .= ''."\n"; - } - } - return $links; -} - sub handler { my $request=$_[0]; &reset_caches(); @@ -11457,8 +11468,13 @@ sub handler { } else { $divforres = 1; } - my $csslinks = &css_links($symb); - my $head_extra = $js."\n".$csslinks; + my $head_extra = $js; + unless ($env{'form.vProb'} eq 'no') { + my $csslinks = &Apache::loncommon::css_links($symb); + if ($csslinks) { + $head_extra .= "\n$csslinks"; + } + } &startpage($request,$symb,[{href=>"", text=>"Student Submissions"}],undef,undef, $stuvcurrent,$stuvdisp,undef,$head_extra,$onload,$divforres); if ($versionform) { @@ -11473,8 +11489,13 @@ sub handler { &choose_task_version_form($symb,$env{'form.student'}, $env{'form.userdom'}, $env{'form.inhibitmenu'}); - my $csslinks = &css_links($symb); - my $head_extra = $js."\n".$csslinks; + my $head_extra = $js; + unless ($env{'form.vProb'} eq 'no') { + my $csslinks = &Apache::loncommon::css_links($symb); + if ($csslinks) { + $head_extra .= "\n$csslinks"; + } + } &startpage($request,$symb,[{href=>"", text=>"Previous Student Version"}],undef,undef, $stuvcurrent,$stuvdisp,$env{'form.inhibitmenu'},$head_extra); if ($versionform) { @@ -11487,7 +11508,10 @@ sub handler { {href=>'',text=>'Select student'}],1,1); &pickStudentPage($request,$symb); } elsif ($command eq 'displayPage' && $perm{'vgr'}) { - my $csslinks = &css_links($symb,'map'); + my $csslinks; + unless ($env{'form.vProb'} eq 'no') { + $csslinks = &Apache::loncommon::css_links($symb,'map'); + } &startpage($request,$symb, [{href=>&href_symb_cmd($symb,'all_for_one'),text=>'Grade page/folder for one student'}, {href=>'',text=>'Select student'}, @@ -11500,7 +11524,10 @@ sub handler { {href=>'',text=>'Store grades'}],1,1); &updateGradeByPage($request,$symb); } elsif ($command eq 'processGroup' && $perm{'vgr'}) { - my $csslinks = &css_links($symb); + my $csslinks; + unless ($env{'form.vProb'} eq 'no') { + $csslinks = &Apache::loncommon::css_links($symb); + } &startpage($request,$symb,[{href=>'',text=>'...'}, {href=>'',text=>'Modify grades'}],undef,undef,undef,undef,undef,$csslinks,undef,1); &processGroup($request,$symb);