1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-03-24 09:30:34 +01:00

[ticket/15087] Optimize creation of metadata objects by caching

Code for [ticket/14938] Inconsistency in ext_mgr all_available vs
is_available for phpbb 3.2.

PHPBB3-15087
This commit is contained in:
javiexin 2017-02-12 14:10:58 +01:00
parent 17f8c53ef3
commit 5266821e1b

View File

@ -431,25 +431,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->get_extension_path($ext_name, true);
}
$available[$ext_name] = $this->phpbb_root_path . 'ext/' . $ext_name . '/';
}
}
ksort($available);
@ -527,7 +513,15 @@ class manager
*/
public function is_available($name)
{
return file_exists($this->get_extension_path($name, true));
$md_manager = $this->create_extension_metadata_manager($name);
try
{
return $md_manager->get_metadata('all') && $md_manager->validate_enable();
}
catch (\phpbb\extension\exception $e)
{
return false;
}
}
/**