mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-07 20:08:53 +00:00
[ticket/11150] Disable if directories not writable
PHPBB3-11150
This commit is contained in:
parent
0a809fb90e
commit
cc0a762866
11 changed files with 82 additions and 16 deletions
|
@ -6,6 +6,12 @@
|
|||
|
||||
<p>{{lang( 'EXTENSIONS_GALLERY_EXPLAIN') }}</p>
|
||||
|
||||
{% if not enabled %}
|
||||
<div class="errorbox">
|
||||
{{ lang('EXTENSIONS_COMPOSER_NOT_WRITABLE') }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<fieldset class="quick quick-left">
|
||||
<span class="small"><a href="https://www.phpbb.com/go/customise/extensions/3.1" target="_blank">{{ lang('BROWSE_EXTENSIONS_DATABASE') }}</a> • <a href="javascript:phpbb.toggleDisplay('gallery_settings');">{{ lang('SETTINGS') }}</a></span>
|
||||
</fieldset>
|
||||
|
@ -87,12 +93,14 @@
|
|||
<td>{{ extension.description }} • <a href="{{ extension.url }}">{{ lang('HOMEPAGE') }}</a></td>
|
||||
<td style="text-align: center">
|
||||
{% if extension.name in managed_extensions %}
|
||||
<span style="color: #228822;">{{ lang('INSTALLED') }}</span><br />
|
||||
<span style="color: #228822;">{{ lang('INSTALLED') }}</span>
|
||||
{%- if enabled -%}<br />
|
||||
(<a href="{{ U_ACTION }}&action=update&extension={{ extension.composer_name|url_encode }}">{{ lang('UPDATE') }}</a>
|
||||
• <a href="{{ U_ACTION }}&action=remove&extension={{ extension.composer_name|url_encode }}" style="color: #BC2A4D;">{{ lang('REMOVE') }}</a>)
|
||||
{%- endif -%}
|
||||
{% elseif extension.name in installed_extensions -%}
|
||||
<span style="color: #BC2A4D;">{{ lang('INSTALLED_MANUALLY') }}</span> (<a href="{{ U_ACTION }}&action=manage&extension={{ extension.composer_name|url_encode }}">{{ lang('MANAGE') }}</a>)
|
||||
{% else -%}
|
||||
<span style="color: #BC2A4D;">{{ lang('INSTALLED_MANUALLY') }}</span>{%- if enabled %} (<a href="{{ U_ACTION }}&action=manage&extension={{ extension.composer_name|url_encode }}">{{ lang('MANAGE') }}</a>){%- endif -%}
|
||||
{% elseif enabled -%}
|
||||
<a href="{{ U_ACTION }}&action=install&extension={{ extension.composer_name|url_encode }}">{{ lang('INSTALL') }}</a>
|
||||
{%- endif -%}
|
||||
</td>
|
||||
|
|
|
@ -26,6 +26,8 @@ services:
|
|||
- @filesystem
|
||||
- phpbb-extension
|
||||
- EXTENSIONS_
|
||||
- %core.root_path%
|
||||
- @config
|
||||
|
||||
style.composer.manager:
|
||||
class: phpbb\composer\manager
|
||||
|
|
|
@ -642,7 +642,7 @@ class acp_extensions
|
|||
'purge_on_remove' => $this->config['exts_composer_purge_on_remove'],
|
||||
'repositories' => unserialize($this->config['exts_composer_repositories']),
|
||||
]);
|
||||
$this->template->assign_var('enabled', $this->manager->check_requirements());
|
||||
$this->template->assign_var('enabled', $manager->check_requirements());
|
||||
$this->request->disable_super_globals();
|
||||
|
||||
add_form_key('gallery_settings');
|
||||
|
@ -672,12 +672,7 @@ class acp_extensions
|
|||
}
|
||||
else
|
||||
{
|
||||
$message_text = $e->getPrevious()->getMessage();
|
||||
if (strpos($message_text, 'ext/') === 0 && strpos($message_text, 'does not exist and could not be created.') !== false)
|
||||
{
|
||||
$message_text = $language->lang('EXTENSIONS_DIR_NOT_WRITABLE');
|
||||
}
|
||||
$message_text .= adm_back_link($this->u_action);
|
||||
$message_text = $e->getPrevious()->getMessage() . adm_back_link($this->u_action);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -161,5 +161,6 @@ $lang = array_merge($lang, array(
|
|||
'EXTENSIONS_INSTALLED' => 'Extensions successfully installed.',
|
||||
'EXTENSIONS_REMOVED' => 'Extensions successfully removed.',
|
||||
'EXTENSIONS_UPDATED' => 'Extensions successfully updated.',
|
||||
'EXTENSIONS_DIR_NOT_WRITABLE' => 'The extension directory is not writable',
|
||||
|
||||
'EXTENSIONS_COMPOSER_NOT_WRITABLE' => 'TODO: some required files / directory are not writable => disable ',
|
||||
));
|
||||
|
|
|
@ -60,12 +60,14 @@ class extension_manager extends manager
|
|||
* @param filesystem $filesystem Filesystem object
|
||||
* @param string $package_type Composer type of managed packages
|
||||
* @param string $exception_prefix Exception prefix to use
|
||||
* @param string $root_path phpBB root path
|
||||
* @param config $config Config object
|
||||
*/
|
||||
public function __construct(installer $installer, driver_interface $cache, ext_manager $extension_manager, filesystem $filesystem, $package_type, $exception_prefix, config $config = null)
|
||||
public function __construct(installer $installer, driver_interface $cache, ext_manager $extension_manager, filesystem $filesystem, $package_type, $exception_prefix, $root_path, config $config = null)
|
||||
{
|
||||
$this->extension_manager = $extension_manager;
|
||||
$this->filesystem = $filesystem;
|
||||
$this->root_path = $root_path;
|
||||
|
||||
if ($config)
|
||||
{
|
||||
|
@ -282,6 +284,14 @@ class extension_manager extends manager
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function check_requirements()
|
||||
{
|
||||
return parent::check_requirements() && $this->filesystem->is_writable($this->root_path . 'ext/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable the extensions when installing
|
||||
*
|
||||
|
|
|
@ -77,7 +77,13 @@ class installer
|
|||
{
|
||||
if ($config)
|
||||
{
|
||||
$this->repositories = (array) unserialize($config['exts_composer_repositories']);
|
||||
$repositories = unserialize($config['exts_composer_repositories']);
|
||||
|
||||
if (!is_array($repositories) && !empty($repositories))
|
||||
{
|
||||
$this->repositories = (array) $repositories;
|
||||
}
|
||||
|
||||
$this->packagist = (bool) $config['exts_composer_packagist'];
|
||||
$this->composer_filename = $config['exts_composer_json_file'];
|
||||
$this->packages_vendor_dir = $config['exts_composer_vendor_dir'];
|
||||
|
@ -395,6 +401,22 @@ class installer
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the requirements of the manager and returns true if it can be used.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function check_requirements()
|
||||
{
|
||||
$filesystem = new \phpbb\filesystem\filesystem();
|
||||
|
||||
return $filesystem->is_writable([
|
||||
$this->root_path . $this->composer_filename,
|
||||
$this->root_path . $this->packages_vendor_dir,
|
||||
$this->root_path . substr($this->composer_filename, 0, -5) . '.lock',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates $compatible_packages with the versions of $versions compatibles with the $core_constraint
|
||||
*
|
||||
|
|
|
@ -276,7 +276,7 @@ class manager implements manager_interface
|
|||
*/
|
||||
public function check_requirements()
|
||||
{
|
||||
return true;
|
||||
return $this->installer->check_requirements();
|
||||
}
|
||||
|
||||
protected function normalize_version($packages)
|
||||
|
|
|
@ -57,7 +57,7 @@ class install extends \phpbb\console\command\command
|
|||
->setDescription($this->language->lang('CLI_DESCRIPTION_EXTENSION_INSTALL'))
|
||||
->addOption(
|
||||
'enable',
|
||||
'e',
|
||||
null,
|
||||
InputOption::VALUE_NONE,
|
||||
$this->language->lang('CLI_DESCRIPTION_EXTENSION_INSTALL_OPTION_ENABLE'))
|
||||
->addArgument(
|
||||
|
@ -79,6 +79,13 @@ class install extends \phpbb\console\command\command
|
|||
$output->getFormatter()->setStyle('warning', new OutputFormatterStyle('black', 'yellow'));
|
||||
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
if (!$this->manager->check_requirements())
|
||||
{
|
||||
$io->error($this->language->lang('EXTENSIONS_COMPOSER_NOT_WRITABLE'));
|
||||
return 1;
|
||||
}
|
||||
|
||||
$composer_io = new console_io($input, $output, $this->getHelperSet(), $this->language);
|
||||
$extensions = $input->getArgument('extensions');
|
||||
|
||||
|
|
|
@ -72,6 +72,13 @@ class manage extends \phpbb\console\command\command
|
|||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
if (!$this->manager->check_requirements())
|
||||
{
|
||||
$io->error($this->language->lang('EXTENSIONS_COMPOSER_NOT_WRITABLE'));
|
||||
return 1;
|
||||
}
|
||||
|
||||
$composer_io = new console_io($input, $output, $this->getHelperSet(), $this->language);
|
||||
|
||||
$extension = $input->getArgument('extension');
|
||||
|
|
|
@ -57,7 +57,7 @@ class remove extends \phpbb\console\command\command
|
|||
->setDescription($this->language->lang('CLI_DESCRIPTION_EXTENSION_REMOVE'))
|
||||
->addOption(
|
||||
'purge',
|
||||
'p',
|
||||
null,
|
||||
InputOption::VALUE_NONE,
|
||||
$this->language->lang('CLI_DESCRIPTION_EXTENSION_REMOVE_OPTION_PURGE'))
|
||||
->addArgument(
|
||||
|
@ -79,6 +79,13 @@ class remove extends \phpbb\console\command\command
|
|||
$output->getFormatter()->setStyle('warning', new OutputFormatterStyle('black', 'yellow'));
|
||||
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
if (!$this->manager->check_requirements())
|
||||
{
|
||||
$io->error($this->language->lang('EXTENSIONS_COMPOSER_NOT_WRITABLE'));
|
||||
return 1;
|
||||
}
|
||||
|
||||
$composer_io = new console_io($input, $output, $this->getHelperSet(), $this->language);
|
||||
$extensions = $input->getArgument('extensions');
|
||||
|
||||
|
|
|
@ -71,6 +71,13 @@ class update extends \phpbb\console\command\command
|
|||
$output->getFormatter()->setStyle('warning', new OutputFormatterStyle('black', 'yellow'));
|
||||
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
if (!$this->manager->check_requirements())
|
||||
{
|
||||
$io->error($this->language->lang('EXTENSIONS_COMPOSER_NOT_WRITABLE'));
|
||||
return 1;
|
||||
}
|
||||
|
||||
$composer_io = new console_io($input, $output, $this->getHelperSet(), $this->language);
|
||||
$extensions = $input->getArgument('extensions');
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue