From 51def0d84955c7a951bd091eb5eeb3fce9deabd4 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Thu, 9 Jun 2016 20:04:32 +0200 Subject: PluginManager no longer uses singleton pattern --- application/PluginManager.php | 50 ++++++++++++------------------------------- 1 file changed, 14 insertions(+), 36 deletions(-) (limited to 'application/PluginManager.php') diff --git a/application/PluginManager.php b/application/PluginManager.php index 787ac6a9..dca7e63e 100644 --- a/application/PluginManager.php +++ b/application/PluginManager.php @@ -4,17 +4,9 @@ * Class PluginManager * * Use to manage, load and execute plugins. - * - * Using Singleton design pattern. */ class PluginManager { - /** - * PluginManager singleton instance. - * @var PluginManager $instance - */ - private static $instance; - /** * List of authorized plugins from configuration file. * @var array $authorizedPlugins @@ -27,6 +19,11 @@ class PluginManager */ private $loadedPlugins = array(); + /** + * @var ConfigManager Configuration Manager instance. + */ + protected $conf; + /** * Plugins subdirectory. * @var string $PLUGINS_PATH @@ -40,33 +37,13 @@ class PluginManager public static $META_EXT = 'meta'; /** - * Private constructor: new instances not allowed. - */ - private function __construct() - { - } - - /** - * Cloning isn't allowed either. - * - * @return void - */ - private function __clone() - { - } - - /** - * Return existing instance of PluginManager, or create it. + * Constructor. * - * @return PluginManager instance. + * @param ConfigManager $conf Configuration Manager instance. */ - public static function getInstance() + public function __construct(&$conf) { - if (!(self::$instance instanceof self)) { - self::$instance = new self(); - } - - return self::$instance; + $this->conf = $conf; } /** @@ -102,9 +79,9 @@ class PluginManager /** * Execute all plugins registered hook. * - * @param string $hook name of the hook to trigger. - * @param array $data list of data to manipulate passed by reference. - * @param array $params additional parameters such as page target. + * @param string $hook name of the hook to trigger. + * @param array $data list of data to manipulate passed by reference. + * @param array $params additional parameters such as page target. * * @return void */ @@ -122,7 +99,7 @@ class PluginManager $hookFunction = $this->buildHookName($hook, $plugin); if (function_exists($hookFunction)) { - $data = call_user_func($hookFunction, $data); + $data = call_user_func($hookFunction, $data, $this->conf); } } } @@ -148,6 +125,7 @@ class PluginManager throw new PluginFileNotFoundException($pluginName); } + $conf = $this->conf; include_once $pluginFilePath; $this->loadedPlugins[] = $pluginName; -- cgit v1.2.3 From 15170b516429341ae8e1a9ad2111be5ef90bf6aa Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Tue, 2 Aug 2016 11:02:20 +0200 Subject: Parse plugin parameters description with the PluginManager Plugin parameter can contain a description in their meta file under the key: parameter.="" --- application/PluginManager.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'application/PluginManager.php') diff --git a/application/PluginManager.php b/application/PluginManager.php index dca7e63e..07bc1da9 100644 --- a/application/PluginManager.php +++ b/application/PluginManager.php @@ -185,7 +185,11 @@ class PluginManager continue; } - $metaData[$plugin]['parameters'][$param] = ''; + $metaData[$plugin]['parameters'][$param]['value'] = ''; + // Optional parameter description in parameter.PARAM_NAME= + if (isset($metaData[$plugin]['parameter.'. $param])) { + $metaData[$plugin]['parameters'][$param]['desc'] = $metaData[$plugin]['parameter.'. $param]; + } } } -- cgit v1.2.3 From db6dec0de10d0ee3b35658ae9f431935d17e8a7c Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Sat, 13 Aug 2016 14:22:22 +0200 Subject: Fix: add missing final newlines, untabify text Signed-off-by: VirtualTam --- application/PluginManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'application/PluginManager.php') diff --git a/application/PluginManager.php b/application/PluginManager.php index dca7e63e..1afc8d5c 100644 --- a/application/PluginManager.php +++ b/application/PluginManager.php @@ -210,4 +210,4 @@ class PluginFileNotFoundException extends Exception { $this->message = 'Plugin "'. $pluginName .'" files not found.'; } -} \ No newline at end of file +} -- cgit v1.2.3 From 7fde6de1212323418401c15efba06026c704ca87 Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Fri, 14 Oct 2016 13:22:58 +0200 Subject: New init function for plugins, supports errors reporting All plugins can optionally add an init function named `pluginname_init()` which is called when the plugin is loaded. This function is aware of the config, and can return initialization errors, which are displayed in the header template. Note that the previous error system hack no longer work. --- application/PluginManager.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'application/PluginManager.php') diff --git a/application/PluginManager.php b/application/PluginManager.php index 1e132a7f..59ece4fa 100644 --- a/application/PluginManager.php +++ b/application/PluginManager.php @@ -24,6 +24,11 @@ class PluginManager */ protected $conf; + /** + * @var array List of plugin errors. + */ + protected $errors; + /** * Plugins subdirectory. * @var string $PLUGINS_PATH @@ -44,6 +49,7 @@ class PluginManager public function __construct(&$conf) { $this->conf = $conf; + $this->errors = array(); } /** @@ -106,6 +112,7 @@ class PluginManager /** * Load a single plugin from its files. + * Call the init function if it exists, and collect errors. * Add them in $loadedPlugins if successful. * * @param string $dir plugin's directory. @@ -128,6 +135,14 @@ class PluginManager $conf = $this->conf; include_once $pluginFilePath; + $initFunction = $pluginName . '_init'; + if (function_exists($initFunction)) { + $errors = call_user_func($initFunction, $this->conf); + if (!empty($errors)) { + $this->errors = array_merge($this->errors, $errors); + } + } + $this->loadedPlugins[] = $pluginName; } @@ -195,6 +210,16 @@ class PluginManager return $metaData; } + + /** + * Return the list of encountered errors. + * + * @return array List of errors (empty array if none exists). + */ + public function getErrors() + { + return $this->errors; + } } /** -- cgit v1.2.3