]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - application/PluginManager.php
Fixes #378 - Plugin administration UI.
[github/shaarli/Shaarli.git] / application / PluginManager.php
index 803f11b4b707000a6bdab1235ee6ab49655ac8db..787ac6a930f63f4c1245a3178b6de444be6569a9 100644 (file)
@@ -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.
      */
@@ -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;
+    }
 }
 
 /**