diff options
4 files changed, 34 insertions, 1 deletions
diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index 45ed51f641..054bc0a182 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -330,6 +330,7 @@ $lang = array_merge($lang, array(  $lang = array_merge($lang, array(  	'CLI_INSTALL_BOARD'				=> 'Install phpBB',  	'CLI_UPDATE_BOARD'				=> 'Update phpBB', +	'CLI_INSTALL_EXTENSIONS'		=> 'Extensions to install. Multiple extensions can be specified using a comma separated list.',  	'CLI_INSTALL_SHOW_CONFIG'		=> 'Show the configuration which will be used',  	'CLI_INSTALL_VALIDATE_CONFIG'	=> 'Validate a configuration file',  	'CLI_CONFIG_FILE'				=> 'Config file to use', diff --git a/phpBB/phpbb/install/console/command/install/install.php b/phpBB/phpbb/install/console/command/install/install.php index de3a2e2d61..3378f5fdac 100644 --- a/phpBB/phpbb/install/console/command/install/install.php +++ b/phpBB/phpbb/install/console/command/install/install.php @@ -80,6 +80,10 @@ class install extends \phpbb\console\command\command  				'config-file',  				InputArgument::REQUIRED,  				$this->language->lang('CLI_CONFIG_FILE')) +			->addArgument( +				'install-extensions', +				InputArgument::OPTIONAL, +				$this->language->lang('CLI_INSTALL_EXTENSIONS'))  			->setDescription($this->language->lang('CLI_INSTALL_BOARD'))  		;  	} @@ -147,6 +151,7 @@ class install extends \phpbb\console\command\command  		}  		$this->register_configuration($iohandler, $config); +		$this->register_install_extensions($iohandler, $input);  		try  		{ @@ -204,4 +209,17 @@ class install extends \phpbb\console\command\command  		$iohandler->set_input('script_path', $config['server']['script_path']);  		$iohandler->set_input('submit_server', 'submit');  	} + +	/** +	 * Register extensions to install during installation +	 * +	 * @param cli_iohandler $iohandler +	 * @param InputInterface $input +	 */ +	private function register_install_extensions(cli_iohandler $iohandler, InputInterface $input) +	{ +		$install_extensions = $input->getArgument('install-extensions'); +		$install_extensions = !empty($install_extensions) ? explode(',', $install_extensions) : array(); +		$iohandler->set_input('install-extensions', $install_extensions); +	}  } diff --git a/phpBB/phpbb/install/module/install_finish/task/install_extensions.php b/phpBB/phpbb/install/module/install_finish/task/install_extensions.php index bc13795188..c42d17fc18 100644 --- a/phpBB/phpbb/install/module/install_finish/task/install_extensions.php +++ b/phpBB/phpbb/install/module/install_finish/task/install_extensions.php @@ -13,6 +13,8 @@  namespace phpbb\install\module\install_finish\task; +use Symfony\Component\Console\Input\ArgvInput; +  /**   * Installs extensions that exist in ext folder upon install   */ @@ -100,12 +102,19 @@ class install_extensions extends \phpbb\install\task_base  		$this->user->session_begin();  		$this->user->setup(array('common', 'acp/common', 'cli')); +		$install_extensions = $this->iohandler->get_input('install-extensions', array()); +  		// Find available extensions  		foreach ($this->finder as $file)  		{  			/** @var \SplFileInfo $file */  			$ext_name = preg_replace('#(.+[\\/\\\]ext[\\/\\\])(\w+)[\\/\\\](\w+)#', '$2/$3', dirname($file->getRealPath())); +			if (!empty($install_extensions) && !in_array($ext_name, $install_extensions)) +			{ +				continue; +			} +  			if ($this->extension_manager->is_available($ext_name))  			{  				$this->extension_manager->enable($ext_name); diff --git a/phpBB/phpbb/install/module/update_database/task/update_extensions.php b/phpBB/phpbb/install/module/update_database/task/update_extensions.php index a73fa9b854..7a65ff1803 100644 --- a/phpBB/phpbb/install/module/update_database/task/update_extensions.php +++ b/phpBB/phpbb/install/module/update_database/task/update_extensions.php @@ -18,6 +18,7 @@ use phpbb\install\helper\config;  use phpbb\install\helper\iohandler\iohandler_interface;  use phpbb\install\helper\update_helper;  use phpbb\install\task_base; +use Symfony\Component\Console\Input\ArgvInput;  use Symfony\Component\Finder\Finder;  /** @@ -111,6 +112,9 @@ class enable_extensions extends task_base  		$this->user->session_begin();  		$this->user->setup(array('common', 'acp/common', 'cli')); +		$input = new ArgvInput(); +		$update_extensions = explode(',', $input->getArgument('update-extensions')); +  		$update_info = $this->install_config->get('update_info_unprocessed', array());  		if (!empty($update_info)) @@ -122,7 +126,8 @@ class enable_extensions extends task_base  				$ext_name = preg_replace('#(.+[\\/\\\]ext[\\/\\\])(\w+)[\\/\\\](\w+)#', '$2/$3', dirname($file->getRealPath()));  				// Skip extensions that were not added or updated during update -				if (!count(preg_grep('#ext/' . $ext_name . '#', $update_info['files']))) +				if (!count(preg_grep('#ext/' . $ext_name . '#', $update_info['files'])) && +					!in_array($ext_name, $update_extensions) && $ext_name !== 'phpbb/viglink')  				{  					continue;  				}  | 
