[LON-CAPA-cvs] cvs: loncom /interface lonsource.pm
raeburn
raeburn at source.lon-capa.org
Fri Apr 20 22:48:24 EDT 2012
raeburn Sat Apr 21 02:48:24 2012 EDT
Modified files:
/loncom/interface lonsource.pm
Log:
- Display appropriate warnings if source file unavailable, or user does
not have privs to see Source Code.
- If there is no author or co-author target on this server, still show
XML source, but do not provide opportunity to copy to CSTR.
- xhtml
Index: loncom/interface/lonsource.pm
diff -u loncom/interface/lonsource.pm:1.27 loncom/interface/lonsource.pm:1.28
--- loncom/interface/lonsource.pm:1.27 Mon Oct 31 01:16:59 2011
+++ loncom/interface/lonsource.pm Sat Apr 21 02:48:24 2012
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Source Code handler
#
-# $Id: lonsource.pm,v 1.27 2011/10/31 01:16:59 raeburn Exp $
+# $Id: lonsource.pm,v 1.28 2012/04/21 02:48:24 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -40,7 +40,7 @@
use Apache::File;
use Apache::lonlocal;
use HTML::Entities;
-use LONCAPA;
+use LONCAPA qw(:DEFAULT :match);
sub make_link {
my ($filename, $listname) = @_;
@@ -201,23 +201,81 @@
}
sub print_item {
- my ($r, $filename) = @_;
- my $file_output = &includemeta(&Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonDocRoot'}.$filename),$filename);
- my $count=0;
- my $maxlength=-1;
- foreach (split ("\n", $file_output)) {
- $count+=int(length($_)/79);
- $count++;
- if (length($_) > $maxlength) {
- $maxlength = length($_);
+ my ($r,$filename,$listname) = @_;
+ my $file_output =
+ &includemeta(&Apache::lonnet::getfile($Apache::lonnet::perlvar{'lonDocRoot'}.$filename),
+ $filename);
+ $r->print(&Apache::loncommon::start_page('View Source Code',undef,
+ {'only_body' => 1}));
+ if ($file_output ne '') {
+ my $access_to_cstr;
+ my $lonhost = $r->dir_config('lonHostID');
+ if (&Apache::lonnet::is_library($lonhost)) {
+ my @possdoms = &Apache::lonnet::current_machine_domains();
+ foreach my $dom (@possdoms) {
+ if ($env{"user.role.au./$dom/"}) {
+ $access_to_cstr = 1;
+ last;
+ }
+ }
+ unless ($access_to_cstr) {
+ foreach my $key (keys(%env)) {
+ if ($key =~ m{^\Quser.role.ca./\E($match_domain)/}) {
+ my $adom = $1;
+ if (grep(/^\Q$adom\E$/, at possdoms)) {
+ $access_to_cstr = 1;
+ last;
+ }
+ }
+ }
+ }
+ if ($access_to_cstr) {
+ $r->print('
+ <form name="copy" action="/adm/source" target="_parent" method="post">
+ <input type="button" value="'.&mt('Close Window').'" name="close" onclick="window.close();" />
+ <input type="hidden" name="filename" value="'.$filename.'" />
+ <input type="hidden" name="listname" value="'.$listname.'" />
+ <input type="hidden" name="action" value="stage2" />
+ <input type="submit" value="'.&mt('Copy to Construction Space').'" />
+ </form><hr />
+ ');
+ } else {
+ $r->print('<p><span class="LC_info">'.
+ &mt('Source code is displayed, but you can not copy to Authoring Space, as you do not have an author or co-author role on this server.').
+ '</span></p><a href="javascript:window.close();">'.&mt('Close Window').
+ '</a><br /><hr />'
+ );
+ }
+ } else {
+ $r->print('<p><span class="LC_info">'.
+ &mt('Source code is displayed, but you can not copy to Authoring Space on this server.').
+ '</span></p><a href="javascript:window.close();">'.&mt('Close Window').
+ '</a><br /><hr />'
+ );
+
+ }
+ my $count=0;
+ my $maxlength=-1;
+ foreach (split ("\n", $file_output)) {
+ $count+=int(length($_)/79);
+ $count++;
+ if (length($_) > $maxlength) {
+ $maxlength = length($_);
+ }
}
+ my $rows = $count;
+ my $cols = $maxlength;
+ $r->print('<form name="showsrc" action="" method="post" onsubmit="return false">'."\n".
+ '<textarea rows="'.$rows.'" cols="'.$cols.'" name="editxmltext">'.
+ &HTML::Entities::encode($file_output,'<>&"').'</textarea></form>');
+ } else {
+ $r->print('<p class="LC_warning">'.
+ &mt('Unable to retrieve file contents.').
+ '</p><a href="javascript:window.close();">'.&mt('Close Window').'</a>'
+ );
}
- my $rows = $count;
- my $cols = $maxlength;
- $r->print('<textarea rows="'.$rows.'" cols="'.$cols.'" name="editxmltext">'.
- &HTML::Entities::encode($file_output,'<>&"').'</textarea>');
- return OK;
-
+ $r->print(&Apache::loncommon::end_page());
+ return;
}
sub includemeta {
@@ -234,7 +292,11 @@
} else {
$file_output=~s/(\<(?:html|problem)[^\>]*\>)/$1\n\<meta name=\"isbasedontime\" content=\"\Q$copytime\E\" \/\>/i;
}
- return $file_output;
+ if ($file_output eq '-1') {
+ return;
+ } else {
+ return $file_output;
+ }
}
sub handler {
@@ -247,32 +309,27 @@
if ($source ne 'open') {
$env{'user.error.msg'}="$filename:cre:1:1:Source code not available";
return HTTP_NOT_ACCEPTABLE;
- }
- unless ((&Apache::lonnet::allowed('bre',$filename)) &&
- (&Apache::lonnet::allowed('cre','/'))) {
+ }
+ unless (&Apache::lonnet::allowed('bre',$filename)) {
$env{'user.error.msg'}="$filename:bre:1:1:Access to resource denied";
return HTTP_NOT_ACCEPTABLE;
- }
+ }
+ unless (&Apache::lonnet::allowed('cre','/')) {
+ $env{'user.error.msg'}="$filename:cre:1:1:Access to source code denied";
+ return HTTP_NOT_ACCEPTABLE;
+ }
&Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
if ($env{'form.action'} eq 'stage2') {
- &stage_2($r, $filename,$listname);
+ &stage_2($r,$filename,$listname);
} elsif($env{'form.action'} eq 'copy_stage') {
- ©_stage($r, $filename,$env{'form.listname'},$env{'form.newpath'});
+ ©_stage($r,$filename,$listname,$env{'form.newpath'});
} elsif($env{'form.action'} eq 'delete_confirm') {
- &delete_copy_file($r, $env{'form.newpath'}, $env{'form.filename'}, $env{'form.path'}, '0');
+ &delete_copy_file($r,$env{'form.newpath'},$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()" />
- <input type="hidden" name="filename" value="'.$filename.'" />
- <input type="hidden" name="listname" value="'.$listname.'" />
- <input type="hidden" name="action" value="stage2" />
- <input type="submit" value="'.&mt('Copy to Construction Space').'" />
- </form>');
- $r->print('<hr />');
- &print_item($r, $env{'form.filename'});
+ &print_item($r,$filename,$listname);
}
return OK;
}
More information about the LON-CAPA-cvs
mailing list