*/ namespace oat\taoQtiTest\models\runner\navigation; use oat\taoQtiTest\models\runner\RunnerServiceContext; /** * Class QtiRunnerPreviousItem * @package oat\taoQtiTest\models\runner\navigation */ class QtiRunnerNavigationPreviousItem implements RunnerNavigation { /** * Do the move * @param RunnerServiceContext $context * @param mixed $ref * @return boolean * @throws \common_Exception */ public function move(RunnerServiceContext $context, $ref) { /* @var AssessmentTestSession $session */ $session = $context->getTestSession(); $nextPosition = $session->getRoute()->getPosition() - 1; if ($context->isAdaptive()) { $shadowTest = $context->getShadowTest(); $currentCatItemId = $context->getCurrentCatItemId(); $search = array_search($currentCatItemId, $shadowTest); // Consider potential changes in the selected items. $context->selectAdaptiveNextItem(); if ($search === 0) { QtiRunnerNavigation::checkTimedSectionExit($context, $nextPosition); $session->moveBack(); } else { $context->persistCurrentCatItemId($shadowTest[$search - 1]); } } else { QtiRunnerNavigation::checkTimedSectionExit($context, $nextPosition); $session->moveBack(); } return true; } }