/**
  * Test:
  *  - {@link ClientLibRegistry::remove}
  *  
  * @depends testRegister
  */
 public function testRemove($libId)
 {
     ClientLibRegistry::getRegistry()->remove($libId);
     $map = ClientLibRegistry::getRegistry()->getMap();
     $this->assertInternalType('array', $map);
     $this->assertFalse(isset($map[$libId]));
 }
 /**
  * 
  * Return all lib alias with relative path
  * 
  * @author Lionel Lecaque, lionel@taotesting.com
  * @return array
  */
 public function getLibAliasMap()
 {
     $extensionsAliases = array();
     foreach (ClientLibRegistry::getRegistry()->getMap() as $alias => $lib) {
         $extensionsAliases[$alias] = str_replace(ROOT_URL, '../../../', $lib);
     }
     return $extensionsAliases;
 }
 public function testRegister()
 {
     $map = ClientLibRegistry::getRegistry()->getMap();
     $this->assertFalse(empty($map));
     ClientLibRegistry::getRegistry()->register('OAT/test', dirname(__FILE__) . '/samples/fakeSourceCode/views/js/');
     $map = ClientLibRegistry::getRegistry()->getMap();
     $this->assertInternalType('array', $map);
     $this->assertTrue(isset($map['OAT/test']));
     $this->assertEquals(dirname(__FILE__) . '/samples/fakeSourceCode/views/js/', $map['OAT/test']);
     ClientLibRegistry::getRegistry()->remove('OAT/test');
 }
Example #4
0
 /**
  * 
  * @param string $initialVersion
  * @return string $versionUpdatedTo
  */
 public function update($initialVersion)
 {
     $currentVersion = $initialVersion;
     if ($currentVersion === '0.1') {
         ClientLibRegistry::getRegistry()->register('ace', ROOT_URL . 'xmlEdit/views/js/lib/ace-1.2.0/');
         ClientLibConfigRegistry::getRegistry()->register('taoQtiItem/controller/apip-creator/main', array('hooks' => array('xmlEdit/hooks/apipCreatorDebugger/hook')));
         ClientLibConfigRegistry::getRegistry()->register('taoQtiItem/controller/creator/main', array('hooks' => array('xmlEdit/hooks/qtiCreatorDebugger/hook')));
         $currentVersion = '0.2.0';
     }
     $this->setVersion($currentVersion);
     $this->skip('0.2.0', '1.1.0');
 }
Example #5
0
 /**
  * 
  * Return all lib alias with relative path
  * 
  * @author Lionel Lecaque, lionel@taotesting.com
  * @return array
  */
 public function getLibAliasMap()
 {
     $extensionsAliases = array();
     $assetservice = ServiceManager::getServiceManager()->get(AssetService::SERVICE_ID);
     foreach (ClientLibRegistry::getRegistry()->getMap() as $alias => $lib) {
         if (is_array($lib) && isset($lib['extId']) && isset($lib['path'])) {
             $extensionsAliases[$alias] = $assetservice->getJsBaseWww($lib['extId']) . $lib['path'];
         } elseif (is_string($lib)) {
             $extensionsAliases[$alias] = str_replace(ROOT_URL, '../../../', $lib);
         } else {
             throw new \common_exception_InconsistentData('Invalid ' . self::getConfigId() . ' entry found');
         }
     }
     return $extensionsAliases;
 }
Example #6
0
 /**
  * 
  * Return all lib alias with relative path
  * 
  * @author Lionel Lecaque, lionel@taotesting.com
  * @return array
  */
 public function getLibAliasMap()
 {
     $extensionsAliases = array();
     foreach (ClientLibRegistry::getRegistry()->getMap() as $alias => $lib) {
         if (is_array($lib) && isset($lib['extId']) && isset($lib['path'])) {
             $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById($lib['extId']);
             $extensionsAliases[$alias] = $ext->getConstant('BASE_WWW') . $lib['path'];
         } elseif (is_string($lib)) {
             $extensionsAliases[$alias] = str_replace(ROOT_URL, '../../../', $lib);
         } else {
             throw new \common_exception_InconsistentData('Invalid ' . self::getConfigId() . ' entry found');
         }
     }
     return $extensionsAliases;
 }
Example #7
0
 /**
  * Get the require.js' config file
  */
 public function config()
 {
     $this->setContentHeader('application/javascript');
     //get extension paths to set up aliases dynamically
     $extensionsAliases = ClientLibRegistry::getRegistry()->getLibAliasMap();
     $this->setData('extensionsAliases', $extensionsAliases);
     $libConfigs = ClientLibConfigRegistry::getRegistry()->getMap();
     $this->setData('libConfigs', $libConfigs);
     $extendedConfig = $this->getServiceManager()->get(ClientConfigService::SERVICE_ID)->getExtendedConfig();
     foreach ($extendedConfig as $key => $value) {
         $this->setData($key, json_encode($value));
     }
     $extensionManager = common_ext_ExtensionsManager::singleton();
     $langCode = tao_helpers_I18n::getLangCode();
     //loads the URLs context
     /** @var AssetService $assetService */
     $assetService = ServiceManager::getServiceManager()->get(AssetService::SERVICE_ID);
     $tao_base_www = $assetService->getJsBaseWww('tao');
     $extensionId = $this->hasRequestParameter('extension') ? $this->getRequestParameter('extension') : \Context::getInstance()->getExtensionName();
     $extension = $extensionManager->getExtensionById($extensionId);
     $base_www = $assetService->getJsBaseWww($extensionId);
     $base_url = $extension->getConstant('BASE_URL');
     //set contextual data
     $this->setData('locale', $langCode);
     if (strpos($langCode, '-') > 0) {
         $lang = strtolower(substr($langCode, 0, strpos($langCode, '-')));
     } else {
         $lang = strtolower($langCode);
     }
     $this->setData('lang', $lang);
     $this->setData('version', TAO_VERSION);
     $this->setData('extension', $this->getRequestParameter('extension'));
     $this->setData('module', $this->getRequestParameter('module'));
     $this->setData('action', $this->getRequestParameter('action'));
     $this->setData('base_www', $base_www);
     $this->setData('tao_base_www', $tao_base_www);
     $this->setData('base_url', $base_url);
     $this->setData('shownExtension', $this->getRequestParameter('shownExtension'));
     $this->setData('shownStructure', $this->getRequestParameter('shownStructure'));
     $this->setData('client_timeout', $this->getClientTimeout());
     $this->setView('client_config.tpl');
 }
Example #8
0
 /**
  * Get the require.js' config file
  */
 public function config()
 {
     $this->setContentHeader('application/javascript');
     //get extension paths to set up aliases dynamically
     $extensionsAliases = ClientLibRegistry::getRegistry()->getLibAliasMap();
     $this->setData('extensionsAliases', $extensionsAliases);
     $libConfigs = ClientLibConfigRegistry::getRegistry()->getMap();
     $this->setData('libConfigs', $libConfigs);
     $themesAvailable = ThemeRegistry::getRegistry()->getAvailableThemes();
     $this->setData('themesAvailable', $themesAvailable);
     $extensionManager = common_ext_ExtensionsManager::singleton();
     $langCode = tao_helpers_I18n::getLangCode();
     //loads the URLs context
     $base_www = BASE_WWW;
     $base_url = BASE_URL;
     if ($this->hasRequestParameter('extension')) {
         $extension = $extensionManager->getExtensionById($this->getRequestParameter('extension'));
         if (!is_null($extension)) {
             $base_www = $extension->getConstant('BASE_WWW');
             $base_url = $extension->getConstant('BASE_URL');
         }
     }
     //set contextual data
     $this->setData('locale', $langCode);
     if (strpos($langCode, '-') > 0) {
         $lang = strtolower(substr($langCode, 0, strpos($langCode, '-')));
     } else {
         $lang = strtolower($langCode);
     }
     $this->setData('lang', $lang);
     $this->setData('extension', $this->getRequestParameter('extension'));
     $this->setData('module', $this->getRequestParameter('module'));
     $this->setData('action', $this->getRequestParameter('action'));
     $this->setData('base_www', $base_www);
     $this->setData('base_url', $base_url);
     $this->setData('shownExtension', $this->getRequestParameter('shownExtension'));
     $this->setData('shownStructure', $this->getRequestParameter('shownStructure'));
     $this->setData('client_timeout', $this->getClientTimeout());
     $this->setView('client_config.tpl');
 }
 /**
  * Load assets from the custom elements (CustomInteraction, PCI, PIC)
  * @param Element $element the custom element
  */
 private function loadCustomElementAssets(Element $element)
 {
     $libBasePath = ROOT_PATH . 'taoQtiItem/views/js/portableSharedLibraries';
     $libRootUrl = ROOT_URL . 'taoQtiItem/views/js/portableSharedLibraries';
     if ($element instanceof PortableCustomInteraction || $element instanceof PortableInfoControl) {
         $entryPoint = $element->getEntryPoint();
         $fileName = substr($entryPoint, -3) != '.js' ? $entryPoint . '.js' : $entryPoint;
         $this->addAsset('js', $fileName);
         foreach ($element->getLibraries() as $lib) {
             if ($this->getGetSharedLibraries() || !ClientLibRegistry::getRegistry()->isRegistered($lib)) {
                 $fileName = substr($lib, -3) != '.js' ? $lib . '.js' : $lib;
                 $this->addAsset('js', $fileName);
             }
         }
     }
     //parse and extract assets from markup using XPATH
     if ($element instanceof CustomInteraction || $element instanceof InfoControl) {
         $xml = new SimpleXMLElement($element->getMarkup());
         foreach ($xml->xpath('//img') as $img) {
             $this->addAsset('img', (string) $img['src']);
         }
         foreach ($xml->xpath('//video') as $video) {
             $this->addAsset('video', (string) $video['src']);
         }
         foreach ($xml->xpath('//audio') as $audio) {
             $this->addAsset('audio', (string) $audio['src']);
         }
     }
 }
 /**
  * Add required resources for a custom interaction (css, js) in the item directory
  * 
  * @param string $typeIdentifier
  * @param \core_kernel_classes_Resource $item
  * @throws common_exception_Error
  */
 public function addRequiredResources($typeIdentifier, core_kernel_classes_Resource $item)
 {
     //find the interaction in the registry
     $implementationData = $this->getImplementatioByTypeIdentifier($typeIdentifier);
     if (is_null($implementationData)) {
         throw new common_exception_Error('no implementation found with the type identifier ' . $typeIdentifier);
     }
     //get the root directory of the interaction
     $directory = $implementationData['directory'];
     //get the lists of all required resources
     $manifest = $implementationData['manifest'];
     $required = array($manifest['entryPoint']);
     //include libraries remotely only, so this block is temporarily disabled
     foreach ($manifest['libraries'] as $lib) {
         if (!ClientLibRegistry::getRegistry()->isRegistered($lib)) {
             $lib = preg_replace('/^.\\//', '', $lib);
             $lib .= '.js';
             //add js extension
             $required[] = $lib;
         }
     }
     //include custom interaction specific css in the item
     if (isset($manifest['css'])) {
         $required = array_merge($required, array_values($manifest['css']));
     }
     //include media in the item
     if (isset($manifest['media'])) {
         $required = array_merge($required, array_values($manifest['media']));
     }
     //add them to the rdf item
     $resources = Authoring::addRequiredResources($directory, $required, $typeIdentifier, $item, '');
     return $resources;
 }
 /**
  * 
  * @param string $currentVersion
  * @return string $versionUpdatedTo
  */
 public function update($initialVersion)
 {
     $currentVersion = $initialVersion;
     $extensionManager = common_ext_ExtensionsManager::singleton();
     //migrate from 2.6 to 2.7.0
     if ($currentVersion == '2.6') {
         //create Js config
         $ext = $extensionManager->getExtensionById('tao');
         $config = array('timeout' => 30);
         $ext->setConfig('js', $config);
         $currentVersion = '2.7.0';
     }
     //migrate from 2.7.0 to 2.7.1
     if ($currentVersion == '2.7.0') {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_7_1.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $currentVersion = '2.7.1';
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($currentVersion == '2.7.1') {
         foreach ($extensionManager->getInstalledExtensions() as $extension) {
             $extManifestConsts = $extension->getConstants();
             if (isset($extManifestConsts['BASE_WWW'])) {
                 ClientLibRegistry::getRegistry()->register($extension->getId(), $extManifestConsts['BASE_WWW'] . 'js');
                 ClientLibRegistry::getRegistry()->register($extension->getId() . 'Css', $extManifestConsts['BASE_WWW'] . 'css');
             }
         }
         $currentVersion = '2.7.2';
     }
     if ($currentVersion == '2.7.2') {
         // zendSearch Update only
         $currentVersion = '2.7.3';
     }
     if ($currentVersion == '2.7.3') {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_7_4.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $currentVersion = '2.7.4';
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($currentVersion == '2.7.4') {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'model_2_7_5.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $currentVersion = '2.7.5';
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($currentVersion == '2.7.5') {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'index_type_2_7_6.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $currentVersion = '2.7.6';
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($currentVersion == '2.7.6') {
         $dir = FILES_PATH . 'updates' . DIRECTORY_SEPARATOR . 'pre_' . $currentVersion;
         if (!mkdir($dir, 0700, true)) {
             throw new \common_exception_Error('Unable to log update to ' . $dir);
         }
         FileModel::toFile($dir . DIRECTORY_SEPARATOR . 'backup.rdf', ModelManager::getModel()->getRdfInterface());
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_7_1.rdf');
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_7_4.rdf');
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'model_2_7_5.rdf');
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'index_type_2_7_6.rdf');
         // syncronise also adds translations to correct modelid
         OntologyUpdater::syncModels();
         // remove translations from model 1
         $persistence = \common_persistence_SqlPersistence::getPersistence('default');
         $result = $persistence->query("SELECT DISTINCT subject FROM statements WHERE NOT modelId = 1");
         $toCleanup = array();
         while ($row = $result->fetch()) {
             $toCleanup[] = $row['subject'];
         }
         $query = "DELETE from statements WHERE modelId = 1 AND subject = ? " . "AND predicate IN ('" . RDFS_LABEL . "','" . RDFS_COMMENT . "') ";
         foreach ($toCleanup as $subject) {
             $persistence->exec($query, array($subject));
         }
         $currentVersion = '2.7.7';
     }
     if ($currentVersion == '2.7.7') {
         $lockImpl = defined('ENABLE_LOCK') && ENABLE_LOCK ? new OntoLock() : new NoLock();
         LockManager::setImplementation($lockImpl);
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('ext' => 'tao', 'mod' => 'Lock')));
         $currentVersion = '2.7.8';
     }
     if ($currentVersion == '2.7.8') {
         if ($this->migrateFsAccess()) {
             $currentVersion = '2.7.9';
         }
     }
     if ($currentVersion == '2.7.9') {
         // update role classes
         OntologyUpdater::syncModels();
         $currentVersion = '2.7.10';
     }
     if ($currentVersion == '2.7.10') {
         // correct access roles
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('act' => 'tao_actions_Lists@getListElements')));
         AclProxy::revokeRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('ext' => 'tao', 'mod' => 'Lock')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('act' => 'tao_actions_Lock@release')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('act' => 'tao_actions_Lock@locked')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#LockManagerRole', array('act' => 'tao_actions_Lock@forceRelease')));
         $currentVersion = '2.7.11';
     }
     if ($currentVersion == '2.7.11') {
         // move session abstraction
         if (defined("PHP_SESSION_HANDLER") && class_exists(PHP_SESSION_HANDLER)) {
             if (PHP_SESSION_HANDLER == 'common_session_php_KeyValueSessionHandler') {
                 $sessionHandler = new \common_session_php_KeyValueSessionHandler(array(\common_session_php_KeyValueSessionHandler::OPTION_PERSISTENCE => 'session'));
             } else {
                 $sessionHandler = new PHP_SESSION_HANDLER();
             }
             $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById('tao');
             $ext->setConfig(\Bootstrap::CONFIG_SESSION_HANDLER, $sessionHandler);
         }
         $currentVersion = '2.7.12';
     }
     if ($currentVersion == '2.7.12') {
         // add the property manager
         OntologyUpdater::syncModels();
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#PropertyManagerRole', array('controller' => 'tao_actions_Lists')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#PropertyManagerRole', array('controller' => 'tao_actions_PropertiesAuthoring')));
         $currentVersion = '2.7.13';
     }
     return $currentVersion;
 }
Example #12
0
 /**
  *
  * @param $initialVersion
  * @return string $initialVersion
  * @throws \common_exception_Error
  * @throws \common_exception_InconsistentData
  * @throws \common_ext_ExtensionException
  * @throws common_Exception
  */
 public function update($initialVersion)
 {
     $extensionManager = common_ext_ExtensionsManager::singleton();
     //migrate from 2.6 to 2.7.0
     if ($this->isVersion('2.6')) {
         //create Js config
         $ext = $extensionManager->getExtensionById('tao');
         $config = array('timeout' => 30);
         $ext->setConfig('js', $config);
         $this->setVersion('2.7.0');
     }
     //migrate from 2.7.0 to 2.7.1
     if ($this->isVersion('2.7.0')) {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_7_1.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $this->setVersion('2.7.1');
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($this->isVersion('2.7.1')) {
         SearchService::setSearchImplementation(ZendSearch::createSearch());
         $this->setVersion('2.7.2');
     }
     // upgrade is requied for asset service to continue working
     if ($this->isBetween('2.7.2', '2.13.2')) {
         if (!$this->getServiceManager()->has(AssetService::SERVICE_ID)) {
             $this->getServiceManager()->register(AssetService::SERVICE_ID, new AssetService());
         }
     }
     if ($this->isVersion('2.7.2')) {
         foreach ($extensionManager->getInstalledExtensions() as $extension) {
             $extManifestConsts = $extension->getConstants();
             if (isset($extManifestConsts['BASE_WWW'])) {
                 ClientLibRegistry::getRegistry()->register($extension->getId(), $extManifestConsts['BASE_WWW'] . 'js');
                 ClientLibRegistry::getRegistry()->register($extension->getId() . 'Css', $extManifestConsts['BASE_WWW'] . 'css');
             }
         }
         $this->setVersion('2.7.3');
     }
     if ($this->isVersion('2.7.3')) {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_7_4.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $this->setVersion('2.7.4');
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($this->isVersion('2.7.4')) {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'model_2_7_5.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $this->setVersion('2.7.5');
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($this->isVersion('2.7.5')) {
         $file = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'index_type_2_7_6.rdf';
         $adapter = new tao_helpers_data_GenerisAdapterRdf();
         if ($adapter->import($file)) {
             $this->setVersion('2.7.6');
         } else {
             common_Logger::w('Import failed for ' . $file);
         }
     }
     if ($this->isVersion('2.7.6')) {
         $dir = FILES_PATH . 'updates' . DIRECTORY_SEPARATOR . 'pre_2.7.6';
         if (!mkdir($dir, 0700, true)) {
             throw new \common_exception_Error('Unable to log update to ' . $dir);
         }
         FileModel::toFile($dir . DIRECTORY_SEPARATOR . 'backup.rdf', ModelManager::getModel()->getRdfInterface());
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_7_1.rdf');
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'indexation_2_7_4.rdf');
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'model_2_7_5.rdf');
         OntologyUpdater::correctModelId(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'index_type_2_7_6.rdf');
         // syncronise also adds translations to correct modelid
         OntologyUpdater::syncModels();
         // remove translations from model 1
         $persistence = \common_persistence_SqlPersistence::getPersistence('default');
         $result = $persistence->query("SELECT DISTINCT subject FROM statements WHERE NOT modelId = 1");
         $toCleanup = array();
         while ($row = $result->fetch()) {
             $toCleanup[] = $row['subject'];
         }
         $query = "DELETE from statements WHERE modelId = 1 AND subject = ? " . "AND predicate IN ('" . RDFS_LABEL . "','" . RDFS_COMMENT . "') ";
         foreach ($toCleanup as $subject) {
             $persistence->exec($query, array($subject));
         }
         $this->setVersion('2.7.7');
     }
     // update FuncAccessControl early to support access changes
     if ($this->isBetween('2.7.7', '2.17.4')) {
         $implClass = common_ext_ExtensionsManager::singleton()->getExtensionById('tao')->getConfig('FuncAccessControl');
         if (is_string($implClass)) {
             $impl = new $implClass();
             $this->getServiceManager()->register(AclProxy::SERVICE_ID, $impl);
         }
     }
     if ($this->isVersion('2.7.7')) {
         $lockImpl = defined('ENABLE_LOCK') && ENABLE_LOCK ? new OntoLock() : new NoLock();
         LockManager::setImplementation($lockImpl);
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('ext' => 'tao', 'mod' => 'Lock')));
         $this->setVersion('2.7.8');
     }
     if ($this->isVersion('2.7.8')) {
         if ($this->migrateFsAccess()) {
             $this->setVersion('2.7.9');
         }
     }
     if ($this->isVersion('2.7.9')) {
         // update role classes
         OntologyUpdater::syncModels();
         $this->setVersion('2.7.10');
     }
     if ($this->isVersion('2.7.10')) {
         // correct access roles
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('act' => 'tao_actions_Lists@getListElements')));
         AclProxy::revokeRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('ext' => 'tao', 'mod' => 'Lock')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('act' => 'tao_actions_Lock@release')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('act' => 'tao_actions_Lock@locked')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#LockManagerRole', array('act' => 'tao_actions_Lock@forceRelease')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#BackOfficeRole', array('ext' => 'tao', 'mod' => 'Search')));
         $this->setVersion('2.7.11');
     }
     if ($this->isVersion('2.7.11')) {
         // move session abstraction
         if (defined("PHP_SESSION_HANDLER") && class_exists(PHP_SESSION_HANDLER)) {
             if (PHP_SESSION_HANDLER == 'common_session_php_KeyValueSessionHandler') {
                 $sessionHandler = new \common_session_php_KeyValueSessionHandler(array(\common_session_php_KeyValueSessionHandler::OPTION_PERSISTENCE => 'session'));
             } else {
                 $sessionHandler = new PHP_SESSION_HANDLER();
             }
             $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById('tao');
             $ext->setConfig(\Bootstrap::CONFIG_SESSION_HANDLER, $sessionHandler);
         }
         $this->setVersion('2.7.12');
     }
     if ($this->isVersion('2.7.12')) {
         // add the property manager
         OntologyUpdater::syncModels();
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#PropertyManagerRole', array('controller' => 'tao_actions_Lists')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAO.rdf#PropertyManagerRole', array('controller' => 'tao_actions_PropertiesAuthoring')));
         $this->setVersion('2.7.13');
     }
     if ($this->isVersion('2.7.13')) {
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/generis.rdf#AnonymousRole', array('ext' => 'tao', 'mod' => 'PasswordRecovery', 'act' => 'index')));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/generis.rdf#AnonymousRole', array('ext' => 'tao', 'mod' => 'PasswordRecovery', 'act' => 'resetPassword')));
         $this->setVersion('2.7.14');
     }
     if ($this->isVersion('2.7.14')) {
         // index user logins
         OntologyUpdater::syncModels();
         $this->setVersion('2.7.15');
     }
     // reset the search impl for machines that missed 2.7.1 update due to merge
     if ($this->isVersion('2.7.15') || $this->isVersion('2.7.16')) {
         try {
             SearchService::getSearchImplementation();
             // all good
         } catch (\common_exception_Error $error) {
             SearchService::setSearchImplementation(new GenerisSearch());
         }
         $this->setVersion('2.7.16');
     }
     if ($this->isVersion('2.7.16')) {
         $registry = ClientLibRegistry::getRegistry();
         $map = $registry->getLibAliasMap();
         foreach ($map as $id => $fqp) {
             $registry->remove($id);
             $registry->register($id, $fqp);
         }
         $this->setVersion('2.7.17');
     }
     // semantic versioning
     $this->skip('2.7.17', '2.8.0');
     if ($this->isBetween('2.8.0', '2.13.0')) {
         $tao = \common_ext_ExtensionsManager::singleton()->getExtensionById('tao');
         $entryPoints = $tao->getConfig('entrypoint');
         if (is_array($entryPoints) || $entryPoints == false) {
             $service = new EntryPointService();
             if (is_array($entryPoints)) {
                 foreach ($entryPoints as $id => $entryPoint) {
                     $service->overrideEntryPoint($id, $entryPoint);
                     $service->activateEntryPoint($id, EntryPointService::OPTION_POSTLOGIN);
                 }
             }
             // register, don't activate
             $passwordResetEntry = new PasswordReset();
             $service->overrideEntryPoint($passwordResetEntry->getId(), $passwordResetEntry);
             $this->getServiceManager()->register(EntryPointService::SERVICE_ID, $service);
         }
     }
     if ($this->isVersion('2.8.0')) {
         $service = $this->getServiceManager()->get(EntryPointService::SERVICE_ID);
         $service->registerEntryPoint(new BackOfficeEntrypoint());
         $this->getServiceManager()->register(EntryPointService::SERVICE_ID, $service);
         $this->setVersion('2.8.1');
     }
     // semantic versioning
     $this->skip('2.8.1', '2.9');
     // remove id properties
     if ($this->isVersion('2.9')) {
         $rdf = ModelManager::getModel()->getRdfInterface();
         foreach ($rdf as $triple) {
             if ($triple->predicate == 'id') {
                 $rdf->remove($triple);
             }
         }
         $this->setVersion('2.9.1');
     }
     // tao object split
     if ($this->isVersion('2.9.1')) {
         OntologyUpdater::syncModels();
         $this->setVersion('2.10.0');
     }
     // widget definitions
     if ($this->isVersion('2.10.0')) {
         OntologyUpdater::syncModels();
         $this->setVersion('2.10.1');
     }
     // add login form config
     if ($this->isVersion('2.10.1')) {
         $loginFormSettings = array('elements' => array());
         $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById('tao');
         $ext->setConfig('loginForm', $loginFormSettings);
         $this->setVersion('2.10.2');
     }
     if ($this->isVersion('2.10.2')) {
         $s = DIRECTORY_SEPARATOR;
         ThemeRegistry::getRegistry()->createTarget('frontOffice', array('css' => 'tao' . $s . 'views' . $s . 'css' . $s . 'tao-3.css', 'templates' => array('header-logo' => 'taoDelivery' . $s . 'views' . $s . 'templates' . $s . 'DeliveryServer' . $s . 'blocks' . $s . 'header-logo.tpl', 'footer' => 'taoDelivery' . $s . 'views' . $s . 'templates' . $s . 'DeliveryServer' . $s . 'blocks' . $s . 'footer.tpl')));
         ThemeRegistry::getRegistry()->createTarget('backOffice', array('css' => 'tao' . $s . 'views' . $s . 'css' . $s . 'tao-3.css', 'templates' => array('header-logo' => 'tao' . $s . 'views' . $s . 'templates' . $s . 'blocks' . $s . 'header-logo.tpl', 'footer' => 'tao' . $s . 'views' . $s . 'templates' . $s . 'blocks' . $s . 'footer.tpl')));
         $this->setVersion('2.11.0');
     }
     if ($this->isVersion('2.11.0')) {
         $service = new \tao_models_classes_service_StateStorage(array('persistence' => 'serviceState'));
         $this->getServiceManager()->register('tao/stateStorage', $service);
         $this->setVersion('2.12.0');
     }
     $this->skip('2.12.0', '2.13.0');
     // moved to 2.8.0
     $this->skip('2.13.0', '2.13.1');
     // moved to 2.7.2
     $this->skip('2.13.1', '2.13.2');
     if ($this->isVersion('2.13.2')) {
         //add the new customizable template "login-message" to backOffice target
         $themeService = new ThemeService();
         //test for overrides
         $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById('tao');
         $oldConfig = $ext->getConfig('themes');
         $compatibilityConfig = array();
         foreach ($oldConfig['frontOffice']['available'] as $arr) {
             if ($arr['id'] == $oldConfig['frontOffice']['default']) {
                 $compatibilityConfig[Theme::CONTEXT_FRONTOFFICE] = $arr;
             }
         }
         foreach ($oldConfig['backOffice']['available'] as $arr) {
             if ($arr['id'] == $oldConfig['backOffice']['default']) {
                 $compatibilityConfig[Theme::CONTEXT_BACKOFFICE] = $arr;
             }
         }
         if (empty($compatibilityConfig)) {
             $themeService->setTheme(new DefaultTheme());
         } else {
             $themeService->setTheme(new CompatibilityTheme($compatibilityConfig));
         }
         unset($oldConfig['backOffice']);
         unset($oldConfig['frontOffice']);
         $ext->setConfig('themes', $oldConfig);
         $this->getServiceManager()->register(ThemeService::SERVICE_ID, $themeService);
         $this->setVersion('2.14.0');
     }
     $this->skip('2.14.0', '2.15.0');
     if ($this->isVersion('2.15.0')) {
         (new SimpleAccess())->revokeRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/generis.rdf#AnonymousRole', ['ext' => 'tao', 'mod' => 'AuthApi']));
         $this->setVersion('2.15.1');
     }
     $this->skip('2.15.1', '2.15.2');
     if ($this->isVersion('2.15.2')) {
         ClientLibConfigRegistry::getRegistry()->register('util/locale', ['decimalSeparator' => '.', 'thousandsSeparator' => '']);
         $this->setVersion('2.15.3');
     }
     $this->skip('2.15.3', '2.16.0');
     if ($this->isVersion('2.16.0')) {
         try {
             $this->getServiceManager()->get(RequiredActionService::CONFIG_ID);
             // all good, already configured
         } catch (ServiceNotFoundException $error) {
             $requiredActionService = new RequiredActionService();
             $this->getServiceManager()->register(RequiredActionService::CONFIG_ID, $requiredActionService);
         }
         OntologyUpdater::syncModels();
         $this->setVersion('2.17.0');
     }
     if ($this->isBetween('2.17.0', '2.17.4')) {
         ClientLibConfigRegistry::getRegistry()->register('util/locale', ['decimalSeparator' => '.', 'thousandsSeparator' => '']);
         $this->setVersion('2.17.4');
     }
     // skiped registering of func ACL proxy as done before 2.7.7
     $this->skip('2.17.4', '2.18.2');
     if ($this->isVersion('2.18.2')) {
         $extension = \common_ext_ExtensionsManager::singleton()->getExtensionById('tao');
         $config = $extension->getConfig('login');
         if (!is_array($config)) {
             $config = [];
         }
         if (!array_key_exists('disableAutocomplete', $config)) {
             $config['disableAutocomplete'] = false;
         }
         $extension->setConfig('login', $config);
         $this->setVersion('2.19.0');
     }
     $this->skip('2.19.0', '2.21.0');
     if ($this->isVersion('2.21.0')) {
         $config = common_ext_ExtensionsManager::singleton()->getExtensionById('tao')->getConfig('ServiceFileStorage');
         $service = new \tao_models_classes_service_FileStorage($config);
         $this->getServiceManager()->register(\tao_models_classes_service_FileStorage::SERVICE_ID, $service);
         $this->setVersion('2.22.0');
     }
     $this->skip('2.22.0', '5.5.0');
     if ($this->isVersion('5.5.0')) {
         $clientConfig = new ClientConfigService();
         $clientConfig->setClientConfig('themesAvailable', new ThemeConfig());
         $this->getServiceManager()->register(ClientConfigService::SERVICE_ID, $clientConfig);
         $this->setVersion('5.6.0');
     }
     $this->skip('5.6.0', '5.6.2');
     if ($this->isVersion('5.6.2')) {
         if (!$this->getServiceManager()->has(UpdateLogger::SERVICE_ID)) {
             // setup log fs
             $fsm = $this->getServiceManager()->get(FileSystemService::SERVICE_ID);
             $fsm->createFileSystem('log', 'tao/log');
             $this->getServiceManager()->register(FileSystemService::SERVICE_ID, $fsm);
             $this->getServiceManager()->register(UpdateLogger::SERVICE_ID, new UpdateLogger(array(UpdateLogger::OPTION_FILESYSTEM => 'log')));
         }
         $this->setVersion('5.6.3');
     }
     $this->skip('5.6.3', '5.9.1');
     if ($this->isVersion('5.9.1')) {
         /** @var EventManager $eventManager */
         $eventManager = $this->getServiceManager()->get(EventManager::CONFIG_ID);
         $eventManager->detach(RoleRemovedEvent::class, ['oat\\tao\\scripts\\update\\LoggerService', 'logEvent']);
         $eventManager->detach(RoleCreatedEvent::class, ['oat\\tao\\scripts\\update\\LoggerService', 'logEvent']);
         $eventManager->detach(RoleChangedEvent::class, ['oat\\tao\\scripts\\update\\LoggerService', 'logEvent']);
         $eventManager->detach(UserCreatedEvent::class, ['oat\\tao\\scripts\\update\\LoggerService', 'logEvent']);
         $eventManager->detach(UserUpdatedEvent::class, ['oat\\tao\\scripts\\update\\LoggerService', 'logEvent']);
         $eventManager->detach(UserRemovedEvent::class, ['oat\\tao\\scripts\\update\\LoggerService', 'logEvent']);
         $this->getServiceManager()->register(EventManager::CONFIG_ID, $eventManager);
         $this->setVersion('5.9.2');
     }
     $this->skip('5.9.2', '6.0.1');
     if ($this->isVersion('6.0.1')) {
         OntologyUpdater::syncModels();
         $this->setVersion('6.1.0');
     }
     $this->skip('6.1.0', '7.16.2');
     if ($this->isVersion('7.16.2')) {
         OntologyUpdater::syncModels();
         ValidationRuleRegistry::getRegistry()->set('notEmpty', new \tao_helpers_form_validators_NotEmpty());
         $this->setVersion('7.17.0');
     }
     $this->skip('7.17.0', '7.23.0');
     if ($this->isVersion('7.23.0')) {
         $service = new \oat\tao\model\mvc\DefaultUrlService(['default' => ['ext' => 'tao', 'controller' => 'Main', 'action' => 'index'], 'login' => ['ext' => 'tao', 'controller' => 'Main', 'action' => 'login']]);
         $this->getServiceManager()->register(\oat\tao\model\mvc\DefaultUrlService::SERVICE_ID, $service);
         $this->setVersion('7.24.0');
     }
     $this->skip('7.24.0', '7.27.0');
     if ($this->isVersion('7.27.0')) {
         OntologyUpdater::syncModels();
         $this->setVersion('7.28.0');
     }
     $this->skip('7.28.0', '7.30.1');
 }
<?php

/*
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; under version 2
 * of the License (non-upgradable).
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 * Copyright (c) 2015 (original work) Open Assessment Technologies SA ;
 *
 */
use oat\tao\model\ClientLibRegistry;
ClientLibRegistry::getRegistry()->register('ace', ROOT_URL . 'xmlEdit/views/js/lib/ace-1.2.0/');
 /**
  * Register a library from a file existing on the file system.
  * 
  * Example:
  * <code>
  * <?php
  * // ...
  * $registry = new SharedLibrariesRegistry($basePath, $baseUrl);
  * $registry->registerFromFile('IMSGlobal/jquery_2_1_1', '/tmp/jquery_2_1_1.js');
  * 
  * // The registry now maps 'IMSGlobal/jquery_2_1_1' to '$baseUrl/IMSGlobal/jquery_2_1_1.js'
  * ?>
  * </code>
  * 
  * @param string $id A shared library name e.g. 'IMSGlobal/jquery_2_1_1'.
  * @param string $path The path to library implementation to register.
  * @throws SharedLibraryNotFoundException If no library can be found at $path.
  */
 public function registerFromFile($id, $path)
 {
     if (file_exists($path) === false) {
         $msg = "Shared Library could not be found at location '{$path}'.";
         throw new SharedLibraryNotFoundException($msg, $id);
     }
     $basePath = $this->getBasePath();
     $baseUrl = $this->getBaseUrl();
     $finalPath = "{$basePath}/{$id}";
     $dirName = pathinfo($finalPath, PATHINFO_DIRNAME);
     $dirName = str_replace(array('css!', 'tpl!'), '', $dirName);
     if (is_dir($dirName) === false) {
         mkdir($dirName, 0777, true);
     }
     $fileBaseName = pathinfo($path, PATHINFO_BASENAME);
     $fileName = pathinfo($path, PATHINFO_FILENAME);
     $destination = "{$dirName}/{$fileBaseName}";
     // Subtract eventual css!, tpl! prefixes.
     copy($path, $destination);
     // Subtract $basePath from final destination.
     $mappingPath = str_replace($basePath . '/', '', $destination);
     // Take care with windows...
     $mappingPath = str_replace("\\", '/', $mappingPath);
     $map = self::set($id, "{$baseUrl}/{$mappingPath}");
     $mappingDirname = pathinfo($mappingPath, PATHINFO_DIRNAME);
     ClientLibRegistry::getRegistry()->register($id, "{$baseUrl}/{$mappingDirname}/{$fileName}");
 }
<?php

/**
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; under version 2
 * of the License (non-upgradable).
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 * Copyright (c) 2015 (original work) Open Assessment Technologies SA
 *
 */
use oat\tao\model\ClientLibRegistry;
$basePath = '../../../taoQtiItem/views/js/runtime/';
$registry = ClientLibRegistry::getRegistry();
$registry->register('qtiCustomInteractionContext', $basePath . 'qtiCustomInteractionContext');
$registry->register('qtiInfoControlContext', $basePath . 'qtiInfoControlContext');
 /**
  * Extension may declare client lib to add alias into requireJs
  * 
  * @author Lionel Lecaque, lionel@taotesting.com
  */
 public function registerClientLib()
 {
     $extManifestConsts = $this->extension->getConstants();
     if (isset($extManifestConsts['BASE_WWW'])) {
         ClientLibRegistry::getRegistry()->register($this->extension->getId(), $extManifestConsts['BASE_WWW'] . 'js');
         ClientLibRegistry::getRegistry()->register($this->extension->getId() . 'Css', $extManifestConsts['BASE_WWW'] . 'css');
     }
 }
 /**
  * @dataProvider isRegisteredProvider
  * @depends testRegisterFromFile
  * 
  * @param string $id The identifier of the library
  * @param boolean $expected The expected return value for $id.
  */
 public function testIsRegistered($id, $expected)
 {
     $registry = $this->getRegistry();
     self::registerOfficialLibraries($registry);
     $this->assertSame($expected, ClientLibRegistry::getRegistry()->isRegistered($id));
 }
 /**
  * Valid a file if exists or alias
  *
  * @param string $source Temporary directory source
  * @param string $file Path to the file
  * @return bool
  * @throws PortableElementInvalidAssetException
  * @throws PortableElementParserException
  */
 public function validFile($source, $file)
 {
     if (!file_exists($source)) {
         throw new PortableElementParserException('Unable to locate extracted zip file.');
     }
     $filePath = $source . $file;
     if (file_exists($filePath) || file_exists($filePath . '.js')) {
         return true;
     }
     if (array_key_exists($file, ClientLibRegistry::getRegistry()->getLibAliasMap())) {
         return true;
     }
     throw new PortableElementInvalidAssetException('Asset ' . $file . ' is not found in archive neither through alias');
 }
Example #19
0
 /**
  * 
  * @param string $initialVersion
  * @return string
  */
 public function update($initialVersion)
 {
     $currentVersion = $initialVersion;
     //add portable shared libraries:
     $libBasePath = ROOT_PATH . 'taoQtiItem/views/js/portableSharedLibraries';
     $libRootUrl = ROOT_URL . 'taoQtiItem/views/js/portableSharedLibraries';
     $installBasePath = ROOT_PATH . 'taoQtiItem/install/scripts/portableSharedLibraries';
     $registry = new SharedLibrariesRegistry($libBasePath, $libRootUrl);
     //migrate from 2.6 to 2.7.0
     if ($currentVersion == '2.6') {
         $registry->registerFromFile('IMSGlobal/jquery_2_1_1', $installBasePath . '/IMSGlobal/jquery_2_1_1.js');
         $registry->registerFromFile('OAT/lodash', $installBasePath . '/OAT/lodash.js');
         $registry->registerFromFile('OAT/async', $installBasePath . '/OAT/async.js');
         $registry->registerFromFile('OAT/raphael', $installBasePath . '/OAT/raphael.js');
         $registry->registerFromFile('OAT/scale.raphael', $installBasePath . '/OAT/scale.raphael.js');
         $registry->registerFromFile('OAT/util/xml', $installBasePath . '/OAT/util/xml.js');
         $registry->registerFromFile('OAT/util/math', $installBasePath . '/OAT/util/math.js');
         $registry->registerFromFile('OAT/util/html', $installBasePath . '/OAT/util/html.js');
         $registry->registerFromFile('OAT/util/EventMgr', $installBasePath . '/OAT/util/EventMgr.js');
         $registry->registerFromFile('OAT/util/event', $installBasePath . '/OAT/util/event.js');
         $currentVersion = '2.7.0';
     }
     //migrate from 2.7.0 to 2.7.1
     if ($currentVersion == '2.7.0') {
         $registry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
         $registry->registerFromFile('OAT/interact', $installBasePath . '/OAT/interact.js');
         $registry->registerFromFile('OAT/interact-rotate', $installBasePath . '/OAT/interact-rotate.js');
         $currentVersion = '2.7.1';
     }
     //migrate from 2.7.0 to 2.7.1
     if ($currentVersion == '2.7.1') {
         $registry->registerFromFile('OAT/sts/transform-helper', $installBasePath . '/OAT/sts/transform-helper.js');
         $currentVersion = '2.7.2';
     }
     //migrate from 2.7.2 to 2.7.3
     if ($currentVersion == '2.7.2') {
         $registry->registerFromFile('IMSGlobal/jquery_2_1_1', $installBasePath . '/IMSGlobal/jquery_2_1_1.js');
         $registry->registerFromFile('OAT/lodash', $installBasePath . '/OAT/lodash.js');
         $registry->registerFromFile('OAT/async', $installBasePath . '/OAT/async.js');
         $registry->registerFromFile('OAT/raphael', $installBasePath . '/OAT/raphael.js');
         $registry->registerFromFile('OAT/scale.raphael', $installBasePath . '/OAT/scale.raphael.js');
         $registry->registerFromFile('OAT/util/xml', $installBasePath . '/OAT/util/xml.js');
         $registry->registerFromFile('OAT/util/math', $installBasePath . '/OAT/util/math.js');
         $registry->registerFromFile('OAT/util/html', $installBasePath . '/OAT/util/html.js');
         $registry->registerFromFile('OAT/util/EventMgr', $installBasePath . '/OAT/util/EventMgr.js');
         $registry->registerFromFile('OAT/util/event', $installBasePath . '/OAT/util/event.js');
         $registry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
         $registry->registerFromFile('OAT/interact', $installBasePath . '/OAT/interact.js');
         $registry->registerFromFile('OAT/interact-rotate', $installBasePath . '/OAT/interact-rotate.js');
         $registry->registerFromFile('OAT/sts/transform-helper', $installBasePath . '/OAT/sts/transform-helper.js');
         $currentVersion = '2.7.3';
     }
     //migrate from 2.7.3 to 2.7.4
     if ($currentVersion == '2.7.3') {
         $registry->registerFromFile('OAT/handlebars', $installBasePath . '/OAT/handlebars.js');
         $currentVersion = '2.7.4';
     }
     if ($currentVersion == '2.7.4') {
         $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem');
         $ext->setConfig('qtiCreator', array('multi-column' => false));
         $currentVersion = '2.7.5';
     }
     if ($currentVersion == '2.7.5') {
         $registry->registerFromFile('OAT/sts/stsEventManager', $installBasePath . '/OAT/sts/stsEventManager.js');
         $currentVersion = '2.7.6';
     }
     if ($currentVersion == '2.7.6') {
         $registry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
         $currentVersion = '2.7.7';
     }
     if ($currentVersion == '2.7.7') {
         $itemThemesDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR;
         $itemThemesDataPathFs = \tao_models_classes_FileSourceService::singleton()->addLocalSource('Theme FileSource', $itemThemesDataPath);
         $websource = TokenWebSource::spawnWebsource($itemThemesDataPathFs);
         ThemeRegistry::getRegistry()->setWebSource($websource->getId());
         ThemeRegistry::getRegistry()->createTarget('items', 'taoQtiItem/views/css/qti-runner.css');
         ThemeRegistry::getRegistry()->registerTheme('tao', 'TAO', 'taoQtiItem/views/css/themes/default.css', array('items'));
         ThemeRegistry::getRegistry()->setDefaultTheme('items', 'tao');
         $currentVersion = '2.7.8';
     }
     if ($currentVersion == '2.7.8') {
         $clientLibRegistry = ClientLibRegistry::getRegistry();
         $clientLibRegistry->register('qtiCustomInteractionContext', '../../../taoQtiItem/views/js/runtime/qtiCustomInteractionContext');
         $clientLibRegistry->register('qtiInfoControlContext', '../../../taoQtiItem/views/js/runtime/qtiInfoControlContext');
         $currentVersion = '2.7.9';
     }
     if ($currentVersion == '2.7.9') {
         $currentVersion = '2.8.0';
     }
     if ($currentVersion == '2.8.0') {
         $currentVersion = '2.8.1';
         $registry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
     }
     if ($currentVersion == '2.8.1') {
         $qtiItem = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem');
         $qtiItem->setConfig('userScripts', array());
         $currentVersion = '2.9.0';
     }
     if ($currentVersion === '2.9.0') {
         $registry->registerFromFile('OAT/waitForMedia', $installBasePath . '/OAT/waitForMedia.js');
         $currentVersion = '2.9.1';
     }
     if ($currentVersion === '2.9.1') {
         $currentVersion = '2.10.0';
     }
     if ($currentVersion === '2.10.0') {
         $currentVersion = '2.11.0';
     }
     return $currentVersion;
 }
Example #20
0
 /**
  *
  * @param string $initialVersion
  * @return string
  */
 public function update($initialVersion)
 {
     $currentVersion = $initialVersion;
     //add portable shared libraries:
     $libBasePath = ROOT_PATH . 'taoQtiItem/views/js/portableSharedLibraries';
     $libRootUrl = ROOT_URL . 'taoQtiItem/views/js/portableSharedLibraries';
     $installBasePath = ROOT_PATH . 'taoQtiItem/install/scripts/portableSharedLibraries';
     $sharedLibRegistry = new SharedLibrariesRegistry($libBasePath, $libRootUrl);
     //migrate from 2.6 to 2.7.0
     if ($currentVersion == '2.6') {
         $sharedLibRegistry->registerFromFile('IMSGlobal/jquery_2_1_1', $installBasePath . '/IMSGlobal/jquery_2_1_1.js');
         $sharedLibRegistry->registerFromFile('OAT/lodash', $installBasePath . '/OAT/lodash.js');
         $sharedLibRegistry->registerFromFile('OAT/async', $installBasePath . '/OAT/async.js');
         $sharedLibRegistry->registerFromFile('OAT/raphael', $installBasePath . '/OAT/raphael.js');
         $sharedLibRegistry->registerFromFile('OAT/scale.raphael', $installBasePath . '/OAT/scale.raphael.js');
         $sharedLibRegistry->registerFromFile('OAT/util/xml', $installBasePath . '/OAT/util/xml.js');
         $sharedLibRegistry->registerFromFile('OAT/util/math', $installBasePath . '/OAT/util/math.js');
         $sharedLibRegistry->registerFromFile('OAT/util/html', $installBasePath . '/OAT/util/html.js');
         $sharedLibRegistry->registerFromFile('OAT/util/EventMgr', $installBasePath . '/OAT/util/EventMgr.js');
         $sharedLibRegistry->registerFromFile('OAT/util/event', $installBasePath . '/OAT/util/event.js');
         $currentVersion = '2.7.0';
     }
     //migrate from 2.7.0 to 2.7.1
     if ($currentVersion == '2.7.0') {
         $sharedLibRegistry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
         $sharedLibRegistry->registerFromFile('OAT/interact', $installBasePath . '/OAT/interact.js');
         $sharedLibRegistry->registerFromFile('OAT/interact-rotate', $installBasePath . '/OAT/interact-rotate.js');
         $currentVersion = '2.7.1';
     }
     //migrate from 2.7.0 to 2.7.1
     if ($currentVersion == '2.7.1') {
         $sharedLibRegistry->registerFromFile('OAT/sts/transform-helper', $installBasePath . '/OAT/sts/transform-helper.js');
         $currentVersion = '2.7.2';
     }
     //migrate from 2.7.2 to 2.7.3
     if ($currentVersion == '2.7.2') {
         $sharedLibRegistry->registerFromFile('IMSGlobal/jquery_2_1_1', $installBasePath . '/IMSGlobal/jquery_2_1_1.js');
         $sharedLibRegistry->registerFromFile('OAT/lodash', $installBasePath . '/OAT/lodash.js');
         $sharedLibRegistry->registerFromFile('OAT/async', $installBasePath . '/OAT/async.js');
         $sharedLibRegistry->registerFromFile('OAT/raphael', $installBasePath . '/OAT/raphael.js');
         $sharedLibRegistry->registerFromFile('OAT/scale.raphael', $installBasePath . '/OAT/scale.raphael.js');
         $sharedLibRegistry->registerFromFile('OAT/util/xml', $installBasePath . '/OAT/util/xml.js');
         $sharedLibRegistry->registerFromFile('OAT/util/math', $installBasePath . '/OAT/util/math.js');
         $sharedLibRegistry->registerFromFile('OAT/util/html', $installBasePath . '/OAT/util/html.js');
         $sharedLibRegistry->registerFromFile('OAT/util/EventMgr', $installBasePath . '/OAT/util/EventMgr.js');
         $sharedLibRegistry->registerFromFile('OAT/util/event', $installBasePath . '/OAT/util/event.js');
         $sharedLibRegistry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
         $sharedLibRegistry->registerFromFile('OAT/interact', $installBasePath . '/OAT/interact.js');
         $sharedLibRegistry->registerFromFile('OAT/interact-rotate', $installBasePath . '/OAT/interact-rotate.js');
         $sharedLibRegistry->registerFromFile('OAT/sts/transform-helper', $installBasePath . '/OAT/sts/transform-helper.js');
         $currentVersion = '2.7.3';
     }
     //migrate from 2.7.3 to 2.7.4
     if ($currentVersion == '2.7.3') {
         $sharedLibRegistry->registerFromFile('OAT/handlebars', $installBasePath . '/OAT/handlebars.js');
         $currentVersion = '2.7.4';
     }
     if ($currentVersion == '2.7.4') {
         $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem');
         $ext->setConfig('qtiCreator', array('multi-column' => false));
         $currentVersion = '2.7.5';
     }
     if ($currentVersion == '2.7.5') {
         $sharedLibRegistry->registerFromFile('OAT/sts/stsEventManager', $installBasePath . '/OAT/sts/stsEventManager.js');
         $currentVersion = '2.7.6';
     }
     if ($currentVersion == '2.7.6') {
         $sharedLibRegistry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
         $currentVersion = '2.7.7';
     }
     if ($currentVersion == '2.7.7') {
         $itemThemesDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR;
         $itemThemesDataPathFs = \tao_models_classes_FileSourceService::singleton()->addLocalSource('Theme FileSource', $itemThemesDataPath);
         $websource = TokenWebSource::spawnWebsource($itemThemesDataPathFs);
         ThemeRegistry::getRegistry()->setWebSource($websource->getId());
         ThemeRegistry::getRegistry()->createTarget('items', 'taoQtiItem/views/css/qti-runner.css');
         ThemeRegistry::getRegistry()->registerTheme('tao', 'TAO', 'taoQtiItem/views/css/themes/default.css', array('items'));
         ThemeRegistry::getRegistry()->setDefaultTheme('items', 'tao');
         $currentVersion = '2.7.8';
     }
     if ($currentVersion == '2.7.8') {
         $clientLibRegistry = ClientLibRegistry::getRegistry();
         $clientLibRegistry->register('qtiCustomInteractionContext', '../../../taoQtiItem/views/js/runtime/qtiCustomInteractionContext');
         $clientLibRegistry->register('qtiInfoControlContext', '../../../taoQtiItem/views/js/runtime/qtiInfoControlContext');
         $currentVersion = '2.7.9';
     }
     if ($currentVersion == '2.7.9') {
         $currentVersion = '2.8.0';
     }
     if ($currentVersion == '2.8.0') {
         $currentVersion = '2.8.1';
         $sharedLibRegistry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
     }
     if ($currentVersion == '2.8.1') {
         $qtiItem = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem');
         $qtiItem->setConfig('userScripts', array());
         $currentVersion = '2.9.0';
     }
     if ($currentVersion === '2.9.0') {
         $sharedLibRegistry->registerFromFile('OAT/waitForMedia', $installBasePath . '/OAT/waitForMedia.js');
         $currentVersion = '2.9.1';
     }
     if ($currentVersion === '2.9.1') {
         $currentVersion = '2.10.0';
     }
     if ($currentVersion === '2.10.0') {
         $currentVersion = '2.11.0';
     }
     if ($currentVersion === '2.11.0') {
         $sharedLibRegistry->registerFromFile('OAT/util/asset', $installBasePath . '/OAT/util/asset.js');
         $sharedLibRegistry->registerFromFile('OAT/util/tpl', $installBasePath . '/OAT/util/tpl.js');
         $currentVersion = '2.12.0';
     }
     $this->setVersion($currentVersion);
     if ($this->isBetween('2.12.0', '2.13.0')) {
         $itemQtiExt = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem');
         $compilerClassConfig = 'oat\\taoQtiItem\\model\\QtiItemCompiler';
         $itemQtiExt->setConfig('compilerClass', $compilerClassConfig);
         $this->setVersion('2.13.0');
     }
     if ($this->isVersion('2.13.0')) {
         \oat\tao\model\ClientLibConfigRegistry::getRegistry()->register('taoQtiItem/qtiRunner/core/QtiRunner', array('inlineModalFeedback' => false));
         $fs = \taoItems_models_classes_ItemsService::singleton()->getDefaultFileSource();
         $itemUpdater = new ItemUpdateInlineFeedback($fs->getPath());
         $itemUpdater->update(true);
         $this->setVersion('2.14.0');
     }
     $this->skip('2.14.0', '2.15.1');
     if ($this->isVersion('2.15.1')) {
         $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem');
         $validation = array('default' => array(__DIR__ . '/../../model/qti/data/imscp_v1p1.xsd', __DIR__ . '/../../model/qti/data/apipv1p0/Core_Level/Package/apipv1p0_imscpv1p2_v1p0.xsd'));
         $ext->setConfig('manifestValidation', $validation);
         $this->setVersion('2.16.0');
     }
     if ($this->isVersion('2.16.0')) {
         $ext = \common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiItem');
         $validation = array('http://www.imsglobal.org/xsd/imsqti_v2p0' => array(__DIR__ . '/../../model/qti/data/qtiv2p0/imsqti_v2p0.xsd'), 'http://www.imsglobal.org/xsd/apip/apipv1p0/qtiitem/imsqti_v2p1' => array(__DIR__ . '/../../model/qti/data/apipv1p0/Core_Level/Package/apipv1p0_qtiitemv2p1_v1p0.xsd'), 'default' => array(__DIR__ . '/../../model/qti/data/qtiv2p1/imsqti_v2p1.xsd'));
         $ext->setConfig('contentValidation', $validation);
         $this->setVersion('2.17.0');
     }
     if ($this->isVersion('2.17.0')) {
         $this->setVersion('2.17.1');
     }
     if ($this->isVersion('2.17.1')) {
         $service = new addValidationSettings();
         $service([]);
         $this->setVersion('2.17.2');
     }
     $this->skip('2.17.2', '2.19.0');
     if ($this->isVersion('2.19.0')) {
         if (!$this->getServiceManager()->has(SimpleExporter::SERVICE_ID)) {
             $service = new ItemExporter(array('fileSystem' => 'taoQtiItem', 'fileLocation' => 'export' . DIRECTORY_SEPARATOR . 'export.csv', 'extractors' => array('OntologyExtractor' => new OntologyExtractor(), 'QtiExtractor' => new QtiExtractor()), 'columns' => array('label' => array('extractor' => 'OntologyExtractor', 'parameters' => array('property' => RDFS_LABEL)), 'type' => array('extractor' => 'QtiExtractor', 'parameters' => array('callback' => 'getInteractionType')), 'nb choice' => array('extractor' => 'QtiExtractor', 'parameters' => array('callback' => 'getNumberOfChoices')), 'BR' => array('extractor' => 'QtiExtractor', 'parameters' => array('callback' => 'getRightAnswer', 'callbackParameters' => array('delimiter' => '|'))), 'choiceInteraction' => array('extractor' => 'QtiExtractor', 'parameters' => array('callback' => 'getChoices', 'valuesAsColumns' => true)))));
             $service->setServiceManager($this->getServiceManager());
             $this->getServiceManager()->register(SimpleExporter::SERVICE_ID, $service);
             $createExportDirectoryScript = new createExportDirectory();
             $createExportDirectoryScript([]);
         }
         $this->setVersion('2.20.0');
     }
     $this->skip('2.20.0', '2.22.0');
     if ($this->isVersion('2.22.0')) {
         $simpleExporter = $this->getServiceManager()->get(SimpleExporter::SERVICE_ID);
         $columns = $simpleExporter->getOption('columns');
         $responseIdentifier['responseIdentifier'] = array('extractor' => 'QtiExtractor', 'parameters' => array('callback' => 'getResponseIdentifier'));
         $offset = array_search('BR', array_keys($columns));
         $columns = array_slice($columns, 0, $offset, true) + $responseIdentifier + array_slice($columns, $offset, NULL, true);
         $simpleExporter->setOption('columns', $columns);
         $simpleExporter->setServiceManager($this->getServiceManager());
         $this->getServiceManager()->register(SimpleExporter::SERVICE_ID, $simpleExporter);
         $this->setVersion('2.23.0');
     }
     if ($this->isVersion('2.23.0')) {
         $simpleExporter = $this->getServiceManager()->get(SimpleExporter::SERVICE_ID);
         $columns = $simpleExporter->getOption('columns');
         $columns['BR'] = array('extractor' => 'QtiExtractor', 'parameters' => array('callback' => 'getRightAnswer', 'callbackParameters' => array('delimiter' => '|'), 'valuesAsColumns' => true));
         $simpleExporter->setOption('columns', $columns);
         $simpleExporter->setServiceManager($this->getServiceManager());
         $this->getServiceManager()->register(SimpleExporter::SERVICE_ID, $simpleExporter);
         $this->setVersion('2.24.0');
     }
     $this->skip('2.24.0', '2.25.0');
     if ($this->isVersion('2.25.0')) {
         QtiCreatorClientConfigRegistry::getRegistry()->registerPlugin('back', 'taoQtiItem/qtiCreator/plugins/navigation/back', 'navigation');
         $this->setVersion('2.26.0');
     }
     if ($this->isVersion('2.26.0')) {
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAOItem.rdf#AbstractItemAuthor', QtiPreview::class));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAOItem.rdf#AbstractItemAuthor', QtiCreator::class));
         AclProxy::applyRule(new AccessRule('grant', 'http://www.tao.lu/Ontologies/TAOItem.rdf#AbstractItemAuthor', QtiCssAuthoring::class));
         $this->setVersion('2.27.0');
     }
     $this->skip('2.27.0', '2.28.2');
     if ($this->isVersion('2.28.2')) {
         $setDragAndDropConfig = new SetDragAndDropConfig();
         $setDragAndDropConfig([]);
         $this->setVersion('2.29.0');
     }
     $this->skip('2.29.0', '2.30.1');
     if ($this->isVersion('2.30.1')) {
         $setDragAndDropConfig = new SetDragAndDropConfig();
         $setDragAndDropConfig([]);
         $this->setVersion('2.31.0');
     }
     $this->skip('2.31.0', '5.1.2');
     if ($this->isVersion('5.1.2')) {
         $sharedLibRegistry->registerFromFile('OAT/jquery.qtip', $installBasePath . '/OAT/jquery.qtip.js');
         $this->setVersion('5.2.0');
     }
     $this->skip('5.2.0', '5.3.0');
     if ($this->isVersion('5.3.0')) {
         $sharedLibRegistry->registerFromFile('OAT/customEvent', $installBasePath . '/OAT/customEvent.js');
         $this->setVersion('5.4.0');
     }
     $this->skip('5.4.0', '5.7.0');
     if ($this->isVersion('5.7.0')) {
         $eventManager = $this->getServiceManager()->get(\oat\oatbox\event\EventManager::CONFIG_ID);
         $eventManager->attach(\oat\taoItems\model\event\ItemRdfUpdatedEvent::class, array(\oat\taoQtiItem\model\Listener\ItemUpdater::class, 'catchItemRdfUpdatedEvent'));
         $this->getServiceManager()->register(\oat\oatbox\event\EventManager::CONFIG_ID, $eventManager);
         $this->setVersion('5.7.1');
     }
     $this->skip('5.7.1', '5.7.3');
     if ($this->isVersion('5.7.3')) {
         $categoriesService = new ItemCategoriesService(array('properties' => array()));
         $categoriesService->setServiceManager($this->getServiceManager());
         $this->getServiceManager()->register(ItemCategoriesService::SERVICE_ID, $categoriesService);
         $this->setVersion('5.8.0');
     }
     $this->skip('5.8.0', '6.3.0');
 }
 /**
  * Register the libraries referenced by an item at location $path. All <pci:lib> elements will be parsed
  * and then registered through the registery.
  * 
  * If a library cannot be found at the locations listed by the referenced by the <pci:resources>->location attribute,
  * the registry will try to find these libraries on the file system, using the location of the item file as a base path. 
  * 
  * @param string $path The path to the XML file.
  * @throws SharedLibraryNotFoundException If a library referenced by a <pci:lib> element in the item cannot be found.
  */
 public function registerFromItem($path)
 {
     $dom = new DOMDocument('1.0', 'UTF-8');
     $dom->load($path);
     $basePath = pathinfo($dom->documentURI, PATHINFO_DIRNAME);
     $basePath = preg_replace('/^file:\\//', '', $basePath);
     $xpath = new DOMXPath($dom);
     $xpath->registerNamespace('pci', 'http://www.imsglobal.org/xsd/portableCustomInteraction');
     $libElts = $xpath->query('//pci:lib');
     for ($i = 0; $i < $libElts->length; $i++) {
         $libElt = $libElts->item($i);
         if (($name = $libElt->getAttribute('name')) !== '') {
             // Is the library already registered?
             if (ClientLibRegistry::getRegistry()->isRegistered($name) === false) {
                 // So we consider to find the library at item's $basePath . $name
                 $expectedLibLocation = "{$basePath}/" . str_replace(array('tpl!', 'css!'), '', $name);
                 // Might throw a SharedLibraryNotFoundException, let it go...
                 $this->registerFromFile($name, $expectedLibLocation);
             }
         }
     }
 }