/**
  * @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();
 }
示例#2
0
 /**
  *
  * @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');
 }
示例#3
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);
     }
 }