public function run() { $extension = common_ext_ExtensionsManager::singleton()->getExtensionById('taoDelivery'); $runPath = $extension->getConstant('BASE_PATH') . 'data' . DIRECTORY_SEPARATOR . 'compiled' . DIRECTORY_SEPARATOR; helpers_File::emptyDirectory($runPath); $runSource = tao_models_classes_FileSourceService::singleton()->addLocalSource('runtimeDirectory', $runPath); $provider = new tao_models_classes_fsAccess_TokenAccessProvider($runSource); taoDelivery_models_classes_RuntimeAccess::setAccessProvider($provider); }
protected function setupServiceManager($configPath) { if (!\helpers_File::emptyDirectory($configPath, true)) { throw new common_exception_Error('Unable to empty ' . $configPath . ' folder.'); } $driver = new SimpleConfigDriver(); $configService = $driver->connect('config', array('dir' => $configPath, 'humanReadable' => true)); return new ServiceManager($configService); }
public function run() { $publicDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR; $privateDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'private' . DIRECTORY_SEPARATOR; if (file_exists($publicDataPath)) { helpers_File::emptyDirectory($publicDataPath); } if (file_exists($privateDataPath)) { helpers_File::emptyDirectory($privateDataPath); } $publicFs = tao_models_classes_FileSourceService::singleton()->addLocalSource('public service storage', $publicDataPath); $privateFs = tao_models_classes_FileSourceService::singleton()->addLocalSource('private service storage', $privateDataPath); $provider = tao_models_classes_fsAccess_TokenAccessProvider::spawnProvider($publicFs); tao_models_classes_service_FileStorage::configure($privateFs, $publicFs, $provider); }
public function __invoke($params) { $publicDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR; $privateDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'private' . DIRECTORY_SEPARATOR; if (file_exists($publicDataPath)) { helpers_File::emptyDirectory($publicDataPath); } if (file_exists($privateDataPath)) { helpers_File::emptyDirectory($privateDataPath); } $fsService = $this->getServiceLocator()->get(FileSystemService::SERVICE_ID); $fsService->createFileSystem('public', 'tao/public'); $fsService->createFileSystem('private', 'tao/private'); $this->registerService(FileSystemService::SERVICE_ID, $fsService); $websource = TokenWebSource::spawnWebsource('public', $publicDataPath); $service = new tao_models_classes_service_FileStorage(array(tao_models_classes_service_FileStorage::OPTION_PUBLIC_FS => 'public', tao_models_classes_service_FileStorage::OPTION_PRIVATE_FS => 'private', tao_models_classes_service_FileStorage::OPTION_ACCESS_PROVIDER => $websource->getId())); $this->registerService(tao_models_classes_service_FileStorage::SERVICE_ID, $service); }
/** * Run the TAO install from the given data * @throws tao_install_utils_Exception * @param $installData data coming from the install form * @see tao_install_form_Settings */ public function install(array $installData) { try { /* * 0 - Check input parameters. */ $this->log('i', "Checking install data"); self::checkInstallData($installData); $this->log('i', "Starting TAO install", 'INSTALL'); // Sanitize $installData if needed. if (!preg_match("/\\/\$/", $installData['module_url'])) { $installData['module_url'] .= '/'; } if (isset($installData['extensions'])) { $extensionIDs = is_array($installData['extensions']) ? $installData['extensions'] : explode(',', $installData['extensions']); } else { $extensionIDs = array('taoCe'); } $installData['file_path'] = rtrim($installData['file_path'], DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; /* * 1 - Check configuration with checks described in the manifest. */ $configChecker = tao_install_utils_ChecksHelper::getConfigChecker($extensionIDs); // Silence checks to have to be escaped. foreach ($configChecker->getComponents() as $c) { if (method_exists($c, 'getName') && in_array($c->getName(), $this->getEscapedChecks())) { $configChecker->silent($c); } } $reports = $configChecker->check(); foreach ($reports as $r) { $msg = $r->getMessage(); $component = $r->getComponent(); $this->log('i', $msg); if ($r->getStatus() !== common_configuration_Report::VALID && !$component->isOptional()) { throw new tao_install_utils_Exception($msg); } } /* * 2 - Test DB connection (done by the constructor) */ $this->log('i', "Spawning DbCreator", 'INSTALL'); $dbName = $installData['db_name']; if ($installData['db_driver'] == 'pdo_oci') { $installData['db_name'] = $installData['db_host']; $installData['db_host'] = ''; } $dbConfiguration = array('driver' => $installData['db_driver'], 'host' => $installData['db_host'], 'dbname' => $installData['db_name'], 'user' => $installData['db_user'], 'password' => $installData['db_pass']); $hostParts = explode(':', $installData['db_host']); if (count($hostParts) == 2) { $dbConfiguration['host'] = $hostParts[0]; $dbConfiguration['port'] = $hostParts[1]; } if ($installData['db_driver'] == 'pdo_mysql') { $dbConfiguration['dbname'] = ''; } if ($installData['db_driver'] == 'pdo_oci') { $dbConfiguration['wrapperClass'] = 'Doctrine\\DBAL\\Portability\\Connection'; $dbConfiguration['portability'] = \Doctrine\DBAL\Portability\Connection::PORTABILITY_ALL; $dbConfiguration['fetch_case'] = PDO::CASE_LOWER; } $dbCreator = new tao_install_utils_DbalDbCreator($dbConfiguration); $this->log('d', "DbCreator spawned", 'INSTALL'); /* * 3 - Load the database schema */ // If the database already exists, drop all tables if ($dbCreator->dbExists($dbName)) { try { //If the target Sgbd is mysql select the database after creating it if ($installData['db_driver'] == 'pdo_mysql') { $dbCreator->setDatabase($installData['db_name']); } $dbCreator->cleanDb($dbName); } catch (Exception $e) { $this->log('i', 'Problem cleaning db will try to erase the whole db: ' . $e->getMessage()); try { $dbCreator->destroyTaoDatabase($dbName); } catch (Exception $e) { $this->log('i', 'isssue during db cleaning : ' . $e->getMessage()); } } $this->log('i', "Dropped all tables", 'INSTALL'); } else { try { $dbCreator->createDatabase($installData['db_name']); $this->log('i', "Created database " . $installData['db_name'], 'INSTALL'); } catch (Exception $e) { throw new tao_install_utils_Exception('Unable to create the database, make sure that ' . $installData['db_user'] . ' is granted to create databases. Otherwise create the database with your super user and give to ' . $installData['db_user'] . ' the right to use it.'); } //If the target Sgbd is mysql select the database after creating it if ($installData['db_driver'] == 'pdo_mysql') { $dbCreator->setDatabase($installData['db_name']); } } // reset db name for mysql if ($installData['db_driver'] == 'pdo_mysql') { $dbConfiguration['dbname'] = $installData['db_name']; } // Create tao tables $dbCreator->initTaoDataBase(); $this->log('i', 'Created tables', 'INSTALL'); $storedProcedureFile = $this->options['install_path'] . 'db/tao_stored_procedures_' . str_replace('pdo_', '', $installData['db_driver']) . '.sql'; if (file_exists($storedProcedureFile) && is_readable($storedProcedureFile)) { $this->log('i', 'Installing stored procedures for ' . $installData['db_driver'], 'INSTALL'); $dbCreator->loadProc($storedProcedureFile); } else { $this->log('e', 'Could not find storefile : ' . $storedProcedureFile); } /* * 4 - Create the local namespace */ // $this->log('i', 'Creating local namespace', 'INSTALL'); // $dbCreator->addLocalModel('8',$installData['module_namespace']); // $dbCreator->addModels(); /* * 5 - Create the generis config files */ $this->log('d', 'Removing old config', 'INSTALL'); if (!helpers_File::emptyDirectory($this->options['root_path'] . 'config/', true)) { throw new common_exception_Error('Unable to empty ' . $this->options['root_path'] . 'config/ folder.'); } $this->log('d', 'Writing generis config', 'INSTALL'); $generisConfigWriter = new tao_install_utils_ConfigWriter($this->options['root_path'] . 'generis/config/sample/generis.conf.php', $this->options['root_path'] . 'config/generis.conf.php'); $generisConfigWriter->createConfig(); $generisConfigWriter->writeConstants(array('LOCAL_NAMESPACE' => $installData['module_namespace'], 'GENERIS_INSTANCE_NAME' => $installData['instance_name'], 'GENERIS_SESSION_NAME' => self::generateSessionName(), 'ROOT_PATH' => $this->options['root_path'], 'FILES_PATH' => $installData['file_path'], 'ROOT_URL' => $installData['module_url'], 'DEFAULT_LANG' => $installData['module_lang'], 'DEBUG_MODE' => $installData['module_mode'] == 'debug' ? true : false, 'TIME_ZONE' => $installData['timezone'])); /* * 5b - Prepare the file/cache folder (FILES_PATH) not yet defined) * @todo solve this more elegantly */ $file_path = $installData['file_path']; if (is_dir($file_path)) { $this->log('i', 'Data from previous install found and will be removed'); if (!helpers_File::emptyDirectory($installData['file_path'], true)) { throw new common_exception_Error('Unable to empty ' . $installData['file_path'] . ' folder.'); } } else { mkdir($installData['file_path'], 0700, true); } $cachePath = $installData['file_path'] . 'generis' . DIRECTORY_SEPARATOR . 'cache'; mkdir($cachePath, 0700, true); /* * 6 - Run the extensions bootstrap */ $this->log('d', 'Running the extensions bootstrap', 'INSTALL'); require_once $this->options['root_path'] . 'generis/common/inc.extension.php'; /* * 6b - Create cache persistence */ common_persistence_Manager::addPersistence('cache', array('driver' => 'phpfile')); common_persistence_KeyValuePersistence::getPersistence('cache')->purge(); /* * 6c - Create generis persistence */ common_persistence_Manager::addPersistence('default', $dbConfiguration); /* * 6d - Create generis user */ // Init model creator and create the Generis User. $modelCreator = new tao_install_utils_ModelCreator(LOCAL_NAMESPACE); $modelCreator->insertGenerisUser(helpers_Random::generateString(8)); /* * 7 - Add languages */ $models = $modelCreator->getLanguageModels(); foreach ($models as $ns => $modelFiles) { foreach ($modelFiles as $file) { $this->log('d', "Inserting language description model '" . $file . "'", 'INSTALL'); $modelCreator->insertLocalModel($file); } } /* * 8 - Finish Generis Install */ $generis = common_ext_ExtensionsManager::singleton()->getExtensionById('generis'); $generisInstaller = new common_ext_GenerisInstaller($generis); $generisInstaller->install(); /* * 9 - Install the extensions */ $toInstall = array(); foreach ($extensionIDs as $id) { try { $ext = common_ext_ExtensionsManager::singleton()->getExtensionById($id); if (!common_ext_ExtensionsManager::singleton()->isInstalled($ext->getId())) { $this->log('d', 'Extension ' . $id . ' needs to be installed'); $toInstall[$id] = $ext; } } catch (common_ext_ExtensionException $e) { $this->log('w', 'Extension ' . $id . ' not found'); } } while (!empty($toInstall)) { $modified = false; foreach ($toInstall as $key => $extension) { // if all dependencies are installed $this->log('d', 'Considering extension ' . $key); $installed = array_keys(common_ext_extensionsmanager::singleton()->getinstalledextensions()); $missing = array_diff(array_keys($extension->getDependencies()), $installed); if (count($missing) == 0) { try { $importLocalData = $installData['import_local'] == true; $extinstaller = new tao_install_ExtensionInstaller($extension, $importLocalData); set_time_limit(300); $extinstaller->install(); $this->log('ext', $key); $this->log('i', 'Extension ' . $key . ' installed'); } catch (common_ext_ExtensionException $e) { $this->log('w', 'Exception(' . $e->getMessage() . ') during install for extension "' . $extension->getId() . '"'); throw new tao_install_utils_Exception("An error occured during the installation of extension '" . $extension->getId() . "'."); } unset($toInstall[$key]); $modified = true; } else { $missing = array_diff($missing, array_keys($toInstall)); foreach ($missing as $extID) { $this->log('d', 'Extension ' . $extID . ' is required but missing, added to install list'); $toInstall[$extID] = common_ext_ExtensionsManager::singleton()->getExtensionById($extID); $modified = true; } } } // no extension could be installed, and no new requirements was added if (!$modified) { throw new common_exception_Error('Unfulfilable/Cyclic reference found in extensions'); } } /* * 9bis - Generates client side translation bundles (depends on extension install) */ $this->log('i', 'Generates client side translation bundles', 'INSTALL'); // $files = tao_models_classes_LanguageService::singleton()->generateClientBundles(); /* * 10 - Insert Super User */ $this->log('i', 'Spawning SuperUser ' . $installData['user_login'], 'INSTALL'); $modelCreator->insertSuperUser(array('login' => $installData['user_login'], 'password' => core_kernel_users_Service::getPasswordHash()->encrypt($installData['user_pass1']), 'userLastName' => $installData['user_lastname'], 'userFirstName' => $installData['user_firstname'], 'userMail' => $installData['user_email'], 'userDefLg' => 'http://www.tao.lu/Ontologies/TAO.rdf#Lang' . $installData['module_lang'], 'userUILg' => 'http://www.tao.lu/Ontologies/TAO.rdf#Lang' . $installData['module_lang'], 'userTimezone' => TIME_ZONE)); /* * 11 - Secure the install for production mode */ if ($installData['module_mode'] == 'production') { $extensions = common_ext_ExtensionsManager::singleton()->getInstalledExtensions(); $this->log('i', 'Securing tao for production', 'INSTALL'); // 11.1 Remove Generis User $dbCreator->removeGenerisUser(); // 11.2 Protect TAO dist $shield = new tao_install_utils_Shield(array_keys($extensions)); $shield->disableRewritePattern(array("!/test/", "!/doc/")); $shield->denyAccessTo(array('views/sass', 'views/js/test', 'views/build')); $shield->protectInstall(); } /* * 12 - Create the version file */ $this->log('d', 'Creating TAO version file', 'INSTALL'); file_put_contents($installData['file_path'] . 'version', TAO_VERSION); } catch (Exception $e) { if ($this->retryInstallation($e)) { return; } // In any case, we transmit a single exception type (at the moment) // for a clearer API for client code. $this->log('e', 'Error Occurs : ' . $e->getMessage() . $e->getTraceAsString(), 'INSTALL'); throw new tao_install_utils_Exception($e->getMessage(), 0, $e); } }
* 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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT); * */ use oat\taoQtiItem\model\SharedLibrariesRegistry; $libBasePath = ROOT_PATH . 'taoQtiItem/views/js/portableSharedLibraries'; $libRootUrl = ROOT_URL . 'taoQtiItem/views/js/portableSharedLibraries'; $installBasePath = __DIR__ . '/portableSharedLibraries'; // clean directory... helpers_File::emptyDirectory($libBasePath, true); $registry = new SharedLibrariesRegistry($libBasePath, $libRootUrl); $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/jquery.qtip', $installBasePath . '/OAT/jquery.qtip.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/util/asset', $installBasePath . '/OAT/util/asset.js'); $registry->registerFromFile('OAT/util/tpl', $installBasePath . '/OAT/util/tpl.js'); $registry->registerFromFile('OAT/sts/common', $installBasePath . '/OAT/sts/common.js');
/** * * @return \oat\tao\model\search\zend\ZendSearch */ public static function createSearch() { $privateDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'ZendSearch' . DIRECTORY_SEPARATOR; if (file_exists($privateDataPath)) { \helpers_File::emptyDirectory($privateDataPath); } $privateFs = \tao_models_classes_FileSourceService::singleton()->addLocalSource('Zend Search index folder', $privateDataPath); $search = new ZendSearch(array('fileSystem' => $privateFs->getUri())); $search->flushIndex(); return $search; }
/* * 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) 2002-2008 (original work) Public Research Centre Henri Tudor & University of Luxembourg (under the project TAO & TAO2); * 2008-2010 (update and modification) Deutsche Institut für Internationale Pädagogische Forschung (under the project TAO-TRANSFER); * 2009-2012 (update and modification) Public Research Centre Henri Tudor (under the project TAO-SUSTAIN & TAO-DEV); * */ /* * This post-installation script creates a fodler for the QTI Tests */ $dataPath = FILES_PATH . 'taoQtiTest' . DIRECTORY_SEPARATOR; if (file_exists($dataPath)) { helpers_File::emptyDirectory($dataPath); } $source = tao_models_classes_FileSourceService::singleton()->addLocalSource('QTI test datasource', $dataPath); mkdir($dataPath . 'testData'); $directory = new core_kernel_file_File($source->createFile('', 'testData')); taoQtiTest_models_classes_QtiTestService::singleton()->setQtiTestDirectory($directory);
<?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) 2014 (original work) Open Assessment Technologies SA; * * */ use oat\taoBooklet\model\StorageService; $bookletDataPath = FILES_PATH . 'taoBooklet' . DIRECTORY_SEPARATOR; if (file_exists($bookletDataPath)) { helpers_File::emptyDirectory($bookletDataPath); } $bookletFs = tao_models_classes_FileSourceService::singleton()->addLocalSource('booklet storage', $bookletDataPath); StorageService::setFileSystem($bookletFs);
/** * purge the persistence directory * * @return boolean */ public function purge() { // @todo opcache invalidation return file_exists($this->directory) ? helpers_File::emptyDirectory($this->directory) : false; }
* * 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) 2002-2008 (original work) Public Research Centre Henri Tudor & University of Luxembourg (under the project TAO & TAO2); * 2008-2010 (update and modification) Deutsche Institut für Internationale Pädagogische Forschung (under the project TAO-TRANSFER); * 2009-2012 (update and modification) Public Research Centre Henri Tudor (under the project TAO-SUSTAIN & TAO-DEV); * */ /* * This post-installation script creates a new local file source for file uploaded * by end-users through the TAO GUI. */ $publicDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR; $privateDataPath = FILES_PATH . 'tao' . DIRECTORY_SEPARATOR . 'private' . DIRECTORY_SEPARATOR; if (file_exists($publicDataPath)) { helpers_File::emptyDirectory($publicDataPath); } if (file_exists($privateDataPath)) { helpers_File::emptyDirectory($privateDataPath); } $publicFs = tao_models_classes_FileSourceService::singleton()->addLocalSource('public service storage', $publicDataPath); $privateFs = tao_models_classes_FileSourceService::singleton()->addLocalSource('private service storage', $privateDataPath); $websource = TokenWebSource::spawnWebsource($publicFs); tao_models_classes_service_FileStorage::configure($privateFs, $publicFs, $websource);