/** * Traverse this node, updating the results array that is used by * {@link stack_potentialresponse_tree::evaluate_response()}. * * @param stack_potentialresponse_tree_state $results to be updated. * @param int $key the index of this node. * @param stack_cas_session $cascontext the CAS context that holds all the relevant variables. * @param stack_options $options * @return array with two elements, the updated $results and the index of the next node. */ public function traverse($results, $key, $cascontext, $options) { $errorfree = true; if ($cascontext->get_errors_key('PRSANS' . $key)) { $results->_errors .= $cascontext->get_errors_key('PRSANS' . $key); $results->add_feedback(' ' . stack_string('prtruntimeerror', array('node' => 'PRSANS' . ($key + 1), 'error' => $cascontext->get_errors_key('PRSANS' . $key)))); $errorfree = false; } if ($cascontext->get_errors_key('PRTANS' . $key)) { $results->_errors .= $cascontext->get_errors_key('PRTANS' . $key); $results->add_feedback(' ' . stack_string('prtruntimeerror', array('node' => 'PRTANS' . ($key + 1), 'error' => $cascontext->get_errors_key('PRTANS' . $key)))); $errorfree = false; } if ($cascontext->get_errors_key('PRATOPT' . $key)) { $results->_errors .= $cascontext->get_errors_key('PRATOPT' . $key); $results->add_feedback(' ' . stack_string('prtruntimeerror', array('node' => 'PRATOPT' . ($key + 1), 'error' => $cascontext->get_errors_key('PRATOPT' . $key)))); $errorfree = false; } if (!$errorfree) { return -1; } $sans = $cascontext->get_value_key('PRSANS' . $key); $tans = $cascontext->get_value_key('PRTANS' . $key); $atopts = $cascontext->get_value_key('PRATOPT' . $key); // If we can't find atopts then they were not processed by the CAS. // They might still be some in the potential response which do not // need to be processed. if (false === $atopts) { $atopts = null; } $nextnode = $this->do_test($sans, $tans, $atopts, $options, $results); return $nextnode; }