mirror of
https://github.com/phpbb/phpbb.git
synced 2025-03-22 16:40:21 +01:00
Merge branch '3.3.x'
This commit is contained in:
commit
b007374726
@ -215,10 +215,8 @@ class acp_extensions
|
||||
}
|
||||
|
||||
$extension = $this->ext_manager->get_extension($ext_name);
|
||||
if (!$extension->is_enableable())
|
||||
{
|
||||
trigger_error($this->user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$this->check_is_enableable($extension);
|
||||
|
||||
if ($this->ext_manager->is_enabled($ext_name))
|
||||
{
|
||||
@ -252,10 +250,8 @@ class acp_extensions
|
||||
}
|
||||
|
||||
$extension = $this->ext_manager->get_extension($ext_name);
|
||||
if (!$extension->is_enableable())
|
||||
{
|
||||
trigger_error($this->user->lang['EXTENSION_NOT_ENABLEABLE'] . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
|
||||
$this->check_is_enableable($extension);
|
||||
|
||||
try
|
||||
{
|
||||
@ -1130,4 +1126,28 @@ class acp_extensions
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the extension can be enabled. Triggers error if not.
|
||||
* Error message can be set by the extension.
|
||||
*
|
||||
* @param \phpbb\extension\extension_interface $extension Extension to check
|
||||
*/
|
||||
protected function check_is_enableable(\phpbb\extension\extension_interface $extension)
|
||||
{
|
||||
$message = $extension->is_enableable();
|
||||
if ($message !== true)
|
||||
{
|
||||
if (empty($message))
|
||||
{
|
||||
$message = $this->user->lang('EXTENSION_NOT_ENABLEABLE');
|
||||
}
|
||||
else if (is_array($message))
|
||||
{
|
||||
$message = implode('<br>', $message);
|
||||
}
|
||||
|
||||
trigger_error($message . adm_back_link($this->u_action), E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,7 +69,10 @@ class enable extends command
|
||||
}
|
||||
else
|
||||
{
|
||||
$io->error($this->user->lang('CLI_EXTENSION_ENABLE_FAILURE', $name));
|
||||
$enableable = $this->manager->get_extension($name)->is_enableable();
|
||||
$message = !empty($enableable) ? $enableable : $this->user->lang('CLI_EXTENSION_ENABLE_FAILURE');
|
||||
$message = is_array($message) ? implode(PHP_EOL, $message) : $message;
|
||||
$io->error($message, $name);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,8 @@ interface extension_interface
|
||||
/**
|
||||
* Indicate whether or not the extension can be enabled.
|
||||
*
|
||||
* @return bool
|
||||
* @return bool|array True if extension is enableable, array of reasons
|
||||
* if not, false for generic reason.
|
||||
*/
|
||||
public function is_enableable();
|
||||
|
||||
|
23
tests/extension/ext/vendor5/foo/composer.json
Normal file
23
tests/extension/ext/vendor5/foo/composer.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "vendor5/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.3.*@dev"
|
||||
}
|
||||
}
|
||||
}
|
19
tests/extension/ext/vendor5/foo/ext.php
Normal file
19
tests/extension/ext/vendor5/foo/ext.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace vendor5\foo;
|
||||
|
||||
class ext extends \phpbb\extension\base
|
||||
{
|
||||
static public $enabled;
|
||||
|
||||
public function is_enableable()
|
||||
{
|
||||
return array('Reason 1', 'Reason 2');
|
||||
}
|
||||
|
||||
public function enable_step($old_state)
|
||||
{
|
||||
self::$enabled = true;
|
||||
return self::$enabled;
|
||||
}
|
||||
}
|
@ -36,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', 'vendor3/foo', 'vendor4/bar'), array_keys($this->extension_manager->all_available()));
|
||||
$this->assertEquals(array('vendor/moo', 'vendor2/bar', 'vendor2/foo', 'vendor3/foo', 'vendor4/bar', 'vendor5/foo'), array_keys($this->extension_manager->all_available()));
|
||||
}
|
||||
|
||||
public function test_all_enabled()
|
||||
|
@ -86,7 +86,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(6, $crawler->filter('.ext_disabled'));
|
||||
$this->assertCount(7, $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());
|
||||
@ -165,9 +165,14 @@ 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
|
||||
// Correctly submit the enable form, default not enableable message
|
||||
$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());
|
||||
|
||||
// Custom reason messages returned by not enableable extension
|
||||
$crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&action=enable_pre&ext_name=vendor5%2Ffoo&sid=' . $this->sid);
|
||||
$this->assertContains('Reason 1', $crawler->filter('.errorbox')->text());
|
||||
$this->assertContains('Reason 2', $crawler->filter('.errorbox')->text());
|
||||
}
|
||||
|
||||
public function test_disable_pre()
|
||||
|
Loading…
x
Reference in New Issue
Block a user