[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