. */ namespace SP\Core\Plugin; use ReflectionClass; use SP\Core\Exceptions\SPException; use SP\Core\Session; use SP\Log\Log; use SP\Mgmt\Plugins\Plugin; /** * Class PluginUtil * * @package SP\Core\Plugin */ class PluginUtil { /** * @var array Plugins habilitados */ private static $enabledPlugins; /** * @var PluginInterface[] Plugins ya cargados */ private static $loadedPlugins = []; /** * @var array Plugins deshabilitados */ private static $disabledPlugins = []; /** * Devuelve la lista de Plugins disponibles * * @return array */ public static function getPlugins() { $pluginDirH = opendir(PLUGINS_PATH); $plugins = []; if ($pluginDirH) { while (false !== ($entry = readdir($pluginDirH))) { if (strpos($entry, '.') === false && is_dir(PLUGINS_PATH . '/' . $entry) ) { $plugins[] = $entry; } } closedir($pluginDirH); } return $plugins; } /** * Cargar un plugin * * @param string $name Nombre del plugin * @return bool|PluginInterface * @throws \SP\Core\Exceptions\SPException */ public static function loadPlugin($name) { $name = ucfirst($name); if (in_array($name, Session::getPluginsDisabled(), true)) { return false; } if (isset(self::$loadedPlugins[$name])) { return self::$loadedPlugins[$name]; } try { $pluginClass = 'Plugins\\' . $name . '\\' . $name . 'Plugin'; $Reflection = new ReflectionClass($pluginClass); /** @var PluginInterface $Plugin */ $Plugin = $Reflection->newInstance(); if (PluginDataStore::load($Plugin) === true) { self::$loadedPlugins[$name] = $Plugin; return $Plugin; } self::$disabledPlugins[] = $name; } catch (\ReflectionException $e) { Log::writeNewLog(__FUNCTION__, sprintf(__('No es posible cargar el plugin "%s"'), $name)); } catch (SPException $e) { Log::writeNewLog(__FUNCTION__, sprintf(__('No es posible cargar el plugin "%s"'), $name)); } return false; } /** * Devolver los plugins cargados * * @return PluginInterface[] */ public static function getLoadedPlugins() { return self::$loadedPlugins; } /** * Devolver los plugins deshabilidatos * * @return string[] */ public static function getDisabledPlugins() { return self::$disabledPlugins; } /** * Obtener la información de un plugin * * @param string $name Nombre del plugin * @return bool|PluginInterface * @throws \SP\Core\Exceptions\SPException */ public static function getPluginInfo($name) { $name = ucfirst($name); $pluginClass = 'Plugins\\' . $name . '\\' . $name . 'Plugin'; if (isset(self::$loadedPlugins[$name])) { return self::$loadedPlugins[$name]; } try { $Reflection = new \ReflectionClass($pluginClass); /** @var PluginBase $Plugin */ $Plugin = $Reflection->newInstance(); self::$loadedPlugins[$name] = $Plugin; return $Plugin; } catch (\ReflectionException $e) { Log::writeNewLog(__FUNCTION__, sprintf(__('No es posible cargar el plugin "%s"'), $name)); } return false; } /** * Devolver los plugins habilidatos * * @return PluginInterface[] */ public static function getEnabledPlugins() { if (self::$enabledPlugins !== null) { return self::$enabledPlugins; } foreach (Plugin::getItem()->getEnabled() as $plugin) { self::$enabledPlugins[] = $plugin->plugin_name; } return self::$enabledPlugins; } }