/**
  * Create a new ExtendedAssessmentItemRef object from an AssessmentItemRef object.
  *
  * @param \qtism\data\AssessmentItemRef $assessmentItemRef An AssessmentItemRef object.
  * @return \qtism\data\ExtendedAssessmentItemRef An ExtendedAssessmentItemRef object.
  */
 public static function createFromAssessmentItemRef(AssessmentItemRef $assessmentItemRef)
 {
     $identifier = $assessmentItemRef->getIdentifier();
     $href = $assessmentItemRef->getHref();
     $compactRef = new static($identifier, $href);
     $compactRef->setBranchRules($assessmentItemRef->getBranchRules());
     $compactRef->setCategories($assessmentItemRef->getCategories());
     $compactRef->setFixed($assessmentItemRef->isFixed());
     $compactRef->setItemSessionControl($assessmentItemRef->getItemSessionControl());
     $compactRef->setTimeLimits($assessmentItemRef->getTimeLimits());
     $compactRef->setPreConditions($assessmentItemRef->getPreConditions());
     $compactRef->setRequired($assessmentItemRef->isRequired());
     $compactRef->setTemplateDefaults($assessmentItemRef->getTemplateDefaults());
     return $compactRef;
 }
 /**
  * Get the item sessions related to $assessmentItemRef.
  *
  * @param \qtism\data\AssessmentItemRef $assessmentItemRef An AssessmentItemRef object.
  * @throws \OutOfBoundsException If no item sessions related to $assessmentItemRef are found.
  * @return \qtism\runtime\tests\AssessmentItemSessionCollection A collection of AssessmentItemSession objects related to $assessmentItemRef.
  */
 public function getAssessmentItemSessions(AssessmentItemRef $assessmentItemRef)
 {
     if (isset($this->shelves[$assessmentItemRef]) === true) {
         return $this->shelves[$assessmentItemRef];
     } else {
         $itemId = $assessmentItemRef->getIdentifier();
         $msg = "No AssessmentItemSession objects bound to '{$itemId}'.";
         throw new OutOfBoundsException($msg);
     }
 }
 /**
  * @param AssessmentItemRef $itemRef
  *
  * @return DateTime
  */
 public function getItemStartTime($itemRef)
 {
     $itemResults = array();
     $itemStartTime = null;
     $ssid = $this->getTestSession()->getSessionId();
     $resultServer = \taoResultServer_models_classes_ResultServerStateFull::singleton();
     $collection = $resultServer->getVariables("{$ssid}.{$itemRef->getIdentifier()}.{$this->getTestSession()->getCurrentAssessmentItemRefOccurence()}");
     foreach ($collection as $vars) {
         foreach ($vars as $var) {
             if ($var->variable instanceof taoResultServer_models_classes_TraceVariable && $var->variable->getIdentifier() === 'ITEM_START_TIME_SERVER') {
                 $itemResults[] = $var->variable->getValue();
             }
         }
     }
     $itemResults = array_map(function ($ts) {
         $itemStart = new DateTime('now', new DateTimeZone('UTC'));
         $itemStart->setTimestamp($ts);
         return $itemStart;
     }, $itemResults);
     if (!empty($itemResults)) {
         $itemStartTime = min($itemResults);
     }
     return $itemStartTime;
 }