[LON-CAPA-cvs] cvs: rat(version_2_11_X) / lonpage.pm
raeburn
raeburn at source.lon-capa.org
Thu Mar 5 15:46:04 EST 2020
raeburn Thu Mar 5 20:46:04 2020 EDT
Modified files: (Branch: version_2_11_X)
/rat lonpage.pm
Log:
- For 2.11
Backport 1.130, 1.131, 1.132, 1.133, 1.134, 1.135, 1.136, 1.137
-------------- next part --------------
Index: rat/lonpage.pm
diff -u rat/lonpage.pm:1.111.2.10 rat/lonpage.pm:1.111.2.11
--- rat/lonpage.pm:1.111.2.10 Wed Jan 22 14:55:13 2020
+++ rat/lonpage.pm Thu Mar 5 20:46:04 2020
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Page Handler
#
-# $Id: lonpage.pm,v 1.111.2.10 2020/01/22 14:55:13 raeburn Exp $
+# $Id: lonpage.pm,v 1.111.2.11 2020/03/05 20:46:04 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,6 +43,7 @@
use Apache::lonhomework;
use Apache::lonenc();
use HTML::TokeParser;
+use HTML::Entities();
use GDBM_File;
use Apache::lonsequence;
use lib '/home/httpd/lib/perl/';
@@ -186,6 +187,8 @@
if (-e "$fn.db") {
my %buttonshide;
my $hostname = $r->hostname();
+ my $lonhost = $r->dir_config('lonHostID');
+ my $ip = &Apache::lonnet::get_host_ip($lonhost);
if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) {
# ------------------------------------------------------------------- Hash tied
my $firstres=$hash{'map_start_'.$requrl};
@@ -264,23 +267,74 @@
foreach (@colcont) {
my $src=$hash{'src_'.$_};
my $plainsrc = $src;
+ my $anchor;
+ if ($hash{'ext_'.$_} eq 'true:') {
+ $cellexternal{$_}=($hash{'ext_'.$_} eq 'true:');
+ $src =~ s{^/ext/}{http://};
+ $src =~ s{http://https://}{https://};
+ if ($src =~ /(\#[^#]+)$/) {
+ $anchor = $1;
+ $src =~ s/\#[^#]+$//;
+ }
+ }
+ my $unencsrc = $src;
my ($extension)=($src=~/\.(\w+)$/);
- $cellexternal{$_}=($hash{'ext_'.$_} eq 'true:');
if ($hash{'encrypted_'.$_}) {
$src=&Apache::lonenc::encrypted($src);
}
my ($mapid,$resid)=split(/\./,$_);
- my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src);
+ my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$plainsrc);
unless ($env{'request.role.adv'}) {
$buttonshide{$symb} = &Apache::lonnet::EXT("resource.0.buttonshide",$symb);
}
$cellemb{$_}=
&Apache::loncommon::fileembstyle($extension);
if ($cellexternal{$_}) {
- unless (($target eq 'tex') || ($target eq 'tex_answer')) {
- $ssibody{$_} = <<ENDEXT;
-<iframe src="$src" width="100%">No iframe support!</iframe>
+ if (($target eq 'tex') || ($target eq 'tex_answer')) {
+ my $shown = $src.$anchor;
+ if (($hash{'encrypted_'.$_}) && (!$env{'request.role.adv'})) {
+ $shown = &mt('URL not shown (encrypted)');
+ }
+ my $title=&Apache::lonnet::gettitle($symb);
+ $title = &Apache::lonxml::latex_special_symbols($title);
+ $shown = &Apache::lonxml::latex_special_symbols($shown);
+ $ssibody{$_} = ' \strut \\\\ \textit{'.$title.'} \strut \\\\ '.$shown.'\\\\';
+ } else {
+ my $showsrc = $src;
+ my ($is_pdf,$title,$linktext);
+ if ($unencsrc =~ /\.pdf$/i) {
+ $is_pdf = 1;
+ }
+ if (($hash{'encrypted_'.$_}) && ($symb)) {
+ $title=&Apache::lonnet::gettitle(&Apache::lonenc::encrypted($symb));
+ } else {
+ $title=&Apache::lonnet::gettitle($symb);
+ }
+ if ($env{'browser.mobile'}) {
+ if ($is_pdf) {
+ $linktext = &mt('Link to PDF (for mobile devices)');
+ $ssibody{$_} = &create_extlink($unencsrc,$anchor,$title,$linktext);
+ } else {
+ $linktext = &mt('Link to resource');
+ $ssibody{$_} = &create_extlink($unencsrc,$anchor,$title,$linktext);
+ }
+ } else {
+ my $absolute = $env{'request.use_absolute'};
+ my $uselink = &Apache::loncommon::is_nonframeable($unencsrc,$absolute,$hostname,$ip);
+ if (($uselink) || (($ENV{'SERVER_PORT'} == 443) && ($unencsrc =~ m{^http://}))) {
+ $linktext = &mt('Link to resource');
+ $ssibody{$_} = &create_extlink($unencsrc,$anchor,$title,$linktext);
+ } else {
+ if (($hash{'encrypted_'.$_}) && ($symb) && (!$env{'request.role.adv'})) {
+ $showsrc .= '?symb='.&Apache::lonenc::encrypted($symb);
+ } elsif ($anchor) {
+ $showsrc .= $anchor
+ }
+ $ssibody{$_} = <<ENDEXT;
+<iframe src="$showsrc" width="100%" height="300px">No iframe support!</iframe>
ENDEXT
+ }
+ }
}
} elsif ($cellemb{$_} eq 'ssi') {
# --------------------------------------------------------- This is an SSI cell
@@ -565,6 +619,7 @@
'// ]]>'.
"\n</script>\n";
}
+ &Apache::lonhtmlcommon::clear_breadcrumb_tools();
if (keys(%hastimeleft)) {
my (%uniquetimes,%uniquedisplays);
foreach my $item (values(%hastimeleft)) {
@@ -684,10 +739,7 @@
}
$r->print('>');
}
- unless (($cellexternal{$rid}) &&
- ($target eq 'tex') && ($target eq 'tex_answer')) {
- $r->print($ssibody{$rid});
- }
+ $r->print($ssibody{$rid});
unless (($target eq 'tex') || ($target eq 'tex_answer')) {
$r->print('</font>');
}
@@ -790,35 +842,43 @@
sub get_buttons {
my ($hash,$rid,$buttonshide,$hostname) = @_;
- my $metainfo = '';
- my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});
my ($mapid,$resid)=split(/\./,$rid);
my $symb=&Apache::lonnet::encode_symb($hash->{'map_id_'.$mapid},
$resid,
$hash->{'src_'.$rid});
+ my $aname;
+ if (($hash->{'encrypted_'.$rid}) && (!$env{'request.role.adv'})) {
+ $aname = 'LC_'.$rid;
+ } else {
+ $aname = &escape($symb);
+ }
+ my $metainfo = '<a name="'.$aname.'"></a>';
unless ($env{'request.role.adv'}) {
if ($buttonshide->{$symb} eq 'yes') {
- return;
+ return $metainfo;
}
}
+ my $crs_sec = $env{'request.course.id'} . (($env{'request.course.sec'} ne '')
+ ? "/$env{'request.course.sec'}"
+ : '');
+ my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});
if ($hash->{'encrypted_'.$rid}) {
- $symb=&Apache::lonenc::encrypted($symb);
$esrc=&Apache::lonenc::encrypted($esrc);
}
if ($hash->{'src_'.$rid} !~ m-^/uploaded/-
- && $hash->{'src_'.$rid} !~ m{^https?://}
+ && $hash->{'src_'.$rid} !~ m{^/ext/}
&& !$env{'request.enc'}
&& ($env{'request.role.adv'}
|| !$hash->{'encrypted_'.$rid})) {
- $metainfo .='<a name="'.&escape($symb).'" />'.
- '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" target="LONcatInfo">'.
+ $metainfo .= '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" '.
+ 'target="LONcatInfo">'.
'<img src="/res/adm/pages/catalog.png" class="LC_icon"'.
' alt="'.&mt('Show Metadata').'"'.
' title="'.&mt('Show Metadata').'" />'.
'</a>';
}
if (($hash->{'src_'.$rid} !~ m{^/uploaded/}) &&
- ($hash->{'src_'.$rid} !~ m{^https?://})) {
+ ($hash->{'src_'.$rid} !~ m{^/ext/})) {
$metainfo .= '<a href="/adm/evaluate?postdata='.
&escape($esrc).
'" target="LONcatInfo">'.
@@ -830,7 +890,8 @@
if (($hash->{'src_'.$rid}=~/$LONCAPA::assess_re/) &&
($hash->{'src_'.$rid} !~ m-^/uploaded/-)) {
- if (&Apache::lonnet::allowed('mgr',$env{'request.course.id'})) {
+ if ((&Apache::lonnet::allowed('mgr',$crs_sec)) ||
+ (&Apache::lonnet::allowed('vgr',$crs_sec))) {
$metainfo.=
'<a href="/adm/grades?symb='.&escape($symb).
# '&command=submission" target="LONcatInfo">'.
@@ -838,7 +899,10 @@
'<img src="/adm/lonMisc/subm_button.png" class="LC_icon"'.
' alt="'.&mt('View Submissions for a Student or a Group of Students').'"'.
' title="'.&mt('View Submissions for a Student or a Group of Students').'" />'.
- '</a>'.
+ '</a>';
+ }
+ if (&Apache::lonnet::allowed('mgr',$crs_sec)) {
+ $metainfo.=
'<a href="/adm/grades?symb='.&escape($symb).
# '&command=gradingmenu" target="LONcatInfo">'.
'&command=gradingmenu">'.
@@ -847,7 +911,8 @@
' title="'.&mt('Content Grades').'" />'.
'</a>';
}
- if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
+ if ((&Apache::lonnet::allowed('opa',$crs_sec)) ||
+ (&Apache::lonnet::allowed('vpa',$crs_sec))) {
$metainfo.=
'<a href="/adm/parmset?symb='.&escape($symb).
# '" target="LONcatInfo">'.
@@ -888,12 +953,15 @@
if ((&Apache::lonnet::allowed('cre','/')) &&
(&Apache::lonnet::metadata($url,'sourceavail') eq 'open')) {
$viewsrcbutton = 1;
- } elsif (&Apache::lonnet::allowed('vxc',$env{'request.course.id'})) {
+ } elsif (&Apache::lonnet::allowed('vxc',$crs_sec)) {
if ($url =~ m{^\Q/res/$cdom/\E($LONCAPA::match_username)/}) {
my $auname = $1;
if (($env{'request.course.adhocsrcaccess'} ne '') &&
(grep(/^\Q$auname\E$/,split(/,/,$env{'request.course.adhocsrcaccess'})))) {
$viewsrcbutton = 1;
+ } elsif ((&Apache::lonnet::metadata($url,'sourceavail') eq 'open') &&
+ (&Apache::lonnet::allowed('bre',$crs_sec))) {
+ $viewsrcbutton = 1;
}
}
}
@@ -942,11 +1010,20 @@
<span id="ddcountexpand" class="LC_menubuttons_inline_text" >$expand</span>
<img src="/res/adm/pages/timer.png" title="$desc" class="LC_icon" alt="$alttxt" /><span class="LC_menubuttons_inline_text">$title</span></a>
END
- &Apache::lonhtmlcommon::clear_breadcrumb_tools();
&Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$output);
return;
}
+sub create_extlink {
+ my ($url,$anchor,$title,$linktext) = @_;
+ my $shownlink;
+ unless ($title eq '') {
+ $shownlink = '<span style="font-weight:bold;">'.$title.'</span><br />';
+ }
+ my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');
+ $shownlink .= '<a href="'.$dest.'">'.$linktext.'</a>';
+ return $shownlink;
+}
1;
__END__
More information about the LON-CAPA-cvs
mailing list