[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)=&copy_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 {
-	&copy_file($r, $author_name, $newpath, $filename, $path_to_new_file);
+	&copy_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;
         }
-        &copy_file($r, $author_name, $newpath, $filename, $path_to_new_file);
+        &copy_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)=&copy_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') {
         &copy_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