version 1.1465, 2021/09/21 22:54:27
|
version 1.1479, 2022/02/01 23:13:20
|
Line 2304 sub retrieve_inst_usertypes {
|
Line 2304 sub retrieve_inst_usertypes {
|
|
|
sub is_domainimage { |
sub is_domainimage { |
my ($url) = @_; |
my ($url) = @_; |
if ($url=~m-^/+res/+($match_domain)/+\1\-domainconfig/+(img|logo|domlogo)/+[^/]-) { |
if ($url=~m-^/+res/+($match_domain)/+\1\-domainconfig/+(img|logo|domlogo|login)/+[^/]-) { |
if (&domain($1) ne '') { |
if (&domain($1) ne '') { |
return '1'; |
return '1'; |
} |
} |
Line 2666 sub get_domain_defaults {
|
Line 2666 sub get_domain_defaults {
|
if (ref($domconfig{'coursedefaults'}) eq 'HASH') { |
if (ref($domconfig{'coursedefaults'}) eq 'HASH') { |
$domdefaults{'canuse_pdfforms'} = $domconfig{'coursedefaults'}{'canuse_pdfforms'}; |
$domdefaults{'canuse_pdfforms'} = $domconfig{'coursedefaults'}{'canuse_pdfforms'}; |
$domdefaults{'usejsme'} = $domconfig{'coursedefaults'}{'usejsme'}; |
$domdefaults{'usejsme'} = $domconfig{'coursedefaults'}{'usejsme'}; |
|
$domdefaults{'inline_chem'} = $domconfig{'coursedefaults'}{'inline_chem'}; |
$domdefaults{'uselcmath'} = $domconfig{'coursedefaults'}{'uselcmath'}; |
$domdefaults{'uselcmath'} = $domconfig{'coursedefaults'}{'uselcmath'}; |
if (ref($domconfig{'coursedefaults'}{'postsubmit'}) eq 'HASH') { |
if (ref($domconfig{'coursedefaults'}{'postsubmit'}) eq 'HASH') { |
$domdefaults{'postsubmit'} = $domconfig{'coursedefaults'}{'postsubmit'}{'client'}; |
$domdefaults{'postsubmit'} = $domconfig{'coursedefaults'}{'postsubmit'}{'client'}; |
Line 2773 sub get_domain_defaults {
|
Line 2774 sub get_domain_defaults {
|
} |
} |
if (ref($domconfig{'autoenroll'}) eq 'HASH') { |
if (ref($domconfig{'autoenroll'}) eq 'HASH') { |
$domdefaults{'autofailsafe'} = $domconfig{'autoenroll'}{'autofailsafe'}; |
$domdefaults{'autofailsafe'} = $domconfig{'autoenroll'}{'autofailsafe'}; |
|
$domdefaults{'failsafe'} = $domconfig{'autoenroll'}{'failsafe'}; |
} |
} |
if (ref($domconfig{'helpsettings'}) eq 'HASH') { |
if (ref($domconfig{'helpsettings'}) eq 'HASH') { |
$domdefaults{'submitbugs'} = $domconfig{'helpsettings'}{'submitbugs'}; |
$domdefaults{'submitbugs'} = $domconfig{'helpsettings'}{'submitbugs'}; |
Line 4659 sub bubblesheet_converter {
|
Line 4661 sub bubblesheet_converter {
|
next if (($num == 1) && ($csvoptions{'hdr'} == 1)); |
next if (($num == 1) && ($csvoptions{'hdr'} == 1)); |
$line =~ s{[\r\n]+$}{}; |
$line =~ s{[\r\n]+$}{}; |
my %found; |
my %found; |
my @values = split(/,/,$line); |
my @values = split(/,/,$line,-1); |
my ($qstart,$record); |
my ($qstart,$record); |
for (my $i=0; $i<@values; $i++) { |
for (my $i=0; $i<@values; $i++) { |
if ((($qstart ne '') && ($i > $qstart)) || |
if ((($qstart ne '') && ($i > $qstart)) || |
Line 4963 sub flushcourselogs {
|
Line 4965 sub flushcourselogs {
|
if (! defined($dom) || $dom eq '' || |
if (! defined($dom) || $dom eq '' || |
! defined($name) || $name eq '') { |
! defined($name) || $name eq '') { |
my $cid = $env{'request.course.id'}; |
my $cid = $env{'request.course.id'}; |
|
# |
|
# FIXME 11/29/2021 |
|
# Typo in rev. 1.458 (2003/12/09)?? |
|
# These should likely by $env{'course.'.$cid.'.domain'} and $env{'course.'.$cid.'.num'} |
|
# |
|
# While these ramain as $env{'request.'.$cid.'.domain'} and $env{'request.'.$cid.'.num'} |
|
# $dom and $name will always be null, so the &inc() call will default to storing this data |
|
# in a nohist_accesscount.db file for the user rather than the course. |
|
# |
|
# That said there is a lot of noise in the data being stored. |
|
# So counts for prtspool/ and adm/ etc. are recorded. |
|
# |
|
# A review of which items ending '___count' are written to %accesshash should likely be |
|
# made before deciding whether to set these to 'course.' instead of 'request.' |
|
# |
|
# Under the current scheme each user receives a nohist_accesscount.db file listing |
|
# accesses for things which are not published resources, regardless of course, and |
|
# there is not a nohist_accesscount.db file in a course, which might log accesses from |
|
# anyone in the course for things which are not published resources. |
|
# |
|
# For an author, nohist_accesscount.db ends up having records for other items |
|
# mixed up with the legitimate access counts for the author's published resources. |
|
# |
$dom = $env{'request.'.$cid.'.domain'}; |
$dom = $env{'request.'.$cid.'.domain'}; |
$name = $env{'request.'.$cid.'.num'}; |
$name = $env{'request.'.$cid.'.num'}; |
} |
} |
Line 7560 sub portfolio_access {
|
Line 7585 sub portfolio_access {
|
if ($result) { |
if ($result) { |
my %setters; |
my %setters; |
if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') { |
if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') { |
my ($startblock,$endblock) = |
my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = |
&Apache::loncommon::blockcheck(\%setters,'port',$unum,$udom); |
&Apache::loncommon::blockcheck(\%setters,'port',$clientip,$unum,$udom); |
if ($startblock && $endblock) { |
if (($startblock && $endblock) || ($by_ip)) { |
return 'B'; |
return 'B'; |
} |
} |
} else { |
} else { |
my ($startblock,$endblock) = |
my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = |
&Apache::loncommon::blockcheck(\%setters,'port'); |
&Apache::loncommon::blockcheck(\%setters,'port',$clientip); |
if ($startblock && $endblock) { |
if (($startblock && $endblock) || ($by_ip)) { |
return 'B'; |
return 'B'; |
} |
} |
} |
} |
Line 8130 sub allowed {
|
Line 8155 sub allowed {
|
$uri=&declutter($uri); |
$uri=&declutter($uri); |
|
|
if ($priv eq 'evb') { |
if ($priv eq 'evb') { |
# Evade communication block restrictions for specified role in a course |
# Evade communication block restrictions for specified role in a course or domain |
if ($env{'user.priv.'.$role} =~/evb\&([^\:]*)/) { |
if ($env{'user.priv.'.$role} =~/evb\&([^\:]*)/) { |
return $1; |
return $1; |
} else { |
} else { |
Line 8151 sub allowed {
|
Line 8176 sub allowed {
|
if (($space=~/^(uploaded|editupload)$/) && ($env{'user.name'} eq $name) && |
if (($space=~/^(uploaded|editupload)$/) && ($env{'user.name'} eq $name) && |
($env{'user.domain'} eq $domain) && ('portfolio' eq $dir[0])) { |
($env{'user.domain'} eq $domain) && ('portfolio' eq $dir[0])) { |
my %setters; |
my %setters; |
my ($startblock,$endblock) = |
my ($startblock,$endblock,$triggerblock,$by_ip,$blockdom) = |
&Apache::loncommon::blockcheck(\%setters,'port'); |
&Apache::loncommon::blockcheck(\%setters,'port',$clientip); |
if ($startblock && $endblock) { |
if (($startblock && $endblock) || ($by_ip)) { |
return 'B'; |
return 'B'; |
} else { |
} else { |
return 'F'; |
return 'F'; |
Line 8855 sub get_commblock_resources {
|
Line 8880 sub get_commblock_resources {
|
my ($blocks) = @_; |
my ($blocks) = @_; |
my %blockers = (); |
my %blockers = (); |
return %blockers unless ($env{'request.course.id'}); |
return %blockers unless ($env{'request.course.id'}); |
return %blockers if ($env{'user.priv.'.$env{'request.role'}} =~/evb\&([^\:]*)/); |
my $courseurl = &courseid_to_courseurl($env{'request.course.id'}); |
|
if ($env{'request.course.sec'}) { |
|
$courseurl .= '/'.$env{'request.course.sec'}; |
|
} |
|
return %blockers if ($env{'user.priv.'.$env{'request.role'}.'.'.$courseurl} =~/evb\&([^\:]*)/); |
my %commblocks; |
my %commblocks; |
if (ref($blocks) eq 'HASH') { |
if (ref($blocks) eq 'HASH') { |
%commblocks = %{$blocks}; |
%commblocks = %{$blocks}; |
Line 8887 sub get_commblock_resources {
|
Line 8916 sub get_commblock_resources {
|
} |
} |
} elsif ($block =~ /^firstaccess____(.+)$/) { |
} elsif ($block =~ /^firstaccess____(.+)$/) { |
my $item = $1; |
my $item = $1; |
my @to_test; |
|
if (ref($commblocks{$block}{'blocks'}) eq 'HASH') { |
if (ref($commblocks{$block}{'blocks'}) eq 'HASH') { |
if (ref($commblocks{$block}{'blocks'}{'docs'}) eq 'HASH') { |
if (ref($commblocks{$block}{'blocks'}{'docs'}) eq 'HASH') { |
my @interval; |
my (@interval,$mapname); |
my $type = 'map'; |
my $type = 'map'; |
if ($item eq 'course') { |
if ($item eq 'course') { |
$type = 'course'; |
$type = 'course'; |
Line 8899 sub get_commblock_resources {
|
Line 8927 sub get_commblock_resources {
|
if ($item =~ /___\d+___/) { |
if ($item =~ /___\d+___/) { |
$type = 'resource'; |
$type = 'resource'; |
@interval=&EXT("resource.0.interval",$item); |
@interval=&EXT("resource.0.interval",$item); |
if (ref($navmap)) { |
|
my $res = $navmap->getBySymb($item); |
|
push(@to_test,$res); |
|
} |
|
} else { |
} else { |
my $mapsymb = &symbread($item,1); |
$mapname = &deversion($item); |
if ($mapsymb) { |
if (ref($navmap)) { |
if (ref($navmap)) { |
my $timelimit = $navmap->get_mapparam(undef,$mapname,'0.interval'); |
my $mapres = $navmap->getBySymb($mapsymb); |
@interval = ($timelimit,'map'); |
if (ref($mapres)) { |
|
my $first = $mapres->map_start(); |
|
my $finish = $mapres->map_finish(); |
|
my $it = $navmap->getIterator($first,$finish,undef,0,0); |
|
if (ref($it)) { |
|
my $res; |
|
while ($res = $it->next(undef,1)) { |
|
next unless (ref($res)); |
|
my $symb = $res->symb(); |
|
next if (($symb eq $mapsymb) || ($symb eq '')); |
|
@interval=&EXT("resource.0.interval",$symb); |
|
if ($interval[1] eq 'map') { |
|
if ($res->answerable()) { |
|
push(@to_test,$res); |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
} |
} |
} |
} |
} |
Line 8946 sub get_commblock_resources {
|
Line 8949 sub get_commblock_resources {
|
my $timesup = $first_access+$timelimit; |
my $timesup = $first_access+$timelimit; |
if ($timesup > $now) { |
if ($timesup > $now) { |
my $activeblock; |
my $activeblock; |
foreach my $res (@to_test) { |
if ($type eq 'resource') { |
if ($res->answerable()) { |
if (ref($navmap)) { |
$activeblock = 1; |
my $res = $navmap->getBySymb($item); |
last; |
if ($res->answerable()) { |
|
$activeblock = 1; |
|
} |
|
} |
|
} elsif ($type eq 'map') { |
|
my $mapsymb = &symbread($mapname,1); |
|
if (($mapsymb) && (ref($navmap))) { |
|
my $mapres = $navmap->getBySymb($mapsymb); |
|
if (ref($mapres)) { |
|
my $first = $mapres->map_start(); |
|
my $finish = $mapres->map_finish(); |
|
my $it = $navmap->getIterator($first,$finish,undef,0,0); |
|
if (ref($it)) { |
|
my $res; |
|
while ($res = $it->next(undef,1)) { |
|
next unless (ref($res)); |
|
my $symb = $res->symb(); |
|
next if (($symb eq $mapsymb) || ($symb eq '')); |
|
@interval=&EXT("resource.0.interval",$symb); |
|
if ($interval[1] eq 'map') { |
|
if ($res->answerable()) { |
|
$activeblock = 1; |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} |
} |
} |
} |
} |
if ($activeblock) { |
if ($activeblock) { |
Line 8979 sub has_comm_blocking {
|
Line 9009 sub has_comm_blocking {
|
my @blockers; |
my @blockers; |
return unless ($env{'request.course.id'}); |
return unless ($env{'request.course.id'}); |
return unless ($priv eq 'bre'); |
return unless ($priv eq 'bre'); |
return if ($env{'user.priv.'.$env{'request.role'}} =~/evb\&([^\:]*)/); |
|
return if ($env{'request.state'} eq 'construct'); |
return if ($env{'request.state'} eq 'construct'); |
|
my $courseurl = &courseid_to_courseurl($env{'request.course.id'}); |
|
if ($env{'request.course.sec'}) { |
|
$courseurl .= '/'.$env{'request.course.sec'}; |
|
} |
|
return if ($env{'user.priv.'.$env{'request.role'}.'.'.$courseurl} =~/evb\&([^\:]*)/); |
my %blockinfo; |
my %blockinfo; |
if (ref($blocks) eq 'HASH') { |
if (ref($blocks) eq 'HASH') { |
%blockinfo = &get_commblock_resources($blocks); |
%blockinfo = &get_commblock_resources($blocks); |
Line 9379 sub fetch_enrollment_query {
|
Line 9413 sub fetch_enrollment_query {
|
} |
} |
|
|
sub get_query_reply { |
sub get_query_reply { |
my ($queryid,$sleep,$loopmax) = @_;; |
my ($queryid,$sleep,$loopmax) = @_; |
if (($sleep eq '') || ($sleep !~ /^\d+\.?\d*$/)) { |
if (($sleep eq '') || ($sleep !~ /^\d+\.?\d*$/)) { |
$sleep = 0.2; |
$sleep = 0.2; |
} |
} |
Line 12232 sub get_course_lti {
|
Line 12266 sub get_course_lti {
|
return %courselti; |
return %courselti; |
} |
} |
|
|
|
sub courselti_itemid { |
|
my ($cnum,$cdom,$url,$method,$params,$context) = @_; |
|
my ($chome,$itemid); |
|
$chome = &homeserver($cnum,$cdom); |
|
return if ($chome eq 'no_host'); |
|
if (ref($params) eq 'HASH') { |
|
my $items = &freeze_escape($params); |
|
my $rep; |
|
if (grep { $_ eq $chome } current_machine_ids()) { |
|
$rep = LONCAPA::Lond::crslti_itemid($cdom,$cnum,$url,$method,$params,$perlvar{'lonVersion'}); |
|
} else { |
|
my $escurl = &escape($url); |
|
my $escmethod = &escape($method); |
|
my $items = &freeze_escape($params); |
|
$rep = &reply("encrypt:lti:$cdom:$cnum:$context:$escurl:$escmethod:$items",$chome); |
|
} |
|
unless (($rep=~/^(refused|rejected|error)/) || ($rep eq 'con_lost') || |
|
($rep eq 'unknown_cmd')) { |
|
$itemid = $rep; |
|
} |
|
} |
|
return $itemid; |
|
} |
|
|
|
sub domainlti_itemid { |
|
my ($cdom,$url,$method,$params,$context) = @_; |
|
my ($primary_id,$itemid); |
|
$primary_id = &domain($cdom,'primary'); |
|
return if ($primary_id eq ''); |
|
if (ref($params) eq 'HASH') { |
|
my $items = &freeze_escape($params); |
|
my $rep; |
|
if (grep { $_ eq $primary_id } current_machine_ids()) { |
|
$rep = LONCAPA::Lond::domlti_itemid($cdom,$context,$url,$method,$params,$perlvar{'lonVersion'}); |
|
} else { |
|
my $cnum = ''; |
|
my $escurl = &escape($url); |
|
my $escmethod = &escape($method); |
|
my $items = &freeze_escape($params); |
|
$rep = &reply("encrypt:lti:$cdom:$cnum:$context:$escurl:$escmethod:$items",$primary_id); |
|
} |
|
unless (($rep=~/^(refused|rejected|error)/) || ($rep eq 'con_lost') || |
|
($rep eq 'unknown_cmd')) { |
|
$itemid = $rep; |
|
} |
|
} |
|
return $itemid; |
|
} |
|
|
sub get_numsuppfiles { |
sub get_numsuppfiles { |
my ($cnum,$cdom,$ignorecache)=@_; |
my ($cnum,$cdom,$ignorecache)=@_; |
my $hashid=$cnum.':'.$cdom; |
my $hashid=$cnum.':'.$cdom; |
Line 12323 sub EXT {
|
Line 12406 sub EXT {
|
if ( (defined($Apache::lonhomework::parsing_a_problem) |
if ( (defined($Apache::lonhomework::parsing_a_problem) |
|| defined($Apache::lonhomework::parsing_a_task)) |
|| defined($Apache::lonhomework::parsing_a_task)) |
&& |
&& |
($symbparm eq &symbread()) ) { |
($symbparm eq &symbread()) ) { |
# if we are in the middle of processing the resource the |
# if we are in the middle of processing the resource the |
# get the value we are planning on committing |
# get the value we are planning on committing |
if (defined($Apache::lonhomework::results{$qualifierrest})) { |
if (defined($Apache::lonhomework::results{$qualifierrest})) { |
Line 14387 sub machine_ids {
|
Line 14470 sub machine_ids {
|
|
|
sub additional_machine_domains { |
sub additional_machine_domains { |
my @domains; |
my @domains; |
open(my $fh,"<","$perlvar{'lonTabDir'}/expected_domains.tab"); |
if (-e "$perlvar{'lonTabDir'}/expected_domains.tab") { |
while( my $line = <$fh>) { |
if (open(my $fh,"<","$perlvar{'lonTabDir'}/expected_domains.tab")) { |
$line =~ s/\s//g; |
while (my $line = <$fh>) { |
push(@domains,$line); |
chomp($line); |
|
$line =~ s/\s//g; |
|
push(@domains,$line); |
|
} |
|
close($fh); |
|
} |
} |
} |
return @domains; |
return @domains; |
} |
} |
Line 14603 sub use_proxy_alias {
|
Line 14691 sub use_proxy_alias {
|
if ($alias) { |
if ($alias) { |
my $dom = &host_domain($lonid); |
my $dom = &host_domain($lonid); |
if ($dom ne '') { |
if ($dom ne '') { |
my $proxyinfo = &get_proxy_settings($dom ); |
my $proxyinfo = &get_proxy_settings($dom); |
my ($vpnint,$remote_ip); |
my ($vpnint,$remote_ip); |
if (ref($proxyinfo) eq 'HASH') { |
if (ref($proxyinfo) eq 'HASH') { |
$vpnint = $proxyinfo->{'vpnint'}; |
$vpnint = $proxyinfo->{'vpnint'}; |
Line 14617 sub use_proxy_alias {
|
Line 14705 sub use_proxy_alias {
|
} |
} |
} |
} |
return; |
return; |
|
} |
|
|
|
sub alias_sso { |
|
my ($lonid) = @_; |
|
if ($lonid eq '') { |
|
$lonid = $perlvar{'lonHostID'}; |
|
} |
|
if (!defined(&hostname($lonid))) { |
|
return; |
|
} |
|
if ($lonid ne '') { |
|
my ($use_alias,$cached) = &is_cached_new('proxysaml',$lonid); |
|
if ($cached) { |
|
return $use_alias; |
|
} |
|
my $dom = &Apache::lonnet::host_domain($lonid); |
|
if ($dom ne '') { |
|
my $cachetime = 60*60*24; |
|
my %domconfig = |
|
&Apache::lonnet::get_dom('configuration',['wafproxy'],$dom); |
|
if (ref($domconfig{'wafproxy'}) eq 'HASH') { |
|
if (ref($domconfig{'wafproxy'}{'saml'}) eq 'HASH') { |
|
$use_alias = $domconfig{'wafproxy'}{'saml'}{$lonid}; |
|
} |
|
} |
|
return &do_cache_new('proxysaml',$lonid,$use_alias,$cachetime); |
|
} |
|
} |
|
return; |
} |
} |
|
|
sub get_saml_landing { |
sub get_saml_landing { |