--- 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__;