X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2FPluginManager.php;h=787ac6a930f63f4c1245a3178b6de444be6569a9;hb=ce354bf1a61ce2478529ad558b24cdf9678c398a;hp=e572ff7cc63df8bb8b42895904601b891811ed6a;hpb=6fc14d530369740d27d6bd641369d4f5f5f04080;p=github%2Fshaarli%2FShaarli.git diff --git a/application/PluginManager.php b/application/PluginManager.php index e572ff7c..787ac6a9 100644 --- a/application/PluginManager.php +++ b/application/PluginManager.php @@ -33,6 +33,12 @@ class PluginManager */ public static $PLUGINS_PATH = 'plugins'; + /** + * Plugins meta files extension. + * @var string $META_EXT + */ + public static $META_EXT = 'meta'; + /** * Private constructor: new instances not allowed. */ @@ -99,7 +105,7 @@ class PluginManager * @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 */ public function executeHooks($hook, &$data, $params = array()) @@ -162,6 +168,51 @@ class PluginManager { return 'hook_' . $pluginName . '_' . $hook; } + + /** + * Retrieve plugins metadata from *.meta (INI) files into an array. + * Metadata contains: + * - plugin description [description] + * - parameters split with ';' [parameters] + * + * Respects plugins order from settings. + * + * @return array plugins metadata. + */ + public function getPluginsMeta() + { + $metaData = array(); + $dirs = glob(self::$PLUGINS_PATH . '/*', GLOB_ONLYDIR | GLOB_MARK); + + // Browse all plugin directories. + foreach ($dirs as $pluginDir) { + $plugin = basename($pluginDir); + $metaFile = $pluginDir . $plugin . '.' . self::$META_EXT; + if (!is_file($metaFile) || !is_readable($metaFile)) { + continue; + } + + $metaData[$plugin] = parse_ini_file($metaFile); + $metaData[$plugin]['order'] = array_search($plugin, $this->authorizedPlugins); + + // Read parameters and format them into an array. + if (isset($metaData[$plugin]['parameters'])) { + $params = explode(';', $metaData[$plugin]['parameters']); + } else { + $params = array(); + } + $metaData[$plugin]['parameters'] = array(); + foreach ($params as $param) { + if (empty($param)) { + continue; + } + + $metaData[$plugin]['parameters'][$param] = ''; + } + } + + return $metaData; + } } /**