Example #1
0
 public function getJson()
 {
     $returnValue = array('itemData' => null);
     $xml = file_get_contents('php://input');
     Authoring::validateQtiXml($xml);
     $qtiParser = new QtiParser($xml);
     $item = $qtiParser->load();
     if (!is_null($item)) {
         $returnValue['itemData'] = $item->toArray();
     } else {
         throw new common_Exception('invalid qti xml');
     }
     $this->returnJson($returnValue);
 }
 /**
  * Add required resources for a custom interaction (css, js) in the item directory
  * 
  * @param string $typeIdentifier
  * @param \core_kernel_classes_Resource $item
  * @throws common_exception_Error
  */
 public function addRequiredResources($typeIdentifier, core_kernel_classes_Resource $item)
 {
     //find the interaction in the registry
     $implementationData = $this->getImplementatioByTypeIdentifier($typeIdentifier);
     if (is_null($implementationData)) {
         throw new common_exception_Error('no implementation found with the type identifier ' . $typeIdentifier);
     }
     //get the root directory of the interaction
     $directory = $implementationData['directory'];
     //get the lists of all required resources
     $manifest = $implementationData['manifest'];
     $required = array($manifest['entryPoint']);
     //include libraries remotely only, so this block is temporarily disabled
     foreach ($manifest['libraries'] as $lib) {
         if (!ClientLibRegistry::getRegistry()->isRegistered($lib)) {
             $lib = preg_replace('/^.\\//', '', $lib);
             $lib .= '.js';
             //add js extension
             $required[] = $lib;
         }
     }
     //include custom interaction specific css in the item
     if (isset($manifest['css'])) {
         $required = array_merge($required, array_values($manifest['css']));
     }
     //include media in the item
     if (isset($manifest['media'])) {
         $required = array_merge($required, array_values($manifest['media']));
     }
     //add them to the rdf item
     $resources = Authoring::addRequiredResources($directory, $required, $typeIdentifier, $item, '');
     return $resources;
 }
 public function testFileParsingApipv1p0()
 {
     $files = glob($this->getSamplePath('/xml/apipv1p0/*.xml'));
     $dom = new \DOMDocument('1.0', 'UTF-8');
     foreach ($files as $file) {
         Authoring::validateQtiXml($file);
     }
 }
 public function saveItem()
 {
     $returnValue = array('success' => false);
     if ($this->hasRequestParameter('uri')) {
         $uri = urldecode($this->getRequestParameter('uri'));
         $xml = file_get_contents('php://input');
         $rdfItem = new core_kernel_classes_Resource($uri);
         $itemService = taoItems_models_classes_ItemsService::singleton();
         //check if the item is QTI item
         if ($itemService->hasItemModel($rdfItem, array(ItemModel::MODEL_URI))) {
             try {
                 $sanitized = Authoring::sanitizeQtiXml($xml);
                 Authoring::validateQtiXml($sanitized);
                 //get the QTI xml
                 $returnValue['success'] = $itemService->setItemContent($rdfItem, $sanitized);
             } catch (QtiModelException $e) {
                 throw new \RuntimeException($e->getUserMessage(), 0, $e);
             }
         }
     }
     $this->returnJson($returnValue);
 }
 protected function createQtiItemModel($qtiFile, $validate = true)
 {
     $qtiXml = Authoring::sanitizeQtiXml($qtiFile);
     //validate the file to import
     $qtiParser = new Parser($qtiXml);
     if ($validate) {
         $basePath = common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem')->getDir();
         $qtiParser->validate();
         if (!$qtiParser->isValid()) {
             $failedValidation = true;
             $eStrs = array();
             foreach ($qtiParser->getErrors() as $libXmlError) {
                 $eStrs[] = __('QTI-XML error at line %1$d "%2$s".', $libXmlError['line'], str_replace('[LibXMLError] ', '', trim($libXmlError['message'])));
             }
             // Make sure there are no duplicate...
             $eStrs = array_unique($eStrs);
             // Add sub-report.
             throw new ValidationException($qtiFile, $eStrs);
         }
     }
     $qtiItem = $qtiParser->load();
     return $qtiItem;
 }
 protected function createQtiItemModel($qtiFile, $validate = true)
 {
     $qtiXml = Authoring::sanitizeQtiXml($qtiFile);
     //validate the file to import
     $qtiParser = new Parser($qtiXml);
     if ($validate) {
         $qtiParser->validate();
         if (!$qtiParser->isValid()) {
             $eStrs = array();
             foreach ($qtiParser->getErrors() as $libXmlError) {
                 $eStrs[] = __('QTI-XML error at line %1$d "%2$s".', $libXmlError['line'], str_replace('[LibXMLError] ', '', trim($libXmlError['message'])));
             }
             // Make sure there are no duplicate...
             $eStrs = array_unique($eStrs);
             // Add sub-report.
             throw new ValidationException($qtiFile, $eStrs);
         }
     }
     $qtiItem = $qtiParser->load();
     if (!$qtiItem && count($qtiParser->getErrors())) {
         $errors = [];
         foreach ($qtiParser->getErrors() as $error) {
             $errors[] = $error['message'];
         }
         throw new ValidationException($qtiFile, $errors);
     }
     return $qtiItem;
 }
Example #7
0
 /**
  * @param $xml
  * @param core_kernel_classes_Resource $rdfItem
  * @return bool
  * @throws exception\QtiModelException
  */
 public function saveXmlItemToRdfItem($xml, core_kernel_classes_Resource $rdfItem)
 {
     $sanitized = Authoring::sanitizeQtiXml($xml);
     Authoring::validateQtiXml($sanitized);
     $qtiParser = new Parser($sanitized);
     $qtiItem = $qtiParser->load();
     return $this->saveDataItemToRdfItem($qtiItem, $rdfItem);
 }
 public function saveItem()
 {
     $returnValue = array('success' => false);
     if ($this->hasRequestParameter('uri')) {
         $uri = urldecode($this->getRequestParameter('uri'));
         $xml = file_get_contents('php://input');
         $rdfItem = new core_kernel_classes_Resource($uri);
         $itemService = taoItems_models_classes_ItemsService::singleton();
         //check if the item is QTI item
         if ($itemService->hasItemModel($rdfItem, array(ItemModel::MODEL_URI))) {
             $xml = Authoring::validateQtiXml($xml);
             //get the QTI xml
             $returnValue['success'] = $itemService->setItemContent($rdfItem, $xml);
             $returnValue['xml'] = $xml;
         }
     }
     $this->returnJson($returnValue);
 }