From efc2b46303614b0824d3f58f51778e7ff925ccf5 Mon Sep 17 00:00:00 2001 From: javiexin Date: Mon, 26 Dec 2016 21:07:31 +0100 Subject: [ticket/14938] Inconsistency in ext_mgr all_available vs is_available Made is_available much more strict, in line with the checks in all_available PHPBB3-14938 --- phpBB/phpbb/extension/manager.php | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'phpBB/phpbb') diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php index 76f0e3558e..770c574dd5 100644 --- a/phpBB/phpbb/extension/manager.php +++ b/phpBB/phpbb/extension/manager.php @@ -524,7 +524,29 @@ class manager */ public function is_available($name) { - return file_exists($this->get_extension_path($name, true)); + // Not available if the folder does not exist + if (!file_exists($this->get_extension_path($name, true))) + { + return false; + } + + $composer_file = $this->get_extension_path($name, true) . '/composer.json'; + + // Not available if there is no composer.json. + if (!is_readable($composer_file) || !($ext_info = file_get_contents($composer_file))) + { + return false; + } + $ext_info = json_decode($ext_info, true); + + // Not available if malformed name or if the directory structure + // does not match the name value specified in composer.json. + if (substr_count($name, '/') !== 1 || !isset($ext_info['name']) || $name != $ext_info['name']) + { + return false; + } + + return true; } /** -- cgit v1.2.1 From 9658ecae8bb2c66bc105cf6787df6b8c40277676 Mon Sep 17 00:00:00 2001 From: javiexin Date: Fri, 30 Dec 2016 21:50:04 +0100 Subject: [ticket/14938] Inconsistency in ext_mgr all_available vs is_available Made is_available much more strict, in line with the checks in all_available Refactor all_available to use is_available, saving duplicate code. PHPBB3-14938 --- phpBB/phpbb/extension/manager.php | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) (limited to 'phpBB/phpbb') diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php index 770c574dd5..036a0fc07d 100644 --- a/phpBB/phpbb/extension/manager.php +++ b/phpBB/phpbb/extension/manager.php @@ -433,25 +433,11 @@ class manager if ($file_info->isFile() && $file_info->getFilename() == 'composer.json') { $ext_name = $iterator->getInnerIterator()->getSubPath(); - $composer_file = $iterator->getPath() . '/composer.json'; - - // Ignore the extension if there is no composer.json. - if (!is_readable($composer_file) || !($ext_info = file_get_contents($composer_file))) - { - continue; - } - - $ext_info = json_decode($ext_info, true); $ext_name = str_replace(DIRECTORY_SEPARATOR, '/', $ext_name); - - // Ignore the extension if directory depth is not correct or if the directory structure - // does not match the name value specified in composer.json. - if (substr_count($ext_name, '/') !== 1 || !isset($ext_info['name']) || $ext_name != $ext_info['name']) + if ($this->is_available($ext_name)) { - continue; + $available[$ext_name] = $this->phpbb_root_path . 'ext/' . $ext_name . '/'; } - - $available[$ext_name] = $this->phpbb_root_path . 'ext/' . $ext_name . '/'; } } ksort($available); @@ -530,7 +516,7 @@ class manager return false; } - $composer_file = $this->get_extension_path($name, true) . '/composer.json'; + $composer_file = $this->get_extension_path($name, true) . 'composer.json'; // Not available if there is no composer.json. if (!is_readable($composer_file) || !($ext_info = file_get_contents($composer_file))) -- cgit v1.2.1 From abd6bd815449ba59c2b5737ebb0b47a55221a01c Mon Sep 17 00:00:00 2001 From: javiexin Date: Thu, 9 Feb 2017 23:10:29 +0100 Subject: [ticket/14938] Inconsistency in ext_mgr all_available vs is_available Made is_available much more strict, in line with the checks in all_available Refactor all_available to use is_available, saving duplicate code. Further simplify is_available by using metadata_manager. PHPBB3-14938 --- phpBB/phpbb/extension/manager.php | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) (limited to 'phpBB/phpbb') diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php index 036a0fc07d..608fd12444 100644 --- a/phpBB/phpbb/extension/manager.php +++ b/phpBB/phpbb/extension/manager.php @@ -510,29 +510,15 @@ class manager */ public function is_available($name) { - // Not available if the folder does not exist - if (!file_exists($this->get_extension_path($name, true))) + $md_manager = $this->create_extension_metadata_manager($name, $this->container->get('template')); + try { - return false; - } - - $composer_file = $this->get_extension_path($name, true) . 'composer.json'; - - // Not available if there is no composer.json. - if (!is_readable($composer_file) || !($ext_info = file_get_contents($composer_file))) - { - return false; + return $md_manager->get_metadata('all') && $md_manager->validate_enable(); } - $ext_info = json_decode($ext_info, true); - - // Not available if malformed name or if the directory structure - // does not match the name value specified in composer.json. - if (substr_count($name, '/') !== 1 || !isset($ext_info['name']) || $name != $ext_info['name']) + catch (\phpbb\extension\exception $e) { return false; } - - return true; } /** -- cgit v1.2.1 From 7313eb54b4f23c9ccd238e1a368c69bedb452229 Mon Sep 17 00:00:00 2001 From: javiexin Date: Fri, 10 Feb 2017 00:35:23 +0100 Subject: [ticket/14938] Inconsistency in ext_mgr all_available vs is_available Made is_available much more strict, in line with the checks in all_available Refactor all_available to use is_available, saving duplicate code. Further simplify is_available by using metadata_manager. Make optional the template object on metadata_manager creation. PHPBB3-14938 --- phpBB/phpbb/extension/manager.php | 6 +++--- phpBB/phpbb/extension/metadata_manager.php | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB/phpbb') diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php index 608fd12444..e7e5f83c23 100644 --- a/phpBB/phpbb/extension/manager.php +++ b/phpBB/phpbb/extension/manager.php @@ -149,10 +149,10 @@ class manager * Instantiates the metadata manager for the extension with the given name * * @param string $name The extension name - * @param \phpbb\template\template $template The template manager + * @param \phpbb\template\template $template The template manager or null * @return \phpbb\extension\metadata_manager Instance of the metadata manager */ - public function create_extension_metadata_manager($name, \phpbb\template\template $template) + public function create_extension_metadata_manager($name, \phpbb\template\template $template = null) { return new \phpbb\extension\metadata_manager($name, $this->config, $this, $template, $this->user, $this->phpbb_root_path); } @@ -510,7 +510,7 @@ class manager */ public function is_available($name) { - $md_manager = $this->create_extension_metadata_manager($name, $this->container->get('template')); + $md_manager = $this->create_extension_metadata_manager($name); try { return $md_manager->get_metadata('all') && $md_manager->validate_enable(); diff --git a/phpBB/phpbb/extension/metadata_manager.php b/phpBB/phpbb/extension/metadata_manager.php index a64d88fe39..0593cdabe1 100644 --- a/phpBB/phpbb/extension/metadata_manager.php +++ b/phpBB/phpbb/extension/metadata_manager.php @@ -72,11 +72,11 @@ class metadata_manager * @param string $ext_name Name (including vendor) of the extension * @param \phpbb\config\config $config phpBB Config instance * @param \phpbb\extension\manager $extension_manager An instance of the phpBB extension manager - * @param \phpbb\template\template $template phpBB Template instance + * @param \phpbb\template\template $template phpBB Template instance or null * @param \phpbb\user $user User instance * @param string $phpbb_root_path Path to the phpbb includes directory. */ - public function __construct($ext_name, \phpbb\config\config $config, \phpbb\extension\manager $extension_manager, \phpbb\template\template $template, \phpbb\user $user, $phpbb_root_path) + public function __construct($ext_name, \phpbb\config\config $config, \phpbb\extension\manager $extension_manager, \phpbb\template\template $template = null, \phpbb\user $user, $phpbb_root_path) { $this->config = $config; $this->extension_manager = $extension_manager; -- cgit v1.2.1