[ticket/16688] Fix 'Remove' link for Extension manager

'Remove' link is broken and rendered as 'Array'.

PHPBB3-16943
This commit is contained in:
rxu 2021-12-19 19:30:47 +07:00
parent 4d9e33aa32
commit 85f23474d7
No known key found for this signature in database
GPG key ID: 955F0567380E586A
3 changed files with 99 additions and 21 deletions

View file

@ -60,7 +60,7 @@
<td style="text-align: center;"><a href="{enabled.U_DETAILS}">{L_DETAILS}</a></td>
<td style="text-align: center;">
<!-- BEGIN actions -->
<a href="{enabled.actions.U_ACTION}"<!-- IF enabled.actions.L_ACTION_EXPLAIN --> title="{enabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{enabled.actions.L_ACTION}</a>
<a href="{enabled.actions.U_ACTION}"<!-- IF enabled.actions.ACTION == 'REMOVE' --> style="color: #bc2a4d;"<!-- ENDIF --><!-- IF enabled.actions.L_ACTION_EXPLAIN --> title="{enabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{enabled.actions.L_ACTION}</a>
<!-- IF not enabled.actions.S_LAST_ROW -->&nbsp;|&nbsp;<!-- ENDIF -->
<!-- END actions -->
</td>
@ -88,7 +88,7 @@
</td>
<td style="text-align: center;">
<!-- BEGIN actions -->
<a href="{disabled.actions.U_ACTION}"<!-- IF disabled.actions.L_ACTION_EXPLAIN --> title="{disabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{disabled.actions.L_ACTION}</a>
<a href="{disabled.actions.U_ACTION}"<!-- IF disabled.actions.ACTION == 'REMOVE' --> style="color: #bc2a4d;"<!-- ENDIF --><!-- IF disabled.actions.L_ACTION_EXPLAIN --> title="{disabled.actions.L_ACTION_EXPLAIN}"<!-- ENDIF -->>{disabled.actions.L_ACTION}</a>
<!-- IF not disabled.actions.S_LAST_ROW -->&nbsp;|&nbsp;<!-- ENDIF -->
<!-- END actions -->
</td>

View file

@ -838,10 +838,7 @@ class acp_extensions
{
$this->output_actions('enabled', [
'UPDATE' => $this->u_catalog_action . '&amp;action=update&amp;extension=' . urlencode($block_vars['META_NAME']),
'REMOVE' => [
'url' => $this->u_catalog_action . '&amp;action=remove&amp;extension=' . urlencode($block_vars['META_NAME']),
'color' => '#BC2A4D;',
]
'REMOVE' => $this->u_catalog_action . '&amp;action=remove&amp;extension=' . urlencode($block_vars['META_NAME']),
]);
}
}
@ -922,10 +919,7 @@ class acp_extensions
{
$this->output_actions('disabled', [
'UPDATE' => $this->u_catalog_action . '&amp;action=update&amp;extension=' . urlencode($block_vars['META_NAME']),
'REMOVE' => [
'url' => $this->u_catalog_action . '&amp;action=remove&amp;extension=' . urlencode($block_vars['META_NAME']),
'color' => '#BC2A4D;',
]
'REMOVE' => $this->u_catalog_action . '&amp;action=remove&amp;extension=' . urlencode($block_vars['META_NAME']),
]);
}
}
@ -997,6 +991,7 @@ class acp_extensions
$this->output_actions('disabled', array(
'ENABLE' => $this->u_action . '&amp;action=enable_pre&amp;ext_name=' . urlencode($name),
'REMOVE' => $this->u_catalog_action . '&amp;action=remove&amp;extension=' . urlencode($block_vars['META_NAME']),
));
}
}
@ -1009,11 +1004,12 @@ class acp_extensions
*/
private function output_actions($block, $actions)
{
foreach ($actions as $lang => $url)
foreach ($actions as $action => $url)
{
$this->template->assign_block_vars($block . '.actions', [
'L_ACTION' => $this->user->lang('EXTENSION_' . $lang),
'L_ACTION_EXPLAIN' => (isset($this->user->lang['EXTENSION_' . $lang . '_EXPLAIN'])) ? $this->user->lang('EXTENSION_' . $lang . '_EXPLAIN') : '',
'ACTION' => $action,
'L_ACTION' => $this->user->lang('EXTENSION_' . $action),
'L_ACTION_EXPLAIN' => (isset($this->user->lang['EXTENSION_' . $action . '_EXPLAIN'])) ? $this->user->lang('EXTENSION_' . $action . '_EXPLAIN') : '',
'U_ACTION' => $url,
]);
}

View file

@ -267,29 +267,111 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
public function test_extensions_catalog_installing_extension()
{
// Lets check page 6 where 'Scroll Page' should be listed
// Lets check page 6 where 'Scroll Page' and 'Scroll To Top' should be listed
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=catalog&start=100&sid=' . $this->sid);
$this->assertContainsLang('ACP_EXTENSIONS_CATALOG', $this->get_content());
// Ensure catalog has any records in extensions list
$this->assertGreaterThan(0, $crawler->filter('tbody > tr > td > strong')->count());
// Attempt to install vse/scrollpage extension
$extension_install_link = $crawler->filter('tr')->reduce(
// Get Install links for both extensions
$scrollpage_install_link = $crawler->filter('tr')->reduce(
function ($node, $i)
{
return (bool) (strpos($node->text(), 'Scroll Page') !== false);
}
)->selectLink($this->lang('INSTALL'))->link();
$crawler = self::$client->click($extension_install_link);
$this->assertContainsLang('EXTENSIONS_INSTALLED', $crawler->filter('.successbox > p')->text());
$scrolltotop_install_link = $crawler->filter('tr')->reduce(
function ($node, $i)
{
return (bool) (strpos($node->text(), 'Scroll To Top') !== false);
}
)->selectLink($this->lang('INSTALL'))->link();
// Attempt to install vse/scrollpage extension
$crawler = self::$client->click($scrollpage_install_link);
$this->assertContainsLang('EXTENSIONS_INSTALLED', $crawler->filter('.successbox > p')->text());
// Assert there's console log output
$this->assertStringContainsString('Installing vse/scrollpage', $crawler->filter('.console-output > pre')->text());
// Attempt to install vse/scrolltotop extension
$crawler = self::$client->click($scrolltotop_install_link);
$this->assertContainsLang('EXTENSIONS_INSTALLED', $crawler->filter('.successbox > p')->text());
// Assert there's console log output
$this->assertStringContainsString('Installing vse/scrolltotop', $crawler->filter('.console-output > pre')->text());
// Ensure installed extension appears in available extensions list
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
$this->assertStringContainsString('Scroll To Top', $crawler->filter('strong[title="vse/scrolltotop"]')->text());
$this->assertStringContainsString('Scroll Page', $crawler->filter('strong[title="vse/scrollpage"]')->text());
}
public function test_extensions_catalog_updating_extension()
{
// Enable 'Scroll Page' extension installed earlier
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
$extension_enable_link = $crawler->filter('tr')->reduce(
function ($node, $i)
{
return (bool) (strpos($node->text(), 'Scroll Page') !== false);
}
)->selectLink($this->lang('EXTENSION_ENABLE'))->link();
$crawler = self::$client->click($extension_enable_link);
$form = $crawler->selectButton($this->lang('EXTENSION_ENABLE'))->form();
$crawler = self::submit($form);
$this->assertContainsLang('EXTENSION_ENABLE_SUCCESS', $crawler->filter('.successbox')->text());
// Update 'Scroll Page' enabled extension
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
$scrollpage_update_link = $crawler->filter('tr')->reduce(
function ($node, $i)
{
return (bool) (strpos($node->text(), 'Scroll Page') !== false);
}
)->selectLink($this->lang('EXTENSION_UPDATE'))->link();
$crawler = self::$client->click($scrollpage_update_link);
$this->assertContainsLang('EXTENSIONS_UPDATED', $crawler->filter('.successbox > p')->text());
// Assert there's console log output
$this->assertStringContainsString('Updating packages', $crawler->filter('.console-output > pre')->text());
// Ensure installed extension still appears in available extensions list
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
$this->assertStringContainsString('Scroll Page', $crawler->filter('strong[title="vse/scrollpage"]')->text());
}
public function test_extensions_catalog_removing_extension()
{
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
// Check if both enabled and disabled extensions have 'Remove' action available
$scrollpage_remove_link = $crawler->filter('tr')->reduce(
function ($node, $i)
{
return (bool) (strpos($node->text(), 'Scroll Page') !== false);
}
)->selectLink($this->lang('EXTENSION_REMOVE'))->link();
$scrolltotop_remove_link = $crawler->filter('tr')->reduce(
function ($node, $i)
{
return (bool) (strpos($node->text(), 'Scroll To Top') !== false);
}
)->selectLink($this->lang('EXTENSION_REMOVE'))->link();
// Test extensions removal
// Remove 'Scroll Page' enabled extension
$crawler = self::$client->click($scrollpage_remove_link);
$this->assertContainsLang('EXTENSIONS_REMOVED', $crawler->filter('.successbox > p')->text());
// Assert there's console log output
$this->assertStringContainsString('Deleting ext/vse/scrollpage', $crawler->filter('.console-output > pre')->text());
// Remove 'Scroll To Top' disabled extension
$crawler = self::$client->click($scrolltotop_remove_link);
$this->assertContainsLang('EXTENSIONS_REMOVED', $crawler->filter('.successbox > p')->text());
// Assert there's console log output
$this->assertStringContainsString('Deleting ext/vse/scrolltotop', $crawler->filter('.console-output > pre')->text());
// Ensure removed extensions do not appear in available extensions list
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
$this->assertStringNotContainsString('Scroll Page', $this->get_content());
$this->assertStringNotContainsString('Scroll To Top', $this->get_content());
}
}