/** * Desploy all the required files into the provided directories * * @param core_kernel_classes_Resource $item * @param string $language * @param tao_models_classes_service_StorageDirectory $publicDirectory * @param tao_models_classes_service_StorageDirectory $privateDirectory * @return common_report_Report */ protected function deployQtiItem(core_kernel_classes_Resource $item, $language, tao_models_classes_service_StorageDirectory $publicDirectory, tao_models_classes_service_StorageDirectory $privateDirectory) { $qtiService = Service::singleton(); // retrieve the media assets try { $qtiItem = $this->retrieveAssets($item, $language, $publicDirectory); //store variable qti elements data into the private directory $variableElements = $qtiService->getVariableElements($qtiItem); $privateDirectory->write($language . DIRECTORY_SEPARATOR . self::VAR_ELT_FILE_NAME, json_encode($variableElements)); //create the item.json file in private directory $itemPacker = new QtiItemPacker(); $itemPacker->setReplaceXinclude(false); $itemPack = $itemPacker->packQtiItem($item, $language, $qtiItem, $publicDirectory); $this->itemJson = $itemPack->JsonSerialize(); //get the filtered data to avoid cheat $data = $qtiItem->getDataForDelivery(); $this->itemJson['data'] = $data['core']; $privateDirectory->write($language . DIRECTORY_SEPARATOR . self::ITEM_FILE_NAME, json_encode($this->itemJson)); return new common_report_Report(common_report_Report::TYPE_SUCCESS, __('Successfully compiled "%s"', $language)); } catch (\tao_models_classes_FileNotFoundException $e) { return new common_report_Report(common_report_Report::TYPE_ERROR, __('Unable to retrieve asset "%s"', $e->getFilePath())); } catch (XIncludeException $e) { return new common_report_Report(common_report_Report::TYPE_ERROR, $e->getUserMessage()); } catch (\Exception $e) { return new common_report_Report(common_report_Report::TYPE_ERROR, $e->getMessage()); } }