[LON-CAPA-cvs] cvs: loncom /publisher lonunauthorized.pm
raeburn
raeburn at source.lon-capa.org
Sat Nov 12 20:07:10 EST 2011
raeburn Sun Nov 13 01:07:10 2011 EDT
Modified files:
/loncom/publisher lonunauthorized.pm
Log:
- More meaningful messages when HTTP_NOT_ACCEPTABLE encountered for:
/adm/diff, /adm/upload, /adm/cfile, /adm/publish, adm/testbank, /adm/cleanup
- Provide "Switch Server" link in case of a URL for Construction Space file or
directory, for which current user has access, but homeserver is different server.
-------------- next part --------------
Index: loncom/publisher/lonunauthorized.pm
diff -u loncom/publisher/lonunauthorized.pm:1.10 loncom/publisher/lonunauthorized.pm:1.11
--- loncom/publisher/lonunauthorized.pm:1.10 Tue Jun 7 18:05:08 2011
+++ loncom/publisher/lonunauthorized.pm Sun Nov 13 01:07:09 2011
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Unauthorized to access construction space
#
-# $Id: lonunauthorized.pm,v 1.10 2011/06/07 18:05:08 www Exp $
+# $Id: lonunauthorized.pm,v 1.11 2011/11/13 01:07:09 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -35,6 +35,7 @@
use Apache::loncacc;
use Apache::lonlocal;
use LONCAPA();
+use HTML::Entities();
sub handler {
my $r = shift;
@@ -45,57 +46,193 @@
# ------------------------------------------------------------ Print the screen
# Figure out who the user is and what they wanted to access
- my ($ownername,$ownerdomain)=
- &Apache::loncacc::constructaccess($env{'request.editurl'},$r->dir_config('lonDefDomain'));
+ my ($ownername,$ownerdomain,$ownerhome);
+ if ($env{'request.editurl'} ne '') {
+ ($ownername,$ownerdomain,$ownerhome) =
+ &Apache::loncacc::constructaccess($env{'request.editurl'});
+ }
+
+ # Breadcrumbs
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ if ($env{'request.role'} =~ /^(au|ca|aa)/) {
+ &Apache::lonhtmlcommon::add_breadcrumb({
+ 'text' => 'Construction Space',
+ 'href' => &Apache::loncommon::authorspace(),
+ });
+ } elsif (($env{'request.course.id'}) &&
+ (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
+ &Apache::lonhtmlcommon::add_breadcrumb({
+ 'text' => 'Course Contents',
+ 'href' => '/adm/coursedocs',
+ });
+ }
+
# print header
$r->print(&Apache::loncommon::start_page("Failed Access to Construction Space",
undef,
- {'domain' => $ownerdomain,}));
+ {'domain' => $ownerdomain,}).
+ &Apache::lonhtmlcommon::breadcrumbs());
# figure out what went wrong
if ($ownerdomain) {
- $r->print('<p class="LC_error">'
- .&mt('The construction space for this resource is located on another server.')
- .'</p>'
- .'<p>'
- .&mt('Choose another server.')
- .'</p>');
- my $ownerhome=&Apache::lonnet::homeserver($ownername,$ownerdomain);
- unless ($ownerhome eq 'no_host') {
- $r->print('<p>'
- .&mt('Please log into [_1] to edit.'
- ,'<tt>'.&Apache::lonnet::hostname($ownerhome).'</tt>')
- .'</p>');
+ if ($ownerhome eq 'no_host') {
+ $r->print('<p class="LC_error">'.
+ &mt('Unable to determine home server for this resource: [_1]',
+ '<span class="LC_filename">'.$env{'request.editurl'}.'</span>').
+ '</p>');
+ } else {
+ my @hosts = &Apache::lonnet::current_machine_ids();
+ if (!grep(/^\Q$ownerhome\E$/, at hosts)) {
+ my $switchlink = '/adm/switchserver?otherserver='.$ownerhome.
+ '&origurl='.&HTML::Entities::encode($env{'request.editurl'},'<>&"');
+ $r->print('<p class="LC_warning">'.
+ &mt('The construction space for this resource is located on a different server: [_1]',
+ '<b><tt>'.&Apache::lonnet::hostname($ownerhome).'</b></tt>').
+ '</p>'.
+ '<p class="LC_error"><a href="'.$switchlink.'">'.
+ &mt('Switch Server').'</a>'.
+ '</p>');
+ } else {
+ $r->print('<p class="LC_error">'.
+ &mt('You do not have authoring privileges for this resource').' '.
+ '<span class="LC_filename">'.$env{'request.editurl'}.'</span>'.
+ '</p>');
+ }
}
} elsif (!$env{'request.editurl'}) {
- $r->print('<p class="LC_error">'
- .&mt('There may be a problem with the filename, e.g., you may be attempting to edit a versioned file (files in construction may not include a version number in front of the extension).')
- .'</p>');
+ if ($ENV{'REDIRECT_URL'} =~ m{^/adm/([^/]+)}) {
+ my $action = $1;
+ my ($option,$filename,$filename1,$filename2,$decompress,
+ $qualifiedfilename);
+ if ($ENV{'REDIRECT_QUERY_STRING'} ne '') {
+ foreach my $pair (split(/&/,$ENV{'REDIRECT_QUERY_STRING'})) {
+ my ($name,$value) = split(/=/,$pair);
+ if ($name eq 'filename') {
+ if (($action eq 'publish') || ($action eq 'cfile')) {
+ $filename = &LONCAPA::unescape($value);
+ } else {
+ $filename = $value;
+ }
+ } elsif ($name eq 'filename1') {
+ $filename1 = $value;
+ } elsif ($name eq 'filename2') {
+ $filename2 = $value;
+ } elsif ($name eq 'decompress') {
+ $decompress = $value;
+ $option = 'decompress';
+ } elsif ($name eq 'qualifiedfilename') {
+ $qualifiedfilename = $value;
+ } elsif ($name = 'versionone') {
+ if ($value eq 'priv') {
+ $option = 'cstr';
+ }
+ } elsif ($name eq 'versiontwo') {
+ if ($value eq 'priv') {
+ $option = 'cstr';
+ }
+ } elsif ($name eq 'filetwo') {
+ $option = $value;
+ }
+ }
+ if (($action eq 'upload') || ($action eq 'testbank')) {
+ if (($filename1 ne '') && ($filename ne '')) {
+ $filename = $filename1.$filename2;
+ }
+ } elsif ($action eq 'cfile') {
+ if ($decompress ne '') {
+ $filename = $decompress;
+ } elsif ($qualifiedfilename ne '') {
+ $filename = $qualifiedfilename;
+ }
+ }
+ my %deniedactions = &get_denied_action_text();
+ my $warning;
+ if ($option eq 'decompress') {
+ $warning = $deniedactions{$option};
+ } else {
+ $warning = $deniedactions{$action};
+ }
+ if ($warning) {
+ if (($action eq 'diff') && ($option ne 'cstr')) {
+ $r->print('<p class="LC_error">'.
+ $deniedactions{$action}.'</p><p class="LC_warning">'
+ &mt('You do not have privileges to view the published resource').' '.
+ '<span class="LC_filename">'.$filename.'</span>'.
+ '</p>');
+ } else {
+ if (($action eq 'diff') && ($option eq 'cstr')) {
+ $filename =~ s{^/res/}{/priv/};
+ }
+ $r->print('<p class="LC_error">'.
+ $deniedactions{$action}.'</p><p class="LC_warning">'.
+ &mt('You do not have authoring privileges for this resource').' '.
+ '<span class="LC_filename">'.$filename.'</span>'.
+ '</p>');
+ }
+ } else {
+ $r->print('<p class="LC_error">'.
+ &mt('You are not permitted to take this action.').
+ '</p>');
+ }
+ }
+ } elsif ($r->uri =~ m{priv/.+\.\d+\.[^.]+$}) {
+ $r->print('<p class="LC_error">'.
+ &mt('There is a problem with the filename').' '.
+ '<span class="LC_filename">'.$r->uri.'</span></p>'.
+ '<p class="LC_warning">'.
+ &mt('You may be attempting to edit a versioned file (files in construction space may not include a version number before the extension).').
+ '</p>');
+ } else {
+ $r->print('<p class="LC_error">'.
+ &mt('You are not permitted to take this action.').
+ '</p>');
+ }
+ } elsif ($env{'request.editurl'} =~ m{priv/.+\.\d+\.[^.]+$}) {
+ $r->print('<p class="LC_error">'.
+ &mt('There is a problem with the filename').' '.
+ '<span class="LC_filename">'.$env{'request.editurl'}.'</span></p>'.
+ '<p class="LC_warning">'.
+ &mt('You may be attempting to edit a versioned file (files in construction space may not include a version number before the extension).').
+ '</p>');
} else {
$r->print('<p class="LC_error">'
- .&mt('You do not have authoring privileges for this resource')
+ .&mt('You do not have authoring privileges for this resource').' '
+ .'<span class="LC_filename">'.$env{'request.editurl'}.'</span>'
.'</p>');
- my ($realownername)=
- ($env{'request.editurl'}=~m{/(?:~|priv/|home/)($LONCAPA::username_re)});
+ my ($realownerdom,$realownername) =
+ ($env{'request.editurl'}=~m{^/priv/($LONCAPA::domain_re)/($LONCAPA::username_re)});
my $realownerhome=
- &Apache::lonnet::homeserver($realownername,
- $r->dir_config('lonDefDomain'));
+ &Apache::lonnet::homeserver($realownername,$realownerdom);
unless ($realownerhome eq 'no_host') {
- my $plainname=&Apache::loncommon::plainname($realownername,$r->dir_config('lonDefDomain'));
- my $user=$realownername.':'.$r->dir_config('lonDefDomain');
+ my $plainname=&Apache::loncommon::plainname($realownername,$realownerdom);
+ my $user=$realownername.':'.$realownerdom;
my $userlink=&Apache::loncommon::aboutmewrapper(
$plainname.' ('.$user.')'
,$realownername
- ,$r->dir_config('lonDefDomain'));
+ ,$realownerdom);
$r->print('<p>'
.&mt('Contact [_1] for access.',$userlink)
.'</p>');
}
}
-
$r->print(&Apache::loncommon::end_page());
return OK;
-}
+}
+
+sub get_denied_action_text {
+ my %deniedtext =
+ &Apache::lonlocal::texthash(
+ cfile => 'Copying, moving, renaming or creating file not allowed.',
+ publish => 'Publishing not allowed.',
+ upload => 'Uploading file not allowed.',
+ testbank => 'Uploading testbank file not allowed',
+ retrieve => 'Retrieving version information not allowed.',
+ cleanup => 'Clean up of file not allowed.',
+ diff => 'Display of differences between file versions disallowed.',
+ decompress => 'Decompression of archive file disallowed.',
+ );
+ return %deniedtext;
+}
1;
__END__
More information about the LON-CAPA-cvs
mailing list