[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /homework grades.pm

raeburn raeburn at source.lon-capa.org
Fri Oct 14 13:33:35 EDT 2016


raeburn		Fri Oct 14 17:33:35 2016 EDT

  Modified files:              (Branch: version_2_11_X)
    /loncom/homework	grades.pm 
  Log:
  - For 2.11
    - Backport 1.738
  
  
-------------- next part --------------
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.596.2.12.2.36 loncom/homework/grades.pm:1.596.2.12.2.37
--- loncom/homework/grades.pm:1.596.2.12.2.36	Thu Aug  4 18:47:52 2016
+++ loncom/homework/grades.pm	Fri Oct 14 17:33:34 2016
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.596.2.12.2.36 2016/08/04 18:47:52 raeburn Exp $
+# $Id: grades.pm,v 1.596.2.12.2.37 2016/10/14 17:33:34 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1255,7 +1255,7 @@
 sub sub_page_js {
     my $request = shift;
     my $alertmsg = &mt('A number equal or greater than 0 is expected. Entered value = ');
-    &js_escape(\$alertmsg); 
+    &js_escape(\$alertmsg);
     $request->print(<<SUBJAVASCRIPT);
 <script type="text/javascript" language="javascript">
     function updateRadio(formname,id,weight) {
@@ -3754,19 +3754,67 @@
 	'<input type="hidden" name="Status" value="'.$env{'stu_status'}.'" />'."\n".
 	'<input type="hidden" name="probTitle" value="'.$env{'form.probTitle'}.'" />'."\n";
 
-    my ($common_header,$specific_header);
-    if ($env{'form.section'} eq 'all') {
-	$common_header = &mt('Assign Common Grade to Class');
-        $specific_header = &mt('Assign Grade to Specific Students in Class');
-    } elsif ($env{'form.section'} eq 'none') {
-        $common_header = &mt('Assign Common Grade to Students in no Section');
-	$specific_header = &mt('Assign Grade to Specific Students in no Section');
-    } else {
-        my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section'));
-        $common_header = &mt('Assign Common Grade to Students in Section(s) [_1]',$section_display);
-	$specific_header = &mt('Assign Grade to Specific Students in Section(s) [_1]',$section_display);
+    #retrieve selected groups
+    my (@groups,$group_display);
+    @groups = &Apache::loncommon::get_env_multiple(form.group');
+    if (grep(/^all$/, at groups)) {
+        @groups = ('all');
+    } elsif (grep(/^none$/, at groups)) {
+        @groups = ('none');
+    } elsif (@groups > 0) {
+        $group_display = join(', ', at groups);
+    }
+
+    my ($common_header,$specific_header, at sections,$section_display);
+    @sections = &Apache::loncommon::get_env_multiple('form.section');
+    if (grep(/^all$/, at sections)) {
+        @sections = ('all');
+        if ($group_display) {
+            $common_header = &mt('Assign Common Grade to Students in Group(s) [_1]',$group_display);
+            $specific_header = &mt('Assign Grade to Specific Students in Group(s) [_1]',$group_display);
+        } elsif (grep(/^none$/, at groups)) {
+            $common_header = &mt('Assign Common Grade to Students not assigned to any groups');
+            $specific_header = &mt('Assign Grade to Specific Students not assigned to any groups');
+        } else {
+            $common_header = &mt('Assign Common Grade to Class');
+            $specific_header = &mt('Assign Grade to Specific Students in Class');
+        }
+    } elsif (grep(/^none$/, at sections)) {
+        @sections = ('none');
+        if ($group_display) {
+            $common_header = &mt('Assign Common Grade to Students in no Section and in Group(s) [_1]',$group_display);
+            $specific_header = &mt('Assign Grade to Specific Students in no Section and in Group(s)',$group_display);
+        } elsif (grep(/^none$/, at groups)) {
+            $common_header = &mt('Assign Common Grade to Students in no Section and in no Group');
+            $specific_header = &mt('Assign Grade to Specific Students in no Section and in no Group');
+        } else {
+            $common_header = &mt('Assign Common Grade to Students in no Section');
+            $specific_header = &mt('Assign Grade to Specific Students in no Section');
+        }
+    } else {
+        $section_display = join (", ", at sections);
+        if ($group_display) {
+            $common_header = &mt('Assign Common Grade to Students in Section(s) [_1], and in Group(s) [_2]',
+                                 $section_display,$group_display);
+            $specific_header = &mt('Assign Grade to Specific Students in Section(s) [_1], and in Group(s) [_2]',
+                                   $section_display,$group_display);
+        } elsif (grep(/^none$/, at groups)) {
+            $common_header = &mt('Assign Common Grade to Students in Section(s) [_1] and no Group',$section_display);
+            $specific_header = &mt('Assign Grade to Specific Students in Section(s) [_1] and no Group',$section_display);
+        } else {
+            $common_header = &mt('Assign Common Grade to Students in Section(s) [_1]',$section_display);
+            $specific_header = &mt('Assign Grade to Specific Students in Section(s) [_1]',$section_display);
+        }
     }
-    $result.= '<h3>'.$common_header.'</h3>'.&Apache::loncommon::start_data_table();
+    my %submit_types = &substatus_options();
+    my $submission_status = $submit_types{$env{'form.submitonly'}};
+
+    if ($env{'form.submitonly'} eq 'all') {
+        $result.= '<h3>'.$common_header.'</h3>';
+    } else {
+        $result.= '<h3>'.$common_header.' '.&mt('(submission status: "[_1]")',$submission_status).'</h3>'; 
+    }
+    $result .= &Apache::loncommon::start_data_table();
     #radio buttons/text box for assigning points for a section or class.
     #handles different parts of a problem
     my $res_error;
@@ -3829,8 +3877,12 @@
 
     #table listing all the students in a section/class
     #header of table
-    $result.= '<h3>'.$specific_header.'</h3>'.
-              &Apache::loncommon::start_data_table().
+    if ($env{'form.submitonly'} eq 'all') { 
+        $result.= '<h3>'.$specific_header.'</h3>';
+    } else {
+        $result.= '<h3>'.$specific_header.' '.&mt('(submission status: "[_1]")',$submission_status).'</h3>';
+    }
+    $result.= &Apache::loncommon::start_data_table().
 	      &Apache::loncommon::start_data_table_header_row().
 	      '<th>'.&mt('No.').'</th>'.
 	      '<th>'.&nameUserString('header')."</th>\n";
@@ -3873,7 +3925,7 @@
 
     #get info for each student
     #list all the students - with points and grade status
-    my (undef,undef,$fullname) = &getclasslist($env{'form.section'},'1');
+    my (undef,undef,$fullname) = &getclasslist(\@sections,'1',\@groups);
     my $ctr = 0;
     foreach (sort 
 	     {
@@ -3882,36 +3934,143 @@
 		 }
 		 return $a cmp $b;
 	     } (keys(%$fullname))) {
-	$ctr++;
 	$result.=&viewstudentgrade($symb,$env{'request.course.id'},
-				   $_,$$fullname{$_},\@parts,\%weight,$ctr,\%last_resets);
+				   $_,$$fullname{$_},\@parts,\%weight,\$ctr,\%last_resets);
     }
     $result.=&Apache::loncommon::end_data_table();
     $result.='<input type="hidden" name="total" value="'.$ctr.'" />'."\n";
     $result.='<input type="button" value="'.&mt('Save').'" '.
 	'onclick="javascript:submit();" target="_self" /></form>'."\n";
-    if (scalar(%$fullname) eq 0) {
-	my $colspan=3+scalar(@parts);
-	my $section_display = join (", ",&Apache::loncommon::get_env_multiple('form.section'));
+    if ($ctr == 0) {
         my $stu_status = join(' or ',&Apache::loncommon::get_env_multiple('form.Status'));
-	$result='<span class="LC_warning">'.
-	    &mt('There are no students in section(s) [_1] with enrollment status [_2] to modify or grade.',
-	        $section_display, $stu_status).
-	    '</span>';
+        $result='<h3><span class="LC_info">'.&mt('Manual Grading').'</span></h3>'.
+                '<span class="LC_warning">';
+        if ($env{'form.submitonly'} eq 'all') {
+            if (grep(/^all$/, at sections)) {
+                if (grep(/^all$/, at groups)) {
+                    $result .= &mt('There are no students with enrollment status [_1] to modify or grade.',
+                                   $stu_status);
+                } elsif (grep(/^none$/, at groups)) {
+                    $result .= &mt('There are no students with no group assigned and with enrollment status [_1] to modify or grade.',
+                                   $stu_status);
+                } else {
+                    $result .= &mt('There are no students in group(s) [_1] with enrollment status [_2] to modify or grade.',
+                                   $group_display,$stu_status);
+                }
+            } elsif (grep(/^none$/, at sections)) {
+                if (grep(/^all$/, at groups)) {
+                    $result .= &mt('There are no students in no section with enrollment status [_1] to modify or grade.',
+                                   $stu_status);
+                } elsif (grep(/^none$/, at groups)) {
+                    $result .= &mt('There are no students in no section and no group with enrollment status [_1] to modify or grade.',
+                                   $stu_status);
+                } else {
+                    $result .= &mt('There are no students in no section in group(s) [_1] with enrollment status [_2] to modify or grade.',
+                                   $group_display,$stu_status);
+                }
+            } else {
+                if (grep(/^all$/, at groups)) {
+                    $result .= &mt('There are no students in section(s) [_1] with enrollment status [_2] to modify or grade.',
+                                   $section_display,$stu_status);
+                } elsif (grep(/^none$/, at groups)) {
+                    $result .= &mt('There are no students in section(s) [_1] nd no group with enrollment status [_2] to modify or grade.',
+                                   $section_display,$stu_status);
+                } else {
+                    $result .= &mt('There are no students in section(s) [_1] and group(s) [_2] with enrollment status [_3] to modify or grade.',
+                                   $section_display,$group_display,$stu_status);
+                }
+            }
+        } else {
+            if (grep(/^all$/, at sections)) {
+                if (grep(/^all$/, at groups)) {
+                    $result .= &mt('There are no students with enrollment status [_1] and submission status "[_2]" to modify or grade.',
+                                   $stu_status,$submission_status);
+                } elsif (grep(/^none$/, at groups)) {
+                    $result .= &mt('There are no students with no group assigned with enrollment status [_1] and submission status "[_2]" to modify or grade.',
+                                   $stu_status,$submission_status);
+                } else {
+                    $result .= &mt('There are no students in group(s) [_1] with enrollment status [_2] and submission status "[_3]" to modify or grade.',
+                                   $group_display,$stu_status,$submission_status);
+                }
+            } elsif (grep(/^none$/, at sections)) {
+                if (grep(/^all$/, at groups)) {
+                    $result .= &mt('There are no students in no section with enrollment status [_1] and submission status "[_2]" to modify or grade.',
+                                   $stu_status,$submission_status);
+                } elsif (grep(/^none$/, at groups)) {
+                    $result .= &mt('There are no students in no section and no group with enrollment status [_1] and submission status "[_2]" to modify or grade.',
+                                   $stu_status,$submission_status);
+                } else {
+                    $result .= &mt('There are no students in no section in group(s) [_1] with enrollment status [_2] and submission status "[_3]" to modify or grade.',
+                                   $group_display,$stu_status,$submission_status);
+                }
+            } else {
+                if (grep(/^all$/, at groups)) {
+                    $result .= &mt('There are no students in section(s) [_1] with enrollment status [_2] and submission status "[_3]" to modify or grade.',
+                                   $section_display,$stu_status,$submission_status);
+                } elsif (grep(/^none$/, at groups)) {
+                    $result .= &mt('There are no students in section(s) [_1] and no group with enrollment status [_2] and submission status "[_3]" to modify or grade.',
+                                   $section_display,$stu_status,$submission_status);
+                } else {
+                    $result .= &mt('There are no students in section(s) [_1] and group(s) [_2] with enrollment status [_3] and submission status "[_4]" to modify or grade.',
+                                   $section_display,$group_display,$stu_status,$submission_status);
+                }
+            }
+	}
+	$result .= '</span><br />';
     }
     $result.=&show_grading_menu_form($symb);
     return $result;
 }
 
-#--- call by previous routine to display each student
+#--- call by previous routine to display each student who satisfies submission filter.
 sub viewstudentgrade {
     my ($symb,$courseid,$student,$fullname,$parts,$weight,$ctr,$last_resets) = @_;
     my ($uname,$udom) = split(/:/,$student);
     my %record=&Apache::lonnet::restore($symb,$courseid,$udom,$uname);
-    my %aggregates = (); 
+    my $submitonly = $env{'form.submitonly'};
+    unless (($submitonly eq 'all') || ($submitonly eq 'queued')) {
+        my %partstatus = ();
+        if (ref($parts) eq 'ARRAY') {
+            foreach my $apart (@{$parts}) {
+                my ($part,$type) = &split_part_type($apart);
+                my ($status,undef) = split(/_/,$record{"resource.$part.solved"},2);
+                $status = 'nothing' if ($status eq '');
+                $partstatus{$part}      = $status;
+                my $subkey = "resource.$part.submitted_by";
+                $partstatus{$subkey} = $record{$subkey} if ($record{$subkey} ne '');
+            }
+            my $submitted = 0;
+            my $graded = 0;
+            my $incorrect = 0;
+            foreach my $key (keys(%partstatus)) {
+                $submitted = 1 if ($partstatus{$key} ne 'nothing');
+                $graded = 1 if ($partstatus{$key} =~ /^ungraded/);
+                $incorrect = 1 if ($partstatus{$key} =~ /^incorrect/);
+
+                my $partid = (split(/\./,$key))[1];
+                if ($partstatus{'resource.'.$partid.'.'.$key.'.submitted_by'} ne '') {
+                    $submitted = 0;
+                }
+            }
+            return if (!$submitted && ($submitonly eq 'yes' ||
+                                       $submitonly eq 'incorrect' ||
+                                       $submitonly eq 'graded'));
+            return if (!$graded && ($submitonly eq 'graded'));
+            return if (!$incorrect && $submitonly eq 'incorrect');
+        }
+    }
+    if ($submitonly eq 'queued') {
+        my ($cdom,$cnum) = split(/_/,$courseid);
+        my %queue_status =
+            &Apache::bridgetask::get_student_status($symb,$cdom,$cnum,
+                                                    $udom,$uname);
+        return if (!defined($queue_status{'gradingqueue'}));
+    }
+    $$ctr++;
+    my %aggregates = ();
     my $result=&Apache::loncommon::start_data_table_row().'<td align="right">'.
-	'<input type="hidden" name="ctr'.($ctr-1).'" value="'.$student.'" />'.
-	"\n".$ctr.' </td><td> '.
+	'<input type="hidden" name="ctr'.($$ctr-1).'" value="'.$student.'" />'.
+	"\n".$$ctr.' </td><td> '.
 	'<a href="javascript:viewOneStudent(\''.$uname.'\',\''.$udom.
 	'\');" target="_self">'.$fullname.'</a> '.
 	'<span class="LC_internal_info">('.$uname.($env{'user.domain'} eq $udom ? '' : ':'.$udom).')</span></td>'."\n";
@@ -8897,7 +9056,7 @@
     my ($symb) = &get_symb($r,1);
     my $default_form_data=&defaultFormData($symb);
     my $nofile_alert = &mt('Please use the browse button to select a file from your local directory.');
-    &js_escape(\$nofile_alert); 
+    &js_escape(\$nofile_alert);
     my $nocourseid_alert = &mt("Please use the 'Select Course' link to open a separate window where you can search for a course to which a file can be uploaded.");
     &js_escape(\$nocourseid_alert);
     $r->print('
@@ -9843,6 +10002,15 @@
     return $result;
 }
 
+sub substatus_options {
+    return &Apache::lonlocal::texthash(
+                                      'yes'       => 'with submissions',
+                                      'queued'    => 'in grading queue',
+                                      'graded'    => 'with ungraded submissions',
+                                      'incorrect' => 'with incorrect submissions',
+                                      'all'       => 'with any status');
+}
+
 sub reset_perm {
     undef(%perm);
 }


More information about the LON-CAPA-cvs mailing list