/** * Checks if an item has been completed * @param RouteItem $routeItem * @param AssessmentItemSession $itemSession * @return bool */ public static function isItemCompleted(RouteItem $routeItem, AssessmentItemSession $itemSession) { $completed = false; if ($routeItem->getTestPart()->getNavigationMode() === NavigationMode::LINEAR) { // In linear mode, we consider the item completed if it was presented. if ($itemSession->isPresented() === true) { $completed = true; } } else { // In nonlinear mode we consider: // - an adaptive item completed if it's completion status is 'completed'. // - a non-adaptive item to be completed if it is responded. $isAdaptive = $itemSession->getAssessmentItem()->isAdaptive(); if ($isAdaptive === true && $itemSession['completionStatus']->getValue() === AssessmentItemSession::COMPLETION_STATUS_COMPLETED) { $completed = true; } else { if ($isAdaptive === false && $itemSession->isResponded() === true) { $completed = true; } } } return $completed; }