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 Dec 8, 2023
1 parent 318f128 commit 534ae0b
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 115 deletions.
12 changes: 12 additions & 0 deletions composer.json-dist
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
37 changes: 1 addition & 36 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) {
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);
Expand All @@ -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
Expand Down
56 changes: 0 additions & 56 deletions program/lib/Roundcube/bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -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); });
Expand Down Expand Up @@ -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;
}
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 @@ -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();

Expand Down

0 comments on commit 534ae0b

Please sign in to comment.