diff options
Diffstat (limited to 'phpBB/includes/captcha/captcha_factory.php')
| -rw-r--r-- | phpBB/includes/captcha/captcha_factory.php | 49 | 
1 files changed, 23 insertions, 26 deletions
diff --git a/phpBB/includes/captcha/captcha_factory.php b/phpBB/includes/captcha/captcha_factory.php index 131c0b3b77..d57b333c69 100644 --- a/phpBB/includes/captcha/captcha_factory.php +++ b/phpBB/includes/captcha/captcha_factory.php @@ -2,9 +2,8 @@  /**  *  * @package VC -* @version $Id$  * @copyright (c) 2008 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2  *  */ @@ -26,7 +25,7 @@ class phpbb_captcha_factory  	/**  	* return an instance of class $name in file $name_plugin.php  	*/ -	function &get_instance($name) +	public static function get_instance($name)  	{  		global $phpbb_root_path, $phpEx; @@ -59,42 +58,40 @@ class phpbb_captcha_factory  	*/  	function get_captcha_types()  	{ -		global $phpbb_root_path, $phpEx; +		global $phpbb_root_path, $phpEx, $phpbb_extension_manager;  		$captchas = array(  			'available'		=> array(),  			'unavailable'	=> array(),  		); -		$dp = @opendir($phpbb_root_path . 'includes/captcha/plugins'); +		$finder = $phpbb_extension_manager->get_finder(); +		$captcha_plugin_classes = $finder +			->extension_directory('/captcha') +			->suffix('_plugin') +			->core_path('includes/captcha/plugins/') +			->get_classes(); -		if ($dp) +		foreach ($captcha_plugin_classes as $class)  		{ -			while (($file = readdir($dp)) !== false) +			// check if this class needs to be loaded in legacy mode +			$old_class = preg_replace('/^phpbb_captcha_plugins_/', '', $class); +			if (file_exists($phpbb_root_path . "includes/captcha/plugins/$old_class.$phpEx") && !class_exists($old_class))  			{ -				if ((preg_match('#_plugin\.' . $phpEx . '$#', $file))) -				{ -					$name = preg_replace('#^(.*?)_plugin\.' . $phpEx . '$#', '\1', $file); -					if (!class_exists($name)) -					{ -						include($phpbb_root_path . "includes/captcha/plugins/$file"); -					} +				include($phpbb_root_path . "includes/captcha/plugins/$old_class.$phpEx"); +				$class = preg_replace('/_plugin$/', '', $old_class); +			} -					if (call_user_func(array($name, 'is_available'))) -					{ -						$captchas['available'][$name] = call_user_func(array($name, 'get_name')); -					} -					else -					{ -						$captchas['unavailable'][$name] = call_user_func(array($name, 'get_name')); -					} -				} +			if (call_user_func(array($class, 'is_available'))) +			{ +				$captchas['available'][$class] = call_user_func(array($class, 'get_name')); +			} +			else +			{ +				$captchas['unavailable'][$class] = call_user_func(array($class, 'get_name'));  			} -			closedir($dp);  		}  		return $captchas;  	}  } - -?>
\ No newline at end of file  | 
