mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-07 20:08:53 +00:00
Merge pull request #2729 from Nicofuma/ticket/12847
[ticket/12847] Allow the extensions to say if they can be enabled * Nicofuma/ticket/12847: [ticket/12847] Allow the extensions to say if they can be enabled
This commit is contained in:
commit
f474e33a43
9 changed files with 96 additions and 2 deletions
|
@ -137,6 +137,12 @@ class acp_extensions
|
|||
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$extension = $phpbb_extension_manager->get_extension($ext_name);
|
||||
if (!$extension->is_enableable())
|
||||
{
|
||||
trigger_error($user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
|
@ -162,6 +168,12 @@ class acp_extensions
|
|||
trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$extension = $phpbb_extension_manager->get_extension($ext_name);
|
||||
if (!$extension->is_enableable())
|
||||
{
|
||||
trigger_error($user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
if ($phpbb_extension_manager->is_enabled($ext_name))
|
||||
{
|
||||
redirect($this->u_action);
|
||||
|
|
|
@ -42,6 +42,7 @@ $lang = array_merge($lang, array(
|
|||
'EXTENSION_INVALID_LIST' => 'The “%s” extension is not valid.<br />%s<br /><br />',
|
||||
'EXTENSION_NOT_AVAILABLE' => 'The selected extension is not available for this board, please verify your phpBB and PHP versions are allowed (see the details page).',
|
||||
'EXTENSION_DIR_INVALID' => 'The selected extension has an invalid directory structure and cannot be enabled.',
|
||||
'EXTENSION_NOT_ENABLEABLE' => 'The selected extension cannot be enabled, please verify the extension’s requirements.',
|
||||
|
||||
'DETAILS' => 'Details',
|
||||
|
||||
|
|
|
@ -54,6 +54,14 @@ class base implements \phpbb\extension\extension_interface
|
|||
$this->extension_path = $extension_path;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function is_enableable()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Single enable step that installs any included migrations
|
||||
*
|
||||
|
|
|
@ -19,6 +19,13 @@ namespace phpbb\extension;
|
|||
*/
|
||||
interface extension_interface
|
||||
{
|
||||
/**
|
||||
* Indicate whether or not the extension can be enabled.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function is_enableable();
|
||||
|
||||
/**
|
||||
* enable_step is executed on enabling an extension until it returns false.
|
||||
*
|
||||
|
|
|
@ -178,6 +178,12 @@ class manager
|
|||
$old_state = (isset($this->extensions[$name]['ext_state'])) ? unserialize($this->extensions[$name]['ext_state']) : false;
|
||||
|
||||
$extension = $this->get_extension($name);
|
||||
|
||||
if (!$extension->is_enableable())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$state = $extension->enable_step($old_state);
|
||||
|
||||
$active = ($state === false);
|
||||
|
|
23
tests/extension/ext/vendor3/foo/composer.json
Normal file
23
tests/extension/ext/vendor3/foo/composer.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"name": "vendor3/foo",
|
||||
"type": "phpbb-extension",
|
||||
"description": "An example/sample extension to be used for testing purposes in phpBB Development.",
|
||||
"version": "1.0.0",
|
||||
"time": "2012-02-15 01:01:01",
|
||||
"license": "GPL-2.0",
|
||||
"authors": [{
|
||||
"name": "John Smith",
|
||||
"email": "email@phpbb.com",
|
||||
"homepage": "http://phpbb.com",
|
||||
"role": "N/A"
|
||||
}],
|
||||
"require": {
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"extra": {
|
||||
"display-name": "phpBB Bar Extension",
|
||||
"soft-require": {
|
||||
"phpbb/phpbb": "3.1.*@dev"
|
||||
}
|
||||
}
|
||||
}
|
20
tests/extension/ext/vendor3/foo/ext.php
Normal file
20
tests/extension/ext/vendor3/foo/ext.php
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace vendor3\foo;
|
||||
|
||||
class ext extends \phpbb\extension\base
|
||||
{
|
||||
static public $enabled;
|
||||
|
||||
public function enable_step($old_state)
|
||||
{
|
||||
self::$enabled = true;
|
||||
|
||||
return self::$enabled;
|
||||
}
|
||||
|
||||
public function is_enableable()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
require_once dirname(__FILE__) . '/ext/vendor2/bar/ext.php';
|
||||
require_once dirname(__FILE__) . '/ext/vendor2/foo/ext.php';
|
||||
require_once dirname(__FILE__) . '/ext/vendor3/foo/ext.php';
|
||||
require_once dirname(__FILE__) . '/ext/vendor/moo/ext.php';
|
||||
|
||||
class phpbb_extension_manager_test extends phpbb_database_test_case
|
||||
|
@ -35,7 +36,7 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
|
|||
public function test_all_available()
|
||||
{
|
||||
// barfoo and vendor3/bar should not listed due to missing composer.json. barfoo also has incorrect dir structure.
|
||||
$this->assertEquals(array('vendor/moo', 'vendor2/bar', 'vendor2/foo'), array_keys($this->extension_manager->all_available()));
|
||||
$this->assertEquals(array('vendor/moo', 'vendor2/bar', 'vendor2/foo', 'vendor3/foo'), array_keys($this->extension_manager->all_available()));
|
||||
}
|
||||
|
||||
public function test_all_enabled()
|
||||
|
@ -100,6 +101,18 @@ class phpbb_extension_manager_test extends phpbb_database_test_case
|
|||
$this->assertEquals(4, vendor2\bar\ext::$state);
|
||||
}
|
||||
|
||||
public function test_enable_not_enableable()
|
||||
{
|
||||
vendor3\foo\ext::$enabled = false;
|
||||
|
||||
$this->assertEquals(array('vendor2/foo'), array_keys($this->extension_manager->all_enabled()));
|
||||
$this->extension_manager->enable('vendor3/foo');
|
||||
$this->assertEquals(array('vendor2/foo'), array_keys($this->extension_manager->all_enabled()));
|
||||
$this->assertEquals(array('vendor/moo', 'vendor2/foo'), array_keys($this->extension_manager->all_configured()));
|
||||
|
||||
$this->assertSame(false, vendor3\foo\ext::$enabled);
|
||||
}
|
||||
|
||||
public function test_disable()
|
||||
{
|
||||
vendor2\foo\ext::$disabled = false;
|
||||
|
|
|
@ -84,7 +84,7 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
|
|||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid);
|
||||
|
||||
$this->assertCount(1, $crawler->filter('.ext_enabled'));
|
||||
$this->assertCount(4, $crawler->filter('.ext_disabled'));
|
||||
$this->assertCount(5, $crawler->filter('.ext_disabled'));
|
||||
|
||||
$this->assertContains('phpBB Foo Extension', $crawler->filter('.ext_enabled')->eq(0)->text());
|
||||
$this->assertContainsLang('EXTENSION_DISABLE', $crawler->filter('.ext_enabled')->eq(0)->text());
|
||||
|
@ -162,6 +162,10 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case
|
|||
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor%2Fmoo&sid=' . $this->sid);
|
||||
$this->assertContains($this->lang('EXTENSION_ENABLE_CONFIRM', 'phpBB Moo Extension'), $crawler->filter('#main')->text());
|
||||
|
||||
// Correctly submit the enable form
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor3%2Ffoo&sid=' . $this->sid);
|
||||
$this->assertContainsLang('EXTENSION_NOT_ENABLEABLE', $crawler->filter('.errorbox')->text());
|
||||
}
|
||||
|
||||
public function test_disable_pre()
|
||||
|
|
Loading…
Add table
Reference in a new issue