/**
  * 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;
 }