mirror of
https://github.com/Mibew/mibew.git
synced 2025-02-01 05:44:41 +03:00
Change plugins loading logic
This commit is contained in:
parent
409c455bd1
commit
66c4355ee0
@ -70,8 +70,8 @@ class Manager
|
|||||||
* <code>
|
* <code>
|
||||||
* $plugins_list = array();
|
* $plugins_list = array();
|
||||||
* $plugins_list[] = array(
|
* $plugins_list[] = array(
|
||||||
* 'name' => 'plugin_name', // Obligatory value
|
* 'name' => 'vendor:plugin_name', // Obligatory value
|
||||||
* 'config' => array( // Pass to plugin constructor
|
* 'config' => array( // Pass to plugin constructor
|
||||||
* 'weight' => 100,
|
* 'weight' => 100,
|
||||||
* 'some_configurable_value' => 'value'
|
* 'some_configurable_value' => 'value'
|
||||||
* )
|
* )
|
||||||
@ -82,31 +82,34 @@ class Manager
|
|||||||
*/
|
*/
|
||||||
public static function loadPlugins($plugins_list)
|
public static function loadPlugins($plugins_list)
|
||||||
{
|
{
|
||||||
// Add include path
|
// Load plugins one by one
|
||||||
$include_path = get_include_path();
|
|
||||||
$include_path .= empty($include_path) ? '' : PATH_SEPARATOR;
|
|
||||||
set_include_path($include_path . realpath(MIBEW_FS_ROOT . "/plugins/"));
|
|
||||||
|
|
||||||
// Load plugins
|
|
||||||
$loading_queue = array();
|
$loading_queue = array();
|
||||||
$offset = 0;
|
$offset = 0;
|
||||||
foreach ($plugins_list as $plugin) {
|
foreach ($plugins_list as $plugin) {
|
||||||
if (empty($plugin['name'])) {
|
if (empty($plugin['name'])) {
|
||||||
trigger_error("Plugin name undefined!", E_USER_WARNING);
|
trigger_error("Plugin name is undefined!", E_USER_WARNING);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$plugin_name = $plugin['name'];
|
$plugin_name = $plugin['name'];
|
||||||
|
|
||||||
|
// Split full name to vendor name and short name
|
||||||
|
list($vendor_name, $plugin_short_name) = explode(':', $plugin_name, 2);
|
||||||
|
if (empty($vendor_name) || empty($plugin_short_name)) {
|
||||||
|
trigger_error(
|
||||||
|
"Wrong formated plugin name '" . $plugin_name . "'!",
|
||||||
|
E_USER_WARNING
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$plugin_config = isset($plugin['config']) ? $plugin['config'] : array();
|
$plugin_config = isset($plugin['config']) ? $plugin['config'] : array();
|
||||||
|
|
||||||
// Build name of the plugin class
|
// Build name of the plugin class
|
||||||
$plugin_name_parts = explode('_', $plugin_name);
|
$plugin_name_parts = explode('_', $plugin_short_name);
|
||||||
$plugin_name_parts = array_map('ucfirst', $plugin_name_parts);
|
$plugin_name_parts = array_map('ucfirst', $plugin_name_parts);
|
||||||
$plugin_classname = '\\Mibew\\Plugin\\' . implode('', $plugin_name_parts);
|
$plugin_classname = '\\' . ucfirst($vendor_name)
|
||||||
|
. '\\Mibew\\Plugin\\' . implode('', $plugin_name_parts) . '\\Plugin';
|
||||||
|
|
||||||
// Try to load plugin file
|
|
||||||
if (!(include_once $plugin_name . "/" . $plugin_name . "_plugin.php")) {
|
|
||||||
trigger_error("Cannot load plugin file!", E_USER_ERROR);
|
|
||||||
}
|
|
||||||
// Check plugin class name
|
// Check plugin class name
|
||||||
if (!class_exists($plugin_classname)) {
|
if (!class_exists($plugin_classname)) {
|
||||||
trigger_error(
|
trigger_error(
|
||||||
@ -117,9 +120,9 @@ class Manager
|
|||||||
}
|
}
|
||||||
// Check if plugin extends abstract 'Plugin' class
|
// Check if plugin extends abstract 'Plugin' class
|
||||||
if (!in_array('Mibew\\Plugin\\PluginInterface', class_implements($plugin_classname))) {
|
if (!in_array('Mibew\\Plugin\\PluginInterface', class_implements($plugin_classname))) {
|
||||||
$error_essage = "Plugin class '{$plugin_classname}' does not "
|
$error_message = "Plugin class '{$plugin_classname}' does not "
|
||||||
. "implement '\\Mibew\\Plugin\\PluginInterface' interface!";
|
. "implement '\\Mibew\\Plugin\\PluginInterface' interface!";
|
||||||
trigger_error($error_essage, E_USER_WARNING);
|
trigger_error($error_message, E_USER_WARNING);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,9 +133,9 @@ class Manager
|
|||||||
));
|
));
|
||||||
foreach ($plugin_dependencies as $dependency) {
|
foreach ($plugin_dependencies as $dependency) {
|
||||||
if (empty(self::$loadedPlugins[$dependency])) {
|
if (empty(self::$loadedPlugins[$dependency])) {
|
||||||
$error_essage = "Plugin '{$dependency}' was not loaded "
|
$error_message = "Plugin '{$dependency}' was not loaded "
|
||||||
. "yet, but exists in '{$plugin_name}' dependencies list!";
|
. "yet, but exists in '{$plugin_name}' dependencies list!";
|
||||||
trigger_error($error_essage, E_USER_WARNING);
|
trigger_error($error_message, E_USER_WARNING);
|
||||||
continue 2;
|
continue 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -151,9 +154,8 @@ class Manager
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Sort queue in order to plugins' weights
|
// Sort queue in order to plugins' weights and run plugins one by one
|
||||||
uksort($loading_queue, 'strnatcmp');
|
uksort($loading_queue, 'strnatcmp');
|
||||||
// Add events and listeners
|
|
||||||
foreach ($loading_queue as $plugin) {
|
foreach ($loading_queue as $plugin) {
|
||||||
$plugin->run();
|
$plugin->run();
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,9 @@ require_once(MIBEW_FS_ROOT . '/libs/common/constants.php');
|
|||||||
require_once(MIBEW_FS_ROOT . '/libs/classes/Mibew/Autoloader.php');
|
require_once(MIBEW_FS_ROOT . '/libs/classes/Mibew/Autoloader.php');
|
||||||
Mibew\Autoloader::register(MIBEW_FS_ROOT . '/libs/classes');
|
Mibew\Autoloader::register(MIBEW_FS_ROOT . '/libs/classes');
|
||||||
|
|
||||||
|
// Automatically load plugins
|
||||||
|
Mibew\Autoloader::register(MIBEW_FS_ROOT . '/plugins');
|
||||||
|
|
||||||
// Initialize external dependencies
|
// Initialize external dependencies
|
||||||
require_once(MIBEW_FS_ROOT . '/vendor/autoload.php');
|
require_once(MIBEW_FS_ROOT . '/vendor/autoload.php');
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user