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