mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-12 06:18:52 +00:00
[ticket/11150] Enforce enable on install and purge on remove options
PHPBB3-11150
This commit is contained in:
parent
8f1d254191
commit
46972aa4c7
6 changed files with 125 additions and 18 deletions
|
@ -598,6 +598,7 @@ class acp_extensions
|
||||||
$this->config->set('exts_composer_enable_on_install', $enable_on_install);
|
$this->config->set('exts_composer_enable_on_install', $enable_on_install);
|
||||||
$this->config->set('exts_composer_purge_on_remove', $purge_on_remove);
|
$this->config->set('exts_composer_purge_on_remove', $purge_on_remove);
|
||||||
$this->config->set('exts_composer_repositories', serialize($repositories));
|
$this->config->set('exts_composer_repositories', serialize($repositories));
|
||||||
|
|
||||||
if (!$this->config['exts_composer_packagist'] && $enable_packagist)
|
if (!$this->config['exts_composer_packagist'] && $enable_packagist)
|
||||||
{
|
{
|
||||||
$s_hidden_fields = build_hidden_fields(array(
|
$s_hidden_fields = build_hidden_fields(array(
|
||||||
|
|
|
@ -17,8 +17,8 @@ use Composer\IO\IOInterface;
|
||||||
use phpbb\cache\driver\driver_interface;
|
use phpbb\cache\driver\driver_interface;
|
||||||
use phpbb\composer\exception\managed_with_clean_error_exception;
|
use phpbb\composer\exception\managed_with_clean_error_exception;
|
||||||
use phpbb\composer\exception\managed_with_enable_error_exception;
|
use phpbb\composer\exception\managed_with_enable_error_exception;
|
||||||
use phpbb\composer\exception\managed_with_error_exception;
|
|
||||||
use phpbb\composer\exception\runtime_exception;
|
use phpbb\composer\exception\runtime_exception;
|
||||||
|
use phpbb\config\config;
|
||||||
use phpbb\extension\manager as ext_manager;
|
use phpbb\extension\manager as ext_manager;
|
||||||
use phpbb\filesystem\exception\filesystem_exception;
|
use phpbb\filesystem\exception\filesystem_exception;
|
||||||
use phpbb\filesystem\filesystem;
|
use phpbb\filesystem\filesystem;
|
||||||
|
@ -43,6 +43,16 @@ class extension_manager extends manager
|
||||||
*/
|
*/
|
||||||
private $enabled_extensions;
|
private $enabled_extensions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool Enables extensions when installing them?
|
||||||
|
*/
|
||||||
|
private $enable_on_install = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool Purges extensions data when removing them?
|
||||||
|
*/
|
||||||
|
private $purge_on_remove = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param installer $installer Installer object
|
* @param installer $installer Installer object
|
||||||
* @param driver_interface $cache Cache object
|
* @param driver_interface $cache Cache object
|
||||||
|
@ -50,12 +60,19 @@ class extension_manager extends manager
|
||||||
* @param filesystem $filesystem Filesystem object
|
* @param filesystem $filesystem Filesystem object
|
||||||
* @param string $package_type Composer type of managed packages
|
* @param string $package_type Composer type of managed packages
|
||||||
* @param string $exception_prefix Exception prefix to use
|
* @param string $exception_prefix Exception prefix to use
|
||||||
|
* @param config $config Config object
|
||||||
*/
|
*/
|
||||||
public function __construct(installer $installer, driver_interface $cache, 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, config $config = null)
|
||||||
{
|
{
|
||||||
$this->extension_manager = $extension_manager;
|
$this->extension_manager = $extension_manager;
|
||||||
$this->filesystem = $filesystem;
|
$this->filesystem = $filesystem;
|
||||||
|
|
||||||
|
if ($config)
|
||||||
|
{
|
||||||
|
$this->enable_on_install = (bool) $config['exts_composer_enable_on_install'];
|
||||||
|
$this->purge_on_remove = (bool) $config['exts_composer_purge_on_remove'];
|
||||||
|
}
|
||||||
|
|
||||||
parent::__construct($installer, $cache, $package_type, $exception_prefix);
|
parent::__construct($installer, $cache, $package_type, $exception_prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,6 +88,32 @@ class extension_manager extends manager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function post_install(array $packages, IOInterface $io = null)
|
||||||
|
{
|
||||||
|
if ($this->enable_on_install)
|
||||||
|
{
|
||||||
|
$io->writeError('ENABLING_EXTENSIONS', true, 1);
|
||||||
|
foreach ($packages as $package)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$this->extension_manager->enable($package);
|
||||||
|
}
|
||||||
|
catch (\phpbb\exception\runtime_exception $e)
|
||||||
|
{
|
||||||
|
$io->writeError([$e->getMessage(), $e->get_parameters()], true, 4);
|
||||||
|
}
|
||||||
|
catch (\Exception $e)
|
||||||
|
{
|
||||||
|
$io->writeError($e->getMessage(), true, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
@ -142,17 +185,28 @@ class extension_manager extends manager
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function pre_remove(array $packages, IOInterface $io = null)
|
public function pre_remove(array $packages, IOInterface $io = null)
|
||||||
|
{
|
||||||
|
if ($this->purge_on_remove)
|
||||||
{
|
{
|
||||||
$io->writeError('DISABLING_EXTENSIONS', true, 1);
|
$io->writeError('DISABLING_EXTENSIONS', true, 1);
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($packages as $package)
|
foreach ($packages as $package)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if ($this->extension_manager->is_enabled($package))
|
if ($this->extension_manager->is_enabled($package))
|
||||||
|
{
|
||||||
|
if ($this->purge_on_remove)
|
||||||
|
{
|
||||||
|
$this->extension_manager->purge($package);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
$this->extension_manager->disable($package);
|
$this->extension_manager->disable($package);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (\phpbb\exception\runtime_exception $e)
|
catch (\phpbb\exception\runtime_exception $e)
|
||||||
{
|
{
|
||||||
$io->writeError([$e->getMessage(), $e->get_parameters()], true, 4);
|
$io->writeError([$e->getMessage(), $e->get_parameters()], true, 4);
|
||||||
|
@ -227,4 +281,26 @@ class extension_manager extends manager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable the extensions when installing
|
||||||
|
*
|
||||||
|
* Warning: Only the explicitly required extensions will be enabled
|
||||||
|
*
|
||||||
|
* @param bool $enable
|
||||||
|
*/
|
||||||
|
public function set_enable_on_install($enable)
|
||||||
|
{
|
||||||
|
$this->enable_on_install = $enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Purge the extension when disabling it
|
||||||
|
*
|
||||||
|
* @param bool $purge
|
||||||
|
*/
|
||||||
|
public function set_purge_on_remove($purge)
|
||||||
|
{
|
||||||
|
$this->purge_on_remove = $purge;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,9 +222,11 @@ class installer
|
||||||
|
|
||||||
foreach ($installed_packages as $package)
|
foreach ($installed_packages as $package)
|
||||||
{
|
{
|
||||||
if (array_key_exists($package->getName(), $required_links) && in_array($package->getType(), $types, true))
|
if (in_array($package->getType(), $types, true))
|
||||||
{
|
{
|
||||||
$installed[$package->getName()] = $required_links[$package->getName()]->getPrettyConstraint();
|
$version = array_key_exists($package->getName(), $required_links) ?
|
||||||
|
$required_links[$package->getName()]->getPrettyConstraint() : '*';
|
||||||
|
$installed[$package->getName()] = $version;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,19 +13,20 @@
|
||||||
|
|
||||||
namespace phpbb\console\command\extension;
|
namespace phpbb\console\command\extension;
|
||||||
|
|
||||||
|
use phpbb\composer\extension_manager;
|
||||||
use phpbb\composer\io\console_io;
|
use phpbb\composer\io\console_io;
|
||||||
use phpbb\composer\manager_interface;
|
|
||||||
use phpbb\language\language;
|
use phpbb\language\language;
|
||||||
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
|
||||||
class install extends \phpbb\console\command\command
|
class install extends \phpbb\console\command\command
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var manager_interface Composer extensions manager
|
* @var extension_manager Composer extensions manager
|
||||||
*/
|
*/
|
||||||
protected $manager;
|
protected $manager;
|
||||||
|
|
||||||
|
@ -34,11 +35,13 @@ class install extends \phpbb\console\command\command
|
||||||
*/
|
*/
|
||||||
protected $language;
|
protected $language;
|
||||||
|
|
||||||
public function __construct(\phpbb\user $user, manager_interface $manager, language $language)
|
public function __construct(\phpbb\user $user, extension_manager $manager, language $language)
|
||||||
{
|
{
|
||||||
$this->manager = $manager;
|
$this->manager = $manager;
|
||||||
$this->language = $language;
|
$this->language = $language;
|
||||||
|
|
||||||
|
$language->add_lang('acp/extensions');
|
||||||
|
|
||||||
parent::__construct($user);
|
parent::__construct($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,11 +54,16 @@ class install extends \phpbb\console\command\command
|
||||||
{
|
{
|
||||||
$this
|
$this
|
||||||
->setName('extension:install')
|
->setName('extension:install')
|
||||||
->setDescription($this->user->lang('CLI_DESCRIPTION_EXTENSION_INSTALL'))
|
->setDescription($this->language->lang('CLI_DESCRIPTION_EXTENSION_INSTALL'))
|
||||||
|
->addOption(
|
||||||
|
'enable',
|
||||||
|
'e',
|
||||||
|
InputOption::VALUE_NONE,
|
||||||
|
$this->language->lang('CLI_DESCRIPTION_EXTENSION_INSTALL_OPTION_ENABLE'))
|
||||||
->addArgument(
|
->addArgument(
|
||||||
'extensions',
|
'extensions',
|
||||||
InputArgument::IS_ARRAY | InputArgument::REQUIRED,
|
InputArgument::IS_ARRAY | InputArgument::REQUIRED,
|
||||||
$this->user->lang('CLI_DESCRIPTION_EXTENSION_INSTALL'))
|
$this->language->lang('CLI_DESCRIPTION_EXTENSION_INSTALL_ARGUMENT'))
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,9 +82,14 @@ class install extends \phpbb\console\command\command
|
||||||
$composer_io = new console_io($input, $output, $this->getHelperSet(), $this->language);
|
$composer_io = new console_io($input, $output, $this->getHelperSet(), $this->language);
|
||||||
$extensions = $input->getArgument('extensions');
|
$extensions = $input->getArgument('extensions');
|
||||||
|
|
||||||
|
if ($input->getOption('enable'))
|
||||||
|
{
|
||||||
|
$this->manager->set_enable_on_install(true);
|
||||||
|
}
|
||||||
|
|
||||||
$this->manager->install($extensions, $composer_io);
|
$this->manager->install($extensions, $composer_io);
|
||||||
|
|
||||||
$io->success('All extensions installed');
|
$io->success($this->language->lang('EXTENSIONS_INSTALLED'));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,8 @@ class list_available extends \phpbb\console\command\command
|
||||||
{
|
{
|
||||||
$this->manager = $manager;
|
$this->manager = $manager;
|
||||||
|
|
||||||
|
$user->add_lang('acp/extensions');
|
||||||
|
|
||||||
parent::__construct($user);
|
parent::__construct($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,19 +13,20 @@
|
||||||
|
|
||||||
namespace phpbb\console\command\extension;
|
namespace phpbb\console\command\extension;
|
||||||
|
|
||||||
|
use phpbb\composer\extension_manager;
|
||||||
use phpbb\composer\io\console_io;
|
use phpbb\composer\io\console_io;
|
||||||
use phpbb\composer\manager_interface;
|
|
||||||
use phpbb\language\language;
|
use phpbb\language\language;
|
||||||
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
|
|
||||||
class remove extends \phpbb\console\command\command
|
class remove extends \phpbb\console\command\command
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var manager_interface Composer extensions manager
|
* @var extension_manager Composer extensions manager
|
||||||
*/
|
*/
|
||||||
protected $manager;
|
protected $manager;
|
||||||
|
|
||||||
|
@ -34,11 +35,13 @@ class remove extends \phpbb\console\command\command
|
||||||
*/
|
*/
|
||||||
protected $language;
|
protected $language;
|
||||||
|
|
||||||
public function __construct(\phpbb\user $user, manager_interface $manager, language $language)
|
public function __construct(\phpbb\user $user, extension_manager $manager, language $language)
|
||||||
{
|
{
|
||||||
$this->manager = $manager;
|
$this->manager = $manager;
|
||||||
$this->language = $language;
|
$this->language = $language;
|
||||||
|
|
||||||
|
$language->add_lang('acp/extensions');
|
||||||
|
|
||||||
parent::__construct($user);
|
parent::__construct($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,11 +54,16 @@ class remove extends \phpbb\console\command\command
|
||||||
{
|
{
|
||||||
$this
|
$this
|
||||||
->setName('extension:remove')
|
->setName('extension:remove')
|
||||||
->setDescription($this->user->lang('CLI_DESCRIPTION_EXTENSION_REMOVE'))
|
->setDescription($this->language->lang('CLI_DESCRIPTION_EXTENSION_REMOVE'))
|
||||||
|
->addOption(
|
||||||
|
'purge',
|
||||||
|
'p',
|
||||||
|
InputOption::VALUE_NONE,
|
||||||
|
$this->language->lang('CLI_DESCRIPTION_EXTENSION_REMOVE_OPTION_URGE'))
|
||||||
->addArgument(
|
->addArgument(
|
||||||
'extensions',
|
'extensions',
|
||||||
InputArgument::IS_ARRAY | InputArgument::REQUIRED,
|
InputArgument::IS_ARRAY | InputArgument::REQUIRED,
|
||||||
$this->user->lang('CLI_DESCRIPTION_EXTENSION_REMOVE'))
|
$this->language->lang('CLI_DESCRIPTION_EXTENSION_REMOVE'))
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,9 +82,14 @@ class remove extends \phpbb\console\command\command
|
||||||
$composer_io = new console_io($input, $output, $this->getHelperSet(), $this->language);
|
$composer_io = new console_io($input, $output, $this->getHelperSet(), $this->language);
|
||||||
$extensions = $input->getArgument('extensions');
|
$extensions = $input->getArgument('extensions');
|
||||||
|
|
||||||
|
if ($input->getOption('purge'))
|
||||||
|
{
|
||||||
|
$this->manager->set_purge_on_remove(true);
|
||||||
|
}
|
||||||
|
|
||||||
$this->manager->remove($extensions, $composer_io);
|
$this->manager->remove($extensions, $composer_io);
|
||||||
|
|
||||||
$io->success('All extensions removed');
|
$io->success($this->language->lang('EXTENSIONS_REMOVED'));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue