diff --git a/phpBB/config/default/container/services_extensions.yml b/phpBB/config/default/container/services_extensions.yml index 9e6a9fc0ec..77ff0d2ab9 100644 --- a/phpBB/config/default/container/services_extensions.yml +++ b/phpBB/config/default/container/services_extensions.yml @@ -21,6 +21,7 @@ services: class: phpbb\composer\extension_manager arguments: - @ext.composer.installer + - @cache.driver - @ext.manager - @filesystem - phpbb-extension @@ -30,6 +31,7 @@ services: class: phpbb\composer\manager arguments: - @ext.composer.installer + - @cache.driver - phpbb-style - STYLES_ @@ -37,5 +39,6 @@ services: class: phpbb\composer\manager arguments: - @ext.composer.installer + - @cache.driver - phpbb-language - LANGUAGES_ diff --git a/phpBB/phpbb/composer/extension_manager.php b/phpBB/phpbb/composer/extension_manager.php index a86b91fffa..04c0af666f 100644 --- a/phpBB/phpbb/composer/extension_manager.php +++ b/phpBB/phpbb/composer/extension_manager.php @@ -14,6 +14,7 @@ namespace phpbb\composer; use Composer\IO\IOInterface; +use phpbb\cache\driver\driver_interface; use phpbb\composer\exception\managed_with_clean_error_exception; use phpbb\composer\exception\managed_with_enable_error_exception; use phpbb\composer\exception\managed_with_error_exception; @@ -38,18 +39,19 @@ class extension_manager extends manager protected $filesystem; /** - * @param installer $installer Installer object - * @param ext_manager $extension_manager phpBB extension manager - * @param filesystem $filesystem Filesystem object - * @param string $package_type Composer type of managed packages - * @param string $exception_prefix Exception prefix to use + * @param installer $installer Installer object + * @param driver_interface $cache Cache object + * @param ext_manager $extension_manager phpBB extension manager + * @param filesystem $filesystem Filesystem object + * @param string $package_type Composer type of managed packages + * @param string $exception_prefix Exception prefix to use */ - public function __construct(installer $installer, ext_manager $extension_manager, filesystem $filesystem, $package_type, $exception_prefix) + public function __construct(installer $installer, driver_interface $cache, ext_manager $extension_manager, filesystem $filesystem, $package_type, $exception_prefix) { $this->extension_manager = $extension_manager; $this->filesystem = $filesystem; - parent::__construct($installer, $package_type, $exception_prefix); + parent::__construct($installer, $cache, $package_type, $exception_prefix); } /** diff --git a/phpBB/phpbb/composer/installer.php b/phpBB/phpbb/composer/installer.php index 7731d5c074..73d90c6658 100644 --- a/phpBB/phpbb/composer/installer.php +++ b/phpBB/phpbb/composer/installer.php @@ -233,7 +233,7 @@ class installer if ($package instanceof CompletePackage) { $available[$package->getName()]['description'] = $package->getDescription(); - $available[$package->getName()]['url'] = $package->getDistUrl();//getHomepage(); + $available[$package->getName()]['url'] = $package->getHomepage(); } } } @@ -245,12 +245,12 @@ class installer { if ($package->getType() === $type) { - $available[$package->getName()] = ['name' => $package]; + $available[$package->getName()] = ['name' => $package->getPrettyName()]; if ($package instanceof CompletePackage) { $available[$package->getName()]['description'] = $package->getDescription(); - $available[$package->getName()]['url'] = $package->getDistUrl();//getHomepage(); + $available[$package->getName()]['url'] = $package->getHomepage(); } } } diff --git a/phpBB/phpbb/composer/manager.php b/phpBB/phpbb/composer/manager.php index 5d942c11d0..f05fec4957 100644 --- a/phpBB/phpbb/composer/manager.php +++ b/phpBB/phpbb/composer/manager.php @@ -14,6 +14,7 @@ namespace phpbb\composer; use Composer\IO\IOInterface; +use phpbb\cache\driver\driver_interface; use phpbb\composer\exception\runtime_exception; /** @@ -26,6 +27,11 @@ class manager implements manager_interface */ protected $installer; + /** + * @var driver_interface Cache instance + */ + protected $cache; + /** * @var string Type of packages (phpbb-packages per example) */ @@ -52,13 +58,15 @@ class manager implements manager_interface private $available_packages; /** - * @param installer $installer Installer object - * @param string $package_type Composer type of managed packages - * @param string $exception_prefix Exception prefix to use + * @param installer $installer Installer object + * @param driver_interface $cache Cache object + * @param string $package_type Composer type of managed packages + * @param string $exception_prefix Exception prefix to use */ - public function __construct(installer $installer, $package_type, $exception_prefix) + public function __construct(installer $installer, driver_interface $cache, $package_type, $exception_prefix) { $this->installer = $installer; + $this->cache = $cache; $this->package_type = $package_type; $this->exception_prefix = $exception_prefix; } @@ -178,7 +186,12 @@ class manager implements manager_interface { if ($this->available_packages === null) { - $this->available_packages = $this->installer->get_available_packages($this->package_type); + $this->available_packages = $this->cache->get('_composer_' . $this->package_type . '_available'); + if ($this->available_packages === false) + { + $this->available_packages = $this->installer->get_available_packages($this->package_type); + $this->cache->put('_composer_' . $this->package_type . '_available', $this->available_packages, 24*60*60); + } } return $this->available_packages;