--- rat/lonpage.pm 2013/06/10 03:12:24 1.102 +++ rat/lonpage.pm 2016/08/10 04:37:32 1.111.2.2 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Page Handler # -# $Id: lonpage.pm,v 1.102 2013/06/10 03:12:24 raeburn Exp $ +# $Id: lonpage.pm,v 1.111.2.2 2016/08/10 04:37:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,7 @@ use Apache::lonhtmlcommon; use Apache::lonxml(); use Apache::lonlocal; use Apache::lonmenu; +use Apache::lonhomework; use HTML::TokeParser; use GDBM_File; use Apache::lonsequence; @@ -187,6 +188,18 @@ 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); + my ($pagesymb,$courseid,$domain,$name)=&Apache::lonnet::whichuser(); + 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}; + } + } # ----------------------------------------------------------------- Render page @rows=(); @@ -216,6 +229,7 @@ sub handler { my $contents=0; my $nforms=0; my $nuploads=0; + my $ntimers=0; my %turninpaths; my %multiresps; my $turninparent; @@ -301,12 +315,18 @@ 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; } + my $matheditor; + if ($output =~ /\Qjavascript:LC_mathedit_HWVAL_\E/) { + $matheditor = 'dragmath'; + } elsif ($output =~ /LCmathField/) { + $matheditor = 'lcmath'; + } my $parser=HTML::TokeParser->new(\$output); my $token; my $thisdir=$src; @@ -363,16 +383,39 @@ ENDEXT } $output=~s/\<\/body\>.*//si; if ($output=~/\
]*\>//gsi; $output=~s/\<\/form[^\>]*\>//gsi; if ($output=~/\]+name\s*=\s*[\'\"]*HWFILE/) { $nuploads++; } + if ($output=~/\]+name\s*=\s*[\'\"]*accessbutton/) { + $ntimers++; + $hastimer = 1; + } $output=~ s/\<((?:input|select|button|textarea)[^\>]+)name\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\>]*)\>/\<$1 name="$prefix$2" $3\>/gsi; $output=~ s/\<((?:input|select|button|textarea)[^\>]+)id\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\>]*)\>/\<$1 id="$idprefix$2" $3\>/gsi; + if ($hastimer) { + $output=~ + s/\<(input[^\>]+name=\Q"$prefix\Eaccessbutton"[^\>]+)(?:\Qdocument.markaccess.submit();\E)([^\>]*)\>/\<$1pageTimer(this.form,'$prefix')$2\>/gsi; + $output=~ s/\<(input[^\>]+name=\Q"$prefix\Emarkaccess"[^\>]+value=["'])(?:yes)(['"][^\>]*)\>/\<$1$2\>/gsi; + } + if ($matheditor eq 'dragmath') { + $output=~ + s/(\Qjavascript:LC_mathedit_\E)(HWVAL_)([^'"]+?)(\(['"]*)(\QHWVAL_\E\3['"]\)\;void\(0\)\;)/$1$idprefix$2$3$4$idprefix$5/g; + $output=~ + s/(function\s+LC_mathedit_)(HWVAL_)([^'"]+?)(\s+\(LCtextline\))/$1$idprefix$2$3$4/g; + } elsif ($matheditor eq 'lcmath') { + $output=~ + s/(var\s+LCmathField\s+=\s+document\.getElementById\(['"])([^'"]+?)(['"]\)\;)/$1$idprefix$2$3/g; + } + $output=~ + s/(\Q