Skip to content

Commit

Permalink
Replace custom loader in favor of composer native
Browse files Browse the repository at this point in the history
  • Loading branch information
mvorisek committed Apr 4, 2024
1 parent d6b6ea2 commit b4ca4e9
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 110 deletions.
12 changes: 12 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,18 @@
"url": "https://plugins.roundcube.net"
}
],
"autoload": {
"classmap": [
"program/actions/",
"program/include/",
"program/lib/"
]
},
"autoload-dev": {
"classmap": [
"tests/"
]
},
"config": {
"allow-plugins": {
"ergebnis/composer-normalize": true,
Expand Down
36 changes: 1 addition & 35 deletions program/include/iniset.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
exit('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);
Expand All @@ -75,31 +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
Expand Down
52 changes: 0 additions & 52 deletions program/lib/Roundcube/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,19 +92,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')) {
// @phpstan-ignore-next-line
Expand Down Expand Up @@ -403,42 +390,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;
} elseif (strpos($classname, 'html_') === 0 || $classname === 'html') {
$classname = 'Roundcube/html';
} elseif (strpos($classname, 'Mail_') === 0) {
$classname = 'Mail/' . substr($classname, 5);
} elseif (strpos($classname, 'Net_') === 0) {
$classname = 'Net/' . substr($classname, 4);
} elseif (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;
}
10 changes: 0 additions & 10 deletions tests/Browser/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down
13 changes: 0 additions & 13 deletions tests/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,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) {
exit('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();

Expand Down

0 comments on commit b4ca4e9

Please sign in to comment.