--- loncom/lonnet/perl/lonnet.pm 2017/12/22 17:19:43 1.1363 +++ loncom/lonnet/perl/lonnet.pm 2018/02/01 04:51:13 1.1367 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1363 2017/12/22 17:19:43 raeburn Exp $ +# $Id: lonnet.pm,v 1.1367 2018/02/01 04:51:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -5229,6 +5229,9 @@ sub set_first_access { 'course.'.$courseid.'.timerinterval.'.$res => $interval, } ); + if (($cachedtime) && (abs($start-$cachedtime) < 5)) { + $cachedtimes{"$courseid\0$res"} = $start; + } } return $putres; } @@ -8889,6 +8892,33 @@ sub auto_validate_class_sec { return $response; } +sub auto_validate_instclasses { + my ($cdom,$cnum,$owners,$classesref) = @_; + my ($homeserver,%validations); + $homeserver = &homeserver($cnum,$cdom); + unless ($homeserver eq 'no_host') { + my $ownerlist; + if (ref($owners) eq 'ARRAY') { + $ownerlist = join(',',@{$owners}); + } else { + $ownerlist = $owners; + } + if (ref($classesref) eq 'HASH') { + my $classes = &freeze_escape($classesref); + my $response=&reply('autovalidateinstclasses:'.&escape($ownerlist). + ':'.$cdom.':'.$classes,$homeserver); + unless ($response =~ /(con_lost|error|no_such_host|refused)/) { + my @items = split(/&/,$response); + foreach my $item (@items) { + my ($key,$value) = split('=',$item); + $validations{&unescape($key)} = &thaw_unescape($value); + } + } + } + } + return %validations; +} + sub auto_crsreq_update { my ($cdom,$cnum,$crstype,$action,$ownername,$ownerdomain,$fullname,$title, $code,$accessstart,$accessend,$inbound) = @_; @@ -11201,10 +11231,11 @@ sub get_numsuppfiles { unless (defined($cached)) { my $chome=&homeserver($cnum,$cdom); unless ($chome eq 'no_host') { - ($suppcount,my $errors) = (0,0); + ($suppcount,my $supptools,my $errors) = (0,0,0); my $suppmap = 'supplemental.sequence'; - ($suppcount,$errors) = - &Apache::loncommon::recurse_supplemental($cnum,$cdom,$suppmap,$suppcount,$errors); + ($suppcount,$supptools,$errors) = + &Apache::loncommon::recurse_supplemental($cnum,$cdom,$suppmap,$suppcount, + $supptools,$errors); } &do_cache_new('suppcount',$hashid,$suppcount,600); } @@ -11729,7 +11760,15 @@ sub metadata { # uploaded map containing the tool. The value is retrieved via # &EXT(), if a valid symb is available. Otherwise the value of # gradable in the exttool_$marker.db file for the tool instance -# is retrived via &get(). +# is retrieved via &get(). +# +# When lonuserstate::traceroute() calls lonnet::EXT() for +# hiddenresource and encrypturl (during course initialization) +# the map-level parameter for resource.0.gradable included in the +# uploaded map containing the tool will not yet have been stored +# in the user_course_parms.db file for the user's session, so in +# this case fall back to retrieving gradable status from the +# exttool_$marker.db file. # # In order to avoid an infinite loop, &metadata() will return # before a call to &EXT(), if the uri is for an external tool @@ -11744,7 +11783,7 @@ sub metadata { my ($checked,$use_passback); if ($toolsymb ne '') { (undef,undef,my $tooluri) = &decode_symb($toolsymb); - if ($tooluri eq $uri) { + if (($tooluri eq $uri) && (&EXT('resource.0.gradable',$toolsymb))) { $checked = 1; if (&EXT('resource.0.gradable',$toolsymb) =~ /^yes$/i) { $use_passback = 1;