mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-10 13:28:55 +00:00
[ticket/11150] Preserve every packages of every phpbb types in composer-ext.json
PHPBB3-11150
This commit is contained in:
parent
540bac3ba4
commit
779c9c8552
2 changed files with 34 additions and 8 deletions
|
@ -32,6 +32,8 @@ use Symfony\Component\Console\Output\OutputInterface;
|
||||||
*/
|
*/
|
||||||
class installer
|
class installer
|
||||||
{
|
{
|
||||||
|
const PHPBB_TYPES = ['phpbb-extension', 'phpbb-style', 'phpbb-language'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array Repositories to look packages from
|
* @var array Repositories to look packages from
|
||||||
*/
|
*/
|
||||||
|
@ -132,12 +134,14 @@ class installer
|
||||||
/**
|
/**
|
||||||
* Returns the list of currently installed packages
|
* Returns the list of currently installed packages
|
||||||
*
|
*
|
||||||
* @param string $type Returns only the packages with the given type
|
* @param string|array $types Returns only the packages with the given type(s)
|
||||||
*
|
*
|
||||||
* @return array The installed packages associated to their version.
|
* @return array The installed packages associated to their version.
|
||||||
*/
|
*/
|
||||||
public function get_installed_packages($type)
|
public function get_installed_packages($types)
|
||||||
{
|
{
|
||||||
|
$types = (array) $types;
|
||||||
|
|
||||||
$original_vendor_dir = getenv('COMPOSER_VENDOR_DIR');
|
$original_vendor_dir = getenv('COMPOSER_VENDOR_DIR');
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -151,7 +155,7 @@ class installer
|
||||||
|
|
||||||
foreach ($packages as $package)
|
foreach ($packages as $package)
|
||||||
{
|
{
|
||||||
if ($package->getType() === $type)
|
if (in_array($package->getType(), $types, true))
|
||||||
{
|
{
|
||||||
$installed[$package->getName()] = $package->getPrettyVersion();
|
$installed[$package->getName()] = $package->getPrettyVersion();
|
||||||
}
|
}
|
||||||
|
@ -180,6 +184,8 @@ class installer
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
$this->generate_ext_json_file($this->get_installed_packages(self::PHPBB_TYPES));
|
||||||
|
|
||||||
$io = new NullIO();
|
$io = new NullIO();
|
||||||
|
|
||||||
$composer = Factory::create($io, $this->get_composer_ext_json_filename(), false);
|
$composer = Factory::create($io, $this->get_composer_ext_json_filename(), false);
|
||||||
|
|
|
@ -36,10 +36,15 @@ class manager implements manager_interface
|
||||||
protected $exception_prefix;
|
protected $exception_prefix;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array Caches the managed packages list
|
* @var array Caches the managed packages list (for the current type)
|
||||||
*/
|
*/
|
||||||
private $managed_packages;
|
private $managed_packages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array Caches the managed packages list (for all phpBB types)
|
||||||
|
*/
|
||||||
|
private $all_managed_packages;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array Caches the available packages list
|
* @var array Caches the available packages list
|
||||||
*/
|
*/
|
||||||
|
@ -84,7 +89,7 @@ class manager implements manager_interface
|
||||||
*/
|
*/
|
||||||
protected function do_install($packages)
|
protected function do_install($packages)
|
||||||
{
|
{
|
||||||
$managed_packages = array_merge($this->get_managed_packages(), $packages);
|
$managed_packages = array_merge($this->get_all_managed_packages(), $packages);
|
||||||
ksort($managed_packages);
|
ksort($managed_packages);
|
||||||
|
|
||||||
$this->installer->install($managed_packages, array_keys($packages));
|
$this->installer->install($managed_packages, array_keys($packages));
|
||||||
|
@ -110,7 +115,7 @@ class manager implements manager_interface
|
||||||
throw new runtime_exception($this->exception_prefix, 'NOT_MANAGED', [implode('|', array_keys($not_managed))]);
|
throw new runtime_exception($this->exception_prefix, 'NOT_MANAGED', [implode('|', array_keys($not_managed))]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$managed_packages = array_merge($this->get_managed_packages(), $packages);
|
$managed_packages = array_merge($this->get_all_managed_packages(), $packages);
|
||||||
ksort($managed_packages);
|
ksort($managed_packages);
|
||||||
|
|
||||||
$this->installer->install($managed_packages, array_keys($packages));
|
$this->installer->install($managed_packages, array_keys($packages));
|
||||||
|
@ -134,7 +139,7 @@ class manager implements manager_interface
|
||||||
throw new runtime_exception($this->exception_prefix, 'NOT_MANAGED', [implode('|', array_keys($not_managed))]);
|
throw new runtime_exception($this->exception_prefix, 'NOT_MANAGED', [implode('|', array_keys($not_managed))]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$managed_packages = array_diff_key($this->get_managed_packages(), $packages);
|
$managed_packages = array_diff_key($this->get_all_managed_packages(), $packages);
|
||||||
ksort($managed_packages);
|
ksort($managed_packages);
|
||||||
|
|
||||||
$this->installer->install($managed_packages, array_keys($packages));
|
$this->installer->install($managed_packages, array_keys($packages));
|
||||||
|
@ -154,7 +159,7 @@ class manager implements manager_interface
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of managed packages
|
* Returns the list of managed packages for the current type
|
||||||
*
|
*
|
||||||
* @return array The managed packages associated to their version.
|
* @return array The managed packages associated to their version.
|
||||||
*/
|
*/
|
||||||
|
@ -168,6 +173,21 @@ class manager implements manager_interface
|
||||||
return $this->managed_packages;
|
return $this->managed_packages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the list of managed packages for all phpBB types
|
||||||
|
*
|
||||||
|
* @return array The managed packages associated to their version.
|
||||||
|
*/
|
||||||
|
public function get_all_managed_packages()
|
||||||
|
{
|
||||||
|
if ($this->all_managed_packages === null)
|
||||||
|
{
|
||||||
|
$this->all_managed_packages = $this->installer->get_installed_packages(installer::PHPBB_TYPES);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->all_managed_packages;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of available packages
|
* Returns the list of available packages
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue