--- loncom/homework/grades.pm 2005/02/18 23:36:12 1.248
+++ loncom/homework/grades.pm 2005/04/03 21:41:58 1.255
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Grading handler
#
-# $Id: grades.pm,v 1.248 2005/02/18 23:36:12 albertel Exp $
+# $Id: grades.pm,v 1.255 2005/04/03 21:41:58 banghart Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -96,7 +96,7 @@ sub get_symb_and_url {
sub nameUserString {
my ($type,$fullname,$uname,$udom) = @_;
if ($type eq 'header') {
- return ' Fullname (Username) ';
+ return ' Fullname (Username)';
} else {
return ' '.$fullname.' ('.$uname.
($ENV{'user.domain'} eq $udom ? '' : ' ('.$udom.')').')';
@@ -664,17 +664,21 @@ LISTJAVASCRIPT
$gradeTable.='To '.lc($viewgrade).' a submission or a group of submissions, click on the check box(es) '.
'next to the student\'s name(s). Then click on the Next button.
'."\n".
''."\n";
+
+# checkall buttons
+ $gradeTable.=&check_script('gradesub', 'stuinfo');
$gradeTable.='" />'."\n";
+ 'value="Next->" />
'."\n";
+ $gradeTable.=&check_buttons();
$gradeTable.='Check For Plagiarism';
- my (undef, undef, $fullname) = &getclasslist($getsec,'1');
+ my ($classlist, undef, $fullname) = &getclasslist($getsec,'1');
$gradeTable.='
'.
'';
my $loop = 0;
while ($loop < 2) {
$gradeTable.=' No. | Select | '.
- ''.&nameUserString('header').' | ';
+ ''.&nameUserString('header').' Section/Group | ';
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
foreach (sort(@$partlist)) {
my $display_part=&get_display_part((split(/_/))[0],$url,$symb);
@@ -719,12 +723,16 @@ LISTJAVASCRIPT
}
$ctr++;
+ my $section = $classlist->{$student}->[&Apache::loncoursedata::CL_SECTION()];
+
if ( $perm{'vgr'} eq 'F' ) {
$gradeTable.=' ' if ($ctr%2 ==1);
$gradeTable.=''.$ctr.' | '.
- ' | '."\n".
- ''.&nameUserString(undef,$$fullname{$student},$uname,$udom).' | '."\n";
+ ' | '."\n".''.
+ &nameUserString(undef,$$fullname{$student},$uname,$udom).
+ ' '.$section.' | '."\n";
if ($ENV{'form.showgrading'} eq 'yes' && $submitonly ne 'all') {
foreach (sort keys(%status)) {
@@ -746,7 +754,7 @@ LISTJAVASCRIPT
$gradeTable.=' ';
}
- $gradeTable.='
|
'.
+ $gradeTable.=''."\n".
'" />'."\n";
@@ -771,6 +779,52 @@ LISTJAVASCRIPT
}
#---- Called from the listStudents routine
+
+sub check_script {
+ my ($form, $type)=@_;
+ my $chkallscript=''."\n";
+ return $chkallscript;
+}
+
+sub check_buttons {
+ my $buttons.='';
+ $buttons.=' ';
+ $buttons.='';
+ $buttons.=' ';
+ return $buttons;
+}
+
# Displays the submissions for one student or a group of students
sub processGroup {
my ($request) = shift;
@@ -2059,6 +2113,7 @@ sub saveHandGrade {
$ENV{'request.course.id'});
if (!&canmodify($usec)) { return('not_allowed'); }
my %record = &Apache::lonnet::restore($symb,$ENV{'request.course.id'},$domain,$stuname);
+ my @parts_graded;
my %newrecord = ();
my ($pts,$wgt) = ('','');
foreach (split(/:/,$ENV{'form.partlist'.$newflg})) {
@@ -2093,6 +2148,8 @@ sub saveHandGrade {
if ($partial eq $record{'resource.'.$_.'.awarded'}) {
#do not update score for part if not changed.
next;
+ } else {
+ push @parts_graded, $_;
}
if ($record{'resource.'.$_.'.awarded'} ne $partial) {
$newrecord{'resource.'.$_.'.awarded'} = $partial;
@@ -2116,12 +2173,56 @@ sub saveHandGrade {
}
}
if (scalar(keys(%newrecord)) > 0) {
+ &version_portfiles(\%record, \@parts_graded, $ENV{'request.course.id'}, $symb, $domain, $stuname);
&Apache::lonnet::cstore(\%newrecord,$symb,
$ENV{'request.course.id'},$domain,$stuname);
}
return '',$pts,$wgt;
}
+# ----------- Handles creating versions for portfolio files as answers
+sub version_portfiles {
+ my ($record, $parts_graded, $courseid, $symb, $domain, $stuname) = @_;
+ my $parts = join('|', @$parts_graded);
+ my $portfolio_root = &Apache::loncommon::propath($domain,
+ $stuname).
+ '/userfiles/portfolio';
+ foreach my $key(keys %$record) {
+ if ($key =~ /^resource\.($parts)\./ && $key =~ /\.portfiles$/) {
+ my @portfiles = split(/,/,$$record{$key});
+ foreach my $file (@portfiles) {
+ my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*$)/);
+ my $version = 0;
+ my @answer_file_parts = split(/\./, $answer_file);
+ my @dir_list = &Apache::lonnet::dirlist($directory,$domain,$stuname,$portfolio_root);
+ my @file_names;
+ my @file_name_parts;
+ foreach my $row (@dir_list) {
+ @file_names = split(/\&/,$row,2);
+ @file_name_parts = split(/\./, $file_names[0]);
+ # ($file_name_parts[scalar @file_name_parts] eq $answer_file_parts[scalar @answer_file_parts])
+ if (($file_name_parts[0] eq $answer_file_parts[0]) &&
+ ($file_name_parts[-1] eq $answer_file_parts[-1])) {
+ # gets here if filename and extension match, regardless of version
+ if (scalar @file_name_parts == 3) { # a versioned file is found
+ # so save it for later
+ if ($file_name_parts[1] > $version) {$version = $file_name_parts[1]};
+ }
+ }
+ }
+ $version++;
+ &Apache::lonnet::logthis('answer file is '.$answer_file.
+ ' becomes '.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
+ &Apache::lonnet::logthis('from dir list is '.$file_names[0].' has '.@file_name_parts.' parts');
+ }
+ &Apache::lonnet::logthis('found key portfiles '.$key);
+ &Apache::lonnet::logthis('found value portfiles '.$$record{$key});
+ }
+ }
+
+
+}
+
#--------------------------------------------------------------------------------------
#
#-------------------------- Next few routines handles grading by section or whole class