/** * @deprecated * @see taoTests_models_classes_TestModel::getAuthoring() */ public function getAuthoring(core_kernel_classes_Resource $test) { $ext = common_ext_ExtensionsManager::singleton()->getExtensionById('taoWfTest'); $testService = taoTests_models_classes_TestsService::singleton(); $itemSequence = array(); $itemUris = array(); $i = 1; foreach ($testService->getTestItems($test) as $item) { $itemUris[] = $item->getUri(); $itemSequence[$i] = array('uri' => tao_helpers_Uri::encode($item->getUri()), 'label' => $item->getLabel()); $i++; } // data for item sequence, terrible solution // @todo implement an ajax request for labels or pass from tree to sequence $allItems = array(); foreach ($testService->getAllItems() as $itemUri => $itemLabel) { $allItems['item_' . tao_helpers_Uri::encode($itemUri)] = $itemLabel; } $widget = new Renderer($ext->getConstant('DIR_VIEWS') . 'templates' . DIRECTORY_SEPARATOR . 'authoring.tpl'); $widget->setData('uri', $test->getUri()); $widget->setData('allItems', json_encode($allItems)); $widget->setData('itemSequence', $itemSequence); // data for generis tree form $widget->setData('relatedItems', json_encode(tao_helpers_Uri::encodeArray($itemUris))); $openNodes = tao_models_classes_GenerisTreeFactory::getNodesToOpen($itemUris, new core_kernel_classes_Class(TAO_ITEM_CLASS)); $widget->setData('itemRootNode', TAO_ITEM_CLASS); $widget->setData('itemOpenNodes', $openNodes); $widget->setData('saveUrl', _url('saveItems', 'Authoring', 'taoWfTest')); return $widget->render(); }
/** * * @param string $initialVersion * @return string $versionUpdatedTo */ public function update($initialVersion) { if ($this->isBetween('0', '2.7')) { $this->setVersion('2.7'); } // remove active prop if ($this->isVersion('2.7')) { $deprecatedProperty = new \core_kernel_classes_Property('http://www.tao.lu/Ontologies/TAOTest.rdf#active'); $iterator = new \core_kernel_classes_ResourceIterator(array(\taoTests_models_classes_TestsService::singleton()->getRootClass())); foreach ($iterator as $resource) { $resource->removePropertyValues($deprecatedProperty); } $this->setVersion('2.7.1'); } $this->skip('2.7.1', '2.23.0'); if ($this->isVersion('2.23.0')) { //register test plugin service $registerService = new RegisterTestPluginService(); $registerService([]); $this->setVersion('3.0.0'); } $this->skip('3.0.0', '3.4.1'); if ($this->isVersion('3.4.1')) { //register test runner feature service $registerService = new RegisterTestRunnerFeatureService(); $registerService([]); $this->setVersion('3.5.0'); } $this->skip('3.5.0', '3.5.1'); if ($this->isVersion('3.5.1')) { OntologyUpdater::syncModels(); $this->setVersion('3.6.0'); } $this->skip('3.6.0', '3.7.0'); }
/** * constructor: initialize the service and the default data */ public function __construct() { parent::__construct(); //the service is initialized by default $this->service = taoTests_models_classes_TestsService::singleton(); $this->defaultData(); }
public function initElements() { $class = $this->data['class']; if (!$class instanceof \core_kernel_classes_Class) { throw new \common_Exception('missing class in simple delivery creation form'); } $classUriElt = \tao_helpers_form_FormFactory::getElement('classUri', 'Hidden'); $classUriElt->setValue($class->getUri()); $this->form->addElement($classUriElt); //create the element to select the import format $formatElt = \tao_helpers_form_FormFactory::getElement('test', 'Combobox'); $formatElt->setDescription(__('Select the test you want to publish to the test-takers')); $testClass = new \core_kernel_classes_Class(TAO_TEST_CLASS); $options = array(); $testService = \taoTests_models_classes_TestsService::singleton(); foreach ($testClass->getInstances(true) as $test) { try { $testItems = $testService->getTestItems($test); //Filter tests which has no items if (!empty($testItems)) { $options[$test->getUri()] = $test->getLabel(); } } catch (\Exception $e) { \common_Logger::w('Unable to load items for test ' . $test->getUri()); } } if (empty($options)) { throw new NoTestsException(); } $formatElt->setOptions($options); $formatElt->addValidator(\tao_helpers_form_FormFactory::getValidator('NotEmpty')); $this->form->addElement($formatElt); }
/** * Creates a new delivery * * @param core_kernel_classes_Class $deliveryClass * @param core_kernel_classes_Resource $test * @param array $properties Array of properties of delivery * @return common_report_Report */ public static function create(\core_kernel_classes_Class $deliveryClass, \core_kernel_classes_Resource $test, $properties = array()) { \common_Logger::i('Creating delivery with ' . $test->getLabel() . ' under ' . $deliveryClass->getLabel()); $storage = new TrackedStorage(); $testCompilerClass = \taoTests_models_classes_TestsService::singleton()->getCompilerClass($test); $compiler = new $testCompilerClass($test, $storage); $report = $compiler->compile(); if ($report->getType() == \common_report_Report::TYPE_SUCCESS) { //$tz = new \DateTimeZone(\common_session_SessionManager::getSession()->getTimeZone()); $tz = new \DateTimeZone('UTC'); if (!empty($properties[TAO_DELIVERY_START_PROP])) { $dt = new \DateTime($properties[TAO_DELIVERY_START_PROP], $tz); $properties[TAO_DELIVERY_START_PROP] = (string) $dt->getTimestamp(); } if (!empty($properties[TAO_DELIVERY_END_PROP])) { $dt = new \DateTime($properties[TAO_DELIVERY_END_PROP], $tz); $properties[TAO_DELIVERY_END_PROP] = (string) $dt->getTimestamp(); } $serviceCall = $report->getData(); $properties[PROPERTY_COMPILEDDELIVERY_DIRECTORY] = $storage->getSpawnedDirectoryIds(); $compilationInstance = DeliveryAssemblyService::singleton()->createAssemblyFromServiceCall($deliveryClass, $serviceCall, $properties); $report->setData($compilationInstance); } return $report; }
/** * Renders the auhtoring for simple tests */ public function index() { $test = new \core_kernel_classes_Resource($this->getRequestParameter('uri')); $model = $this->getServiceManager()->get(TestModel::SERVICE_ID); $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 = TreeHelper::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'); }
public function index() { $test = $this->getCurrentInstance(); $testService = taoTests_models_classes_TestsService::singleton(); $class = new core_kernel_classes_Class(CLASS_LTI_TESTCONTENT); $content = $test->getOnePropertyValue(new core_kernel_classes_Property(TEST_TESTCONTENT_PROP)); common_Logger::i('Generating form for ' . $content->getUri()); $form = new ltiTestConsumer_actions_form_LtiLinkForm($content); $this->setData('saveUrl', _url('save', 'Authoring', 'ltiTestConsumer')); $this->setData('formContent', $form->getForm()->render()); $this->setView('authoring.tpl'); }
protected function getAvailableImportHandlers() { $returnValue = parent::getAvailableImportHandlers(); $testModelClass = new core_kernel_classes_Class(CLASS_TESTMODEL); foreach ($testModelClass->getInstances() as $model) { $impl = taoTests_models_classes_TestsService::singleton()->getTestModelImplementation($model); if (in_array('tao_models_classes_import_ImportProvider', class_implements($impl))) { foreach ($impl->getImportHandlers() as $handler) { array_unshift($returnValue, $handler); } } } return $returnValue; }
/** * @deprecated * @see taoTests_models_classes_TestModel::getAuthoring() */ public function getAuthoring(core_kernel_classes_Resource $test) { $testService = taoTests_models_classes_TestsService::singleton(); $class = new core_kernel_classes_Class(CLASS_LTI_TESTCONTENT); $content = $test->getOnePropertyValue(new core_kernel_classes_Property(TEST_TESTCONTENT_PROP)); common_Logger::i('Generating form for ' . $content->getUri()); $form = new ltiTestConsumer_actions_form_LtiLinkForm($content); $form->getForm()->setActions(array()); $widget = new Renderer($this->extension->getConstant('DIR_VIEWS') . 'templates' . DIRECTORY_SEPARATOR . 'authoring.tpl'); $widget->setData('formContent', $form->getForm()->render()); $widget->setData('saveUrl', _url('save', 'Authoring', 'ltiTestConsumer')); $widget->setData('formName', $form->getForm()->getName()); return $widget->render(); }
/** * Creates a new simple delivery * * @param core_kernel_classes_Class $deliveryClass * @param core_kernel_classes_Resource $test * @param string $label * @return common_report_Report */ public static function create(core_kernel_classes_Class $deliveryClass, core_kernel_classes_Resource $test, $label) { common_Logger::i('Creating ' . $label . ' with ' . $test->getLabel() . ' under ' . $deliveryClass->getLabel()); $storage = new taoDelivery_models_classes_TrackedStorage(); $testCompilerClass = taoTests_models_classes_TestsService::singleton()->getCompilerClass($test); $compiler = new $testCompilerClass($test, $storage); $report = $compiler->compile(); if ($report->getType() == common_report_Report::TYPE_SUCCESS) { $serviceCall = $report->getData(); $properties = array(RDFS_LABEL => $label, PROPERTY_COMPILEDDELIVERY_DIRECTORY => $storage->getSpawnedDirectoryIds()); $compilationInstance = taoDelivery_models_classes_DeliveryAssemblyService::singleton()->createAssemblyFromServiceCall($deliveryClass, $serviceCall, $properties); $report->setData($compilationInstance); } return $report; }
/** * overriden * * @access public * @author Joel Bout, <*****@*****.**> * @return mixed */ public function initElements() { $testService = taoTests_models_classes_TestsService::singleton(); $testModel = new core_kernel_classes_Resource(INSTANCE_TEST_MODEL_QTI); $fileName = ''; $options = array(); if (isset($this->data['instance'])) { $test = $this->data['instance']; if ($test instanceof core_kernel_classes_Resource) { if ($testModel->equals($testService->getTestModel($test))) { $fileName = strtolower(tao_helpers_Display::textCleaner($test->getLabel())); $options[$test->getUri()] = $test->getLabel(); } } } else { if (isset($this->data['class'])) { $class = $this->data['class']; } else { $class = $itemService->getRootClass(); } if ($class instanceof core_kernel_classes_Class) { $fileName = strtolower(tao_helpers_Display::textCleaner($class->getLabel(), '*')); foreach ($class->getInstances() as $instance) { if ($testModel->equals($testService->getTestModel($instance))) { $options[$instance->getUri()] = $instance->getLabel(); } } } } $nameElt = tao_helpers_form_FormFactory::getElement('filename', 'Textbox'); $nameElt->setDescription(__('File name')); $nameElt->setValue($fileName); $nameElt->setUnit(".zip"); $nameElt->addValidator(tao_helpers_form_FormFactory::getValidator('NotEmpty')); $this->form->addElement($nameElt); $instanceElt = tao_helpers_form_FormFactory::getElement('instances', 'Checkbox'); $instanceElt->setDescription(__('Test')); //$instanceElt->setAttribute('checkAll', true); $instanceElt->setOptions(tao_helpers_Uri::encodeArray($options, tao_helpers_Uri::ENCODE_ARRAY_KEYS)); foreach (array_keys($options) as $value) { $instanceElt->setValue($value); } $this->form->addElement($instanceElt); $this->form->createGroup('options', __('Export QTI 2.1 Test Package'), array('filename', 'instances')); }
/** * Generate a new Booklet from a specific test * in a specific class and return a report * * @param core_kernel_classes_Resource $test * @param core_kernel_classes_Class $class * @return common_report_Report */ public static function generate(core_kernel_classes_Resource $test, core_kernel_classes_Class $class) { $report = new common_report_Report(common_report_Report::TYPE_SUCCESS); $model = \taoTests_models_classes_TestsService::singleton()->getTestModel($test); if ($model->getUri() != INSTANCE_TEST_MODEL_QTI) { $report->setType(common_report_Report::TYPE_ERROR); $report->setMessage(__('%s is not a QTI test', $test->getLabel())); return $report; } $tmpFolder = \tao_helpers_File::createTempDir(); $tmpFile = self::generatePdf($test, $tmpFolder); // generate tao instance $instance = BookletClassService::singleton()->createBookletInstance($class, __('%s Booklet', $test->getLabel()), $test, $tmpFile); \tao_helpers_File::delTree($tmpFolder); // return report with instance $report->setMessage(__('%s created', $instance->getLabel())); $report->setData($instance); return $report; }
/** * Short description of method cloneInstance * * @access public * @author Joel Bout, <*****@*****.**> * @param * Resource instance * @param * Class clazz * @return core_kernel_classes_Resource */ public function cloneInstance(core_kernel_classes_Resource $instance, core_kernel_classes_Class $clazz = null) { $returnValue = null; // call the parent create instance to prevent useless process test to be created: $label = $instance->getLabel(); $cloneLabel = "{$label} bis"; $clone = parent::createInstance($clazz, $cloneLabel); if (!is_null($clone)) { $noCloningProperties = array(TEST_TESTCONTENT_PROP, RDF_TYPE); foreach ($clazz->getProperties(true) as $property) { if (!in_array($property->getUri(), $noCloningProperties)) { // allow clone of every property value but the deliverycontent, which is a process: foreach ($instance->getPropertyValues($property) as $propertyValue) { $clone->setPropertyValue($property, $propertyValue); } } } // Fix label if (preg_match("/bis/", $label)) { $cloneNumber = (int) preg_replace("/^(.?)*bis/", "", $label); $cloneNumber++; $cloneLabel = preg_replace("/bis(.?)*\$/", "", $label) . "bis {$cloneNumber}"; } $clone->setLabel($cloneLabel); // clone the process: $propInstanceContent = new core_kernel_classes_Property(TEST_TESTCONTENT_PROP); try { $process = $instance->getUniquePropertyValue($propInstanceContent); } catch (Exception $e) { } if (!is_null($process)) { $processCloner = new wfAuthoring_models_classes_ProcessCloner(); $processClone = $processCloner->cloneProcess($process); $clone->editPropertyValues($propInstanceContent, $processClone->getUri()); } else { throw new Exception("the test process cannot be found"); } $this->onChangeTestLabel($clone); $returnValue = $clone; } return $returnValue; }
protected function getAvailableExportHandlers() { $returnValue = parent::getAvailableExportHandlers(); $resources = $this->getResourcesToExport(); $testModels = array(); foreach ($resources as $resource) { $model = taoTests_models_classes_TestsService::singleton()->getTestModel($resource); if (!is_null($model)) { $testModels[$model->getUri()] = $model; } } foreach ($testModels as $model) { $impl = taoTests_models_classes_TestsService::singleton()->getTestModelImplementation($model); if (in_array('tao_models_classes_export_ExportProvider', class_implements($impl))) { foreach ($impl->getExportHandlers() as $handler) { array_unshift($returnValue, $handler); } } } return $returnValue; }
/** (non-PHPdoc) * @see tao_models_classes_CrudService::getClassService() */ protected function getClassService() { return taoTests_models_classes_TestsService::singleton(); }
/** * test deleteTest * @depends testInstanceCreate * @param \core_kernel_classes_Resource $testInstance * @return void */ public function testDeleteTest($testInstance) { $this->assertTrue($testInstance->exists()); $this->wftService->deleteTest($testInstance); $this->assertFalse($testInstance->exists()); }
/** * Get items of test * * @param core_kernel_classes_Resource $test * @return array * @todo Analyse test content and determin items to use */ protected static function getItems(core_kernel_classes_Resource $test) { $items = \taoTests_models_classes_TestsService::singleton()->getTestItems($test); return $items; }
/** * Get root qti test directory or crate if not exists * * @param core_kernel_classes_Resource $test * @param boolean $createTestFile Whether or not create an empty QTI XML test file. Default is (boolean) true. * @return Directory */ public function getQtiTestDir(core_kernel_classes_Resource $test, $createTestFile = true) { $testModel = taoTests_models_classes_TestsService::singleton()->getTestModel($test); if (is_null($testModel) || $testModel->getUri() != INSTANCE_TEST_MODEL_QTI) { throw new taoQtiTest_models_classes_QtiTestServiceException('The selected test is not a QTI test', taoQtiTest_models_classes_QtiTestServiceException::TEST_READ_ERROR); } $dir = $test->getOnePropertyValue(new core_kernel_classes_Property(TEST_TESTCONTENT_PROP)); if (!is_null($dir)) { return $this->getFileReferenceSerializer()->unserialize($dir); } else { return $this->createContent($test, $createTestFile); } }