/**
  * Renders the auhtoring for simple tests
  */
 public function index()
 {
     $test = new \core_kernel_classes_Resource($this->getRequestParameter('uri'));
     $model = new TestModel();
     $itemSequence = array();
     $itemUris = array();
     $counter = 1;
     foreach ($model->getItems($test) as $item) {
         $itemUris[] = $item->getUri();
         $itemSequence[$counter] = array('uri' => tao_helpers_Uri::encode($item->getUri()), 'label' => $item->getLabel());
         $counter++;
     }
     // data for item sequence, terrible solution
     // @todo implement an ajax request for labels or pass from tree to sequence
     $allItems = array();
     foreach (\taoTests_models_classes_TestsService::singleton()->getAllItems() as $itemUri => $itemLabel) {
         $allItems['item_' . tao_helpers_Uri::encode($itemUri)] = $itemLabel;
     }
     $config = $model->getConfig($test);
     $checked = isset($config['previous']) ? $config['previous'] : false;
     $testConfig['previous'] = array('label' => __('Allow test-taker to go back in test'), 'checked' => $checked);
     $this->setData('uri', $test->getUri());
     $this->setData('allItems', json_encode($allItems));
     $this->setData('itemSequence', $itemSequence);
     $this->setData('testConfig', $testConfig);
     // data for generis tree form
     $this->setData('relatedItems', json_encode(tao_helpers_Uri::encodeArray($itemUris)));
     $openNodes = tao_models_classes_GenerisTreeFactory::getNodesToOpen($itemUris, new core_kernel_classes_Class(TAO_ITEM_CLASS));
     $this->setData('itemRootNode', TAO_ITEM_CLASS);
     $this->setData('itemOpenNodes', $openNodes);
     $this->setData('saveUrl', _url('saveItems', 'Authoring', 'taoTestLinear'));
     $this->setView('Authoring/index.tpl');
 }
 /**
  * (non-PHPdoc)
  * @see tao_models_classes_Compiler::compile()
  */
 public function compile()
 {
     $report = new common_report_Report(common_report_Report::TYPE_SUCCESS, __('Test Compilation'));
     $map = array();
     $model = new TestModel();
     foreach ($model->getItems($this->getResource()) as $item) {
         $subReport = $this->subCompile($item);
         $report->add($subReport);
         if ($subReport->getType() == common_report_Report::TYPE_SUCCESS) {
             $serviceCall = $subReport->getdata();
             $map[$item->getUri()] = $serviceCall->serializeToString();
         } else {
             $report->setType(common_report_Report::TYPE_ERROR);
         }
     }
     if (count($map) === 0) {
         $report->setType(common_report_Report::TYPE_ERROR);
         $report->setMessage(__("A Test must contain at least one item to be compiled."));
     }
     if ($report->getType() === common_report_Report::TYPE_SUCCESS) {
         $config = array();
         $private = $this->spawnPrivateDirectory();
         $file = $private->getPath() . 'data.json';
         $config['items'] = $map;
         $config = array_merge($config, $model->getConfig($this->getResource()));
         file_put_contents($file, json_encode($config));
         $report->setData($this->buildServiceCall($private));
     }
     return $report;
 }
 public function testGetItems()
 {
     $testMock = $this->getMockBuilder('core_kernel_classes_Resource')->disableOriginalConstructor()->setMethods(array('getOnePropertyValue'))->getMock();
     $propInstanceContent = new \core_kernel_classes_Property(TEST_TESTCONTENT_PROP);
     //Get directory to get Items
     $directoryId = "MyDirectoryId";
     $testMock->expects($this->once())->method('getOnePropertyValue')->with($propInstanceContent)->willReturn(new \core_kernel_classes_Literal($directoryId));
     //will get directory and path<
     $storageMock = $this->getMockBuilder('tao_models_classes_service_FileStorage')->disableOriginalConstructor()->setMethods(array('getDirectoryById'))->getMock();
     $ref = new \ReflectionProperty('tao_models_classes_service_FileStorage', 'instance');
     $ref->setAccessible(true);
     $ref->setValue(null, $storageMock);
     $directoryMock = $this->getMockBuilder('tao_models_classes_service_StorageDirectory')->disableOriginalConstructor()->setMethods(array('getPath'))->getMock();
     $directoryMock->expects($this->exactly(2))->method('getPath')->willReturn(dirname(__FILE__) . '/../sample/source/');
     $storageMock->expects($this->once())->method('getDirectoryById')->with($directoryId)->willReturn($directoryMock);
     $items = $this->testModel->getItems($testMock);
     $content = json_decode(file_get_contents(dirname(__FILE__) . '/../sample/source/content.json'));
     foreach ($items as $item) {
         $this->assertContains($item->getUri(), $content->itemUris);
     }
 }