diff --git a/phpBB/adm/style/acp_ext_gallery.html b/phpBB/adm/style/acp_ext_gallery.html
index f9cdad34ff..9ae42e2e85 100644
--- a/phpBB/adm/style/acp_ext_gallery.html
+++ b/phpBB/adm/style/acp_ext_gallery.html
@@ -45,7 +45,16 @@
{{ extension.name }}
- {{ lang('DETAILS') }} • {{ lang('INSTALL') }}
+
+ {{ lang('DETAILS') }} •
+ {% if extension.name in managed_extensions %}
+ {{ lang('INSTALLED') }}
+ {% elseif extension.name in installed_extensions -%}
+ {{ lang('INSTALLED_MANUALLY') }} ({{ lang('MANAGE') }})
+ {% else -%}
+ {{ lang('INSTALL') }}
+ {%- endif -%}
+
|
{{ extension.version }} |
{{ extension.description }} |
diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php
index a23ced9daa..08a7b36f2e 100644
--- a/phpBB/includes/acp/acp_extensions.php
+++ b/phpBB/includes/acp/acp_extensions.php
@@ -413,6 +413,9 @@ class acp_extensions
/** @var \phpbb\composer\manager $composer_manager */
$composer_manager = $phpbb_container->get('ext.composer.manager');
+ /** @var \phpbb\extension\manager $extensions_manager */
+ $extensions_manager = $phpbb_container->get('ext.manager');
+
switch ($action)
{
case 'install':
@@ -451,7 +454,7 @@ class acp_extensions
{
$message_text = $e->getPrevious()->getMessage();
if (strpos($message_text, 'ext/') === 0 && strpos($message_text, 'does not exist and could not be created.') !== false)
- {dump($e->getPrevious()->getTraceAsString());
+ {
$message_text = $language->lang('EXTENSIONS_DIR_NOT_WRITABLE');
}
$message_text .= adm_back_link($this->u_action);
@@ -499,6 +502,8 @@ class acp_extensions
$this->request->enable_super_globals();
$this->template->assign_var('extensions', $manager->get_available_packages());
+ $this->template->assign_var('managed_extensions', array_keys($manager->get_managed_packages()));
+ $this->template->assign_var('installed_extensions', array_keys($extensions_manager->all_available()));
$this->template->assign_var('U_ACTION', $this->u_action);
$this->request->disable_super_globals();
break;
diff --git a/phpBB/language/en/acp/extensions.php b/phpBB/language/en/acp/extensions.php
index a94b767111..30d20839fd 100644
--- a/phpBB/language/en/acp/extensions.php
+++ b/phpBB/language/en/acp/extensions.php
@@ -104,6 +104,9 @@ $lang = array_merge($lang, array(
'EXTENSION_ENABLE_CONFIRM' => 'Are you sure that you wish to enable the ā%sā extension?',
'EXTENSION_FORCE_UNSTABLE_CONFIRM' => 'Are you sure that you wish to force the use of unstable version?',
+ 'INSTALLED' => 'Installed',
+ 'INSTALLED_MANUALLY' => 'Installed manually',
+
'RETURN_TO_EXTENSION_LIST' => 'Return to the extension list',
'EXT_DETAILS' => 'Extension Details',
diff --git a/phpBB/phpbb/composer/io/translate_composer_trait.php b/phpBB/phpbb/composer/io/translate_composer_trait.php
index e76244b977..b322accafb 100644
--- a/phpBB/phpbb/composer/io/translate_composer_trait.php
+++ b/phpBB/phpbb/composer/io/translate_composer_trait.php
@@ -42,7 +42,7 @@ trait translate_composer_trait
$parameters = [];
$level = 0;
- $message = trim(strip_tags($message), "\n\r");
+ $message = trim($this->strip_format($message), "\n\r");
if (strpos($message, 'Deleting ') === 0)
{
@@ -94,7 +94,7 @@ trait translate_composer_trait
$parameters = [];
$level = 0;
- $message = trim(strip_tags($message), "\n\r");
+ $message = trim($this->strip_format($message), "\n\r");
if (strpos($message, ' Problem ') === 0)
{
@@ -103,7 +103,7 @@ trait translate_composer_trait
continue;
}
- $lang_key = "\n" . $message . "\n";
+ $lang_key = "\n" . htmlentities($message) . "\n";
$level = 4;
}
else if ($message === 'Updating dependencies')
@@ -209,4 +209,14 @@ trait translate_composer_trait
return $error;
}
+
+ protected function strip_format($message)
+ {
+ return str_replace([
+ '', '',
+ '', '',
+ '', '',
+ '', '',
+ ], '', $message);
+ }
}