/** * 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()); } }
/** * packTest implementation for QTI * @see {@link Packable} * @throws InvalidArgumentException * @throws common_Exception */ public function packTest(core_kernel_classes_Resource $test) { $testPack = null; try { $qtiTestService = taoQtiTest_models_classes_QtiTestService::singleton(); $itemService = taoItems_models_classes_ItemsService::singleton(); $doc = $qtiTestService->getDoc($test); $converter = new \taoQtiTest_models_classes_QtiTestConverter($doc); $itemPacker = new QtiItemPacker(); $items = array(); foreach ($qtiTestService->getItems($test) as $item) { $items[$item->getUri()] = $itemPacker->packItem($item, $itemService->getItemFolder($item)); } $testPack = new TestPack(self::$testType, $converter->toArray(), $items); } catch (common_Exception $e) { throw new common_Exception('Unable to pack test ' . $test->getUri() . ' : ' . $e->getMessage()); } return $testPack; }
/** * packTest implementation for QTI * @see {@link Packable} * @throws InvalidArgumentException * @throws common_Exception */ public function packTest(core_kernel_classes_Resource $test) { $testPack = null; try { //load resquired services $qtiTestService = taoQtiTest_models_classes_QtiTestService::singleton(); $itemService = taoItems_models_classes_ItemsService::singleton(); //load the test data $testFilePath = $qtiTestService->getDocPath($test); $testData = $this->getRoute($testFilePath); $testData['uri'] = $test->getUri(); //pack each test's item $itemPacker = new QtiItemPacker(); $items = array(); foreach ($qtiTestService->getItems($test) as $item) { $items[$item->getUri()] = $itemPacker->packItem($item, $itemService->getItemFolder($item)); } //create the pack $testPack = new TestPack(self::$testType, $testData, $items); } catch (common_Exception $e) { throw new common_Exception('Unable to pack test ' . $test->getUri() . ' : ' . $e->getMessage()); } return $testPack; }
/** * Test the exception when a wrong content is given to the parser * * @expectedException \common_Exception */ public function testWrongContentToPack() { $itemPacker = new QtiItemPacker(); $itemPacker->packItem(new core_kernel_classes_Resource('foo'), 'en-US'); }
/** * Test the exception when a wrong content is given to the parser * * @expectedException \common_Exception */ public function testWrongContentToPack() { $itemPacker = new QtiItemPacker(); $itemPacker->packItem(new core_kernel_classes_Resource('foo'), 'en-US', $this->getDirectoryStorage()); }