version 1.149.2.5.2.3, 2022/10/05 22:54:00
|
version 1.171, 2025/05/26 19:55:11
|
Line 42 use Safe::Hole;
|
Line 42 use Safe::Hole;
|
use Opcode; |
use Opcode; |
use Apache::lonenc; |
use Apache::lonenc; |
use Fcntl qw(:flock); |
use Fcntl qw(:flock); |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
use File::Basename; |
use File::Basename; |
|
|
|
|
Line 63 my %randomizationcode; # code used to gr
|
Line 63 my %randomizationcode; # code used to gr
|
my %encurl; # URLs in this folder are supposed to be encrypted |
my %encurl; # URLs in this folder are supposed to be encrypted |
my %hiddenurl; # this URL (or complete folder) is supposed to be hidden |
my %hiddenurl; # this URL (or complete folder) is supposed to be hidden |
my %deeplinkout; # this URL (or complete folder) unavailable in deep-link session |
my %deeplinkout; # this URL (or complete folder) unavailable in deep-link session |
|
my %deeplinkonlyprot; # Link protection items used for deep-link only resources. |
my %rescount; # count of unhidden items in each map |
my %rescount; # count of unhidden items in each map |
my %mapcount; # count of unhidden maps in each map |
my %mapcount; # count of unhidden maps in each map |
|
|
Line 260 sub loadmap {
|
Line 261 sub loadmap {
|
push(@map_ids, $resource_id); |
push(@map_ids, $resource_id); |
if ($hash{'src_'.$lpc.'.'.$resource_id}) { |
if ($hash{'src_'.$lpc.'.'.$resource_id}) { |
$rescount{$lpc} ++; |
$rescount{$lpc} ++; |
if (($hash{'src_'.$lpc.'.'.$resource_id}=~/\.sequence$/) || |
if (($hash{'src_'.$lpc.'.'.$resource_id}=~/\.sequence$/) || |
($hash{'src_'.$lpc.'.'.$resource_id}=~/\.page$/)) { |
($hash{'src_'.$lpc.'.'.$resource_id}=~/\.page$/)) { |
$mapcount{$lpc} ++; |
$mapcount{$lpc} ++; |
} |
} |
} |
} |
unless ($codechecked) { |
unless ($codechecked) { |
Line 405 sub error_detail {
|
Line 406 sub error_detail {
|
if (($parent_pc eq '0') && ($hash{'map_id_1'} =~ m{^/res/($match_domain)/($match_username)/.+\.(sequence|page)$})) { |
if (($parent_pc eq '0') && ($hash{'map_id_1'} =~ m{^/res/($match_domain)/($match_username)/.+\.(sequence|page)$})) { |
($audomfile,$aunamefile) = ($1,$2); |
($audomfile,$aunamefile) = ($1,$2); |
($editfile,$filerole,$fileswitch) = &canedit_published($audomfile,$aunamefile); |
($editfile,$filerole,$fileswitch) = &canedit_published($audomfile,$aunamefile); |
|
if ($fileswitch) { |
|
unless ((&Apache::lonnet::will_trust('othcoau',$env{'user.domain'},$audomfile)) && |
|
(&Apache::lonnet::will_trust('coaurem',$audomfile,$env{'user.domain'}))) { |
|
undef($editfile); |
|
} |
|
} |
$errinfo = &mt('Top level published sequence file is missing.'); |
$errinfo = &mt('Top level published sequence file is missing.'); |
} else { |
} else { |
if ($parent_pc eq '1') { |
if ($parent_pc eq '1') { |
Line 478 sub error_detail {
|
Line 485 sub error_detail {
|
if ($uri =~ m{^/res/($match_domain)/($match_username)/.+\.(sequence|page)$}) { |
if ($uri =~ m{^/res/($match_domain)/($match_username)/.+\.(sequence|page)$}) { |
($audomfile,$aunamefile) = ($1,$2); |
($audomfile,$aunamefile) = ($1,$2); |
($editfile,$filerole,$fileswitch) = &canedit_published($audomfile,$aunamefile); |
($editfile,$filerole,$fileswitch) = &canedit_published($audomfile,$aunamefile); |
|
if ($fileswitch) { |
|
unless ((&Apache::lonnet::will_trust('othcoau',$env{'user.domain'},$audomfile)) && |
|
(&Apache::lonnet::will_trust('coaurem',$audomfile,$env{'user.domain'}))) { |
|
undef($editfile); |
|
} |
|
} |
} |
} |
} |
} |
if ($errinfo) { |
if ($errinfo) { |
Line 530 sub error_detail {
|
Line 543 sub error_detail {
|
my $mapurl = $hash{'map_id_'.$parent_pc}; |
my $mapurl = $hash{'map_id_'.$parent_pc}; |
$mapurl =~s{^/res/}{/priv/}; |
$mapurl =~s{^/res/}{/priv/}; |
if ($switchserver) { |
if ($switchserver) { |
$errinfo .= '.<br />'. |
$errinfo .= '.<br />'; |
&mt('You will need to [_1]switch server[_2].', |
if ((&Apache::lonnet::will_trust('othcoau',$env{'user.domain'},$audom)) && |
'<a href="/adm/switchserver?otherserver='.$switchserver.'&role='.$rolecode. |
(&Apache::lonnet::will_trust('coaurem',$audom,$env{'user.domain'}))) { |
'&origurl='.&escape($mapurl).'">','</a>'); |
$errinfo .= &mt('You will need to [_1]switch server[_2].', |
|
'<a href="/adm/switchserver?otherserver='.$switchserver.'&role='.$rolecode. |
|
'&origurl='.&escape($mapurl).'">','</a>'); |
|
} else { |
|
$errinfo .= &mt('Session switch required but prohibited.'); |
|
} |
} else { |
} else { |
&js_escape(\$mapurl); |
&js_escape(\$mapurl); |
$errinfo .= ': <a href="javascript:go('."'$mapurl'".');">'.&mt('Edit the map').'</a>'; |
$errinfo .= ': <a href="javascript:go('."'$mapurl'".');">'.&mt('Edit the map').'</a>'; |
Line 1169 sub traceroute {
|
Line 1187 sub traceroute {
|
} |
} |
unless (@deeplink < 2) { |
unless (@deeplink < 2) { |
$hash{'deeplinkonly_'.$rid}=join(':',map { &escape($_); } @deeplink); |
$hash{'deeplinkonly_'.$rid}=join(':',map { &escape($_); } @deeplink); |
|
my ($state,$others,$listed,$scope,$protect) = split(/,/,$deeplink[0]); |
|
if (($state eq 'only') && ($protect ne 'none') && ($protect ne '')) { |
|
my ($acctype,$item) = split(/:/,$protect); |
|
if ($acctype =~ /lti(c|d)$/) { |
|
$deeplinkonlyprot{$1}{$item} = 1; |
|
} |
|
} |
} |
} |
|
|
if (defined($hash{'conditions_'.$rid})) { |
if (defined($hash{'conditions_'.$rid})) { |
$hash{'conditions_'.$rid}=simplify( |
$hash{'conditions_'.$rid}=simplify( |
'('.$hash{'conditions_'.$rid}.')|('.$sofar.')'); |
'('.$hash{'conditions_'.$rid}.')|('.$sofar.')'); |
Line 1504 sub readmap {
|
Line 1528 sub readmap {
|
undef %hiddenurl; |
undef %hiddenurl; |
undef %encurl; |
undef %encurl; |
undef %deeplinkout; |
undef %deeplinkout; |
|
undef %deeplinkonlyprot; |
undef %rescount; |
undef %rescount; |
undef %mapcount; |
undef %mapcount; |
$retfrid=''; |
$retfrid=''; |
Line 1653 sub readmap {
|
Line 1678 sub readmap {
|
undef %hiddenurl; |
undef %hiddenurl; |
undef %encurl; |
undef %encurl; |
undef %deeplinkout; |
undef %deeplinkout; |
|
undef %deeplinkonlyprot; |
undef %rescount; |
undef %rescount; |
undef %mapcount; |
undef %mapcount; |
$errtext=''; |
$errtext=''; |
Line 1713 sub readmap {
|
Line 1739 sub readmap {
|
if ($redirect) { |
if ($redirect) { |
$retfurl = $url; |
$retfurl = $url; |
} |
} |
} |
} |
return ($retfurl,$errtext); |
return ($retfurl,$errtext); |
} |
} |
|
|
Line 1777 sub build_tmp_hashes {
|
Line 1803 sub build_tmp_hashes {
|
&accinit($uri,$short,$fn); |
&accinit($uri,$short,$fn); |
&hiddenurls(); |
&hiddenurls(); |
} |
} |
|
my ($cdom,$cnum) = split(/_/,$short); |
|
if (keys(%deeplinkonlyprot)) { |
|
my %launchers; |
|
if (ref($deeplinkonlyprot{'c'}) eq 'HASH') { |
|
if (($cdom ne '') && ($cnum ne '')) { |
|
my %crs_linkprot = &Apache::lonnet::get_course_lti($cnum,$cdom,'provider'); |
|
foreach my $num (keys(%{$deeplinkonlyprot{'c'}})) { |
|
if ((ref($crs_linkprot{$num}) eq 'HASH') && |
|
($crs_linkprot{$num}{'name'} ne '')) { |
|
push(@{$launchers{$crs_linkprot{$num}{'name'}}},'c'.$num); |
|
} |
|
} |
|
} |
|
} |
|
if (ref($deeplinkonlyprot{'d'}) eq 'HASH') { |
|
if ($cdom ne '') { |
|
my %dom_linkprot = &Apache::lonnet::get_domain_lti($cdom,'linkprot'); |
|
foreach my $num (keys(%{$deeplinkonlyprot{'d'}})) { |
|
if ((ref($dom_linkprot{$num}) eq 'HASH') && |
|
($dom_linkprot{$num}{'name'} ne '')) { |
|
push(@{$launchers{$dom_linkprot{$num}{'name'}}},'d'.$num); |
|
} |
|
} |
|
} |
|
} |
|
if (keys(%launchers)) { |
|
my $value = ''; |
|
foreach my $key (sort(keys(%launchers))) { |
|
if (ref($launchers{$key}) eq 'ARRAY') { |
|
$value .= &escape($key).':'.join(',',@{$launchers{$key}}).'&'; |
|
} |
|
} |
|
$value =~ s/&$//; |
|
&Apache::lonnet::appenv({'request.course.deeponlyprot' => $value}); |
|
} |
|
} |
$errtext .= &get_mapalias_errors(); |
$errtext .= &get_mapalias_errors(); |
# ------------------------------------------------------- Put versions into src |
# ------------------------------------------------------- Put versions into src |
foreach my $key (keys(%hash)) { |
foreach my $key (keys(%hash)) { |
Line 1817 sub build_tmp_hashes {
|
Line 1879 sub build_tmp_hashes {
|
} |
} |
|
|
# Was initial access via a deep-link? |
# Was initial access via a deep-link? |
my ($cdom,$cnum) = split(/_/,$short); |
|
if (($cdom ne '') && ($env{'request.deeplink.login'} ne '')) { |
if (($cdom ne '') && ($env{'request.deeplink.login'} ne '')) { |
my $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom); |
my $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom); |
if ($deeplink_symb) { |
if ($deeplink_symb) { |
Line 2030 sub get_mapparam {
|
Line 2091 sub get_mapparam {
|
last; |
last; |
} |
} |
} |
} |
|
my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; |
|
if (defined($$useropt{$recursechk})) { |
|
return $$useropt{$recursechk}; |
|
} |
} |
} |
} |
} |
|
|
Line 2051 sub get_mapparam {
|
Line 2116 sub get_mapparam {
|
last; |
last; |
} |
} |
} |
} |
|
my $recursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(rec).'.$what; |
|
if (defined($$courseopt{$recursechk})) { |
|
return $$courseopt{$recursechk}; |
|
} |
} |
} |
} |
} |
|
|
Line 2072 sub get_mapparam {
|
Line 2141 sub get_mapparam {
|
last; |
last; |
} |
} |
} |
} |
|
my $recursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(rec).'.$what; |
|
if (defined($$courseopt{$recursechk})) { |
|
return $$courseopt{$recursechk}; |
|
} |
} |
} |
} |
} |
|
|
Line 2115 sub get_mapparam {
|
Line 2188 sub get_mapparam {
|
last; |
last; |
} |
} |
} |
} |
|
my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; |
|
if (defined($$courseopt{$recursechk})) { |
|
return $$courseopt{$recursechk}; |
|
} |
} |
} |
} |
} |
} |
} |