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