--- loncom/homework/structuretags.pm 2018/05/15 04:59:14 1.560 +++ loncom/homework/structuretags.pm 2019/08/11 12:27:11 1.563 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.560 2018/05/15 04:59:14 raeburn Exp $ +# $Id: structuretags.pm,v 1.563 2019/08/11 12:27:11 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -366,12 +366,12 @@ var postsubmit = '$postsubmit'; submithandled = 1; \$( "#msg_"+buttonId ).css({"display": "inline","background-color": "#87cefa", "color": "black","padding": "2px"}) ; - if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) { + if (( \$(this.form).attr("id") == "LC_page" ) && (\$('input[name="all_submit"]').length )) { if (buttonId != "all_submit") { \$( ".LC_status_"+buttonId ).hide(); - if (( "#"+buttonId+"_pressed" ).length) { - \$( "#"+buttonId+"_pressed" ).val( "1" ); - } + } + if (( "#"+buttonId+"_pressed" ).length) { + \$( "#"+buttonId+"_pressed" ).val( "1" ); } } else { \$( ".LC_status_"+buttonId ).hide(); @@ -384,11 +384,9 @@ var postsubmit = '$postsubmit'; if (timeout > 0) { setTimeout(function(){ \$( "#msg_"+buttonId ).css({"display": "none"}); - if (( \$(this.form).id == "LC_page" ) && (\$('input[name="all_submit"]').length )) { - if (buttonId != "all_submit") { - if (( "#"+buttonId+"_pressed" ).length) { - \$( "#"+buttonId+"_pressed" ).val( "" ); - } + if (( \$(this.form).attr("id") == "LC_page" ) && (\$('input[name="all_submit"]').length )) { + if (( "#"+buttonId+"_pressed" ).length) { + \$( "#"+buttonId+"_pressed" ).val( "" ); } } \$( ".LC_hwk_submit" ).prop( "disabled", false); @@ -1117,7 +1115,7 @@ sub finalize_storage { delete(@Apache::lonhomework::results{@remove}); my ($symb,$courseid,$domain,$name) = &Apache::lonnet::whichuser($given_symb); - my ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref,$total,$possible); + my ($passback,$ltiscope,$ltimap,$ltisymb,$ltiref,$total,$possible,$dopassback); if ($env{'request.state'} eq 'construct' || $symb eq '' || $Apache::lonhomework::type eq 'practice') { @@ -1219,7 +1217,20 @@ sub finalize_storage { } } } - if (($passback) && ($ltiscope eq 'resource') && ($ltisymb eq $symb)) { + if ($passback) { + foreach my $key (keys(%Apache::lonhomework::results)) { + if ($key =~ /^resource\.([^\.]+)\.solved$/) { + my $part = $1; + if ((($Apache::lonhomework::results{$key} =~ /^correct_/) || + ($Apache::lonhomework::results{$key} eq 'incorrect_attempted')) && + ($Apache::lonhomework::results{"resource.$part.tries"})) { + $dopassback = 1; + last; + } + } + } + } + if (($dopassback) && ($ltiscope eq 'resource') && ($ltisymb eq $symb)) { $total = 0; $possible = 0; my $navmap = Apache::lonnavmaps::navmap->new(); @@ -1258,7 +1269,7 @@ sub finalize_storage { } &Apache::lonxml::debug('Store return message:'.$result); &store_aggregates($symb,$courseid); - if ($passback) { + if ($dopassback) { my $scoreformat = 'decimal'; if (ref($ltiref) eq 'HASH') { if ($ltiref->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) { @@ -1765,14 +1776,17 @@ sub start_problem { my $ipused; 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"); my ($timelimit) = split(/_/,$interval[0]); - &Apache::lonnet::set_first_access($interval[1],$timelimit); + my $is_set = &Apache::lonnet::set_first_access($interval[1],$timelimit); + unless (($is_set eq 'ok') || ($is_set eq 'already_set')) { + $firstaccres = $is_set; + } } } @@ -1879,6 +1893,10 @@ sub start_problem { ( $status eq 'NEED_DIFFERENT_IP')) { my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser, $style); + if (($status eq 'NOT_YET_VIEWED') && ($firstaccres)) { + $result .= '

'. + &mt('A problem occurred when trying to start the timer.').'

'; + } $result .= &access_status_msg('problem',$status,$symb,$target,$ipused,$accessmsg); } elsif ($status eq 'NEEDS_CHECKIN') { my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,