--- loncom/homework/structuretags.pm 2004/03/09 20:37:58 1.245 +++ loncom/homework/structuretags.pm 2004/05/14 22:11:05 1.248 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.245 2004/03/09 20:37:58 albertel Exp $ +# $Id: structuretags.pm,v 1.248 2004/05/14 22:11:05 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,8 +40,7 @@ use Apache::lonlocal; use Apache::lonxml; BEGIN { - &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','startouttext','endouttext', -'simpleeditbutton','definetag')); + &Apache::lonxml::register('Apache::structuretags',('block','languageblock','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startouttext','endouttext','simpleeditbutton','definetag')); } sub start_web { @@ -153,7 +152,8 @@ sub setup_rndseed { my ($safeeval)=@_; my $rndseed; my ($symb)=&Apache::lonxml::whichuser(); - if ($ENV{'request.state'} eq "construct" || $symb eq '') { + if ($ENV{'request.state'} eq "construct" || $symb eq '' || + $Apache::lonhomework::history{'resource.CODE'}) { $rndseed=$ENV{'form.rndseed'}; if (!$rndseed) { $rndseed=$Apache::lonhomework::history{'rndseed'}; @@ -173,6 +173,9 @@ sub setup_rndseed { if (defined($rndseed) && $rndseed ne int($rndseed)) { $rndseed=join(',',&Math::Random::random_seed_from_phrase($rndseed)); } + if ($Apache::lonhomework::history{'resource.CODE'}) { + $rndseed=&Apache::lonnet::rndseed(); + } if ($safeeval) { &Apache::lonxml::debug("Setting rndseed to $rndseed"); &Apache::run::run('$external::randomseed='.$rndseed.';',$safeeval); @@ -405,8 +408,8 @@ sub start_problem { $Apache::lonhomework::scantronmode=1; } + &initialize_storage(); if ($target ne 'analyze') { - &initialize_storage(); if ($target eq 'web') { &Apache::lonhomework::showhash(%Apache::lonhomework::history); } @@ -431,6 +434,7 @@ sub start_problem { #added vars to the scripting enviroment my $expression='$external::part=\''.$Apache::inputtags::part.'\';'; + $expression.='$external::type=\''.$Apache::lonhomework::type.'\';'; &Apache::run::run($expression,$safeeval); my $status; my $accessmsg; @@ -1177,6 +1181,48 @@ sub end_solved { return ''; } +sub start_problemtype { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + my $result; + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze') { + my $mode=lc(&Apache::lonxml::get_param('mode',$parstack,$safeeval)); + if (!defined($mode)) { $mode='show'; } + my $for=&Apache::lonxml::get_param('for',$parstack,$safeeval); + my $found=0; + foreach my $type (split(',',$for)) { + if ($Apache::lonhomework::type eq lc($type)) { $found=1; } + } + if ($mode eq 'show' && !$found) { + &Apache::lonxml::get_all_text("/problemtype",$parser); + } + if ($mode eq 'hide' && $found) { + &Apache::lonxml::get_all_text("/problemtype",$parser); + } + } elsif ($target eq 'edit') { + $result .=&Apache::edit::tag_start($target,$token); + $result.=&Apache::edit::select_arg('Mode:','mode', + [['show','Show'], + ['hide','Hide']] + ,$token); + $result .=&Apache::edit::checked_arg('When used as type(s):','for', + [ ['exam','Exam/Quiz Problem'], + ['survey','Survey'], + ['problem','Homework Problem'] ] + ,$token); + $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); + } elsif ($target eq 'modified') { + my $constructtag=&Apache::edit::get_new_args($token,$parstack, + $safeeval,'mode','for'); + if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } + } + return $result; +} + +sub end_problemtype { + return ''; +} + sub start_startouttext { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my @result=(''.'');