--- loncom/homework/structuretags.pm 2016/09/16 22:25:45 1.512.2.12
+++ loncom/homework/structuretags.pm 2020/10/01 18:54:21 1.512.2.13.4.4
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.512.2.12 2016/09/16 22:25:45 raeburn Exp $
+# $Id: structuretags.pm,v 1.512.2.13.4.4 2020/10/01 18:54:21 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -63,6 +63,7 @@ use Apache::londefdef;
use Apache::lonenc();
use Apache::loncommon();
use Time::HiRes qw( gettimeofday tv_interval );
+use HTML::Entities();
use lib '/home/httpd/lib/perl/';
use LONCAPA;
@@ -390,8 +391,10 @@ sub setmode_javascript {
@@ -648,10 +651,11 @@ sub setup_rndseed {
unless (defined($questiontype)) {
$questiontype = $Apache::lonhomework::type;
}
- if ($env{'request.state'} eq "construct"
- || $symb eq ''
- || $Apache::lonhomework::type eq 'practice'
- || $Apache::lonhomework::history{'resource.CODE'}) {
+ if (($env{'request.state'} eq "construct")
+ || ($symb eq '')
+ || ($Apache::lonhomework::type eq 'practice')
+ || ($Apache::lonhomework::history{'resource.CODE'})
+ || (($env{'form.code_for_randomlist'}) && ($target eq 'analyze'))) {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['rndseed']);
$rndseed=$env{'form.rndseed'};
@@ -660,7 +664,9 @@ sub setup_rndseed {
if (!$rndseed) {
$rndseed=time;
}
- $env{'form.rndseed'}=$rndseed;
+ unless ($env{'form.code_for_randomlist'}) {
+ $env{'form.rndseed'}=$rndseed;
+ }
}
if (($env{'request.state'} eq "construct") &&
($Apache::lonhomework::type eq 'randomizetry')) {
@@ -688,7 +694,11 @@ sub setup_rndseed {
$rndseed=join(':',&Apache::lonnet::digest($rndseed));
}
}
- if ($Apache::lonhomework::history{'resource.CODE'}) {
+ if (($env{'form.code_for_randomlist'}) && ($target eq 'analyze')) {
+ $env{'form.CODE'} = $env{'form.code_for_randomlist'};
+ $rndseed=&Apache::lonnet::rndseed();
+ undef($env{'form.CODE'});
+ } elsif ($Apache::lonhomework::history{'resource.CODE'}) {
$rndseed=&Apache::lonnet::rndseed();
}
$set_safespace = 1;
@@ -1357,9 +1367,11 @@ sub firstaccess_msg {
my $uri = &Apache::lonenc::check_encrypt($env{'request.uri'});
my $buttontext = &mt('Show Resource');
my $timertext = &mt('Start Timer?');
+ my $shownsymb = &HTML::Entities::encode(&Apache::lonenc::check_encrypt($symb),'\'"<>&');
$result .= (<
+
ENDCHECKOUT
@@ -1523,7 +1535,8 @@ sub start_problem {
$target eq 'tex') {
if ($env{'form.markaccess'}) {
my @interval=&Apache::lonnet::EXT("resource.0.interval");
- &Apache::lonnet::set_first_access($interval[1],$interval[0]);
+ my ($timelimit) = ($interval[0] =~ /^(\d+)/);
+ &Apache::lonnet::set_first_access($interval[1],$timelimit);
}
($status,$accessmsg,$slot_name,$slot) =
@@ -2007,6 +2020,8 @@ sub end_library {
&& ($#$tagstack eq 0 && $$tagstack[0] eq 'library')
&& $env{'request.state'} eq "construct") {
$result.=''.&Apache::loncommon::end_page({'discussion' => 1});
+ } elsif ($target eq 'meta') {
+ $result.=&Apache::response::meta_response_order();
}
if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') {
&reset_problem_globals('library');
@@ -2489,7 +2504,12 @@ sub start_randomlist {
}
if (@randomlist) {
my @idx_arr = (0 .. $#randomlist);
- &Apache::structuretags::shuffle(\@idx_arr);
+ if ($env{'form.code_for_randomlist'}) {
+ &Apache::structuretags::shuffle(\@idx_arr,$target);
+ undef($env{'form.code_for_randomlist'});
+ } else {
+ &Apache::structuretags::shuffle(\@idx_arr);
+ }
my $bodytext = '';
my $show=$#randomlist;
my $showarg=&Apache::lonxml::get_param('show',$parstack,$safeeval);
@@ -2528,10 +2548,10 @@ sub start_randomlist {
}
sub shuffle {
- my $a=shift;
+ my ($a,$target) = @_;
my $i;
if (ref($a) eq 'ARRAY' && @$a) {
- &Apache::response::pushrandomnumber();
+ &Apache::response::pushrandomnumber(undef,$target);
for($i=@$a;--$i;) {
my $j=int(&Math::Random::random_uniform() * ($i+1));
next if $i == $j;