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

albertel lon-capa-cvs@mail.lon-capa.org
Wed, 25 Jan 2006 22:58:26 -0000


albertel		Wed Jan 25 17:58:26 2006 EDT

  Modified files:              (Branch: version_2_1_X)
    /loncom/homework	grades.pm 
  Log:
  - backport 1.304
  
  
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.302 loncom/homework/grades.pm:1.302.2.1
--- loncom/homework/grades.pm:1.302	Thu Dec 15 12:53:20 2005
+++ loncom/homework/grades.pm	Wed Jan 25 17:58:26 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.302 2005/12/15 17:53:20 albertel Exp $
+# $Id: grades.pm,v 1.302.2.1 2006/01/25 22:58:26 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2397,22 +2397,23 @@
             &Apache::lonnet::logthis("should be unmarking and remarking $key",@portfiles);
             foreach my $file (@portfiles) {
                 &Apache::lonnet::unmark_as_readonly($domain,$stuname,[$symb,$env{'request.course.id'}],$file);
-                my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*$)/);
+                my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*)$/);
                 my $version = 0;
-                my @answer_file_parts = split(/\./, $answer_file);
+		my ($answer_name,$answer_ver,$answer_ext) =
+		    &file_name_version_ext($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])) {
+                    my ($file) = split(/\&/,$row,2);
+		    my ($file_name,$file_version,$file_ext) =
+			&file_name_version_ext($file);
+                    if (($file_name eq $answer_name) && 
+			($file_ext eq $answer_ext)) {
                         # 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]};
+                        if ($file_version ne '') {
+                            # a versioned file is found  so save it for later
+                            if ($file_version > $version) {
+				$version = $file_version;
+			    }
                         }
                     }
                 }
@@ -2421,11 +2422,13 @@
                 if($env{'form.copy'} eq '-1') {
                     &Apache::lonnet::logthis('problem getting file '.$directory.$answer_file);
                 } else {
-                   my $copy_result = &Apache::lonnet::finishuserfileupload($stuname,$domain,'copy',
-                                    '/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
-                    push(@v_portfiles, $directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]);
+		    my $new_answer = $answer_name.'.'.$version.'.'.$answer_ext;
+		    my $copy_result = &Apache::lonnet::finishuserfileupload(
+                                        $stuname,$domain,'copy',
+				        '/portfolio'.$directory.$new_answer);
+                    push(@v_portfiles, $directory.$new_answer);
                     &Apache::lonnet::mark_as_readonly($domain,$stuname,
-                                ['/portfolio'.$directory.$answer_file_parts[0].'.'.$version.'.'.$answer_file_parts[-1]],
+                                ['/portfolio'.$directory.$new_answer],
                                 [$symb,$env{'request.course.id'},'graded']);
                 }
             }
@@ -2436,6 +2439,22 @@
     
 }
 
+sub file_name_version_ext {
+    my ($file)=@_;
+    my @file_parts = split(/\./, $file);
+    my ($name,$version,$ext);
+    if (@file_parts > 1) {
+	$ext=pop(@file_parts);
+	if (@file_parts > 1 && $file_parts[-1] =~ /^\d+$/) {
+	    $version=pop(@file_parts);
+	}
+	$name=join('.',@file_parts);
+    } else {
+	$name=join('.',@file_parts);
+    }
+    return($name,$version,$ext);
+}
+
 #--------------------------------------------------------------------------------------
 #
 #-------------------------- Next few routines handles grading by section or whole class