validate(); $ref = $this->getRequestParameter('ref') ?: null; $itemDuration = null; $scope = $this->getRequestParameter('scope'); $start = $this->getRequestParameter('start') !== false; try { $serviceContext = $this->getServiceContext(); $this->saveToolStates(); $this->getRunnerService()->endTimer($serviceContext, $itemDuration, $this->getTime()); if ($this->getRequestParameter('offline') === true) { $this->setOffline(); } $result = $this->getRunnerService()->skip($serviceContext, $scope, $ref); $response = [ 'success' => $result, ]; if ($result) { $response['testContext'] = $this->getRunnerService()->getTestContext($serviceContext); if ($serviceContext->containsAdaptive()) { // Force map update. $response['testMap'] = $this->getRunnerService()->getTestMap($serviceContext, true); } } if ($start == true) { // start the timer only when move starts the item session // and after context build to avoid timing error $this->getRunnerService()->startTimer($serviceContext, $this->getTime()); } } catch (Exception $e) { $response = $this->getErrorResponse($e); } return $response; } /** * Scope parameter is required. * * @return array */ protected function getRequiredFields() { return array_merge(parent::getRequiredFields(), ['scope']); } }