[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 {
- ©_file($r, $author_name, $newpath, $filename, $path_to_new_file);
+ ©_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') {
©_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.'" />