--- loncom/homework/structuretags.pm 2016/09/14 02:42:43 1.550
+++ loncom/homework/structuretags.pm 2017/11/08 00:34:41 1.556
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.550 2016/09/14 02:42:43 raeburn Exp $
+# $Id: structuretags.pm,v 1.556 2017/11/08 00:34:41 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -67,7 +67,7 @@ use lib '/home/httpd/lib/perl/';
use LONCAPA;
BEGIN {
- &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag'));
+ &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','print','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag'));
}
@@ -192,6 +192,28 @@ sub end_web {
return '';
}
+sub start_print {
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+ if ($target ne 'edit' && $target ne 'modified') {
+ if ($target ne 'tex') {
+ my $skip = &Apache::lonxml::get_all_text("/print",$parser,$style);
+ &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
+ }
+ } elsif ($target eq "edit") {
+ my $bodytext = &Apache::lonxml::get_all_text_unbalanced("/print",$parser);
+ my $result = &Apache::edit::tag_start($target,$token);
+ $result .= &Apache::edit::editfield($token->[1],$bodytext,'',80,1);
+ return $result;
+ } elsif ($target eq "modified") {
+ return $token->[4].&Apache::edit::modifiedfield("/print",$parser);
+ }
+ return '';
+}
+
+sub end_print {
+ return '';
+}
+
sub start_tex {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result='';
@@ -392,8 +414,10 @@ sub setmode_javascript {
@@ -654,10 +678,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'};
@@ -666,7 +691,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')) {
@@ -676,7 +703,7 @@ sub setup_rndseed {
}
$env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed;
}
- if ( ($env{'form.resetdata'} eq &mt('New Problem Variation')
+ if ( ($env{'form.resetdata'} eq 'new_problem_variation'
&& $env{'form.submitted'} eq 'yes') ||
$env{'form.newrandomization'} eq &mt('New Randomization')) {
srand(time);
@@ -694,7 +721,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;
@@ -953,7 +984,8 @@ $show_all
-
+
@@ -1018,8 +1050,8 @@ sub initialize_storage {
|| $Apache::lonhomework::type eq 'practice') {
my $namespace = $symb || $env{'request.uri'};
- if ($env{'form.resetdata'} eq &mt('Reset Submissions') ||
- ($env{'form.resetdata'} eq &mt('New Problem Variation')
+ if ($env{'form.resetdata'} eq 'reset_submissions' ||
+ ($env{'form.resetdata'} eq 'new_problem_variation'
&& $env{'form.submitted'} eq 'yes') ||
$env{'form.newrandomization'} eq &mt('New Randomization')) {
&Apache::lonnet::tmpreset($namespace,'',$domain,$name);
@@ -1538,10 +1570,6 @@ sub start_problem {
my ($timelimit) = split(/_/,$interval[0]);
&Apache::lonnet::set_first_access($interval[1],$timelimit);
}
-
- ($status,$accessmsg,$slot_name,$slot,$ipused) =
- &Apache::lonhomework::check_slot_access('0','problem');
- push (@Apache::inputtags::status,$status);
}
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex'
@@ -1549,7 +1577,8 @@ sub start_problem {
($result,$form_tag_start,$probpartlist) =
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval,
$name);
- } elsif (($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) {
+ } elsif ((($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) ||
+ ($target eq 'answer')) {
my ($symb)= &Apache::lonnet::whichuser();
my $navmap = Apache::lonnavmaps::navmap->new();
if (ref($navmap)) {
@@ -1560,6 +1589,15 @@ sub start_problem {
}
}
+ if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
+ $target eq 'tex') {
+
+ my ($symb)= &Apache::lonnet::whichuser();
+ ($status,$accessmsg,$slot_name,$slot,$ipused) =
+ &Apache::lonhomework::check_slot_access('0','problem',$symb,$probpartlist);
+ push (@Apache::inputtags::status,$status);
+ }
+
if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';}
if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); }
@@ -1587,8 +1625,8 @@ sub start_problem {
($symb eq '' || $Apache::lonhomework::type eq 'practice')) {
$form_tag_start.=''.
- '';
+ '';
if (exists($env{'form.username'})) {
$form_tag_start.=
''.
- &practice_problem_header().'';
+ $result.= ''.
+ &practice_problem_header().'';
}
}
# if we are viewing someone else preserve that info
@@ -2062,9 +2100,9 @@ sub start_library {
'';
$result.=&problem_web_to_edit_header($rndseed);
if ($Apache::lonhomework::type eq 'practice') {
- $result.= ''.
- &practice_problem_header().'';
+ $result.= ''.
+ &practice_problem_header().'';
}
}
return $result;
@@ -2561,7 +2599,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);
@@ -2600,10 +2643,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;
@@ -3104,7 +3147,7 @@ sub end_simpleeditbutton {
}
sub practice_problem_header {
- return '
'.&mt('Practice Problem').'
'.
+ return '
'.&mt('Practice Problem').'
'.
''.&mt('Submissions are not permanently recorded').
'';
}
@@ -3130,7 +3173,7 @@ sub randomizetry_problem_header {
$text = &mt('A new variation will be generated after each try until correct or tries limit is reached.');
}
}
- return '