--- loncom/homework/structuretags.pm 2004/02/13 23:59:24 1.235 +++ loncom/homework/structuretags.pm 2004/03/09 20:37:58 1.245 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # definition of tags that give a structure to a document # -# $Id: structuretags.pm,v 1.235 2004/02/13 23:59:24 albertel Exp $ +# $Id: structuretags.pm,v 1.245 2004/03/09 20:37:58 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -120,6 +120,7 @@ sub page_start { $body_tag_start.=$help; } } + $body_tag_start.=&Apache::lonxml::message_location(); } my $form_tag_start; if (!defined($found{'form'})) { @@ -158,8 +159,8 @@ sub setup_rndseed { $rndseed=$Apache::lonhomework::history{'rndseed'}; if (!$rndseed) { $rndseed=time; - $ENV{'form.rndseed'}=$rndseed; } + $ENV{'form.rndseed'}=$rndseed; } if ($ENV{'form.resetdata'} eq &mt('New Problem Variation') || $ENV{'form.newrandomization'} eq &mt('New Randomization')) { @@ -183,11 +184,11 @@ sub setup_rndseed { sub problem_edit_header { return ' - - -
- -
'. + + +
+ +
'. &Apache::loncommon::help_open_topic('Problem_Editor_XML_Index', 'Problem Editing Help').''. &Apache::loncommon::help_open_faq(5). @@ -213,10 +214,10 @@ sub option { sub problem_web_to_edit_header { my ($rndseed)=@_; my $result.=' - - - - + + + + - ".&option('exam' ,'problemtype')."Exam Problem - ".&option('problem','problemtype')."Homework problem - ".&option('survey' ,'problemtype')."Survey Question + ".&option('exam' ,'problemtype').&mt("Exam Problem")." + ".&option('problem','problemtype').&mt("Homework problem")." + ".&option('survey' ,'problemtype').&mt("Survey Question")." Feedback Mode: - +
"; my $numtoanalyze=$ENV{'form.numtoanalyze'}; if (!$numtoanalyze) { $numtoanalyze=20; } @@ -336,14 +337,8 @@ sub init_problem_globals { if ($type eq 'problem') { $Apache::inputtags::part='0'; @Apache::inputtags::partlist=('0'); - $Apache::lonhomework::problemstatus= - &Apache::lonnet::EXT('resource.0.problemstatus'); - &Apache::lonxml::debug("problem status is $Apache::lonhomework::problemstatus"); - &Apache::lonxml::debug("env probstat is ".$ENV{'form.problemstatus'}); - if ($ENV{'request.state'} eq 'construct' && - defined($ENV{'form.problemstatus'})) { - $Apache::lonhomework::problemstatus=$ENV{'form.problemstatus'}; - } + + $Apache::lonhomework::problemstatus=&get_problem_status('0') } else { $Apache::inputtags::part=''; @Apache::inputtags::partlist=(); @@ -373,6 +368,26 @@ sub reset_problem_globals { undef($Apache::lonhomework::name); } +sub set_problem_state { + my ($part)=@_; + if ($ENV{'form.problemstate'} eq 'CANNOT_ANSWER_correct') { + $Apache::lonhomework::history{"resource.$part.solved"}= + 'correct_by_student'; + } +} + +sub get_problem_status { + my ($part)=@_; + my $problem_status=&Apache::lonnet::EXT("resource.$part.problemstatus"); + &Apache::lonxml::debug("problem status for $part is $problem_status"); + &Apache::lonxml::debug("env probstat is ".$ENV{'form.problemstatus'}); + if ($ENV{'request.state'} eq 'construct' && + defined($ENV{'form.problemstatus'})) { + $problem_status=$ENV{'form.problemstatus'}; + } + return $problem_status; +} + sub start_problem { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; @@ -395,8 +410,13 @@ sub start_problem { if ($target eq 'web') { &Apache::lonhomework::showhash(%Apache::lonhomework::history); } + if ($ENV{'request.state'} eq 'construct') { &set_problem_state('0'); } $Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type'); - &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:"); + if (($ENV{'request.state'} eq 'construct') && + defined($ENV{'form.problemtype'})) { + $Apache::lonhomework::type=$ENV{'form.problemtype'}; + } + &Apache::lonxml::debug("Found this to be of type :$Apache::ltonhomework::type:"); } if ($Apache::lonhomework::type eq '' ) { my $uri=$ENV{'request.uri'}; @@ -462,9 +482,9 @@ sub start_problem { $result.= $head_tag_start.''; my $msg=$body_tag_start; if ($status eq 'UNAVAILABLE') { - $result.='

'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'

'; + $msg.='

'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'

'; } else { - $result.='

'.&mt('Not open to be viewed').'

'; + $msg.='

'.&mt('Not open to be viewed').'

'; } if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') { $msg.='The problem '.$accessmsg; @@ -637,7 +657,10 @@ sub end_problem { sub start_library { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my ($result,$head_tag_start,$body_tag_start,$form_tag_start); - if ($$tagstack[0] eq 'library') { &init_problem_globals('library') }; + if ($$tagstack[0] eq 'library') { + &init_problem_globals('library'); + $Apache::lonhomework::type='problem'; + } if ($target eq 'edit') { ($result,$head_tag_start,$body_tag_start,$form_tag_start)= &page_start($target,$token,$tagstack,$parstack,$parser,$safeeval); @@ -981,8 +1004,7 @@ sub start_part { @Apache::inputtags::response=(); @Apache::inputtags::previous=(); @Apache::inputtags::previous_version=(); - $Apache::lonhomework::problemstatus= - &Apache::lonnet::EXT("resource.$id.problemstatus"); + $Apache::lonhomework::problemstatus=&get_problem_status($id); my $hidden=&Apache::loncommon::check_if_partid_hidden($Apache::inputtags::part); my $expression='$external::part=\''.$Apache::inputtags::part.'\';'; &Apache::run::run($expression,$safeeval); @@ -1001,6 +1023,9 @@ sub start_part { my $expression='$external::datestatus="'.$status.'";'; $expression.='$external::gradestatus="'.$Apache::lonhomework::history{"resource.$id.solved"}.'";'; &Apache::run::run($expression,$safeeval); + if ($ENV{'request.state'} eq 'construct') { + &set_problem_state($Apache::inputtags::part); + } if (( $status eq 'CLOSED' ) || ( $status eq 'UNCHECKEDOUT') || ( $status eq 'BANNED') || @@ -1086,9 +1111,10 @@ sub end_part { sub start_preduedate { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { + &Apache::lonxml::debug("State in preduedate is ". $Apache::inputtags::status['-1']); if ($Apache::inputtags::status['-1'] ne 'CAN_ANSWER' && - $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER' && - $Apache::inputtags::status['-1'] ne 'SHOW_ANSWER') { + $Apache::inputtags::status['-1'] ne 'CANNOT_ANSWER') { + &Apache::lonxml::debug("Wha? ". ($Apache::inputtags::status['-1'] ne 'SHOW_ANSWER')); &Apache::lonxml::get_all_text("/preduedate",$parser); } } @@ -1121,7 +1147,8 @@ sub start_notsolved { $target eq 'tex') { my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; &Apache::lonxml::debug("not solved has :$gradestatus:"); - if ($gradestatus =~ /^correct/) { + if ($gradestatus =~ /^correct/ && + &Apache::response::show_answer()) { &Apache::lonxml::debug("skipping"); &Apache::lonxml::get_all_text("/notsolved",$parser); } @@ -1138,7 +1165,8 @@ sub start_solved { if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex') { my $gradestatus=$Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"}; - if ($gradestatus !~ /^correct/) { + if ($gradestatus !~ /^correct/ || + !&Apache::response::show_answer()) { &Apache::lonxml::get_all_text("/solved",$parser); } }