[ticket/416] Only allow adding module more than once on proper modules

B3P-416
This commit is contained in:
Marc Alexander
2014-12-02 17:50:23 +01:00
parent 4bfd4212f4
commit 7dabf61f6b
8 changed files with 54 additions and 7 deletions

View File

@@ -443,6 +443,13 @@ class portal_module
continue;
}
// Do not install if module already exists in the
// column and it can't be added more than once
if (!$this->c_class->can_multi_include() && !$this->modules_constraints->can_move_module($this->portal_columns->number_to_string($add_column), $module_classname))
{
trigger_error($this->user->lang['MODULE_ADD_ONCE'] . adm_back_link($this->u_action), E_USER_WARNING);
}
$sql = 'SELECT module_order
FROM ' . PORTAL_MODULES_TABLE . '
WHERE module_column = ' . $add_column . '
@@ -505,6 +512,13 @@ class portal_module
// Find new modules
foreach ($modules_list as $module_class => $module)
{
// Do not install if module already exists in the
// column and it can't be added more than once
if (!$module->can_multi_include() && !$this->modules_constraints->can_move_module($this->portal_columns->number_to_string($add_column), $module_class))
{
continue;
}
if ($module->get_allowed_columns() & $this->portal_columns->string_to_constant($add_module))
{
if ($module->get_language())

View File

@@ -41,6 +41,9 @@ class announcements extends module_base
*/
public $language = 'portal_announcements_module';
/** @var bool Can include this module multiple times */
protected $multiple_includes = true;
/** @var \phpbb\auth\auth */
protected $auth;

View File

@@ -47,6 +47,9 @@ class custom extends module_base
*/
public $custom_acp_tpl = 'acp_portal_custom';
/** @var bool Can include this module multiple times */
protected $multiple_includes = true;
/** @var \phpbb\config\config */
protected $config;

View File

@@ -47,6 +47,9 @@ class links extends module_base
*/
public $custom_acp_tpl = 'acp_portal_links';
/** @var bool Can include this module multiple times */
protected $multiple_includes = true;
/**
* constants
*/

View File

@@ -47,6 +47,9 @@ class main_menu extends module_base
*/
public $custom_acp_tpl = 'acp_portal_menu';
/** @var bool Can include this module multiple times */
protected $multiple_includes = true;
/**
* constants
*/

View File

@@ -26,6 +26,9 @@ class module_base implements module_interface
/** @var string Module language file */
protected $language;
/** @var bool Can include this module multiple times */
protected $multiple_includes = false;
/**
* {@inheritdoc}
*/
@@ -97,4 +100,12 @@ class module_base implements module_interface
{
return true;
}
/**
* {@inheritdoc}
*/
public function can_multi_include()
{
return $this->multiple_includes;
}
}

View File

@@ -95,9 +95,16 @@ interface module_interface
* Executes any additional commands for uninstalling the module
*
* @param int $module_id Module's ID
* @param \phpbb\db\driver $db phpBB dbal driver
* @param \phpbb\db\driver\driver_interface $db phpBB dbal driver
*
* @return bool True if uninstall was successful, false if not
*/
public function uninstall($module_id, $db);
/**
* Whether module can be included more than once
*
* @return bool True if module can be included more than once, false if not
*/
public function can_multi_include();
}

View File

@@ -41,16 +41,19 @@ class news extends module_base
*/
public $language = 'portal_news_module';
/** @var bool Can include this module multiple times */
protected $multiple_includes = true;
/** @var \phpbb\auth\auth */
protected $auth;
/** @var \phpbb\cache */
/** @var \phpbb\cache\service */
protected $cache;
/** @var \phpbb\config\config */
protected $config;
/** @var \phpbb\db\driver */
/** @var \phpbb\db\driver\driver_Interface */
protected $db;
/** @var \phpbb\pagination */
@@ -62,7 +65,7 @@ class news extends module_base
/** @var \phpbb\request\request */
protected $request;
/** @var \phpbb\template */
/** @var \phpbb\template\template */
protected $template;
/** @var string PHP file extension */
@@ -81,13 +84,13 @@ class news extends module_base
* Construct a news object
*
* @param \phpbb\auth\auth $auth phpBB auth
* @param \phpbb\cache $cache phpBB cache system
* @param \phpbb\cache\service $cache phpBB cache system
* @param \phpbb\config\config $config phpBB config
* @param \phpbb\db\driver $db phpBB db driver
* @param \phpbb\db\driver\driver_interface $db phpBB db driver
* @param \phpbb\pagination $pagination phpBB pagination
* @param \board3\portal\includes\modules_helper $modules_helper Portal modules helper
* @param \phpbb\request\request $request phpBB request
* @param \phpbb\template $template phpBB template
* @param \phpbb\template\template $template phpBB template
* @param string $phpbb_root_path phpBB root path
* @param string $phpEx php file extension
* @param \phpbb\user $user phpBB user object