mirror of
				https://github.com/phpbb/phpbb.git
				synced 2025-10-23 04:36:15 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			310 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			310 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
| *
 | |
| * @package phpBB3
 | |
| * @copyright (c) 2011 phpBB Group
 | |
| * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
 | |
| *
 | |
| */
 | |
| 
 | |
| namespace phpbb\avatar;
 | |
| 
 | |
| /**
 | |
| * @package avatar
 | |
| */
 | |
| class manager
 | |
| {
 | |
| 	/**
 | |
| 	* phpBB configuration
 | |
| 	* @var \phpbb\config\config
 | |
| 	*/
 | |
| 	protected $config;
 | |
| 
 | |
| 	/**
 | |
| 	* Array that contains a list of enabled drivers
 | |
| 	* @var array
 | |
| 	*/
 | |
| 	static protected $enabled_drivers = false;
 | |
| 
 | |
| 	/**
 | |
| 	* Array that contains all available avatar drivers which are passed via the
 | |
| 	* service container
 | |
| 	* @var array
 | |
| 	*/
 | |
| 	protected $avatar_drivers;
 | |
| 
 | |
| 	/**
 | |
| 	* Default avatar data row
 | |
| 	* @var array
 | |
| 	*/
 | |
| 	static protected $default_row = array(
 | |
| 		'avatar'		=> '',
 | |
| 		'avatar_type'	=> '',
 | |
| 		'avatar_width'	=> '',
 | |
| 		'avatar_height'	=> '',
 | |
| 	);
 | |
| 
 | |
| 	/**
 | |
| 	* Construct an avatar manager object
 | |
| 	*
 | |
| 	* @param \phpbb\config\config $config phpBB configuration
 | |
| 	* @param array $avatar_drivers Avatar drivers passed via the service container
 | |
| 	*/
 | |
| 	public function __construct(\phpbb\config\config $config, $avatar_drivers)
 | |
| 	{
 | |
| 		$this->config = $config;
 | |
| 		$this->register_avatar_drivers($avatar_drivers);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Register avatar drivers
 | |
| 	*
 | |
| 	* @param array $avatar_drivers Service collection of avatar drivers
 | |
| 	*/
 | |
| 	protected function register_avatar_drivers($avatar_drivers)
 | |
| 	{
 | |
| 		if (!empty($avatar_drivers))
 | |
| 		{
 | |
| 			foreach ($avatar_drivers as $driver)
 | |
| 			{
 | |
| 				$this->avatar_drivers[$driver->get_name()] = $driver;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get the driver object specified by the avatar type
 | |
| 	*
 | |
| 	* @param string $avatar_type Avatar type; by default an avatar's service container name
 | |
| 	* @param bool $load_enabled Load only enabled avatars
 | |
| 	*
 | |
| 	* @return object Avatar driver object
 | |
| 	*/
 | |
| 	public function get_driver($avatar_type, $load_enabled = true)
 | |
| 	{
 | |
| 		if (self::$enabled_drivers === false)
 | |
| 		{
 | |
| 			$this->load_enabled_drivers();
 | |
| 		}
 | |
| 
 | |
| 		$avatar_drivers = ($load_enabled) ? self::$enabled_drivers : $this->get_all_drivers();
 | |
| 
 | |
| 		// Legacy stuff...
 | |
| 		switch ($avatar_type)
 | |
| 		{
 | |
| 			case AVATAR_GALLERY:
 | |
| 				$avatar_type = 'avatar.driver.local';
 | |
| 			break;
 | |
| 			case AVATAR_UPLOAD:
 | |
| 				$avatar_type = 'avatar.driver.upload';
 | |
| 			break;
 | |
| 			case AVATAR_REMOTE:
 | |
| 				$avatar_type = 'avatar.driver.remote';
 | |
| 			break;
 | |
| 		}
 | |
| 
 | |
| 		if (!isset($avatar_drivers[$avatar_type]))
 | |
| 		{
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		/*
 | |
| 		* There is no need to handle invalid avatar types as the following code
 | |
| 		* will cause a ServiceNotFoundException if the type does not exist
 | |
| 		*/
 | |
| 		$driver = $this->avatar_drivers[$avatar_type];
 | |
| 
 | |
| 		return $driver;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Load the list of enabled drivers
 | |
| 	* This is executed once and fills self::$enabled_drivers
 | |
| 	*/
 | |
| 	protected function load_enabled_drivers()
 | |
| 	{
 | |
| 		if (!empty($this->avatar_drivers))
 | |
| 		{
 | |
| 			self::$enabled_drivers = array();
 | |
| 			foreach ($this->avatar_drivers as $driver)
 | |
| 			{
 | |
| 				if ($this->is_enabled($driver))
 | |
| 				{
 | |
| 					self::$enabled_drivers[$driver->get_name()] = $driver->get_name();
 | |
| 				}
 | |
| 			}
 | |
| 			asort(self::$enabled_drivers);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get a list of all avatar drivers
 | |
| 	*
 | |
| 	* As this function will only be called in the ACP avatar settings page, it
 | |
| 	* doesn't make much sense to cache the list of all avatar drivers like the
 | |
| 	* list of the enabled drivers.
 | |
| 	*
 | |
| 	* @return array Array containing a list of all avatar drivers
 | |
| 	*/
 | |
| 	public function get_all_drivers()
 | |
| 	{
 | |
| 		$drivers = array();
 | |
| 
 | |
| 		if (!empty($this->avatar_drivers))
 | |
| 		{
 | |
| 			foreach ($this->avatar_drivers as $driver)
 | |
| 			{
 | |
| 				$drivers[$driver->get_name()] = $driver->get_name();
 | |
| 			}
 | |
| 			asort($drivers);
 | |
| 		}
 | |
| 
 | |
| 		return $drivers;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get a list of enabled avatar drivers
 | |
| 	*
 | |
| 	* @return array Array containing a list of the enabled avatar drivers
 | |
| 	*/
 | |
| 	public function get_enabled_drivers()
 | |
| 	{
 | |
| 		if (self::$enabled_drivers === false)
 | |
| 		{
 | |
| 			$this->load_enabled_drivers();
 | |
| 		}
 | |
| 
 | |
| 		return self::$enabled_drivers;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Strip out user_, group_, or other prefixes from array keys
 | |
| 	*
 | |
| 	* @param array	$row			User data or group data
 | |
| 	* @param string $prefix			Prefix of data keys (e.g. user), should not include the trailing underscore
 | |
| 	*
 | |
| 	* @return array	User or group data with keys that have been
 | |
| 	*			stripped from the preceding "user_" or "group_"
 | |
| 	*			Also the group id is prefixed with g, when the prefix group is removed.
 | |
| 	*/
 | |
| 	static public function clean_row($row, $prefix = '')
 | |
| 	{
 | |
| 		// Upon creation of a user/group $row might be empty
 | |
| 		if (empty($row))
 | |
| 		{
 | |
| 			return self::$default_row;
 | |
| 		}
 | |
| 
 | |
| 		$output = array();
 | |
| 		foreach ($row as $key => $value)
 | |
| 		{
 | |
| 			$key = preg_replace("#^(?:{$prefix}_)#", '', $key);
 | |
| 			$output[$key] = $value;
 | |
| 		}
 | |
| 
 | |
| 		if ($prefix === 'group' && isset($output['id']))
 | |
| 		{
 | |
| 			$output['id'] = 'g' . $output['id'];
 | |
| 		}
 | |
| 
 | |
| 		return $output;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Clean driver names that are returned from template files
 | |
| 	* Underscores are replaced with dots
 | |
| 	*
 | |
| 	* @param string $name Driver name
 | |
| 	*
 | |
| 	* @return string Cleaned driver name
 | |
| 	*/
 | |
| 	static public function clean_driver_name($name)
 | |
| 	{
 | |
| 		return str_replace(array('\\', '_'), '.', $name);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Prepare driver names for use in template files
 | |
| 	* Dots are replaced with underscores
 | |
| 	*
 | |
| 	* @param string $name Clean driver name
 | |
| 	*
 | |
| 	* @return string Prepared driver name
 | |
| 	*/
 | |
| 	static public function prepare_driver_name($name)
 | |
| 	{
 | |
| 		return str_replace('.', '_', $name);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Check if avatar is enabled
 | |
| 	*
 | |
| 	* @param object $driver Avatar driver object
 | |
| 	*
 | |
| 	* @return bool True if avatar is enabled, false if it's disabled
 | |
| 	*/
 | |
| 	public function is_enabled($driver)
 | |
| 	{
 | |
| 		$config_name = $this->get_driver_config_name($driver);
 | |
| 
 | |
| 		return $this->config["allow_avatar_{$config_name}"];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get the settings array for enabling/disabling an avatar driver
 | |
| 	*
 | |
| 	* @param object $driver Avatar driver object
 | |
| 	*
 | |
| 	* @return array Array of configuration options as consumed by acp_board
 | |
| 	*/
 | |
| 	public function get_avatar_settings($driver)
 | |
| 	{
 | |
| 		$config_name = $this->get_driver_config_name($driver);
 | |
| 
 | |
| 		return array(
 | |
| 			'allow_avatar_' . $config_name	=> array('lang' => 'ALLOW_' . strtoupper(str_replace('\\', '_', $config_name)),		'validate' => 'bool',	'type' => 'radio:yes_no', 'explain' => false),
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Get the config name of an avatar driver
 | |
| 	*
 | |
| 	* @param object $driver Avatar driver object
 | |
| 	*
 | |
| 	* @return string Avatar driver config name
 | |
| 	*/
 | |
| 	public function get_driver_config_name($driver)
 | |
| 	{
 | |
| 		return preg_replace('#^phpbb\\\\avatar\\\\driver\\\\#', '', get_class($driver));
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	* Replace "error" strings with their real, localized form
 | |
| 	*
 | |
| 	* @param \phpbb\user phpBB User object
 | |
| 	* @param array	$error Array containing error strings
 | |
| 	*        Key values can either be a string with a language key or an array
 | |
| 	*        that will be passed to vsprintf() with the language key in the
 | |
| 	*        first array key.
 | |
| 	*
 | |
| 	* @return array Array containing the localized error strings
 | |
| 	*/
 | |
| 	public function localize_errors(\phpbb\user $user, $error)
 | |
| 	{
 | |
| 		foreach ($error as $key => $lang)
 | |
| 		{
 | |
| 			if (is_array($lang))
 | |
| 			{
 | |
| 				$lang_key = array_shift($lang);
 | |
| 				$error[$key] = vsprintf($user->lang($lang_key), $lang);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				$error[$key] = $user->lang("$lang");
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return $error;
 | |
| 	}
 | |
| }
 |