--- rat/lonuserstate.pm 2025/05/28 04:15:41 1.149.2.5.2.4
+++ rat/lonuserstate.pm 2025/05/26 19:55:11 1.171
@@ -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.4 2025/05/28 04:15:41 raeburn Exp $
+# $Id: lonuserstate.pm,v 1.171 2025/05/26 19:55:11 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;
@@ -261,9 +261,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) {
@@ -406,6 +406,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') {
@@ -479,6 +485,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) {
@@ -531,10 +543,15 @@ sub error_detail {
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);
$errinfo .= ': '.&mt('Edit the map').'';
@@ -1722,7 +1739,7 @@ sub readmap {
if ($redirect) {
$retfurl = $url;
}
- }
+ }
return ($retfurl,$errtext);
}
@@ -2074,6 +2091,10 @@ sub get_mapparam {
last;
}
}
+ my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what;
+ if (defined($$useropt{$recursechk})) {
+ return $$useropt{$recursechk};
+ }
}
}
@@ -2095,6 +2116,10 @@ sub get_mapparam {
last;
}
}
+ my $recursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(rec).'.$what;
+ if (defined($$courseopt{$recursechk})) {
+ return $$courseopt{$recursechk};
+ }
}
}
@@ -2116,6 +2141,10 @@ sub get_mapparam {
last;
}
}
+ my $recursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(rec).'.$what;
+ if (defined($$courseopt{$recursechk})) {
+ return $$courseopt{$recursechk};
+ }
}
}
@@ -2159,6 +2188,10 @@ sub get_mapparam {
last;
}
}
+ my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what;
+ if (defined($$courseopt{$recursechk})) {
+ return $$courseopt{$recursechk};
+ }
}
}
}