|
From: Meik S. <acy...@ph...> - 2009-08-31 09:39:12
|
Author: acydburn
Date: Mon Aug 31 10:38:53 2009
New Revision: 10072
Log:
ok, now we just define the modules we want to install on update and where they should appear.
Modified:
branches/phpBB-3_0_0/phpBB/install/database_update.php
Modified: branches/phpBB-3_0_0/phpBB/install/database_update.php
==============================================================================
*** branches/phpBB-3_0_0/phpBB/install/database_update.php (original)
--- branches/phpBB-3_0_0/phpBB/install/database_update.php Mon Aug 31 10:38:53 2009
***************
*** 575,580 ****
--- 575,701 ----
}
}
+ function _add_modules($modules_to_install)
+ {
+ global $phpbb_root_path, $phpEx, $db;
+
+ include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx);
+
+ $_module = new acp_modules();
+
+ foreach ($modules_to_install as $module_mode => $module_data)
+ {
+ $_module->module_class = $module_data['class'];
+
+ // Determine parent id first
+ $sql = 'SELECT module_id
+ FROM ' . MODULES_TABLE . "
+ WHERE module_class = '" . $db->sql_escape($module_data['class']) . "'
+ AND module_langname = '" . $db->sql_escape($module_data['cat']) . "'
+ AND module_mode = ''
+ AND module_basename = ''";
+ $result = $db->sql_query($sql);
+
+ // There may be more than one categories with the same name
+ $categories = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $categories[] = (int) $row['module_id'];
+ }
+ $db->sql_freeresult($result);
+
+ if (!sizeof($categories))
+ {
+ continue;
+ }
+
+ // Add the module to all categories found
+ foreach ($categories as $parent_id)
+ {
+ // Check if the module already exists
+ $sql = 'SELECT *
+ FROM ' . MODULES_TABLE . "
+ WHERE module_basename = '" . $db->sql_escape($module_data['base']) . "'
+ AND module_class = '" . $db->sql_escape($module_data['class']) . "'
+ AND module_langname = '" . $db->sql_escape($module_data['title']) . "'
+ AND module_mode = '" . $db->sql_escape($module_mode) . "'
+ AND module_auth = '" . $db->sql_escape($module_data['auth']) . "'
+ AND parent_id = {$parent_id}";
+ $result = $db->sql_query($sql);
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ // If it exists, we simply continue with the next category
+ if ($row)
+ {
+ continue;
+ }
+
+ // Build the module sql row
+ $module_row = array(
+ 'module_basename' => $module_data['base'],
+ 'module_enabled' => (isset($module_data['enabled'])) ? (int) $module_data['enabled'] : 1,
+ 'module_display' => (isset($module_data['display'])) ? (int) $module_data['display'] : 1,
+ 'parent_id' => $parent_id,
+ 'module_class' => $module_data['class'],
+ 'module_langname' => $module_data['title'],
+ 'module_mode' => $module_mode,
+ 'module_auth' => $module_data['auth'],
+ );
+
+ $_module->update_module_data($module_row, true);
+
+ // Ok, do we need to re-order the module, move it up or down?
+ if (!isset($module_data['after']))
+ {
+ continue;
+ }
+
+ $after_mode = $module_data['after'][0];
+ $after_langname = $module_data['after'][1];
+
+ // First of all, get the module id for the module this one has to be placed after
+ $sql = 'SELECT left_id
+ FROM ' . MODULES_TABLE . "
+ WHERE module_class = '" . $db->sql_escape($module_data['class']) . "'
+ AND module_basename = '" . $db->sql_escape($module_data['base']) . "'
+ AND module_langname = '" . $db->sql_escape($after_langname) . "'
+ AND module_mode = '" . $db->sql_escape($after_mode) . "'
+ AND parent_id = '{$parent_id}'";
+ $result = $db->sql_query($sql);
+ $first_left_id = (int) $db->sql_fetchfield('left_id');
+ $db->sql_freeresult($result);
+
+ if (!$first_left_id)
+ {
+ continue;
+ }
+
+ // Ok, count the number of modules between $after_mode and the added module
+ $sql = 'SELECT COUNT(module_id) as num_modules
+ FROM ' . MODULES_TABLE . "
+ WHERE module_class = '" . $db->sql_escape($module_data['class']) . "'
+ AND parent_id = {$parent_id}
+ AND left_id BETWEEN {$first_left_id} AND {$module_row['left_id']}
+ ORDER BY left_id";
+ $result = $db->sql_query($sql);
+ $steps = (int) $db->sql_fetchfield('num_modules');
+ $db->sql_freeresult($result);
+
+ // We need to substract 2
+ $steps -= 2;
+
+ if ($steps <= 0)
+ {
+ continue;
+ }
+
+ // Ok, move module up $num_modules times. ;)
+ $_module->move_module_by($module_row, 'move_up', $steps);
+ }
+ }
+ }
+
/****************************************************************************
* ADD YOUR DATABASE SCHEMA CHANGES HERE *
*****************************************************************************/
***************
*** 1124,1353 ****
// Entry for reporting PMs
set_config('allow_pm_report', '1');
! include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx);
!
! $_module = new acp_modules();
!
! // Set the module class
! $_module->module_class = 'acp';
!
! $sql = 'SELECT module_id
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'acp'
! AND module_langname = 'ACP_BOARD_CONFIGURATION'
! AND module_mode = ''
! AND module_basename = ''";
! $result = $db->sql_query($sql);
! $category_id = (int) $db->sql_fetchfield('module_id');
! $db->sql_freeresult($result);
!
! if ($category_id)
! {
! // Check if we actually need to add the feed module or if it is already added. ;)
! $sql = 'SELECT *
! FROM ' . MODULES_TABLE . "
! WHERE module_basename = 'board'
! AND module_class = 'acp'
! AND module_langname = 'ACP_FEED_SETTINGS'
! AND module_mode = 'feed'
! AND module_auth = 'acl_a_board'
! AND parent_id = {$category_id}";
! $result = $db->sql_query($sql);
! $row = $db->sql_fetchrow($result);
! $db->sql_freeresult($result);
!
! if (!$row)
! {
! $module_data = array(
! 'module_basename' => 'board',
! 'module_enabled' => 1,
! 'module_display' => 1,
! 'parent_id' => $category_id,
! 'module_class' => 'acp',
! 'module_langname' => 'ACP_FEED_SETTINGS',
! 'module_mode' => 'feed',
! 'module_auth' => 'acl_a_board',
! );
!
! $_module->update_module_data($module_data, true);
! }
! }
!
! // Also install the "User Warning" module
! $sql = 'SELECT module_id
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'acp'
! AND module_langname = 'ACP_USER_MANAGEMENT'
! AND module_mode = ''
! AND module_basename = ''";
! $result = $db->sql_query($sql);
! $category_id = (int) $db->sql_fetchfield('module_id');
! $db->sql_freeresult($result);
!
! if ($category_id)
! {
! // Check if we actually need to add the module or if it is already added. ;)
! $sql = 'SELECT *
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'acp'
! AND module_langname = 'ACP_USER_WARNINGS'
! AND module_mode = 'warnings'
! AND module_auth = 'acl_a_user'
! AND parent_id = {$category_id}";
! $result = $db->sql_query($sql);
! $row = $db->sql_fetchrow($result);
! $db->sql_freeresult($result);
!
! if (!$row)
! {
! $module_data = array(
! 'module_basename' => 'users',
! 'module_enabled' => 1,
! 'module_display' => 0,
! 'parent_id' => $category_id,
! 'module_class' => 'acp',
! 'module_langname' => 'ACP_USER_WARNINGS',
! 'module_mode' => 'warnings',
! 'module_auth' => 'acl_a_user',
! );
!
! $_module->update_module_data($module_data, true);
! }
! }
!
! // Also install the "PM Reports" module
! $sql = 'SELECT module_id
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'mcp'
! AND module_langname = 'MCP_REPORTS'
! AND module_mode = ''
! AND module_basename = ''";
! $result = $db->sql_query($sql);
! $category_id = (int) $db->sql_fetchfield('module_id');
! $db->sql_freeresult($result);
!
! if ($category_id)
! {
! $modes = array(
! 'pm_reports' => array('title' => 'MCP_PM_REPORTS_OPEN', 'auth' => 'aclf_m_report'),
! 'pm_reports_closed' => array('title' => 'MCP_PM_REPORTS_CLOSED', 'auth' => 'aclf_m_report'),
! 'pm_report_details' => array('title' => 'MCP_PM_REPORT_DETAILS', 'auth' => 'aclf_m_report'),
! );
!
! foreach ($modes as $mode => $data)
! {
! // Check if we actually need to add the module or if it is already added. ;)
! $sql = 'SELECT *
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'mcp'
! AND module_langname = '{$data['title']}'
! AND module_mode = '$mode'
! AND parent_id = {$category_id}";
! $result = $db->sql_query($sql);
! $row = $db->sql_fetchrow($result);
! $db->sql_freeresult($result);
!
! if (!$row)
! {
! $module_data = array(
! 'module_basename' => 'pm_reports',
! 'module_enabled' => 1,
! 'module_display' => 1,
! 'parent_id' => $category_id,
! 'module_class' => 'mcp',
! 'module_langname' => $data['title'],
! 'module_mode' => $mode,
! 'module_auth' => $data['auth'],
! );
!
! $_module->update_module_data($module_data, true);
! }
! }
! }
!
! // Also install the "Copy forum permissions" module
! $sql = 'SELECT module_id
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'acp'
! AND module_langname = 'ACP_FORUM_BASED_PERMISSIONS'
! AND module_mode = ''
! AND module_basename = ''";
! $result = $db->sql_query($sql);
! $category_id = (int) $db->sql_fetchfield('module_id');
! $db->sql_freeresult($result);
!
! if ($category_id)
! {
! // Check if we actually need to add the feed module or if it is already added. ;)
! $sql = 'SELECT *
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'acp'
! AND module_langname = 'ACP_FORUM_PERMISSIONS_COPY'
! AND module_mode = 'setting_forum_copy'
! AND module_auth = 'acl_a_fauth && acl_a_authusers && acl_a_authgroups && acl_a_mauth'
! AND parent_id = {$category_id}";
! $result = $db->sql_query($sql);
! $row = $db->sql_fetchrow($result);
! $db->sql_freeresult($result);
!
! if (!$row)
! {
! $module_data = array(
! 'module_basename' => 'permissions',
! 'module_enabled' => 1,
! 'module_display' => 1,
! 'parent_id' => $category_id,
! 'module_class' => 'acp',
! 'module_langname' => 'ACP_FORUM_PERMISSIONS_COPY',
! 'module_mode' => 'setting_forum_copy',
! 'module_auth' => 'acl_a_fauth && acl_a_authusers && acl_a_authgroups && acl_a_mauth',
! );
!
! $_module->update_module_data($module_data, true);
! }
! }
!
! // Also install the "Send statistics" module
! $sql = 'SELECT module_id
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'acp'
! AND module_langname = 'ACP_SERVER_CONFIGURATION'
! AND module_mode = ''
! AND module_basename = ''";
! $result = $db->sql_query($sql);
! $category_id = (int) $db->sql_fetchfield('module_id');
! $db->sql_freeresult($result);
!
! if ($category_id)
! {
! // Check if we need to add the module or if it is already there. ;)
! $sql = 'SELECT *
! FROM ' . MODULES_TABLE . "
! WHERE module_class = 'acp'
! AND module_langname = 'ACP_SEND_STATISTICS'
! AND module_mode = 'send_statistics'
! AND module_auth = 'acl_a_server'
! AND parent_id = {$category_id}";
! $result = $db->sql_query($sql);
! $row = $db->sql_fetchrow($result);
! $db->sql_freeresult($result);
!
! if (!$row)
! {
! $module_data = array(
! 'module_basename' => 'send_statistics',
! 'module_enabled' => 1,
! 'module_display' => 1,
! 'parent_id' => $category_id,
! 'module_class' => 'acp',
! 'module_langname' => 'ACP_SEND_STATISTICS',
! 'module_mode' => 'send_statistics',
! 'module_auth' => 'acl_a_server',
! );
! $_module->update_module_data($module_data, true);
! }
! }
$_module->remove_cache_file();
--- 1245,1308 ----
// Entry for reporting PMs
set_config('allow_pm_report', '1');
! // Install modules
! $modules_to_install = array(
! 'feed' => array(
! 'base' => 'board',
! 'class' => 'acp',
! 'title' => 'ACP_FEED_SETTINGS',
! 'auth' => 'acl_a_board',
! 'cat' => 'ACP_BOARD_CONFIGURATION',
! 'after' => array('signature', 'ACP_SIGNATURE_SETTINGS')
! ),
! 'warnings' => array(
! 'base' => 'users',
! 'class' => 'acp',
! 'title' => 'ACP_USER_WARNINGS',
! 'auth' => 'acl_a_user',
! 'display' => 0,
! 'cat' => 'ACP_CAT_USERS',
! 'after' => array('feedback', 'ACP_USER_FEEDBACK')
! ),
! 'send_statistics' => array(
! 'base' => 'send_statistics',
! 'class' => 'acp',
! 'title' => 'ACP_SEND_STATISTICS',
! 'auth' => 'acl_a_server',
! 'cat' => 'ACP_SERVER_CONFIGURATION'
! ),
! 'setting_forum_copy' => array(
! 'base' => 'permissions',
! 'class' => 'acp',
! 'title' => 'ACP_FORUM_PERMISSIONS_COPY',
! 'auth' => 'acl_a_fauth && acl_a_authusers && acl_a_authgroups && acl_a_mauth',
! 'cat' => 'ACP_FORUM_BASED_PERMISSIONS',
! 'after' => array('setting_forum_local', 'ACP_FORUM_PERMISSIONS')
! ),
! 'pm_reports' => array(
! 'base' => 'pm_reports',
! 'class' => 'mcp',
! 'title' => 'MCP_PM_REPORTS_OPEN',
! 'auth' => 'aclf_m_report',
! 'cat' => 'MCP_REPORTS'
! ),
! 'pm_reports_closed' => array(
! 'base' => 'pm_reports',
! 'class' => 'mcp',
! 'title' => 'MCP_PM_REPORTS_CLOSED',
! 'auth' => 'aclf_m_report',
! 'cat' => 'MCP_REPORTS'
! ),
! 'pm_report_details' => array(
! 'base' => 'pm_reports',
! 'class' => 'mcp',
! 'title' => 'MCP_PM_REPORT_DETAILS',
! 'auth' => 'aclf_m_report',
! 'cat' => 'MCP_REPORTS'
! ),
! );
! _add_modules($modules_to_install);
$_module->remove_cache_file();
|