From 51916def9c9bc7521dea624932ca92883c751195 Mon Sep 17 00:00:00 2001
From: Tristan Darricau <tristan.darricau@sensiolabs.com>
Date: Mon, 14 Sep 2015 13:55:21 +0200
Subject: [PATCH] [ticket/11150] Display extension status in "gallery"

PHPBB3-11150
---
 phpBB/adm/style/acp_ext_gallery.html             | 11 ++++++++++-
 phpBB/includes/acp/acp_extensions.php            |  7 ++++++-
 phpBB/language/en/acp/extensions.php             |  3 +++
 .../composer/io/translate_composer_trait.php     | 16 +++++++++++++---
 4 files changed, 32 insertions(+), 5 deletions(-)

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 @@
 		<tr>
 			<td>
 				<strong>{{ extension.name }}</strong><br />
-				<span><a href="{{ extension.url }}">{{ lang('DETAILS') }}</a> &bull; <a href="{{ U_ACTION }}&amp;action=install&amp;extension={{ extension.composer_name|url_encode }}">{{ lang('INSTALL') }}</a></span>
+				<span>
+					<a href="{{ extension.url }}">{{ lang('DETAILS') }}</a> &bull;
+					{% if extension.name in managed_extensions %}
+						<span style="color: #228822;">{{ lang('INSTALLED') }}</span>
+					{% elseif extension.name in installed_extensions -%}
+						<span style="color: #BC2A4D;">{{ lang('INSTALLED_MANUALLY') }}</span> (<a href="{{ U_ACTION }}&amp;action=manage&amp;extension={{ extension.composer_name|url_encode }}">{{ lang('MANAGE') }}</a>)
+					{% else -%}
+						<a href="{{ U_ACTION }}&amp;action=install&amp;extension={{ extension.composer_name|url_encode }}">{{ lang('INSTALL') }}</a>
+					{%- endif -%}
+				</span>
 			</td>
 			<td>{{ extension.version }}</td>
 			<td>{{ extension.description }}</td>
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([
+			'<info>', '</info>',
+			'<warning>', '</warning>',
+			'<comment>', '</comment>',
+			'<error>', '</error>',
+		], '', $message);
+	}
 }