1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-03-19 07:00:14 +01:00

Merge pull request #4703 from javiexin/ticket/15011

[ticket/15011] All errors on metadata throw exceptions
This commit is contained in:
Marc Alexander 2017-03-19 15:49:33 +01:00
commit 59396771e6
No known key found for this signature in database
GPG Key ID: 50E0D2423696F995
2 changed files with 33 additions and 57 deletions

View File

@ -141,14 +141,13 @@ class acp_extensions
break;
case 'enable_pre':
if (!$md_manager->validate_dir())
try
{
trigger_error($user->lang['EXTENSION_DIR_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
$md_manager->validate_enable();
}
if (!$md_manager->validate_enable())
catch (\phpbb\extension\exception $e)
{
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
trigger_error($e . adm_back_link($this->u_action), E_USER_WARNING);
}
$extension = $phpbb_extension_manager->get_extension($ext_name);
@ -172,14 +171,13 @@ class acp_extensions
break;
case 'enable':
if (!$md_manager->validate_dir())
try
{
trigger_error($user->lang['EXTENSION_DIR_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
$md_manager->validate_enable();
}
if (!$md_manager->validate_enable())
catch (\phpbb\extension\exception $e)
{
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
trigger_error($e . adm_back_link($this->u_action), E_USER_WARNING);
}
$extension = $phpbb_extension_manager->get_extension($ext_name);

View File

@ -109,29 +109,18 @@ class metadata_manager
{
case 'all':
default:
// Validate the metadata
if (!$this->validate())
{
return false;
}
$this->validate();
return $this->metadata;
break;
case 'version':
case 'name':
return ($this->validate($element)) ? $this->metadata[$element] : false;
$this->validate($element);
return $this->metadata[$element];
break;
case 'display-name':
if (isset($this->metadata['extra']['display-name']))
{
return $this->metadata['extra']['display-name'];
}
else
{
return ($this->validate('name')) ? $this->metadata['name'] : false;
}
return (isset($this->metadata['extra']['display-name'])) ? $this->metadata['extra']['display-name'] : $this->get_metadata('name');
break;
}
}
@ -228,23 +217,8 @@ class metadata_manager
switch ($name)
{
case 'all':
$this->validate('display');
if (!$this->validate_dir())
{
throw new \phpbb\extension\exception($this->user->lang('EXTENSION_DIR_INVALID'));
}
if (!$this->validate_require_phpbb())
{
throw new \phpbb\extension\exception($this->user->lang('META_FIELD_NOT_SET', 'soft-require'));
}
if (!$this->validate_require_php())
{
throw new \phpbb\extension\exception($this->user->lang('META_FIELD_NOT_SET', 'require php'));
}
break;
$this->validate_enable();
// no break
case 'display':
foreach ($fields as $field => $data)
@ -301,40 +275,43 @@ class metadata_manager
/**
* This array handles the verification that this extension can be enabled on this board
*
* @return bool True if validation succeeded, False if failed
* @return bool True if validation succeeded, throws an exception if invalid
* @throws \phpbb\extension\exception
*/
public function validate_enable()
{
// Check for valid directory & phpBB, PHP versions
if (!$this->validate_dir() || !$this->validate_require_phpbb() || !$this->validate_require_php())
{
return false;
}
return true;
return $this->validate_dir() && $this->validate_require_phpbb() && $this->validate_require_php();
}
/**
* Validates the most basic directory structure to ensure it follows <vendor>/<ext> convention.
*
* @return boolean True when passes validation
* @return boolean True when passes validation, throws an exception if invalid
* @throws \phpbb\extension\exception
*/
public function validate_dir()
{
return (substr_count($this->ext_name, '/') === 1 && $this->ext_name == $this->get_metadata('name'));
if (substr_count($this->ext_name, '/') !== 1 || $this->ext_name != $this->get_metadata('name'))
{
throw new \phpbb\extension\exception($this->user->lang('EXTENSION_DIR_INVALID'));
}
return true;
}
/**
* Validates the contents of the phpbb requirement field
*
* @return boolean True when passes validation
* @return boolean True when passes validation, throws an exception if invalid
* @throws \phpbb\extension\exception
*/
public function validate_require_phpbb()
{
if (!isset($this->metadata['extra']['soft-require']['phpbb/phpbb']))
{
return false;
throw new \phpbb\extension\exception($this->user->lang('META_FIELD_NOT_SET', 'soft-require'));
}
return true;
@ -343,13 +320,14 @@ class metadata_manager
/**
* Validates the contents of the php requirement field
*
* @return boolean True when passes validation
* @return boolean True when passes validation, throws an exception if invalid
* @throws \phpbb\extension\exception
*/
public function validate_require_php()
{
if (!isset($this->metadata['require']['php']))
{
return false;
throw new \phpbb\extension\exception($this->user->lang('META_FIELD_NOT_SET', 'require php'));
}
return true;
@ -372,10 +350,10 @@ class metadata_manager
'META_LICENSE' => $this->metadata['license'],
'META_REQUIRE_PHP' => (isset($this->metadata['require']['php'])) ? $this->metadata['require']['php'] : '',
'META_REQUIRE_PHP_FAIL' => !$this->validate_require_php(),
'META_REQUIRE_PHP_FAIL' => (isset($this->metadata['require']['php'])) ? false : true,
'META_REQUIRE_PHPBB' => (isset($this->metadata['extra']['soft-require']['phpbb/phpbb'])) ? $this->metadata['extra']['soft-require']['phpbb/phpbb'] : '',
'META_REQUIRE_PHPBB_FAIL' => !$this->validate_require_phpbb(),
'META_REQUIRE_PHPBB_FAIL' => (isset($this->metadata['extra']['soft-require']['phpbb/phpbb'])) ? false : true,
'META_DISPLAY_NAME' => (isset($this->metadata['extra']['display-name'])) ? $this->metadata['extra']['display-name'] : '',
));