--- loncom/interface/loncommon.pm 2019/05/02 02:12:18 1.1328
+++ loncom/interface/loncommon.pm 2020/06/01 20:35:02 1.1342
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.1328 2019/05/02 02:12:18 raeburn Exp $
+# $Id: loncommon.pm,v 1.1342 2020/06/01 20:35:02 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -80,7 +80,6 @@ use Text::Aspell;
use Authen::Captcha;
use Captcha::reCAPTCHA;
use JSON::DWIW;
-use LWP::UserAgent;
use Crypt::DES;
use DynaLoader; # for Crypt::DES version
use MIME::Lite;
@@ -436,7 +435,7 @@ sub studentbrowser_javascript {
OFFLOAD
- }
}
}
}
@@ -8937,8 +9073,7 @@ sub modal_link {
$target_attr = 'target="'.$target.'"';
}
return <<"ENDLINK";
-
- $linktext
+$linktext
ENDLINK
}
@@ -15924,7 +16059,8 @@ sub construct_course {
$outcome .= $clonemsg.$linefeed;
my %oldcenv=&Apache::lonnet::dump('environment',$$crsudom,$$crsunum);
# Copy all files
- &Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid,$args->{'datemode'},$args->{'dateshift'});
+ &Apache::lonclonecourse::copycoursefiles($cloneid,$$courseid,$args->{'datemode'},
+ $args->{'dateshift'},$args->{'crscode'});
# Restore URL
$cenv{'url'}=$oldcenv{'url'};
# Restore title
@@ -16191,12 +16327,17 @@ sub construct_course {
# Open all assignments
#
if ($args->{'openall'}) {
+ my $opendate = time;
+ if ($args->{'openallfrom'} =~ /^\d+$/) {
+ $opendate = $args->{'openallfrom'};
+ }
my $storeunder=$$crsudom.'_'.$$crsunum.'.0.opendate';
- my %storecontent = ($storeunder => time,
+ my %storecontent = ($storeunder => $opendate,
$storeunder.'.type' => 'date_start');
-
- $outcome .= &mt('Opening all assignments').': '.&Apache::lonnet::cput
- ('resourcedata',\%storecontent,$$crsudom,$$crsunum).$linefeed;
+ $outcome .= &mt('All assignments open starting [_1]',
+ &Apache::lonlocal::locallocaltime($opendate)).': '.
+ &Apache::lonnet::cput
+ ('resourcedata',\%storecontent,$$crsudom,$$crsunum).$linefeed;
}
#
# Set first page
@@ -18193,7 +18334,26 @@ sub shorten_symbs {
}
sub is_nonframeable {
- my ($url,$absolute,$hostname,$ip) = @_;
+ my ($url,$absolute,$hostname,$ip,$nocache) = @_;
+ my ($remprotocol,$remhost) = ($url =~ m{^(https?)\://(([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,})}i);
+ return if (($remprotocol eq '') || ($remhost eq ''));
+
+ $remprotocol = lc($remprotocol);
+ $remhost = lc($remhost);
+ my $remport = 80;
+ if ($remprotocol eq 'https') {
+ $remport = 443;
+ }
+ my ($result,$cached) = &Apache::lonnet::is_cached_new('noiframe',$remhost.':'.$remport);
+ if ($cached) {
+ unless ($nocache) {
+ if ($result) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ }
my $uselink;
my $request = new HTTP::Request('HEAD',$url);
my $response = &LONCAPA::LWPReq::makerequest('',$request,'','',5);
@@ -18203,8 +18363,7 @@ sub is_nonframeable {
$secpolicy =~ s/^\s+|\s+$//g;
$xframeop =~ s/^\s+|\s+$//g;
if (($secpolicy ne '') || ($xframeop ne '')) {
- my ($remotehost) = ($url =~ m{^(https?\://[^/?#]+)});
- $remotehost = lc($remotehost);
+ my $remotehost = $remprotocol.'://'.$remhost;
my ($origin,$protocol,$port);
if ($ENV{'SERVER_PORT'} =~/^\d+$/) {
$port = $ENV{'SERVER_PORT'};
@@ -18302,10 +18461,29 @@ sub is_nonframeable {
}
}
}
+ if ($nocache) {
+ if ($cached) {
+ my $devalidate;
+ if ($uselink && !$result) {
+ $devalidate = 1;
+ } elsif (!$uselink && $result) {
+ $devalidate = 1;
+ }
+ if ($devalidate) {
+ &Apache::lonnet::devalidate_cache_new('noiframe',$remhost.':'.$remport);
+ }
+ }
+ } else {
+ if ($uselink) {
+ $result = 1;
+ } else {
+ $result = 0;
+ }
+ &Apache::lonnet::do_cache_new('noiframe',$remhost.':'.$remport,$result,3600);
+ }
return $uselink;
}
-
1;
__END__;