mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00: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:
parent
17f8c53ef3
commit
5266821e1b
1 changed files with 11 additions and 17 deletions
|
@ -431,25 +431,11 @@ class manager
|
||||||
if ($file_info->isFile() && $file_info->getFilename() == 'composer.json')
|
if ($file_info->isFile() && $file_info->getFilename() == 'composer.json')
|
||||||
{
|
{
|
||||||
$ext_name = $iterator->getInnerIterator()->getSubPath();
|
$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);
|
$ext_name = str_replace(DIRECTORY_SEPARATOR, '/', $ext_name);
|
||||||
|
if ($this->is_available($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'])
|
|
||||||
{
|
{
|
||||||
continue;
|
$available[$ext_name] = $this->get_extension_path($ext_name, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$available[$ext_name] = $this->phpbb_root_path . 'ext/' . $ext_name . '/';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ksort($available);
|
ksort($available);
|
||||||
|
@ -527,7 +513,15 @@ class manager
|
||||||
*/
|
*/
|
||||||
public function is_available($name)
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue