--- loncom/interface/lonhelper.pm 2003/04/30 19:23:48 1.16 +++ loncom/interface/lonhelper.pm 2003/05/02 19:20:51 1.17 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # .helper XML handler to implement the LON-CAPA helper # -# $Id: lonhelper.pm,v 1.16 2003/04/30 19:23:48 bowersj2 Exp $ +# $Id: lonhelper.pm,v 1.17 2003/05/02 19:20:51 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -149,7 +149,11 @@ of the information used is persistent be and -maintain code. It is possible to do some of the work with an XML fragment parsed by -lonxml; again, see lonprintout.pm for an example. +lonxml; again, see lonprintout.pm for an example. In that case it is +imperative that you call B +before parsing XML fragments and B +when you are done. See lonprintout.pm for examples of this usage in the +printHelper subroutine. =cut @@ -462,7 +466,7 @@ sub process { # Phase 2: Preprocess current state my $startState = $self->{STATE}; - my $state = $self->{STATES}{$startState}; + my $state = $self->{STATES}->{$startState}; # For debugging, print something here to determine if you're going # to an undefined state. @@ -473,10 +477,11 @@ sub process { # Phase 3: While the current state is different from the previous state, # keep processing. - while ( $startState ne $self->{STATE} ) + while ( $startState ne $self->{STATE} && + defined($self->{STATES}->{$self->{STATE}}) ) { $startState = $self->{STATE}; - $state = $self->{STATES}{$startState}; + $state = $self->{STATES}->{$startState}; $state->preprocess(); } @@ -495,6 +500,11 @@ sub display { my $result = ""; + if (!defined($state)) { + $result = "Error: state '$state' not defined!"; + return $result; + } + # Phase 4: Display. my $stateTitle = $state->title(); my $bodytag = &Apache::loncommon::bodytag("$self->{TITLE}",'',''); @@ -1295,7 +1305,10 @@ the user can manipulate the folders. takes the standard variable attribute to control what helper variable stores the results. It also takes a "multichoice" attribute, -which controls whether the user can select more then one resource. +which controls whether the user can select more then one resource. The +"toponly" attribute controls whether the resource display shows just the +resources in that sequence, or recurses into all sub-sequences, defaulting +to false. B @@ -1356,6 +1369,7 @@ sub start_resource { $paramHash->{'variable'} = $token->[2]{'variable'}; $helper->declareVar($paramHash->{'variable'}); $paramHash->{'multichoice'} = $token->[2]{'multichoice'}; + $paramHash->{'toponly'} = $token->[2]{'toponly'}; return ''; } @@ -1516,7 +1530,7 @@ BUTTONS } }; - $ENV{'form.condition'} = 1; + $ENV{'form.condition'} = !$self->{'toponly'}; $result .= &Apache::lonnavmaps::render( { 'cols' => [$renderColFunc, Apache::lonnavmaps::resource()],