[LON-CAPA-cvs] cvs: loncom /homework grades.pm
raeburn
raeburn at source.lon-capa.org
Fri Oct 14 12:47:26 EDT 2016
raeburn Fri Oct 14 16:47:26 2016 EDT
Modified files:
/loncom/homework grades.pm
Log:
- Bug 6440.
- Submission status can be used as filter for grading table.
- Group(s) can be used as filter for grading table.
-------------- next part --------------
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.737 loncom/homework/grades.pm:1.738
--- loncom/homework/grades.pm:1.737 Sun Jan 31 21:25:42 2016
+++ loncom/homework/grades.pm Fri Oct 14 16:47:25 2016
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.737 2016/01/31 21:25:42 raeburn Exp $
+# $Id: grades.pm,v 1.738 2016/10/14 16:47:25 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -3576,19 +3576,67 @@
&build_section_inputs().
'<input type="hidden" name="Status" value="'.$env{'stu_status'}.'" />'."\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);
+ }
+ }
+ 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.= '<h3>'.$common_header.'</h3>'.&Apache::loncommon::start_data_table();
+ $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;
@@ -3651,8 +3699,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";
@@ -3698,7 +3750,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
{
@@ -3707,35 +3759,142 @@
}
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 />';
}
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";
@@ -3747,7 +3906,6 @@
my ($aggtries,$totaltries);
unless (exists($aggregates{$part})) {
$totaltries = $record{'resource.'.$part.'.tries'};
-
$aggtries = $totaltries;
if ($$last_resets{$part}) {
$aggtries = &get_num_tries(\%record,$$last_resets{$part},
@@ -9480,7 +9638,7 @@
$result.='<form action="/adm/grades" method="post" name="gradingMenu">'."\n".
'<input type="hidden" name="symb" value="'.&Apache::lonenc::check_encrypt($symb).'" />'."\n";
- $result.=&selectfield(0).
+ $result.=&selectfield(1).
'<input type="hidden" name="command" value="viewgrades" />
<div>
<input type="submit" value="'.&mt('Next').' →" />
@@ -9536,13 +9694,8 @@
sub selectfield {
my ($full)=@_;
my %options =
- (&Apache::lonlocal::texthash(
- 'yes' => 'with submissions',
- 'queued' => 'in grading queue',
- 'graded' => 'with ungraded submissions',
- 'incorrect' => 'with incorrect submissions',
- 'all' => 'with any status'),
- 'select_form_order' => ['yes','queued','graded','incorrect','all']);
+ (&substatus_options,
+ 'select_form_order' => ['yes','queued','graded','incorrect','all']);
my $result='<div class="LC_columnSection">
<fieldset>
@@ -9578,6 +9731,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