/** * Checks if an item has been completed * @param Jump $jump * @return bool */ private static function isItemCompleted(Jump $jump) { $itemSession = $jump->getItemSession(); $routeItem = $jump->getTarget(); $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; }
/** * Gets infos about a particular item * @param AssessmentTestSession $session * @param Jump $jump * @return array */ private static function getItemInfo(AssessmentTestSession $session, Jump $jump) { $itemSession = $jump->getItemSession(); $routeItem = $jump->getTarget(); return array('remainingAttempts' => $itemSession->getRemainingAttempts(), 'answered' => self::isItemCompleted($routeItem, $itemSession), 'viewed' => $itemSession->isPresented(), 'flagged' => self::getItemFlag($session, $jump), 'position' => $jump->getPosition()); }