--- loncom/homework/structuretags.pm 2003/10/09 21:49:24 1.215
+++ loncom/homework/structuretags.pm 2004/08/13 19:05:01 1.260.2.2
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.215 2003/10/09 21:49:24 albertel Exp $
+# $Id: structuretags.pm,v 1.260.2.2 2004/08/13 19:05:01 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -25,9 +25,7 @@
#
# http://www.lon-capa.org/
#
-# 2/19 Guy
-# 6/26/2001 fixed extra web display at end of
- ';
+
+
+ + +
- '; + '. + &Apache::lonhtmlcommon::htmlareaselectactive(@Apache::lonxml::htmlareafields). + "\n\n\n"; +} + +sub option { + my ($value,$name) = @_; + my $result =" + ".&option('CAN_ANSWER' ,'problemstate').&mt("Answerable")." + ".&option('CANNOT_ANSWER_tries' ,'problemstate').&mt("Open with full tries")." + ".&option('CANNOT_ANSWER_correct','problemstate').&mt("Open and correct")." + ".&option('SHOW_ANSWER' ,'problemstate').&mt("Show Answer")." + + + "; my $numtoanalyze=$ENV{'form.numtoanalyze'}; if (!$numtoanalyze) { $numtoanalyze=20; } $result.= ' + +ENDCHECKOUT +} + 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'); + + $Apache::lonhomework::problemstatus=&get_problem_status('0') } else { $Apache::inputtags::part=''; @Apache::inputtags::partlist=(); @@ -318,6 +384,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)=@_; @@ -335,13 +421,18 @@ 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); } + 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'}; @@ -356,6 +447,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; @@ -379,7 +471,9 @@ sub start_problem { } $body_tag_start.=&Apache::lonxml::printtokenheader($target,$token); } - + if ($ENV{'form.markaccess'}) { + &Apache::lonnet::set_first_access('map'); + } #handle rand seed in construction space my $rndseed=&setup_rndseed($safeeval); my ($symb)=&Apache::lonxml::whichuser(); @@ -399,21 +493,25 @@ sub start_problem { &Apache::lonxml::debug("Got $status"); if (( $status eq 'CLOSED' ) || ( $status eq 'UNCHECKEDOUT') || + ( $status eq 'NOT_YET_VIEWED') || ( $status eq 'BANNED') || - ( $status eq 'UNAVAILABLE')) { + ( $status eq 'UNAVAILABLE') || + ( $status eq 'INVALID_ACCESS')) { my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser); if ( $target eq "web" ) { $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.').''; - } else { - $result.=''.&mt('Not open to be viewed').''; + $msg.=''.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').''; + } elsif ($status ne 'NOT_YET_VIEWED') { + $msg.=''.&mt('Not open to be viewed').''; } - if ($status eq 'CLOSED') { + if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') { $msg.='The problem '.$accessmsg; } elsif ($status eq 'UNCHECKEDOUT') { $msg.=&checkout_msg; + } elsif ($status eq 'NOT_YET_VIEWED') { + $msg.=&firstaccess_msg($accessmsg,$symb); } $result.=$msg.''; } elsif ($target eq 'tex') { @@ -426,25 +524,19 @@ sub start_problem { } } elsif ($target eq 'web') { my $name= &get_resource_name($parstack,$safeeval); - if ($status eq 'CAN_ANSWER') { - # create a page header and exit - $result.="$head_tag_start "; my $temp=&Apache::edit::insertlist($target,$token); $result.=$temp; } elsif ($target eq 'modified') { @@ -517,13 +611,17 @@ sub end_problem { my $status=$Apache::inputtags::status['-1']; if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || $target eq 'tex') { - if ( $target eq 'grade' && $Apache::inputtags::part eq '0' && - $status eq 'CAN_ANSWER' ) { + if ( $target eq 'grade' && $Apache::inputtags::part eq '0') { # if part is zero, no |