[LON-CAPA-cvs] cvs: loncom /homework externalresponse.pm grades.pm /interface portfolio.pm /lonnet/perl lonnet.pm

raeburn raeburn at source.lon-capa.org
Sun Dec 7 14:45:31 EST 2014


raeburn		Sun Dec  7 19:45:31 2014 EDT

  Modified files:              
    /loncom/homework	externalresponse.pm grades.pm 
    /loncom/interface	portfolio.pm 
    /loncom/lonnet/perl	lonnet.pm 
  Log:
  - Support for submission of files to externalresponse.
    - New routine: &portfiles_versioning() in lonnet.pm called after grading 
      externalresponse to handle versioning of submitted files in portfolio.
    - &get_next_version(), &version_selected_portfile(), &file_name_version_ext()
      moved from grades.pm to lonnet.pm to facilitate re-use.
  
  
-------------- next part --------------
Index: loncom/homework/externalresponse.pm
diff -u loncom/homework/externalresponse.pm:1.30 loncom/homework/externalresponse.pm:1.31
--- loncom/homework/externalresponse.pm:1.30	Sun Dec  7 02:48:55 2014
+++ loncom/homework/externalresponse.pm	Sun Dec  7 19:45:08 2014
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # external style responses
 #
-# $Id: externalresponse.pm,v 1.30 2014/12/07 02:48:55 raeburn Exp $
+# $Id: externalresponse.pm,v 1.31 2014/12/07 19:45:08 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -261,12 +261,18 @@
 		&Apache::lonhomework::showhash(%form);
                 my $udom = &Apache::lonnet::EXT('user.domain');
                 my $uname = &Apache::lonnet::EXT('user.name');
-                my $symb = $env{'resource.symb'};
+                my $symb = &Apache::lonnet::symbread();
                 my %record = &Apache::lonnet::restore($symb,$env{'request.course.id'},$udom,$uname);
 		my $ua = LWP::UserAgent->new;
 		my $res = $ua->request(POST $url, \%form);
                 my @delaccess = keys(%currently_turned_in);
                 &Apache::lonnet::automated_portfile_access('ip',undef,\@delaccess,\%info);
+                my @submitted_portfiles = split(/,/,$Apache::lonhomework::results{"resource.$part.$id.portfiles"}); 
+                my @versioned_portfiles;
+                &Apache::lonnet::portfiles_versioning($symb,$udom,$uname,\@submitted_portfiles,
+                                                      \@versioned_portfiles);
+                $Apache::lonhomework::results{"resource.$part.$id.portfiles"} =
+                    join(',', at versioned_portfiles); 
 		%Apache::loncapagrade::results=();
 		$Apache::lonhomework::results{"resource.$part.$id.submission"}=$response;
 		if ($res->is_error()) {
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.728 loncom/homework/grades.pm:1.729
--- loncom/homework/grades.pm:1.728	Mon Nov 24 02:36:26 2014
+++ loncom/homework/grades.pm	Sun Dec  7 19:45:08 2014
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.728 2014/11/24 02:36:26 raeburn Exp $
+# $Id: grades.pm,v 1.729 2014/12/07 19:45:08 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1811,7 +1811,7 @@
 	    if ($file =~ /\/portfolio\//) {
                 $file_counter++;
     	        my ($file_path, $file_disp) = ($file =~ m|(.+/)(.+)$|);
-    	        my ($name,$version,$ext) = &file_name_version_ext($file_disp);
+    	        my ($name,$version,$ext) = &Apache::lonnet::file_name_version_ext($file_disp);
     	        $file_disp = "$name.$ext";
     	        $file = $file_path.$file_disp;
     	        $result.=&mt('Return commented version of [_1] to student.',
@@ -3199,13 +3199,13 @@
                     my ($directory,$answer_file) = 
                         ($env{'form.'.$newflg.'_'.$part_resp.'_origdoc'.$counter} =~ /^(.*?)([^\/]*)$/);
                     my ($answer_name,$answer_ver,$answer_ext) =
-		        &file_name_version_ext($answer_file);
+		        &Apache::lonnet::file_name_version_ext($answer_file);
 		    my ($portfolio_path) = ($directory =~ /^.+$stuname\/portfolio(.*)/);
                     my $getpropath = 1;
                     my ($dir_list,$listerror) = 
                         &Apache::lonnet::dirlist($portfolio_root.$portfolio_path,
                                                  $domain,$stuname,$getpropath);
-		    my $version = &get_next_version($answer_name,$answer_ext,$dir_list);
+		    my $version = &Apache::lonnet::get_next_version($answer_name,$answer_ext,$dir_list);
                     # fix filename
                     my ($save_file_name) = (($directory.$answer_name.".$version.".$answer_ext) =~ /^.+\/${stuname}\/(.*)/);
                     my $result=&Apache::lonnet::finishuserfileupload($stuname,$domain,
@@ -3354,29 +3354,14 @@
     my $version_parts = join('|',@$v_flag);
     my @returned_keys;
     my $parts = join('|', @$parts_graded);
-    my $portfolio_root = '/userfiles/portfolio';
     foreach my $key (keys(%$record)) {
         my $new_portfiles;
         if ($key =~ /^resource\.($version_parts)\./ && $key =~ /\.portfiles$/ ) {
             my @versioned_portfiles;
             my @portfiles = split(/\s*,\s*/,$$record{$key});
-            foreach my $file (@portfiles) {
-                &Apache::lonnet::unmark_as_readonly($domain,$stu_name,[$symb,$env{'request.course.id'}],$file);
-                my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*)$/);
-		my ($answer_name,$answer_ver,$answer_ext) =
-		    &file_name_version_ext($answer_file);
-                my $getpropath = 1;    
-                my ($dir_list,$listerror) = 
-                    &Apache::lonnet::dirlist($portfolio_root.$directory,$domain,
-                                             $stu_name,$getpropath);
-                my $version = &get_next_version($answer_name,$answer_ext,$dir_list);
-                my $new_answer = &version_selected_portfile($domain, $stu_name, $directory, $answer_file, $version);
-                if ($new_answer ne 'problem getting file') {
-                    push(@versioned_portfiles, $directory.$new_answer);
-                    &Apache::lonnet::mark_as_readonly($domain,$stu_name,
-                        [$directory.$new_answer],
-                        [$symb,$env{'request.course.id'},'graded']);
-                }
+            if (@portfiles) {
+                &Apache::lonnet::portfiles_versioning($symb,$domain,$stu_name,\@portfiles,
+                                                      \@versioned_portfiles);
             }
             $$record{$key} = join(',', at versioned_portfiles);
             push(@returned_keys,$key);
@@ -3385,64 +3370,6 @@
     return (@returned_keys);   
 }
 
-sub get_next_version {
-    my ($answer_name, $answer_ext, $dir_list) = @_;
-    my $version;
-    if (ref($dir_list) eq 'ARRAY') {
-        foreach my $row (@{$dir_list}) {
-            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 ($file_version ne '') {
-                    # a versioned file is found  so save it for later
-                    if ($file_version > $version) {
-		        $version = $file_version;
-	            }
-                }
-            }
-        }
-    }
-    $version ++;
-    return($version);
-}
-
-sub version_selected_portfile {
-    my ($domain,$stu_name,$directory,$file_name,$version) = @_;
-    my ($answer_name,$answer_ver,$answer_ext) =
-        &file_name_version_ext($file_name);
-    my $new_answer;
-    $env{'form.copy'} = &Apache::lonnet::getfile("/uploaded/$domain/$stu_name/portfolio$directory$file_name");
-    if($env{'form.copy'} eq '-1') {
-        $new_answer = 'problem getting file';
-    } else {
-        $new_answer = $answer_name.'.'.$version.'.'.$answer_ext;
-        my $copy_result = &Apache::lonnet::finishuserfileupload(
-                            $stu_name,$domain,'copy',
-		        '/portfolio'.$directory.$new_answer);
-    }    
-    return ($new_answer);
-}
-
-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('.', at file_parts);
-    } else {
-	$name=join('.', at file_parts);
-    }
-    return($name,$version,$ext);
-}
-
 #--------------------------------------------------------------------------------------
 #
 #-------------------------- Next few routines handles grading by section or whole class
Index: loncom/interface/portfolio.pm
diff -u loncom/interface/portfolio.pm:1.254 loncom/interface/portfolio.pm:1.255
--- loncom/interface/portfolio.pm:1.254	Mon Dec  1 22:52:49 2014
+++ loncom/interface/portfolio.pm	Sun Dec  7 19:45:19 2014
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # portfolio browser
 #
-# $Id: portfolio.pm,v 1.254 2014/12/01 22:52:49 raeburn Exp $
+# $Id: portfolio.pm,v 1.255 2014/12/07 19:45:19 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -232,7 +232,7 @@
 	if ($lock_info) {
 	    my %anchor_fields = ('lockinfo' => $fullpath);
 	    if ($versions) { # hold the folder open
-	        my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($fullpath);
+	        my ($fname,$version,$extension) = &Apache::lonnet::file_name_version_ext($fullpath);
 	        $fname =~ s|^/||;
 	        $anchor_fields{'showversions'} = $fname.'.'.$extension;
 	    }
@@ -365,7 +365,7 @@
 		          } (@{$dir_list})) {
     	    my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$dir_line,16); 
     	    $filename =~ s/\s+$//;
-    	    my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename);
+    	    my ($fname,$version,$extension) = &Apache::lonnet::file_name_version_ext($filename);
     	    if ($version) {
 	        my $fullpath = &prepend_group($current_path.$fname.'.'.$extension);
     	        push(@{ $versioned{$fullpath} },
@@ -378,7 +378,7 @@
     my $zerobyte;
     foreach my $dir_line (@dir_lines) {
         my ($filename,$dom,$testdir,$size,$mtime,$obs) = @$dir_line;
-        my ($fname,$version,$extension) = &Apache::grades::file_name_version_ext($filename);
+        my ($fname,$version,$extension) = &Apache::lonnet::file_name_version_ext($filename);
     	if (($filename ne '.') && ($filename ne '..') && ($filename !~ /\.meta$/ ) && ($filename !~ /(.*)\.(\d+)\.([^\.]*)$/)) {
     	    my $version_flag;
     	    my $show_versions;
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1272 loncom/lonnet/perl/lonnet.pm:1.1273
--- loncom/lonnet/perl/lonnet.pm:1.1272	Fri Dec  5 15:15:12 2014
+++ loncom/lonnet/perl/lonnet.pm	Sun Dec  7 19:45:30 2014
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.1272 2014/12/05 15:15:12 droeschl Exp $
+# $Id: lonnet.pm,v 1.1273 2014/12/07 19:45:30 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -9160,6 +9160,90 @@
     return (@return_files);
 }
 
+#------------------------------Submitted/Handedback Portfolio Files Versioning
+ 
+sub portfiles_versioning {
+    my ($symb,$domain,$stu_name,$portfiles,$versioned_portfiles) = @_;
+    my $portfolio_root = '/userfiles/portfolio';
+    return unless ((ref($portfiles) eq 'ARRAY') && (ref($versioned_portfiles) eq 'ARRAY'));
+    foreach my $file (@{$portfiles}) {
+        &unmark_as_readonly($domain,$stu_name,[$symb,$env{'request.course.id'}],$file);
+        my ($directory,$answer_file) =($file =~ /^(.*?)([^\/]*)$/);
+        my ($answer_name,$answer_ver,$answer_ext) = &file_name_version_ext($answer_file);
+        my $getpropath = 1;
+        my ($dir_list,$listerror) = &dirlist($portfolio_root.$directory,$domain,
+                                             $stu_name,$getpropath);
+        my $version = &get_next_version($answer_name,$answer_ext,$dir_list);
+        my $new_answer = 
+            &version_selected_portfile($domain,$stu_name,$directory,$answer_file,$version);
+        if ($new_answer ne 'problem getting file') {
+            push(@{$versioned_portfiles}, $directory.$new_answer);
+            &mark_as_readonly($domain,$stu_name,[$directory.$new_answer],
+                              [$symb,$env{'request.course.id'},'graded']);
+        }
+    }
+}
+
+sub get_next_version {
+    my ($answer_name, $answer_ext, $dir_list) = @_;
+    my $version;
+    if (ref($dir_list) eq 'ARRAY') {
+        foreach my $row (@{$dir_list}) {
+            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 ($file_version ne '') {
+                    # a versioned file is found  so save it for later
+                    if ($file_version > $version) {
+                        $version = $file_version;
+                    }
+                }
+            }
+        }
+    }
+    $version ++;
+    return($version);
+}
+
+sub version_selected_portfile {
+    my ($domain,$stu_name,$directory,$file_name,$version) = @_;
+    my ($answer_name,$answer_ver,$answer_ext) =
+        &file_name_version_ext($file_name);
+    my $new_answer;
+    $env{'form.copy'} =
+        &getfile("/uploaded/$domain/$stu_name/portfolio$directory$file_name");
+    if($env{'form.copy'} eq '-1') {
+        $new_answer = 'problem getting file';
+    } else {
+        $new_answer = $answer_name.'.'.$version.'.'.$answer_ext;
+        my $copy_result = 
+            &finishuserfileupload($stu_name,$domain,'copy',
+                                  '/portfolio'.$directory.$new_answer);
+    }
+    undef($env{'form.copy'});
+    return ($new_answer);
+}
+
+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('.', at file_parts);
+    } else {
+        $name=join('.', at file_parts);
+    }
+    return($name,$version,$ext);
+}
+
 #----------------------------------------------Get portfolio file permissions
 
 sub get_portfile_permissions {
@@ -9310,7 +9394,9 @@
 
 sub automated_portfile_access {
     my ($accesstype,$addsref,$delsref,$info) = @_;
-    return unless (($accesstype eq 'public') || ($accesstype eq 'ip'));
+    unless (($accesstype eq 'public') || ($accesstype eq 'ip')) {
+        return 'invalid';
+    }
     my %urls;
     if (ref($addsref) eq 'ARRAY') {
         foreach my $requrl (@{$addsref}) {


More information about the LON-CAPA-cvs mailing list