From bb4e935303feab93eccb53762bf36a1685961607 Mon Sep 17 00:00:00 2001 From: Dmitriy Simushev Date: Wed, 26 Feb 2014 10:48:08 +0000 Subject: [PATCH] Use interface instead of abstract classes for plugins --- src/mibew/libs/classes/Mibew/Plugin.php | 70 ------------------- .../libs/classes/Mibew/Plugin/Manager.php | 36 +++++----- .../classes/Mibew/Plugin/PluginInterface.php | 59 ++++++++++++++++ 3 files changed, 77 insertions(+), 88 deletions(-) delete mode 100644 src/mibew/libs/classes/Mibew/Plugin.php create mode 100644 src/mibew/libs/classes/Mibew/Plugin/PluginInterface.php diff --git a/src/mibew/libs/classes/Mibew/Plugin.php b/src/mibew/libs/classes/Mibew/Plugin.php deleted file mode 100644 index 35004b58..00000000 --- a/src/mibew/libs/classes/Mibew/Plugin.php +++ /dev/null @@ -1,70 +0,0 @@ - - * public function testListener(&$arguments) { - * $arguments['result'] = 'Test string'; - * } - * - */ - abstract public function registerListeners(); - - /** - * Returns list of plugin's dependences. - * - * Each element of dependenses list is a string with a plugin name. - * If plugin have no dependenses do not override this method. - * - * @return array List of plugin's dependences. - */ - public static function getDependences() - { - return array(); - } -} diff --git a/src/mibew/libs/classes/Mibew/Plugin/Manager.php b/src/mibew/libs/classes/Mibew/Plugin/Manager.php index 0b52380f..2c96dabc 100644 --- a/src/mibew/libs/classes/Mibew/Plugin/Manager.php +++ b/src/mibew/libs/classes/Mibew/Plugin/Manager.php @@ -63,22 +63,22 @@ class Manager * Loads plugins. * * The method checks dependences and plugin avaiulability before loading and - * invokes Plugin::registerListeners() after loading. + * invokes PluginInterface::run() after loading. * * @param array $plugins_list List of plugins' names and configurations. * For example: * * $plugins_list = array(); * $plugins_list[] = array( - * 'name' => 'plugin_name', // Obligatory value - * 'config' => array( // Pass to plugin constructor - * 'weight' => 100, - * 'some_configurable_value' => 'value' - * ) + * 'name' => 'plugin_name', // Obligatory value + * 'config' => array( // Pass to plugin constructor + * 'weight' => 100, + * 'some_configurable_value' => 'value' + * ) * ) * * - * @see Plugin::registerListeners() + * @see \Mibew\Plugin\PluginInterface::run() */ public static function loadPlugins($plugins_list) { @@ -116,22 +116,22 @@ class Manager continue; } // Check if plugin extends abstract 'Plugin' class - if ('Mibew\\Plugin' != get_parent_class($plugin_classname)) { + if (!in_array('Mibew\\Plugin\\PluginInterface', class_implements($plugin_classname))) { $error_essage = "Plugin class '{$plugin_classname}' does not " - . "extend abstract '\\Mibew\\Plugin' class!"; + . "implement '\\Mibew\\Plugin\\PluginInterface' interface!"; trigger_error($error_essage, E_USER_WARNING); continue; } - // Check plugin dependences - $plugin_dependences = call_user_func(array( + // Check plugin dependencies + $plugin_dependencies = call_user_func(array( $plugin_classname, - 'getDependences', + 'getDependencies', )); - foreach ($plugin_dependences as $dependence) { - if (empty(self::$loadedPlugins[$dependence])) { - $error_essage = "Plugin '{$dependence}' was not loaded " - . "yet, but exists in '{$plugin_name}' dependences list!"; + foreach ($plugin_dependencies as $dependency) { + if (empty(self::$loadedPlugins[$dependency])) { + $error_essage = "Plugin '{$dependency}' was not loaded " + . "yet, but exists in '{$plugin_name}' dependencies list!"; trigger_error($error_essage, E_USER_WARNING); continue 2; } @@ -139,7 +139,7 @@ class Manager // Add plugin to loading queue $plugin_instance = new $plugin_classname($plugin_config); - if ($plugin_instance->initialized) { + if ($plugin_instance->initialized()) { // Store plugin instance self::$loadedPlugins[$plugin_name] = $plugin_instance; $loading_queue[$plugin_instance->getWeight() . "_" . $offset] = $plugin_instance; @@ -155,7 +155,7 @@ class Manager uksort($loading_queue, 'strnatcmp'); // Add events and listeners foreach ($loading_queue as $plugin) { - $plugin->registerListeners(); + $plugin->run(); } } } diff --git a/src/mibew/libs/classes/Mibew/Plugin/PluginInterface.php b/src/mibew/libs/classes/Mibew/Plugin/PluginInterface.php new file mode 100644 index 00000000..5672bf9f --- /dev/null +++ b/src/mibew/libs/classes/Mibew/Plugin/PluginInterface.php @@ -0,0 +1,59 @@ +