--- rat/lonpage.pm 2015/03/11 19:55:44 1.108 +++ rat/lonpage.pm 2016/08/09 23:43:51 1.118 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Page Handler # -# $Id: lonpage.pm,v 1.108 2015/03/11 19:55:44 raeburn Exp $ +# $Id: lonpage.pm,v 1.118 2016/08/09 23:43:51 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,8 @@ use Apache::lonhtmlcommon; use Apache::lonxml(); use Apache::lonlocal; use Apache::lonmenu; +use Apache::lonhomework; +use Apache::lonparmset; use HTML::TokeParser; use GDBM_File; use Apache::lonsequence; @@ -187,6 +189,26 @@ sub handler { my $firstres=$hash{'map_start_'.$requrl}; my $lastres=$hash{'map_finish_'.$requrl}; if (($firstres) && ($lastres)) { +# ------------------------------------------------------------- Countdown Timer + my $now = time; + my ($pagefirstaccess,%hastimeleft,%countdowndisp,%donebutton, + %donebtnextra,%buttonbytime,$donetime,$symbtosetdone); + my ($pagesymb,$courseid,$domain,$name)=&Apache::lonnet::whichuser(); + unless ($pagesymb) { + $pagesymb=&Apache::lonnet::symbread($requrl); + } + if ($pagesymb && ($courseid ne '') && ($domain ne '') && ($name ne '')) { + my %times=&Apache::lonnet::get('firstaccesstimes', + [$courseid."\0".$pagesymb], + $domain,$name); + if ($times{$courseid."\0".$pagesymb} =~ /^\d+$/) { + $pagefirstaccess = $times{$courseid."\0".$pagesymb}; + if ($pagefirstaccess && $env{'form.LC_interval_done'} eq 'true') { + $donetime = $now - $pagefirstaccess; + } + } + } + # ----------------------------------------------------------------- Render page @rows=(); @@ -204,6 +226,27 @@ sub handler { my ($mapid,$resid)=split(/\./,$rid); $symbhash{$hash{'src_'.$rid}}= [$hash{'src_'.$rid},$resid]; + if (($donetime) && ($symbtosetdone eq '')) { + my $src = $hash{'src_'.$rid}; + if ($hash{'encrypted_'.$rid}) { + $src=&Apache::lonenc::encrypted($src); + } + my ($mapid,$resid)=split(/\./,$rid); + my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src); + if ($src =~ /$LONCAPA::assess_re/) { + my @interval=&Apache::lonnet::EXT("resource.0.interval",$symb); + if (@interval > 1) { + if (($interval[1] eq 'map') && ($pagefirstaccess)) { + my ($timelimit) = ($interval[0] =~ /^(\d+)/); + if ($timelimit) { + if ($pagefirstaccess + $timelimit > $now) { + $symbtosetdone = $symb; + } + } + } + } + } + } } } } @@ -216,6 +259,7 @@ sub handler { my $contents=0; my $nforms=0; my $nuploads=0; + my $ntimers=0; my %turninpaths; my %multiresps; my $turninparent; @@ -237,6 +281,16 @@ sub handler { my $xmlheader=''; my $xmlbody=''; +# ---------------------------------------------------------- Handle Done button + + # Set the event timer to zero if the "done button" was clicked. + if ($donetime && $symbtosetdone) { + &Apache::lonparmset::storeparm_by_symb_inner($symbtosetdone,'0_interval', + 2,$donetime,'date_interval', + $name,$domain); + undef($env{'form.LC_interval_done'}); + } + # --------------------------------------------- Get SSI output, post parameters for ($i=0;$i<=$#rows;$i++) { @@ -301,8 +355,8 @@ ENDEXT my $output=Apache::lonnet::ssi($src,%posthash); $output=~s|//(\s*)?\s||gs; if (($target eq 'tex') || ($target eq 'tex_answer')) { - $output =~ s/^([^&]+)\\begin{document}//; - $output =~ s/\\end{document}//; + $output =~ s/^([^&]+)\\begin\{document}//; + $output =~ s/\\end\{document}//; # $output = '\parbox{\minipagewidth}{ '.$output.' }'; #some additional cleanup necessary for LateX (due to limitations of table environment $output =~ s/(\\vskip\s*\d+mm)\s*(\\\\)+/$1/g; @@ -369,16 +423,26 @@ ENDEXT } $output=~s/\<\/body\>.*//si; if ($output=~/\