+
ENDCHECKOUT
@@ -1410,6 +1627,7 @@ sub init_problem_globals {
@Apache::structuretags::whilebody=();
@Apache::structuretags::whileline=();
$Apache::lonhomework::scantronmode=0;
+ $Apache::lonhomework::randomizetrypart=0;
undef($Apache::lonhomework::name);
undef($Apache::lonhomework::default_type);
undef($Apache::lonhomework::type);
@@ -1433,6 +1651,7 @@ sub reset_problem_globals {
undef($Apache::lonhomework::default_type);
undef($Apache::lonhomework::type);
undef($Apache::lonhomework::scantronmode);
+ undef($Apache::inputtags::randomizetrypart);
undef($Apache::lonhomework::ignore_response_errors);
undef(@Apache::functionplotresponse::callscripts);
&Apache::lonhomework::reset_show_problem_status();
@@ -1526,13 +1745,17 @@ sub start_problem {
my $resource_due;
my $name= &get_resource_name($parstack,$safeeval);
- my ($result,$form_tag_start,$slot_name,$slot,$probpartlist);
+ my ($result,$form_tag_start,$slot_name,$slot,$probpartlist,$firstaccres);
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
$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+)/);
+ my $is_set = &Apache::lonnet::set_first_access($interval[1],$timelimit);
+ unless (($is_set eq 'ok') || ($is_set eq 'already_set')) {
+ $firstaccres = $is_set;
+ }
}
($status,$accessmsg,$slot_name,$slot) =
@@ -1547,11 +1770,13 @@ sub start_problem {
$name);
} elsif (($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) {
my ($symb)= &Apache::lonnet::whichuser();
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (ref($navmap)) {
- my $res = $navmap->getBySymb($symb);
- if (ref($res)) {
- $probpartlist = $res->parts();
+ if ($symb ne '') {
+ my $navmap = Apache::lonnavmaps::navmap->new();
+ if (ref($navmap)) {
+ my $res = $navmap->getBySymb($symb);
+ if (ref($res)) {
+ $probpartlist = $res->parts();
+ }
}
}
}
@@ -1562,7 +1787,14 @@ sub start_problem {
if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
$target eq 'tex') {
+ my ($symb) = &Apache::lonnet::whichuser();
#handle rand seed in construction space
+ if (($env{'request.state'} eq 'construct') || ($symb eq '')) {
+ my $partorder=&Apache::lonnet::metadata($env{'request.uri'},'partorder');
+ if ($partorder ne '') {
+ @{$probpartlist} = split(/,/,$partorder);
+ }
+ }
my $rndseed=&setup_rndseed($safeeval,$target,$probpartlist);
if (($target eq 'grade') && &Apache::response::submitted()) {
if ($Apache::lonhomework::type eq 'randomizetry') {
@@ -1577,12 +1809,15 @@ sub start_problem {
}
}
}
- my ($symb)=&Apache::lonnet::whichuser();
if ($env{'request.state'} ne "construct" &&
($symb eq '' || $Apache::lonhomework::type eq 'practice')) {
+ my $rndseedval = $rndseed;
+ if (($symb eq '') && ($Apache::lonhomework::type eq 'randomizetry')) {
+ $rndseedval = $env{'form.rndseed'};
+ }
$form_tag_start.=' '.
+ $rndseedval.'" />'.
' ';
if (exists($env{'form.username'})) {
@@ -1604,12 +1839,19 @@ sub start_problem {
$form_tag_start.=&practice_problem_header();
}
$form_tag_start.=' ';
- } elsif (($env{'request.state'} ne "construct") &&
- ($Apache::lonhomework::type eq 'randomizetry') &&
- ($status eq 'CAN_ANSWER')) {
- my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
- my $problemstatus = &get_problem_status($Apache::inputtags::part);
- $form_tag_start.=&randomizetry_problem_header($problemstatus,$reqtries);
+ }
+ if (($env{'request.state'} ne "construct") &&
+ ($Apache::lonhomework::type eq 'randomizetry') &&
+ ($status eq 'CAN_ANSWER')) {
+ my @parts;
+ if (ref($probpartlist) eq 'ARRAY') {
+ @parts = @{$probpartlist};
+ }
+ unless (@parts) {
+ my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
+ my $problemstatus = &get_problem_status($Apache::inputtags::part);
+ $form_tag_start.=&randomizetry_problem_header($problemstatus,$reqtries,$symb);
+ }
}
my $expression='$external::datestatus="'.$status.'";';
@@ -1646,6 +1888,10 @@ sub start_problem {
} elsif ($status eq 'UNCHECKEDOUT') {
$msg.=&checkout_msg();
} elsif ($status eq 'NOT_YET_VIEWED') {
+ if ($firstaccres) {
+ $msg .= ''.
+ &mt('A problem occurred when trying to start the timer.').'
';
+ }
$msg.=&firstaccess_msg($accessmsg,$symb);
} elsif ($status eq 'NOT_IN_A_SLOT') {
$msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
@@ -1721,6 +1967,10 @@ sub start_problem {
$result.= ' '.
&practice_problem_header().' ';
+ } elsif ($Apache::lonhomework::type eq 'randomizetry') {
+ my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
+ my $problemstatus = &get_problem_status($Apache::inputtags::part);
+ $result.=&randomizetry_problem_header($problemstatus,$reqtries);
}
}
# if we are viewing someone else preserve that info
@@ -1922,7 +2172,24 @@ sub end_problem {
}
}
if ($target eq 'web') {
- $result.=&Apache::functionplotresponse::init_script();
+ $result.=&Apache::functionplotresponse::init_script();
+ if ($Apache::lonhomework::default_type eq 'randomizetry') {
+ my ($symb) = &Apache::lonnet::whichuser();
+ if ((($env{'request.state'} eq 'construct') || ($symb eq '')) &&
+ ($status eq 'CAN_ANSWER')) {
+ unless (@Apache::inputtags::partlist > 1) {
+ $result.= <<"ENDJS";
+
+ENDJS
+ }
+ }
+ }
}
if ($target eq 'grade') {
&Apache::lonhomework::showhash(%Apache::lonhomework::results);
@@ -2016,6 +2283,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');
@@ -2719,20 +2988,14 @@ sub start_part {
} elsif ($target eq 'web') {
if ($status eq 'CAN_ANSWER') {
my $problemstatus = &get_problem_status($Apache::inputtags::part);
- my $probrandomize = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].type");
- my $probrandtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::partlist[0].randomizeontries");
my $num = scalar(@Apache::inputtags::partlist)-1;
- if ($probrandomize eq 'randomizetry') {
- if (&Apache::lonnet::EXT("resource.$Apache::inputtags::part.type") ne 'randomizetry') {
- $result .= &randomizetry_part_header($problemstatus,'none',$num);
- } else {
- my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
- if ($probrandtries ne $reqtries) {
- $result .= &randomizetry_part_header($problemstatus,$reqtries,$num);
- }
- }
- } elsif (&Apache::lonnet::EXT("resource.$Apache::inputtags::part.type") eq 'randomizetry') {
- my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
+ if ((($Apache::lonhomework::default_type eq 'randomizetry') ||
+ ($Apache::lonhomework::randomizetrypart)) &&
+ ($Apache::lonhomework::type ne 'randomizetry')) {
+ $result .= &randomizetry_part_header($problemstatus,'none',$num);
+ } elsif ($Apache::lonhomework::type eq 'randomizetry') {
+ $Apache::lonhomework::randomizetrypart = 1;
+ my $reqtries = &Apache::lonnet::EXT("resource.$id.randomizeontries");
$result .= &randomizetry_part_header($problemstatus,$reqtries,$num);
}
}
@@ -2787,7 +3050,11 @@ sub end_part {
$gradestatus='';
}
$result.=$gradestatus;
- if ($$tagstack[-2] eq 'td' and $target eq 'tex') {$result.='\end{minipage}';}
+ if ($$tagstack[-2] eq 'td' and $target eq 'tex') {
+ if (not $env{'form.problem_split'}=~/yes/) {
+ $result.='\end{minipage}';
+ }
+ }
} elsif ($target eq 'edit') {
$result.=&Apache::edit::end_table();
} elsif ($target eq 'modified') {
@@ -3052,7 +3319,7 @@ sub practice_problem_header {
}
sub randomizetry_problem_header {
- my ($problemstatus,$reqtries) = @_;
+ my ($problemstatus,$reqtries,$symb) = @_;
my ($header,$text);
if ($reqtries > 1) {
$header = &mt('New Problem Variation After Every [quant,_1,Try,Tries]',$reqtries);
@@ -3072,8 +3339,13 @@ sub randomizetry_problem_header {
$text = &mt('A new variation will be generated after each try until correct or tries limit is reached.');
}
}
- return ''.$header.' '.
- ''.$text.' ';
+ if (($env{'request.state'} eq "construct") || ($symb eq '')) {
+ return ''.
+ '
'.$header.' '.$text.' ';
+ } else {
+ return ''.$header.' '.
+ ''.$text.' ';
+ }
}
sub randomizetry_part_header {
@@ -3081,7 +3353,7 @@ sub randomizetry_part_header {
my ($header,$text);
if ($reqtries eq 'none') {
$header = &mt('No Question Variation');
- $text = &mt('For this question there will no new variation after a try.');
+ $text = &mt('For this question there will be no new variation after a try.');
} elsif ($reqtries > 1) {
$header = &mt('New Question Variation After Every [quant,_1,Try,Tries]',$reqtries);
if (($problemstatus eq 'no') ||