--- rat/lonuserstate.pm 2022/10/05 22:54:00 1.149.2.5.2.3
+++ rat/lonuserstate.pm 2022/10/04 20:39:57 1.169
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Construct and maintain state and binary representation of course for user
#
-# $Id: lonuserstate.pm,v 1.149.2.5.2.3 2022/10/05 22:54:00 raeburn Exp $
+# $Id: lonuserstate.pm,v 1.169 2022/10/04 20:39:57 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,7 +42,7 @@ use Safe::Hole;
use Opcode;
use Apache::lonenc;
use Fcntl qw(:flock);
-use LONCAPA qw(:DEFAULT :match);
+use LONCAPA qw(:DEFAULT :match);
use File::Basename;
@@ -260,9 +260,9 @@ sub loadmap {
push(@map_ids, $resource_id);
if ($hash{'src_'.$lpc.'.'.$resource_id}) {
$rescount{$lpc} ++;
- if (($hash{'src_'.$lpc.'.'.$resource_id}=~/\.sequence$/) ||
+ if (($hash{'src_'.$lpc.'.'.$resource_id}=~/\.sequence$/) ||
($hash{'src_'.$lpc.'.'.$resource_id}=~/\.page$/)) {
- $mapcount{$lpc} ++;
+ $mapcount{$lpc} ++;
}
}
unless ($codechecked) {
@@ -405,6 +405,12 @@ sub error_detail {
if (($parent_pc eq '0') && ($hash{'map_id_1'} =~ m{^/res/($match_domain)/($match_username)/.+\.(sequence|page)$})) {
($audomfile,$aunamefile) = ($1,$2);
($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.');
} else {
if ($parent_pc eq '1') {
@@ -478,6 +484,12 @@ sub error_detail {
if ($uri =~ m{^/res/($match_domain)/($match_username)/.+\.(sequence|page)$}) {
($audomfile,$aunamefile) = ($1,$2);
($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) {
@@ -492,8 +504,6 @@ sub error_detail {
} else {
$errinfo .= &mt('To rectify this problem, create and publish the missing file');
}
- my $fileurl = $uri;
- $fileurl =~s{^/res/}{/priv/};
if ($fileswitch) {
my $rolename = &Apache::lonnet::plaintext($filerole);
my $rolecode;
@@ -503,10 +513,10 @@ sub error_detail {
$rolecode = $filerole.'./'.$audomfile.'/'.$aunamefile;
}
$errinfo .= '.
'.&mt('You will need to [_1]switch server[_2].',
- '','');
+ '','');
} else {
- &js_escape(\$fileurl);
+ my $fileurl = $uri;
+ $fileurl =~s{^/res/}{/priv/};
$errinfo .= ': '.&mt('Create the missing file').'';
}
}
@@ -527,15 +537,18 @@ sub error_detail {
} else {
$errinfo .= &mt('To rectify this problem edit the parent map to remove the reference to the missing file');
}
- my $mapurl = $hash{'map_id_'.$parent_pc};
- $mapurl =~s{^/res/}{/priv/};
if ($switchserver) {
- $errinfo .= '.
'.
- &mt('You will need to [_1]switch server[_2].',
- '','');
+ $errinfo .= '.
';
+ if ((&Apache::lonnet::will_trust('othcoau',$env{'user.domain'},$audom)) &&
+ (&Apache::lonnet::will_trust('coaurem',$audom,$env{'user.domain'}))) {
+ $errinfo .= &mt('You will need to [_1]switch server[_2].',
+ '','');
+ } else {
+ $errinfo .= &mt('Session switch required but prohibited.');
+ }
} else {
- &js_escape(\$mapurl);
+ my $mapurl = $hash{'map_id_'.$parent_pc};
+ $mapurl =~s{^/res/}{/priv/};
$errinfo .= ': '.&mt('Edit the map').'';
}
} elsif ($uploaded && $courseid) {
@@ -1713,7 +1726,7 @@ sub readmap {
if ($redirect) {
$retfurl = $url;
}
- }
+ }
return ($retfurl,$errtext);
}
@@ -2030,6 +2043,10 @@ sub get_mapparam {
last;
}
}
+ my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what;
+ if (defined($$useropt{$recursechk})) {
+ return $$useropt{$recursechk};
+ }
}
}
@@ -2051,6 +2068,10 @@ sub get_mapparam {
last;
}
}
+ my $recursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(rec).'.$what;
+ if (defined($$courseopt{$recursechk})) {
+ return $$courseopt{$recursechk};
+ }
}
}
@@ -2072,6 +2093,10 @@ sub get_mapparam {
last;
}
}
+ my $recursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(rec).'.$what;
+ if (defined($$courseopt{$recursechk})) {
+ return $$courseopt{$recursechk};
+ }
}
}
@@ -2115,6 +2140,10 @@ sub get_mapparam {
last;
}
}
+ my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what;
+ if (defined($$courseopt{$recursechk})) {
+ return $$courseopt{$recursechk};
+ }
}
}
}