[LON-CAPA-cvs] cvs: loncom /interface lonsource.pm

albertel lon-capa-cvs-allow@mail.lon-capa.org
Tue, 28 Aug 2007 22:46:34 -0000


albertel		Tue Aug 28 18:46:34 2007 EDT

  Modified files:              
    /loncom/interface	lonsource.pm 
  Log:
  - improve the handling of the access permissions failure case
  - handle authors with both : or @ as username/domain separators
  - cleanup the generation of the http headers
  
  
Index: loncom/interface/lonsource.pm
diff -u loncom/interface/lonsource.pm:1.19 loncom/interface/lonsource.pm:1.20
--- loncom/interface/lonsource.pm:1.19	Tue Aug 28 18:23:22 2007
+++ loncom/interface/lonsource.pm	Tue Aug 28 18:46:32 2007
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Souce Code handler
 #
-# $Id: lonsource.pm,v 1.19 2007/08/28 22:23:22 albertel Exp $
+# $Id: lonsource.pm,v 1.20 2007/08/28 22:46:32 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -51,10 +51,7 @@
 
 sub stage_2 {
     my ($r, $filename, $author, $listname) = @_;
-    $filename = $filename;
-    &Apache::loncommon::content_type($r,'text/html');
     my ($uname, $udom) = &Apache::loncacc::constructaccess('/~'.$author.'/',$r->dir_config('lonDefDomain'));
-    $r->send_http_header;
     $r->print(&Apache::loncommon::start_page('Problem source code moving operation'));
     $r->print("Please enter the directory that you would like the source code to go into, a default has also been 			provided <br />");
     $r->print("Also note, the path is in reference to the root of your construction space, and new directories will be 			automatically created. <br /><br />");
@@ -71,11 +68,11 @@
 
 sub copy_stage {
     my ($r, $filename, $listname, $newpath) = @_;
+
+#Figure out if we are author or co-author
     my $role;
     my $domain;
     my $author_name;
-#Figure out if we are author or co-author
-
     if ($env{'request.role'} =~ m{^ca\.}) {
         ($role, $domain, $author_name) = split(/\//,$env{'request.role'});
     } else {
@@ -88,24 +85,28 @@
 #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,$domain);
-    unless (($uname) && ($udom)) {
-        return HTTP_NOT_ACCEPTABLE;
+
+    if (!$uname || !$udom) {
+	$r->print(&Apache::loncommon::start_page('Not Allowed'));
+	$r->print(&mt('Not allowed to create file [_1]', $path_to_new_file));
+	$r->print(&Apache::loncommon::end_page());
+	return;
     }
-    &Apache::loncommon::content_type($r,'text/html');
-    $r->send_http_header;
+
+
+    #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, $author_name, $newpath, $filename, $path_to_new_file, '1');
     } elsif(($result) && ($result =~ m|exists!|)) {
-        &confirm($r, $author_name, $newpath, $filename, $path_to_new_file);
+	&confirm($r, $author_name, $newpath, $filename, $path_to_new_file);
     } else {
-        &copy_file($r, $author_name, $newpath, $filename, $path_to_new_file);
+	&copy_file($r, $author_name, $newpath, $filename, $path_to_new_file);
     }
-
-    return OK;
-
+    
+    $r->print(&Apache::loncommon::end_page());
 }
 
 sub confirm {
@@ -230,20 +231,25 @@
         $env{'user.error.msg'}="$filename:bre:1:1:Access to resource denied";
         return HTTP_NOT_ACCEPTABLE;
     } 
+
+    &Apache::loncommon::content_type($r,'text/html');
+    $r->send_http_header;
+
     if ($env{'form.action'} eq 'stage2') {
         my $author = &Apache::lonnet::metadata($filename,'authorspace');
-        ($author) = split('@',$author); #strip the domain of the author name
+	#strip the domain of the author name
+	if ($author =~ /:/) {
+	    ($author) = split(/:/,$author);
+	} else {
+	    ($author) = split(/@/,$author);
+	}
         &stage_2($r, $env{'form.filename'}, $author, $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') {
-        &Apache::loncommon::content_type($r,'text/html');
-        $r->send_http_header;
         &delete_copy_file($r, $env{'form.author'}, $env{'form.newpath'}, $env{'form.filename'}, $env{'form.path'}, '0');
     } else {
-        &Apache::loncommon::content_type($r,'text/html');
-        $r->send_http_header;
-        $r->print('<form name="copy" action="/adm/source" target="_parent" method="post">
+	$r->print('<form name="copy" action="/adm/source" target="_parent" method="post">
                   <input type="button" value="Close Window" name="close" onClick="window.close()" />
                   <input type="hidden" name="filename" value="'.$filename.'" />
                   <input type="hidden" name="listname" value="'.$listname.'" />