[LON-CAPA-cvs] cvs: loncom /interface lonsource.pm
www
www at source.lon-capa.org
Tue Oct 25 15:11:52 EDT 2011
www Tue Oct 25 19:11:52 2011 EDT
Modified files:
/loncom/interface lonsource.pm
Log:
Bug #1320
Index: loncom/interface/lonsource.pm
diff -u loncom/interface/lonsource.pm:1.25 loncom/interface/lonsource.pm:1.26
--- loncom/interface/lonsource.pm:1.25 Tue Oct 25 14:28:13 2011
+++ loncom/interface/lonsource.pm Tue Oct 25 19:11:52 2011
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Source Code handler
#
-# $Id: lonsource.pm,v 1.25 2011/10/25 14:28:13 www Exp $
+# $Id: lonsource.pm,v 1.26 2011/10/25 19:11:52 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -50,8 +50,8 @@
}
sub stage_2 {
- my ($r, $filename, $author, $listname) = @_;
- my ($uname, $udom) = &Apache::loncacc::constructaccess('/~'.$author.'/',$r->dir_config('lonDefDomain'));
+ my ($r, $filename, $listname) = @_;
+ my ($author)=($filename=~/\/res\/[^\/]+\/([^\/]+)\//);
$r->print(&Apache::loncommon::start_page('Copy Problem Source Code to Construction Space')
.&mt('Please enter the directory that you would like the source code to go into.')
.'<p>'
@@ -68,11 +68,7 @@
return OK;
}
-
-sub copy_stage {
- my ($r, $filename, $listname, $newpath) = @_;
-
-#Figure out if we are author or co-author
+sub copy_author {
my $role;
my $domain;
my $author_name;
@@ -83,8 +79,22 @@
$domain = $env{'user.domain'};
$author_name = $env{'user.name'};
}
+ return ($role,$author_name,$domain);
+}
+
+
+sub copy_stage {
+ my ($r, $filename, $listname, $newpath) = @_;
+
+#Figure out if we are author or co-author
+ my ($role,$author_name,$domain)=©_author();
+# Construct path to copy and filter out any possibly nasty stuff
my $path_to_new_file = '/home/httpd/html/priv/'.$domain.'/'.$author_name.'/'.$newpath.'/'.$listname;
+ $path_to_new_file=~s/\.\.//g;
+ $path_to_new_file=~s/\~//g;
+ $path_to_new_file=~s/\/+/\//g;
+
#Just checking again for access as we want to make sure that it is really ok now that we have the real path
my ($uname,$udom)= &Apache::loncacc::constructaccess($path_to_new_file);
@@ -96,29 +106,27 @@
return;
}
-
#allowed
$r->print(&Apache::loncommon::start_page('Copying Source'));
my $result = &Apache::loncfile::exists($uname, $udom, $path_to_new_file);
$r->print($result);
if(($result) && ($result =~ m|published|) ) {
- &delete_copy_file($r, $author_name, $newpath, $filename, $path_to_new_file, '1');
+ &delete_copy_file($r, $newpath, $filename, $path_to_new_file, '1');
} elsif(($result) && ($result =~ m|exists!|)) {
- &confirm($r, $author_name, $newpath, $filename, $path_to_new_file);
+ &confirm($r, $newpath, $filename, $path_to_new_file);
} else {
- ©_file($r, $author_name, $newpath, $filename, $path_to_new_file);
+ ©_file($r, $newpath, $filename, $path_to_new_file);
}
$r->print(&Apache::loncommon::end_page());
}
sub confirm {
- my ($r, $author_name, $newpath, $filename, $path_to_new_file) = @_;
+ my ($r, $newpath, $filename, $path_to_new_file) = @_;
$r->print("<b>Press delete to remove file and replace it with a copy of the source you are viewing</b><br /><br / >");
$r->print('<form name="delete_confirm" action="/adm/source" target="_parent" method="post">
<input type="hidden" name="filename" value="'.$filename.'" />
<input type="hidden" name="path" value="'.$path_to_new_file.'" />
- <input type="hidden" name="author" value="'.$author_name.'" />
<input type="hidden" name="newpath" value="'.$newpath.'" />
<input type="hidden" name="action" value="delete_confirm" />
@@ -127,7 +135,7 @@
}
sub delete_copy_file {
- my ($r, $author_name, $newpath, $filename, $path_to_new_file, $type) = @_;
+ my ($r, $newpath, $filename, $path_to_new_file, $type) = @_;
if($type eq '1') {
$r->print('<p><span class="LC_warning">'
.&mt('Cannot delete non-obsolete published file.')
@@ -147,15 +155,20 @@
$r->print('<p class="LC_error">'.&mt('No such file').'</p></form>');
return 0;
}
- ©_file($r, $author_name, $newpath, $filename, $path_to_new_file);
+ ©_file($r, $newpath, $filename, $path_to_new_file);
}
}
sub copy_file {
- my ($r, $author_name, $newpath, $filename, $path_to_new_file) = @_;
+ my ($r, $newpath, $filename, $path_to_new_file) = @_;
$r->print("<b>Creating directories</b>");
- my $path = '/home/'.$author_name.'/public_html/';
+
+#Figure out if we are author or co-author
+ my ($role,$author_name,$domain)=©_author();
+
+ my $path = '/home/httpd/html/priv/'.$domain.'/'.$author_name.'/';
my @directories = split(/\//,$newpath);
+
foreach my $now_checking (@directories) {
if($now_checking ne '') {
$path = $path.'/'.$now_checking;
@@ -244,18 +257,11 @@
$r->send_http_header;
if ($env{'form.action'} eq 'stage2') {
- my $author = &Apache::lonnet::metadata($filename,'authorspace');
- #strip the domain of the author name
- if ($author =~ /:/) {
- ($author) = split(/:/,$author);
- } else {
- ($author) = split(/@/,$author);
- }
- &stage_2($r, $env{'form.filename'}, $author, $listname);
+ &stage_2($r, $filename,$listname);
} elsif($env{'form.action'} eq 'copy_stage') {
©_stage($r, $filename,$env{'form.listname'},$env{'form.newpath'});
} elsif($env{'form.action'} eq 'delete_confirm') {
- &delete_copy_file($r, $env{'form.author'}, $env{'form.newpath'}, $env{'form.filename'}, $env{'form.path'}, '0');
+ &delete_copy_file($r, $env{'form.newpath'}, $env{'form.filename'}, $env{'form.path'}, '0');
} else {
$r->print('<form name="copy" action="/adm/source" target="_parent" method="post">
<input type="button" value="'.&mt('Close Window').'" name="close" onclick="window.close()" />
More information about the LON-CAPA-cvs
mailing list