Пример #1
0
 /**
  * Dereference the file referenced by an assessmentItemRef and add
  * outcome/responseDeclarations to the compact one.
  *
  * @param \qtism\data\ExtendedAssessmentItemRef $compactAssessmentItemRef A previously instantiated ExtendedAssessmentItemRef object.
  * @param \qtism\data\storage\FileResolver $resolver The Resolver to be used to resolver AssessmentItemRef's href attribute.
  * @throws \qtism\data\storage\xml\XmlStorageException If an error occurs (e.g. file not found at URI or unmarshalling issue) during the dereferencing.
  */
 protected static function resolveAssessmentItemRef(ExtendedAssessmentItemRef $compactAssessmentItemRef, FileResolver $resolver)
 {
     try {
         $href = $resolver->resolve($compactAssessmentItemRef->getHref());
         $doc = new XmlDocument();
         $doc->load($href);
         $item = $doc->getDocumentComponent();
         foreach ($item->getResponseDeclarations() as $resp) {
             $compactAssessmentItemRef->addResponseDeclaration($resp);
         }
         foreach ($item->getOutcomeDeclarations() as $out) {
             $compactAssessmentItemRef->addOutcomeDeclaration($out);
         }
         foreach ($item->getTemplateDeclarations() as $tpl) {
             $compactAssessmentItemRef->addTemplateDeclaration($tpl);
         }
         foreach ($item->getModalFeedbackRules() as $modalFeedbackRule) {
             $compactAssessmentItemRef->addModalFeedbackRule($modalFeedbackRule);
         }
         if ($item->hasResponseProcessing() === true) {
             $compactAssessmentItemRef->setResponseProcessing($item->getResponseProcessing());
         }
         if ($item->hasTemplateProcessing() === true) {
             $compactAssessmentItemRef->setTemplateProcessing($item->getTemplateProcessing());
         }
         $compactAssessmentItemRef->setShufflings($item->getShufflings());
         $compactAssessmentItemRef->setAdaptive($item->isAdaptive());
         $compactAssessmentItemRef->setTimeDependent($item->isTimeDependent());
         $compactAssessmentItemRef->setEndAttemptIdentifiers($item->getEndAttemptIdentifiers());
     } catch (Exception $e) {
         $msg = "An error occured while unreferencing file '{$href}'.";
         throw new XmlStorageException($msg, XmlStorageException::RESOLUTION, $e);
     }
 }