models/classes/runner/navigation/QtiRunnerNavigationPreviousItem.php
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;
    }
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;
    }
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 ; }
Do the move
@param RunnerServiceContext $context
@param mixed $ref
@return boolean
@throws \common_Exception
Do the move