From a63f4ced3d204c15b00f192bab4fe53acf1cf085 Mon Sep 17 00:00:00 2001 From: Dmitriy Simushev Date: Wed, 19 Nov 2014 14:19:01 +0000 Subject: [PATCH] Create a method for plugin class name building --- .../classes/Mibew/Plugin/PluginManager.php | 7 ++-- src/mibew/libs/classes/Mibew/Plugin/Utils.php | 33 +++++++++++++++---- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/mibew/libs/classes/Mibew/Plugin/PluginManager.php b/src/mibew/libs/classes/Mibew/Plugin/PluginManager.php index 5c606bb4..bc4463e6 100644 --- a/src/mibew/libs/classes/Mibew/Plugin/PluginManager.php +++ b/src/mibew/libs/classes/Mibew/Plugin/PluginManager.php @@ -121,6 +121,7 @@ class PluginManager continue; } $plugin_name = $plugin['name']; + $plugin_config = isset($plugin['config']) ? $plugin['config'] : array(); // Get vendor name and short name from plugin's name if (!Utils::isValidPluginName($plugin_name)) { @@ -130,13 +131,9 @@ class PluginManager ); continue; } - list($vendor_name, $plugin_short_name) = explode(':', $plugin_name, 2); - - $plugin_config = isset($plugin['config']) ? $plugin['config'] : array(); // Build name of the plugin class - $plugin_classname = '\\' . $vendor_name - . '\\Mibew\\Plugin\\' . $plugin_short_name . '\\Plugin'; + $plugin_classname = Utils::getPluginClassName($plugin_name); // Check plugin class name if (!class_exists($plugin_classname)) { diff --git a/src/mibew/libs/classes/Mibew/Plugin/Utils.php b/src/mibew/libs/classes/Mibew/Plugin/Utils.php index 4b97701b..ef3197ae 100644 --- a/src/mibew/libs/classes/Mibew/Plugin/Utils.php +++ b/src/mibew/libs/classes/Mibew/Plugin/Utils.php @@ -45,22 +45,23 @@ class Utils $plugins = array(); foreach (glob($pattern) as $plugin_file) { + // Build plugin's name and validate it. $parts = array_reverse(explode(DIRECTORY_SEPARATOR, $plugin_file)); - $plugin = $parts[1]; - $vendor = $parts[4]; + $plugin_name = $parts[4] . ':' . $parts[1]; + if (!self::isValidPluginName($plugin_name)) { + continue; + } - $class_name = '\\' . $vendor . '\\Mibew\\Plugin\\' . $plugin . '\\Plugin'; - - // Check plugin class name + // Make sure we found a plugin. + $class_name = self::getPluginClassName($plugin_name); if (!class_exists($class_name)) { continue; } - // Check if plugin implements 'Plugin' interface if (!in_array('Mibew\\Plugin\\PluginInterface', class_implements($class_name))) { continue; } - $plugins[] = $vendor . ':' . $plugin; + $plugins[] = $plugin_name; } return $plugins; @@ -77,6 +78,24 @@ class Utils return (preg_match(self::pluginNameRegExp, $name) != 0); } + /** + * Builds class name for a plugin with the specified name. + * + * @param string $plugin_name Plugin's name in "Vendor:Name" format. + * @return string Fully qualified class name for the plugin. + * @throws \InvalidArgumentException If the passed in plugin name is + * invalid. + */ + public static function getPluginClassName($plugin_name) + { + if (!self::isValidPluginName($plugin_name)) { + throw new \InvalidArgumentException('Wrong formated plugin name'); + } + list($vendor, $short_name) = explode(':', $plugin_name, 2); + + return '\\' . $vendor . '\\Mibew\\Plugin\\' . $short_name . '\\Plugin'; + } + /** * This class should not be instantiated */