--- loncom/homework/structuretags.pm 2003/06/04 14:49:20 1.179 +++ loncom/homework/structuretags.pm 2003/09/10 21:18:07 1.209 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.179 2003/06/04 14:49:20 albertel Exp $ +# $Id: structuretags.pm,v 1.209 2003/09/10 21:18:07 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,7 +38,8 @@ use Apache::File(); use Apache::lonmenu; BEGIN { - &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext')); + &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext', +'simpleeditbutton','definetag')); } sub start_web { @@ -56,11 +57,12 @@ sub end_web { sub start_tex { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my $result=''; my $bodytext=&Apache::lonxml::get_all_text("/tex",$parser); if ($target eq 'tex') { return $bodytext.' '; } - return ''; + return $result;; } sub end_tex { @@ -70,7 +72,7 @@ sub end_tex { sub page_start { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my %found; - foreach my $taginside ($tagstack) { + foreach my $taginside (@$tagstack) { foreach my $taglookedfor ('html','body','form') { if ($taginside =~ /^$taglookedfor$/i) {$found{$taglookedfor} = 1;} } @@ -89,6 +91,7 @@ sub page_start { 'onUnload="'.&Apache::lonmenu::unloadevents().'" '; my $background=&Apache::lonxml::get_param('background',$parstack, $safeeval); + if ($ENV{'browser.imagesuppress'} eq 'on') { $background=''; } if ($background) { $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]= $background; @@ -96,12 +99,15 @@ sub page_start { } else { my $bgcolor=&Apache::lonxml::get_param('bgcolor',$parstack, $safeeval); - if ($bgcolor) { + if (($bgcolor) && ($ENV{'browser.blackwhite'} ne 'on')) { $body_tag_start.='bgcolor="'.$bgcolor.'" '; } else { $body_tag_start.='bgcolor="#ffffff"'; } } + if ($ENV{'browser.fontenhance'} eq 'on') { + $body_tag_start.=' style="font-size: x-large;" '; + } $body_tag_start.='>'.&Apache::lonmenu::menubuttons(undef,$target,1); if ($target eq 'web' && $ENV{'request.state'} ne 'construct') { my ($symb,undef,undef,undef,$publicuser)= @@ -124,11 +130,18 @@ sub page_start { #use Time::HiRes(); sub get_resource_name { my ($parstack,$safeeval)=@_; + if (defined($Apache::lonhomework::name)) { + return $Apache::lonhomework::name; + } my $name=&Apache::lonnet::gettitle(); if ($name eq '') { $name=&Apache::lonnet::EXT('resource.title'); if ($name eq 'con_lost') { $name = ''; } } + if ($name!~/\S+/) { + $name=$ENV{'request.uri'}; + $name=~s-.*/([^/]+)$-$1-; + } $Apache::lonhomework::name=$name; return $name; } @@ -148,13 +161,15 @@ sub setup_rndseed { } if ($ENV{'form.resetdata'} eq 'New Problem Variation' || $ENV{'form.newrandomization'} eq 'New Randomization') { - $rndseed=time; - if ($rndseed eq $ENV{'form.rndseed'}) { - srand($rndseed); - $rndseed=int(rand(1000000000)); - } + srand(time); + $rndseed=int(rand(2100000000)); $ENV{'form.rndseed'}=$rndseed; + delete($ENV{'form.resetdata'}); + delete($ENV{'form.newrandomization'}); } + if (defined($rndseed) && $rndseed ne int($rndseed)) { + $rndseed=join(',',&Math::Random::random_seed_from_phrase($rndseed)); + } &Apache::lonxml::debug("Setting rndseed to $rndseed"); &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval); } @@ -260,21 +275,19 @@ credit even if done erroneously.
ENDCHECKOUT } -sub start_problem { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; - - $Apache::lonhomework::parsing_a_problem=1; - # meta is called from lonpublisher, which doesn't uses the normal - # lonhomework method of parsing the file which means that inputtags - # won't get reset - if ( $Apache::inputtags::part ne '' && $target != 'meta' ) { - &Apache::lonxml::error('Only one problem allowed in a .problem file'); - my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser); - return ''; +sub init_problem_globals { + my ($type)=@_; + #initialize globals + if ($type eq 'problem') { + $Apache::inputtags::part='0'; + @Apache::inputtags::partlist=('0'); + $Apache::lonhomework::problemstatus= + &Apache::lonnet::EXT('resource.0.problemstatus'); + } else { + $Apache::inputtags::part=''; + @Apache::inputtags::partlist=(); + $Apache::lonhomework::problemstatus=''; } -#initialize globals - $Apache::inputtags::part='0'; - @Apache::inputtags::partlist=('0'); @Apache::inputtags::responselist = (); @Apache::inputtags::importlist = (); @Apache::inputtags::previous=(); @@ -284,8 +297,33 @@ sub start_problem { @Apache::structuretags::whilebody=(); @Apache::structuretags::whileline=(); $Apache::lonhomework::scantronmode=0; - $Apache::lonhomework::problemstatus= - &Apache::lonnet::EXT('resource.0.problemstatus'); + undef($Apache::lonhomework::name); + +} + +sub reset_problem_globals { + my ($type)=@_; + undef(%Apache::lonhomework::history); + undef(%Apache::lonhomework::results); + undef($Apache::inputtags::part); +#don't undef this, lonhomework.pm takes care of this, we use this to +#detect if we try to do 2 problems in one file +# undef($Apache::lonhomework::parsing_a_problem); + undef($Apache::lonhomework::name); +} + +sub start_problem { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + + if ( $Apache::inputtags::part ne '' || + $Apache::lonhomework::parsing_a_problem) { + &Apache::lonxml::error('Only one <problem> allowed in a .problem file'); + #my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser); + return ''; + } + + $Apache::lonhomework::parsing_a_problem=1; + &init_problem_globals('problem'); if (defined($ENV{'scantron.maxquest'})) { $Apache::lonhomework::scantronmode=1; @@ -345,7 +383,7 @@ sub start_problem { ''. ''; + value="'.$ENV{'form.username'}.'" />