From 14dc274e9e3568a276c654b0845252019525fb6f Mon Sep 17 00:00:00 2001 From: javiexin Date: Thu, 16 Jul 2015 10:47:04 +0200 Subject: [PATCH 1/4] [ticket/14387] Extend avatar-driver by extension in ACP not possible Create a driver method to provide the driver config name, and use it within the manager method. Default driver config name is the same as now. But new drivers are able to override the config name with their own. PHPBB3-14387 --- phpBB/phpbb/avatar/driver/driver.php | 8 ++++++++ phpBB/phpbb/avatar/driver/driver_interface.php | 7 +++++++ phpBB/phpbb/avatar/manager.php | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/phpBB/phpbb/avatar/driver/driver.php b/phpBB/phpbb/avatar/driver/driver.php index b3ced7edf7..a23b626e50 100644 --- a/phpBB/phpbb/avatar/driver/driver.php +++ b/phpBB/phpbb/avatar/driver/driver.php @@ -119,6 +119,14 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface return $this->name; } + /** + * {@inheritdoc} + */ + public function get_config_name() + { + return preg_replace('#^phpbb\\\\avatar\\\\driver\\\\#', '', get_class($this)); + } + /** * Sets the name of the driver. * diff --git a/phpBB/phpbb/avatar/driver/driver_interface.php b/phpBB/phpbb/avatar/driver/driver_interface.php index 835609745a..d984717d74 100644 --- a/phpBB/phpbb/avatar/driver/driver_interface.php +++ b/phpBB/phpbb/avatar/driver/driver_interface.php @@ -25,6 +25,13 @@ interface driver_interface */ public function get_name(); + /** + * Returns the config name of the driver. To be used in accessing the CONFIG variables. + * + * @return string Config name of driver. + */ + public function get_config_name(); + /** * Get the avatar url and dimensions * diff --git a/phpBB/phpbb/avatar/manager.php b/phpBB/phpbb/avatar/manager.php index 8d83152ed6..5274ac6a26 100644 --- a/phpBB/phpbb/avatar/manager.php +++ b/phpBB/phpbb/avatar/manager.php @@ -276,7 +276,7 @@ class manager */ public function get_driver_config_name($driver) { - return preg_replace('#^phpbb\\\\avatar\\\\driver\\\\#', '', get_class($driver)); + return $driver->get_config_name(); } /** From 06f4b6926baaf27897b2f57f7938eed4acf5dedb Mon Sep 17 00:00:00 2001 From: javiexin Date: Thu, 30 Jul 2015 01:43:18 +0200 Subject: [PATCH 2/4] [ticket/14387] Extend avatar-driver by extension in ACP not possible Create two driver methods to provide the driver config name and the driver ACP template name, and use them within the manager method. Default driver config name and template name are the same as now. But new drivers are able to override the config name and template name with their own, including @vendor_extension. PHPBB3-14387 --- phpBB/includes/acp/acp_groups.php | 4 ++-- phpBB/includes/acp/acp_users.php | 4 ++-- phpBB/phpbb/avatar/driver/driver.php | 8 ++++++++ phpBB/phpbb/avatar/driver/driver_interface.php | 7 +++++++ phpBB/phpbb/avatar/manager.php | 12 ++++++++++++ 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php index befbcdf24a..3abae28c72 100644 --- a/phpBB/includes/acp/acp_groups.php +++ b/phpBB/includes/acp/acp_groups.php @@ -672,9 +672,9 @@ class acp_groups $driver = $phpbb_avatar_manager->get_driver($current_driver); $avatars_enabled = true; - $config_name = $phpbb_avatar_manager->get_driver_config_name($driver); + $template_name = $phpbb_avatar_manager->get_driver_template_name($driver); $template->set_filenames(array( - 'avatar' => "acp_avatar_options_{$config_name}.html", + 'avatar' => $template_name, )); if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error)) diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 4d0bbf5721..ac31ac36a1 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1878,9 +1878,9 @@ class acp_users $driver = $phpbb_avatar_manager->get_driver($current_driver); $avatars_enabled = true; - $config_name = $phpbb_avatar_manager->get_driver_config_name($driver); + $template_name = $phpbb_avatar_manager->get_driver_template_name($driver); $template->set_filenames(array( - 'avatar' => "acp_avatar_options_{$config_name}.html", + 'avatar' => $template_name, )); if ($driver->prepare_form($request, $template, $user, $avatar_data, $error)) diff --git a/phpBB/phpbb/avatar/driver/driver.php b/phpBB/phpbb/avatar/driver/driver.php index a23b626e50..ad186635f2 100644 --- a/phpBB/phpbb/avatar/driver/driver.php +++ b/phpBB/phpbb/avatar/driver/driver.php @@ -127,6 +127,14 @@ abstract class driver implements \phpbb\avatar\driver\driver_interface return preg_replace('#^phpbb\\\\avatar\\\\driver\\\\#', '', get_class($this)); } + /** + * {@inheritdoc} + */ + public function get_acp_template_name() + { + return 'acp_avatar_options_' . $this->get_config_name() . '.html'; + } + /** * Sets the name of the driver. * diff --git a/phpBB/phpbb/avatar/driver/driver_interface.php b/phpBB/phpbb/avatar/driver/driver_interface.php index d984717d74..7d6c2cff8a 100644 --- a/phpBB/phpbb/avatar/driver/driver_interface.php +++ b/phpBB/phpbb/avatar/driver/driver_interface.php @@ -117,4 +117,11 @@ interface driver_interface * @return string Avatar driver's template name */ public function get_template_name(); + + /** + * Get the avatar driver's template name (ACP) + * + * @return string Avatar driver's template name + */ + public function get_acp_template_name(); } diff --git a/phpBB/phpbb/avatar/manager.php b/phpBB/phpbb/avatar/manager.php index 5274ac6a26..5db9ab13fb 100644 --- a/phpBB/phpbb/avatar/manager.php +++ b/phpBB/phpbb/avatar/manager.php @@ -279,6 +279,18 @@ class manager return $driver->get_config_name(); } + /** + * Get the template name of an avatar driver + * + * @param object $driver Avatar driver object + * + * @return string Avatar driver template name + */ + public function get_driver_template_name($driver) + { + return $driver->get_acp_template_name(); + } + /** * Replace "error" strings with their real, localized form * From 917c864bbf51309da4c8bda7ad03e1e00afc0764 Mon Sep 17 00:00:00 2001 From: javiexin Date: Thu, 30 Jul 2015 10:48:39 +0200 Subject: [PATCH 3/4] [ticket/14387] Extend avatar-driver by extension in ACP not possible Create two driver methods to provide the driver config name and the driver ACP template name, and use them directly when required. Default driver config name and template name are the same as now. But new drivers are able to override the config name and template name with their own, including @vendor_extension. Simplified manager interface by reducing unneeded methods. PHPBB3-14387 --- phpBB/includes/acp/acp_groups.php | 3 +-- phpBB/includes/acp/acp_users.php | 3 +-- phpBB/phpbb/avatar/manager.php | 28 ++-------------------------- 3 files changed, 4 insertions(+), 30 deletions(-) diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php index 3abae28c72..1e0264d8e9 100644 --- a/phpBB/includes/acp/acp_groups.php +++ b/phpBB/includes/acp/acp_groups.php @@ -672,9 +672,8 @@ class acp_groups $driver = $phpbb_avatar_manager->get_driver($current_driver); $avatars_enabled = true; - $template_name = $phpbb_avatar_manager->get_driver_template_name($driver); $template->set_filenames(array( - 'avatar' => $template_name, + 'avatar' => $driver->get_acp_template_name(), )); if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error)) diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index ac31ac36a1..aa4470fd0e 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1878,9 +1878,8 @@ class acp_users $driver = $phpbb_avatar_manager->get_driver($current_driver); $avatars_enabled = true; - $template_name = $phpbb_avatar_manager->get_driver_template_name($driver); $template->set_filenames(array( - 'avatar' => $template_name, + 'avatar' => $driver->get_acp_template_name(), )); if ($driver->prepare_form($request, $template, $user, $avatar_data, $error)) diff --git a/phpBB/phpbb/avatar/manager.php b/phpBB/phpbb/avatar/manager.php index 5db9ab13fb..26eb17c265 100644 --- a/phpBB/phpbb/avatar/manager.php +++ b/phpBB/phpbb/avatar/manager.php @@ -246,7 +246,7 @@ class manager */ public function is_enabled($driver) { - $config_name = $this->get_driver_config_name($driver); + $config_name = $driver->get_config_name(); return $this->config["allow_avatar_{$config_name}"]; } @@ -260,37 +260,13 @@ class manager */ public function get_avatar_settings($driver) { - $config_name = $this->get_driver_config_name($driver); + $config_name = $driver->get_config_name(); 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 $driver->get_config_name(); - } - - /** - * Get the template name of an avatar driver - * - * @param object $driver Avatar driver object - * - * @return string Avatar driver template name - */ - public function get_driver_template_name($driver) - { - return $driver->get_acp_template_name(); - } - /** * Replace "error" strings with their real, localized form * From b3d64b3b59234e545a75a6a7bbdda2b77cb5be84 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 2 Jan 2016 17:14:26 +0100 Subject: [PATCH 4/4] [ticket/14387] Fix avatar tests after adding get_config_name method PHPBB3-14387 --- tests/avatar/manager_test.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/avatar/manager_test.php b/tests/avatar/manager_test.php index 9b97fa6a68..344eef38ff 100644 --- a/tests/avatar/manager_test.php +++ b/tests/avatar/manager_test.php @@ -64,10 +64,13 @@ class phpbb_avatar_manager_test extends \phpbb_database_test_case ->method('get_name') ->will($this->returnValue('avatar.driver.foobar')); // barfoo driver can't be mocked with constructor arguments - $this->avatar_barfoo = $this->getMock('\phpbb\avatar\driver\barfoo', array('get_name')); + $this->avatar_barfoo = $this->getMock('\phpbb\avatar\driver\barfoo', array('get_name', 'get_config_name')); $this->avatar_barfoo->expects($this->any()) ->method('get_name') ->will($this->returnValue('avatar.driver.barfoo')); + $this->avatar_barfoo->expects($this->any()) + ->method('get_config_name') + ->will($this->returnValue('barfoo')); $avatar_drivers = array($this->avatar_foobar, $this->avatar_barfoo); foreach ($this->avatar_drivers() as $driver)