]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - application/plugin/PluginManager.php
Apply PHP Code Beautifier on source code for linter automatic fixes
[github/shaarli/Shaarli.git] / application / plugin / PluginManager.php
index b3e8b2f8e28c0ebdd9def9e8d7f8df00c7f4e903..3ea55728cc4c9b6af22d88da6f92e533b270069c 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace Shaarli\Plugin;
 
 use Shaarli\Config\ConfigManager;
@@ -23,7 +24,7 @@ class PluginManager
      *
      * @var array $loadedPlugins
      */
-    private $loadedPlugins = array();
+    private $loadedPlugins = [];
 
     /**
      * @var ConfigManager Configuration Manager instance.
@@ -57,7 +58,7 @@ class PluginManager
     public function __construct(&$conf)
     {
         $this->conf = $conf;
-        $this->errors = array();
+        $this->errors = [];
     }
 
     /**
@@ -98,27 +99,38 @@ class PluginManager
      *
      * @return void
      */
-    public function executeHooks($hook, &$data, $params = array())
+    public function executeHooks($hook, &$data, $params = [])
     {
-        if (!empty($params['target'])) {
-            $data['_PAGE_'] = $params['target'];
-        }
-
-        if (isset($params['loggedin'])) {
-            $data['_LOGGEDIN_'] = $params['loggedin'];
-        }
-
-        if (isset($params['basePath'])) {
-            $data['_BASE_PATH_'] = $params['basePath'];
+        $metadataParameters = [
+            'target' => '_PAGE_',
+            'loggedin' => '_LOGGEDIN_',
+            'basePath' => '_BASE_PATH_',
+            'rootPath' => '_ROOT_PATH_',
+            'bookmarkService' => '_BOOKMARK_SERVICE_',
+        ];
+
+        foreach ($metadataParameters as $parameter => $metaKey) {
+            if (array_key_exists($parameter, $params)) {
+                $data[$metaKey] = $params[$parameter];
+            }
         }
 
         foreach ($this->loadedPlugins as $plugin) {
             $hookFunction = $this->buildHookName($hook, $plugin);
 
             if (function_exists($hookFunction)) {
-                $data = call_user_func($hookFunction, $data, $this->conf);
+                try {
+                    $data = call_user_func($hookFunction, $data, $this->conf);
+                } catch (\Throwable $e) {
+                    $error = $plugin . t(' [plugin incompatibility]: ') . $e->getMessage();
+                    $this->errors = array_unique(array_merge($this->errors, [$error]));
+                }
             }
         }
+
+        foreach ($metadataParameters as $metaKey) {
+            unset($data[$metaKey]);
+        }
     }
 
     /**
@@ -185,7 +197,7 @@ class PluginManager
      */
     public function getPluginsMeta()
     {
-        $metaData = array();
+        $metaData = [];
         $dirs = glob(self::$PLUGINS_PATH . '/*', GLOB_ONLYDIR | GLOB_MARK);
 
         // Browse all plugin directories.
@@ -206,9 +218,9 @@ class PluginManager
             if (isset($metaData[$plugin]['parameters'])) {
                 $params = explode(';', $metaData[$plugin]['parameters']);
             } else {
-                $params = array();
+                $params = [];
             }
-            $metaData[$plugin]['parameters'] = array();
+            $metaData[$plugin]['parameters'] = [];
             foreach ($params as $param) {
                 if (empty($param)) {
                     continue;