public function addTestFolder($folder) { if (is_dir($folder)) { rex_autoload::addDirectory($folder); $this->testFoldersIterator->append(rex_finder::factory($folder)->recursive()->filesOnly()->getIterator()); } }
// add package path for fragment loading if (is_readable($folder . 'fragments')) { rex_fragment::addDirectory($folder . 'fragments' . DIRECTORY_SEPARATOR); } // add addon path for class-loading if (is_readable($folder . 'lib')) { rex_autoload::addDirectory($folder . 'lib'); } if (is_readable($folder . 'vendor')) { rex_autoload::addDirectory($folder . 'vendor'); } $autoload = $package->getProperty('autoload'); if (is_array($autoload) && isset($autoload['classes']) && is_array($autoload['classes'])) { foreach ($autoload['classes'] as $dir) { $dir = $package->getPath($dir); if (is_readable($dir)) { rex_autoload::addDirectory($dir); } } } } // now we actually include the addons logic foreach ($packageOrder as $packageId) { $package = rex_package::get($packageId); // include the addon itself if (is_readable($package->getPath(rex_package::FILE_BOOT))) { $package->includeFile(rex_package::FILE_BOOT); } } // ----- all addons configs included rex_extension::registerPoint(new rex_extension_point('PACKAGES_INCLUDED'));
/** * Installs a package. * * @param bool $installDump When TRUE, the sql dump will be importet * * @throws rex_functional_exception * * @return bool TRUE on success, FALSE on error */ public function install($installDump = true) { try { // check package directory perms $install_dir = $this->package->getPath(); if (!rex_dir::isWritable($install_dir)) { throw new rex_functional_exception($this->i18n('dir_not_writable', $install_dir)); } // check package.yml $packageFile = $this->package->getPath(rex_package::FILE_PACKAGE); if (!is_readable($packageFile)) { throw new rex_functional_exception($this->i18n('missing_yml_file')); } try { rex_file::getConfig($packageFile); } catch (rex_yaml_parse_exception $e) { throw new rex_functional_exception($this->i18n('invalid_yml_file') . ' ' . $e->getMessage()); } $packageId = $this->package->getProperty('package'); if ($packageId === null) { throw new rex_functional_exception($this->i18n('missing_id', $this->package->getPackageId())); } if ($packageId != $this->package->getPackageId()) { $parts = explode('/', $packageId, 2); throw new rex_functional_exception($this->wrongPackageId($parts[0], isset($parts[1]) ? $parts[1] : null)); } if ($this->package->getVersion() === null) { throw new rex_functional_exception($this->i18n('missing_version')); } // check requirements and conflicts $message = ''; if (!$this->checkRequirements()) { $message = $this->message; } if (!$this->checkConflicts()) { $message .= $this->message; } if ($message) { throw new rex_functional_exception($message); } $reinstall = $this->package->getProperty('install'); $available = $this->package->isAvailable(); $this->package->setProperty('install', true); // include install.php if (is_readable($this->package->getPath(rex_package::FILE_INSTALL))) { if (!$available) { rex_autoload::addDirectory($this->package->getPath('lib')); rex_autoload::addDirectory($this->package->getPath('vendor')); rex_i18n::addDirectory($this->package->getPath('lang')); } $this->package->includeFile(rex_package::FILE_INSTALL); if (($instmsg = $this->package->getProperty('installmsg', '')) != '') { throw new rex_functional_exception($instmsg); } if (!$this->package->isInstalled()) { throw new rex_functional_exception($this->i18n('no_reason')); } } // import install.sql $installSql = $this->package->getPath(rex_package::FILE_INSTALL_SQL); if ($installDump === true && is_readable($installSql)) { rex_sql_util::importDump($installSql); } if (!$reinstall) { $this->package->setProperty('status', true); } $this->saveConfig(); if ($this->generatePackageOrder) { self::generatePackageOrder(); } // copy assets $assets = $this->package->getPath('assets'); if (is_dir($assets)) { if (!rex_dir::copy($assets, $this->package->getAssetsPath())) { throw new rex_functional_exception($this->i18n('install_cant_copy_files')); } } $this->message = $this->i18n($reinstall ? 'reinstalled' : 'installed', $this->package->getName()); return true; } catch (rex_functional_exception $e) { $this->message = $e->getMessage(); } catch (rex_sql_exception $e) { $this->message = 'SQL error: ' . $e->getMessage(); } $this->package->setProperty('install', false); $this->message = $this->i18n('no_install', $this->package->getName()) . '<br />' . $this->message; return false; }
// start output buffering as early as possible, so we can be sure // we can set http header whenever we want/need to ob_start(); ob_implicit_flush(0); mb_internal_encoding('UTF-8'); // deactivate session cache limiter session_cache_limiter(false); // set arg_separator to get valid html output if session.use_trans_sid is activated ini_set('arg_separator.output', '&'); require_once __DIR__ . '/lib/util/path.php'; rex_path::init($REX['HTDOCS_PATH'], $REX['BACKEND_FOLDER']); require_once rex_path::core('lib/autoload.php'); // register core-classes as php-handlers rex_autoload::register(); // add core base-classpath to autoloader rex_autoload::addDirectory(rex_path::core('lib')); rex_url::init($REX['HTDOCS_PATH'], $REX['BACKEND_FOLDER']); // start timer at the very beginning rex::setProperty('timer', new rex_timer($_SERVER['REQUEST_TIME_FLOAT'])); // add backend flag to rex rex::setProperty('redaxo', $REX['REDAXO']); // add core lang directory to rex_i18n rex_i18n::addDirectory(rex_path::core('lang')); // add core base-fragmentpath to fragmentloader rex_fragment::addDirectory(rex_path::core('fragments/')); // ----------------- FUNCTIONS require_once rex_path::core('functions/function_rex_globals.php'); require_once rex_path::core('functions/function_rex_other.php'); // ----------------- VERSION rex::setProperty('version', '5.0.0-alpha7'); $cacheFile = rex_path::cache('config.yml.cache');