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