From 534ae0b20cedc4bdaf86f7d2765cf71255ec4b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Sat, 9 Dec 2023 00:36:01 +0100 Subject: [PATCH] Replace custom loader in favor of composer native --- composer.json-dist | 12 +++++++ program/include/iniset.php | 37 +------------------ program/lib/Roundcube/bootstrap.php | 56 ----------------------------- tests/Browser/bootstrap.php | 10 ------ tests/bootstrap.php | 13 ------- 5 files changed, 13 insertions(+), 115 deletions(-) diff --git a/composer.json-dist b/composer.json-dist index daa1c70ff1..e6f599d3a2 100644 --- a/composer.json-dist +++ b/composer.json-dist @@ -29,6 +29,18 @@ "kolab/net_ldap3": "~1.1.1 required for connecting to LDAP", "bjeavons/zxcvbn-php": "^1.0 required for Zxcvbn password strength driver" }, + "autoload": { + "classmap": [ + "program/actions/", + "program/include/", + "program/lib/" + ] + }, + "autoload-dev": { + "classmap": [ + "tests/" + ] + }, "config": { "allow-plugins": { "roundcube/plugin-installer": true diff --git a/program/include/iniset.php b/program/include/iniset.php index a1e038420d..506d3497c4 100644 --- a/program/include/iniset.php +++ b/program/include/iniset.php @@ -45,16 +45,6 @@ // Show basic error message on fatal PHP error register_shutdown_function('rcmail_error_handler'); -// RC include folders MUST be included FIRST to avoid other -// possible not compatible libraries (i.e PEAR) to be included -// instead the ones provided by RC -$include_path = INSTALL_PATH . 'program/lib' . PATH_SEPARATOR; -$include_path.= ini_get('include_path'); - -if (set_include_path($include_path) === false) { - die("Fatal error: ini_set/set_include_path does not work."); -} - // increase maximum execution time for php scripts // (does not work in safe mode) @set_time_limit(120); @@ -75,32 +65,7 @@ } // include Roundcube Framework -require_once 'Roundcube/bootstrap.php'; - -// register autoloader for rcmail app classes -spl_autoload_register('rcmail_autoload'); - -/** - * PHP5 autoloader routine for dynamic class loading - */ -function rcmail_autoload($classname) -{ - if (strpos($classname, 'rcmail') === 0) { - if (preg_match('/^rcmail_action_([^_]+)_(.*)$/', $classname, $matches)) { - $filepath = INSTALL_PATH . "program/actions/{$matches[1]}/{$matches[2]}.php"; - } - else { - $filepath = INSTALL_PATH . "program/include/$classname.php"; - } - - if (is_readable($filepath)) { - include_once $filepath; - return true; - } - } - - return false; -} +require_once __DIR__ . '/../lib/Roundcube/bootstrap.php'; /** * Show a generic error message on fatal PHP error diff --git a/program/lib/Roundcube/bootstrap.php b/program/lib/Roundcube/bootstrap.php index 2260cff635..5f58a54bb2 100644 --- a/program/lib/Roundcube/bootstrap.php +++ b/program/lib/Roundcube/bootstrap.php @@ -90,19 +90,6 @@ mb_internal_encoding(RCUBE_CHARSET); mb_regex_encoding(RCUBE_CHARSET); -// make sure the Roundcube lib directory is in the include_path -$rcube_path = realpath(RCUBE_LIB_DIR . '..'); -$sep = PATH_SEPARATOR; -$regexp = "!(^|$sep)" . preg_quote($rcube_path, '!') . "($sep|\$)!"; -$path = ini_get('include_path'); - -if (!preg_match($regexp, $path)) { - set_include_path($path . PATH_SEPARATOR . $rcube_path); -} - -// Register autoloader -spl_autoload_register('rcube_autoload'); - // set PEAR error handling (will also load the PEAR main class) if (class_exists('PEAR')) { PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, function($err) { rcube::raise_error($err, true); }); @@ -409,46 +396,3 @@ function version_parse($version) $version ); } - -/** - * Use PHP5 autoload for dynamic class loading - * - * @param string $classname Class name - * - * @return bool True when the class file has been found - * - * @todo Make Zend, PEAR etc play with this - * @todo Make our classes conform to a more straight forward CS. - */ -function rcube_autoload($classname) -{ - if (strpos($classname, 'rcube') === 0) { - $classname = preg_replace('/^rcube_(cache|db|session|spellchecker)_/', '\\1/', $classname); - $classname = 'Roundcube/' . $classname; - } - else if (strpos($classname, 'html_') === 0 || $classname === 'html') { - $classname = 'Roundcube/html'; - } - else if (strpos($classname, 'Mail_') === 0) { - $classname = 'Mail/' . substr($classname, 5); - } - else if (strpos($classname, 'Net_') === 0) { - $classname = 'Net/' . substr($classname, 4); - } - else if (strpos($classname, 'Auth_') === 0) { - $classname = 'Auth/' . substr($classname, 5); - } - - // Translate PHP namespaces into directories, - // i.e. use \Sabre\VObject; $vcf = VObject\Reader::read(...) - // -> Sabre/VObject/Reader.php - $classname = str_replace('\\', '/', $classname); - - if ($fp = @fopen("$classname.php", 'r', true)) { - fclose($fp); - include_once "$classname.php"; - return true; - } - - return false; -} diff --git a/tests/Browser/bootstrap.php b/tests/Browser/bootstrap.php index 8bbe6ae5b6..ac38bee4cc 100644 --- a/tests/Browser/bootstrap.php +++ b/tests/Browser/bootstrap.php @@ -34,16 +34,6 @@ define('TESTS_USER', $rcmail->config->get('tests_username')); define('TESTS_PASS', $rcmail->config->get('tests_password')); -require_once(__DIR__ . '/Browser.php'); -require_once(__DIR__ . '/TestCase.php'); -require_once(__DIR__ . '/Components/App.php'); -require_once(__DIR__ . '/Components/Dialog.php'); -require_once(__DIR__ . '/Components/HtmlEditor.php'); -require_once(__DIR__ . '/Components/Popupmenu.php'); -require_once(__DIR__ . '/Components/RecipientInput.php'); -require_once(__DIR__ . '/Components/Taskmenu.php'); -require_once(__DIR__ . '/Components/Toolbarmenu.php'); - /** * Utilities for test environment setup diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 573eca79fc..886b22569a 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -41,19 +41,6 @@ rcmail::get_instance(0, 'test')->config->set('devel_mode', false); -// Extend include path so some plugin test won't fail -$include_path = ini_get('include_path') . PATH_SEPARATOR . TESTS_DIR . '..'; -if (set_include_path($include_path) === false) { - die("Fatal error: ini_set/set_include_path does not work."); -} - -require_once(TESTS_DIR . 'ActionTestCase.php'); -require_once(TESTS_DIR . 'ExitException.php'); -require_once(TESTS_DIR . 'OutputHtmlMock.php'); -require_once(TESTS_DIR . 'OutputJsonMock.php'); -require_once(TESTS_DIR . 'StderrMock.php'); -require_once(TESTS_DIR . 'StorageMock.php'); - // Initialize database and environment ActionTestCase::init();