aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorMeik Sievertsen <acydburn@phpbb.com>2006-06-14 17:45:06 +0000
committerMeik Sievertsen <acydburn@phpbb.com>2006-06-14 17:45:06 +0000
commit7159120b2509be8b3e3629c283425e307c720fb9 (patch)
treee55e14084deb72c1d2a1a3d57843ea219ecde960 /phpBB
parent90b7ac2dbf14f98605fec7c9e3a4dc71a6b7f816 (diff)
downloadforums-7159120b2509be8b3e3629c283425e307c720fb9.tar
forums-7159120b2509be8b3e3629c283425e307c720fb9.tar.gz
forums-7159120b2509be8b3e3629c283425e307c720fb9.tar.bz2
forums-7159120b2509be8b3e3629c283425e307c720fb9.tar.xz
forums-7159120b2509be8b3e3629c283425e307c720fb9.zip
- store error result in dbal for later retrieving
- use method for moving modules up/down (will be extended later to not only support an amount of 1) - utilize the module methods in installation git-svn-id: file:///svn/phpbb/trunk@6061 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/includes/acp/acp_modules.php205
-rw-r--r--phpBB/includes/db/dbal.php26
-rwxr-xr-xphpBB/install/install_install.php193
3 files changed, 213 insertions, 211 deletions
diff --git a/phpBB/includes/acp/acp_modules.php b/phpBB/includes/acp/acp_modules.php
index f5c7d5fd55..8f6f44f7f9 100644
--- a/phpBB/includes/acp/acp_modules.php
+++ b/phpBB/includes/acp/acp_modules.php
@@ -124,91 +124,13 @@ class acp_modules
}
$db->sql_freeresult($result);
- $module_info = array($module_id => $row);
+ $move_module_name = $this->move_module_by($row, $action, 1);
- // Get the adjacent forum
- $sql = 'SELECT module_id, left_id, right_id, module_langname
- FROM ' . MODULES_TABLE . "
- WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
- AND parent_id = {$row['parent_id']}
- AND " . (($action == 'move_up') ? "right_id < {$row['right_id']} ORDER BY right_id DESC" : "left_id > {$row['left_id']} ORDER BY left_id ASC");
- $result = $db->sql_query_limit($sql, 1);
-
- if (!($row = $db->sql_fetchrow($result)))
+ if ($move_module_name !== false)
{
- // already on top or at bottom
- break;
+ add_log('admin', 'LOG_MODULE_' . strtoupper($action), $move_module_name);
+ $this->remove_cache_file();
}
- $db->sql_freeresult($result);
-
- $module_info[$row['module_id']] = $row;
-
- if ($action == 'move_up')
- {
- $up_id = $module_id;
- $down_id = $row['module_id'];
- }
- else
- {
- $up_id = $row['module_id'];
- $down_id = $module_id;
- }
-
- $move_module_name = $this->lang_name($row['module_langname']);
- $diff_up = $module_info[$up_id]['right_id'] - $module_info[$up_id]['left_id'];
- $diff_down = $module_info[$down_id]['right_id'] - $module_info[$down_id]['left_id'];
-
- $ids = array();
-
- $sql = 'SELECT module_id
- FROM ' . MODULES_TABLE . "
- WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
- AND left_id > " . $module_info[$up_id]['left_id'] . '
- AND right_id < ' . $module_info[$up_id]['right_id'];
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- $ids[] = $row['module_id'];
- }
- $db->sql_freeresult($result);
-
- // Start transaction
- $db->sql_transaction('begin');
-
- $sql = 'UPDATE ' . MODULES_TABLE . '
- SET left_id = left_id + ' . ($diff_up + 1) . ', right_id = right_id + ' . ($diff_up + 1) . "
- WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
- AND left_id > " . $module_info[$down_id]['left_id'] . '
- AND right_id < ' . $module_info[$down_id]['right_id'];
- $db->sql_query($sql);
-
- if (sizeof($ids))
- {
- $sql = 'UPDATE ' . MODULES_TABLE . '
- SET left_id = left_id - ' . ($diff_down + 1) . ', right_id = right_id - ' . ($diff_down + 1) . "
- WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
- AND module_id IN (" . implode(', ', $ids) . ')';
- $db->sql_query($sql);
- }
-
- $sql = 'UPDATE ' . MODULES_TABLE . '
- SET left_id = ' . $module_info[$down_id]['left_id'] . ', right_id = ' . ($module_info[$down_id]['left_id'] + $diff_up) . "
- WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
- AND module_id = $up_id";
- $db->sql_query($sql);
-
- $sql = 'UPDATE ' . MODULES_TABLE . '
- SET left_id = ' . ($module_info[$up_id]['right_id'] - $diff_down) . ', right_id = ' . $module_info[$up_id]['right_id'] . "
- WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
- AND module_id = $down_id";
- $db->sql_query($sql);
-
- $db->sql_transaction('commit');
-
- add_log('admin', 'LOG_MODULE_' . strtoupper($action), $move_module_name);
-
- $this->remove_cache_file();
break;
@@ -781,8 +703,10 @@ class acp_modules
/**
* Update/Add module
+ *
+ * @param bool $run_inline if set to true errors will be returned and no logs being written
*/
- function update_module_data(&$module_data)
+ function update_module_data(&$module_data, $run_inline = false)
{
global $db, $user;
@@ -790,8 +714,6 @@ class acp_modules
{
// no module_id means we're creating a new category/module
- $db->sql_transaction('begin');
-
if ($module_data['parent_id'])
{
$sql = 'SELECT left_id, right_id
@@ -802,6 +724,11 @@ class acp_modules
if (!$row = $db->sql_fetchrow($result))
{
+ if ($run_inline)
+ {
+ return 'PARENT_NO_EXIST';
+ }
+
trigger_error($user->lang['PARENT_NO_EXIST']);
}
$db->sql_freeresult($result);
@@ -836,11 +763,13 @@ class acp_modules
$sql = 'INSERT INTO ' . MODULES_TABLE . ' ' . $db->sql_build_array('INSERT', $module_data);
$db->sql_query($sql);
-
- $db->sql_transaction('commit');
$module_data['module_id'] = $db->sql_nextid();
- add_log('admin', 'LOG_MODULE_ADD', $this->lang_name($module_data['module_langname']));
+
+ if (!$run_inline)
+ {
+ add_log('admin', 'LOG_MODULE_ADD', $this->lang_name($module_data['module_langname']));
+ }
}
else
{
@@ -868,7 +797,10 @@ class acp_modules
AND module_id = {$module_data['module_id']}";
$db->sql_query($sql);
- add_log('admin', 'LOG_MODULE_EDIT', $this->lang_name($module_data['module_langname']));
+ if (!$run_inline)
+ {
+ add_log('admin', 'LOG_MODULE_EDIT', $this->lang_name($module_data['module_langname']));
+ }
}
return array();
@@ -998,6 +930,101 @@ class acp_modules
return array();
}
+
+ /**
+ * Move module position by $amount up/down
+ * @todo support more than one step up/down (at the moment $amount needs to be 1)!
+ */
+ function move_module_by($module_row, $action = 'move_up', $amount)
+ {
+ global $db;
+
+ $module_id = $module_row['module_id'];
+ $module_info = array($module_row['module_id'] => $module_row);
+
+ // Get the adjacent module
+ $sql = 'SELECT module_id, left_id, right_id, module_langname
+ FROM ' . MODULES_TABLE . "
+ WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
+ AND parent_id = {$module_row['parent_id']}
+ AND " . (($action == 'move_up') ? "right_id < {$module_row['right_id']} ORDER BY right_id DESC" : "left_id > {$module_row['left_id']} ORDER BY left_id ASC");
+ $result = $db->sql_query_limit($sql, 1, ($amount - 1));
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ if (!$row)
+ {
+ // already on top or at bottom
+ return false;
+ }
+
+ $module_info[$row['module_id']] = $row;
+
+ if ($action == 'move_up')
+ {
+ $up_id = $module_id;
+ $down_id = $row['module_id'];
+ }
+ else
+ {
+ $up_id = $row['module_id'];
+ $down_id = $module_id;
+ }
+
+ $move_module_name = $this->lang_name($row['module_langname']);
+ $diff_up = $module_info[$up_id]['right_id'] - $module_info[$up_id]['left_id'];
+ $diff_down = $module_info[$down_id]['right_id'] - $module_info[$down_id]['left_id'];
+
+ $ids = array();
+
+ $sql = 'SELECT module_id
+ FROM ' . MODULES_TABLE . "
+ WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
+ AND left_id > " . $module_info[$up_id]['left_id'] . '
+ AND right_id < ' . $module_info[$up_id]['right_id'];
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $ids[] = $row['module_id'];
+ }
+ $db->sql_freeresult($result);
+
+ // Start transaction
+ $db->sql_transaction('begin');
+
+ $sql = 'UPDATE ' . MODULES_TABLE . '
+ SET left_id = left_id + ' . ($diff_up + 1) . ', right_id = right_id + ' . ($diff_up + 1) . "
+ WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
+ AND left_id > " . $module_info[$down_id]['left_id'] . '
+ AND right_id < ' . $module_info[$down_id]['right_id'];
+ $db->sql_query($sql);
+
+ if (sizeof($ids))
+ {
+ $sql = 'UPDATE ' . MODULES_TABLE . '
+ SET left_id = left_id - ' . ($diff_down + 1) . ', right_id = right_id - ' . ($diff_down + 1) . "
+ WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
+ AND module_id IN (" . implode(', ', $ids) . ')';
+ $db->sql_query($sql);
+ }
+
+ $sql = 'UPDATE ' . MODULES_TABLE . '
+ SET left_id = ' . $module_info[$down_id]['left_id'] . ', right_id = ' . ($module_info[$down_id]['left_id'] + $diff_up) . "
+ WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
+ AND module_id = $up_id";
+ $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . MODULES_TABLE . '
+ SET left_id = ' . ($module_info[$up_id]['right_id'] - $diff_down) . ', right_id = ' . $module_info[$up_id]['right_id'] . "
+ WHERE module_class = '" . $db->sql_escape($this->module_class) . "'
+ AND module_id = $down_id";
+ $db->sql_query($sql);
+
+ $db->sql_transaction('commit');
+
+ return $move_module_name;
+ }
}
?> \ No newline at end of file
diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php
index e132cec706..ecfe71f1ef 100644
--- a/phpBB/includes/db/dbal.php
+++ b/phpBB/includes/db/dbal.php
@@ -31,7 +31,13 @@ class dbal
var $user = '';
var $server = '';
var $dbname = '';
-
+
+ // Set to true if error triggered
+ var $sql_error_triggered = false;
+
+ // Holding the last sql query on sql error
+ var $sql_error_sql = '';
+
/**
* Constructor
*/
@@ -49,6 +55,9 @@ class dbal
*/
function sql_return_on_error($fail = false)
{
+ $this->sql_error_triggered = false;
+ $this->sql_error_sql = '';
+
$this->return_on_error = $fail;
}
@@ -167,6 +176,9 @@ class dbal
*
* Idea for this from Ikonboard
* Possible query values: INSERT, INSERT_SELECT, MULTI_INSERT, UPDATE, SELECT
+ *
+ * If a key is 'module_name' and firebird used it gets adjusted to '"module_name"'
+ * on INSERT, INSERT_SELECT, UPDATE and SELECT
*/
function sql_build_array($query, $assoc_ary = false)
{
@@ -175,13 +187,13 @@ class dbal
return false;
}
- $fields = array();
- $values = array();
+ $fields = $values = array();
+
if ($query == 'INSERT' || $query == 'INSERT_SELECT')
{
foreach ($assoc_ary as $key => $var)
{
- $fields[] = $key;
+ $fields[] = ($key == 'module_name' && SQL_LAYER == 'firebird') ? '"' . $key . '"' : $key;
if (is_null($var))
{
@@ -235,6 +247,8 @@ class dbal
$values = array();
foreach ($assoc_ary as $key => $var)
{
+ $key = ($key == 'module_name' && SQL_LAYER == 'firebird') ? '"' . $key . '"' : $key;
+
if (is_null($var))
{
$values[] = "$key = NULL";
@@ -313,6 +327,10 @@ class dbal
{
global $auth, $user;
+ // Set var to retrieve errored status
+ $this->sql_error_triggered = true;
+ $this->sql_error_sql = $sql;
+
$error = $this->_sql_error();
if (!$this->return_on_error)
diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php
index fc0aa675aa..192e0a7007 100755
--- a/phpBB/install/install_install.php
+++ b/phpBB/install/install_install.php
@@ -1136,16 +1136,10 @@ class install_install extends module
/**
* Populate the module tables
*/
- function add_modules($mode, $sub)
+ function add_modules()
{
global $db, $lang, $phpbb_root_path, $phpEx;
- // Obtain any submitted data
- foreach ($this->request_vars as $var)
- {
- $$var = request_var($var, '');
- }
-
include_once($phpbb_root_path . 'includes/constants.' . $phpEx);
include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx);
@@ -1158,24 +1152,18 @@ class install_install extends module
$_module = &new acp_modules();
$module_classes = array('acp', 'mcp', 'ucp');
- switch ($dbms)
- {
- case 'firebird':
- $column_name = '"module_name"';
- break;
-
- default:
- $column_name = 'module_name';
- }
-
+ // Add categories
foreach ($module_classes as $module_class)
{
$categories = array();
+ // Set the module class
+ $_module->module_class = $module_class;
+
foreach ($this->module_categories[$module_class] as $cat_name => $subs)
{
$module_data = array(
- $column_name => '',
+ 'module_name' => '',
'module_enabled' => 1,
'module_display' => 1,
'parent_id' => 0,
@@ -1183,26 +1171,28 @@ class install_install extends module
'module_langname' => $cat_name,
'module_mode' => '',
'module_auth' => '',
-
- 'left_id' => 0,
- 'right_id' => 0,
);
- $sql = 'INSERT INTO ' . MODULES_TABLE . ' ' . $db->sql_build_array('INSERT', $module_data);
- if (!$db->sql_query($sql))
+ // Add category
+ $_module->update_module_data($module_data, true);
+
+ // Check for last sql error happened
+ if ($db->sql_error_triggered)
{
- $error = $db->sql_error();
- $this->p_master->db_error($error['message'], $sql, __LINE__, __FILE__);
+ $error = $db->sql_error($db->sql_error_sql);
+ $this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__);
}
- $categories[$cat_name]['id'] = $db->sql_nextid();
+
+ $categories[$cat_name]['id'] = $module_data['module_id'];
$categories[$cat_name]['parent_id'] = 0;
+ // Create sub-categories...
if (is_array($subs))
{
foreach ($subs as $level2_name)
{
$module_data = array(
- $column_name => '',
+ 'module_name' => '',
'module_enabled' => 1,
'module_display' => 1,
'parent_id' => $categories[$cat_name]['id'],
@@ -1210,26 +1200,24 @@ class install_install extends module
'module_langname' => $level2_name,
'module_mode' => '',
'module_auth' => '',
-
- 'left_id' => 0,
- 'right_id' => 0,
);
- $sql = 'INSERT INTO ' . MODULES_TABLE . ' ' . $db->sql_build_array('INSERT', $module_data);
- if (!$db->sql_query($sql))
+ $_module->update_module_data($module_data, true);
+
+ // Check for last sql error happened
+ if ($db->sql_error_triggered)
{
- $error = $db->sql_error();
- $this->p_master->db_error($error['message'], $sql, __LINE__, __FILE__);
+ $error = $db->sql_error($db->sql_error_sql);
+ $this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__);
}
- $categories[$level2_name]['id'] = $db->sql_nextid();
+
+ $categories[$level2_name]['id'] = $module_data['module_id'];
$categories[$level2_name]['parent_id'] = $categories[$cat_name]['id'];
}
}
}
- recalc_btree('module_id', MODULES_TABLE, $module_class);
-
- // Get the modules we want to add...
+ // Get the modules we want to add... returned sorted by name
$module_info = $_module->get_module_infos('', $module_class);
foreach ($module_info as $module_name => $fileinfo)
@@ -1239,7 +1227,7 @@ class install_install extends module
foreach ($row['cat'] as $cat_name)
{
$module_data = array(
- $column_name => $module_name,
+ 'module_name' => $module_name,
'module_enabled' => 1,
'module_display' => (isset($row['display'])) ? $row['display'] : 1,
'parent_id' => $categories[$cat_name]['id'],
@@ -1249,43 +1237,14 @@ class install_install extends module
'module_auth' => $row['auth'],
);
- $sql = 'SELECT left_id, right_id
- FROM ' . MODULES_TABLE . "
- WHERE module_class = '" . $module_class . "'
- AND module_id = {$module_data['parent_id']}";
- $result = $db->sql_query($sql);
-
- $row2 = $db->sql_fetchrow($result);
-
- $db->sql_freeresult($result);
+ $_module->update_module_data($module_data, true);
- if ($categories[$cat_name]['parent_id'] || $module_class != 'acp')
+ // Check for last sql error happened
+ if ($db->sql_error_triggered)
{
- $sql = 'UPDATE ' . MODULES_TABLE . "
- SET left_id = left_id + 2, right_id = right_id + 2
- WHERE module_class = '" . $module_class . "'
- AND left_id > {$row2['right_id']}";
- $db->sql_query($sql);
-
- $sql = 'UPDATE ' . MODULES_TABLE . "
- SET right_id = right_id + 2
- WHERE module_class = '" . $module_class . "'
- AND {$row2['left_id']} BETWEEN left_id AND right_id";
- $db->sql_query($sql);
+ $error = $db->sql_error($db->sql_error_sql);
+ $this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__);
}
- else
- {
- $sql = 'UPDATE ' . MODULES_TABLE . "
- SET left_id = left_id + 3, right_id = right_id + 3
- WHERE module_class = '" . $module_class . "'
- AND left_id > {$row2['left_id']}";
- $db->sql_query($sql);
- }
- $module_data['left_id'] = ($categories[$cat_name]['parent_id']) ? $row2['right_id'] : $row2['left_id'] + 1;
- $module_data['right_id'] = ($categories[$cat_name]['parent_id']) ? $row2['right_id'] + 1 : $row2['left_id'] + 2;
-
- $sql = 'INSERT INTO ' . MODULES_TABLE . ' ' . $db->sql_build_array('INSERT', $module_data);
- $db->sql_query($sql);
}
}
}
@@ -1294,33 +1253,35 @@ class install_install extends module
// Manage Users should ideally be the first thing you see on the Users & groups tab
if ($module_class == 'acp')
{
- $sql = 'SELECT module_id, left_id, right_id FROM ' . MODULES_TABLE . "
- WHERE module_langname = 'ACP_CAT_USERS'
- AND module_class = 'acp'";
- $result = $db->sql_query_limit($sql, 1);
- $row2 = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $sql = 'UPDATE ' . MODULES_TABLE . "
- SET left_id = left_id + 3, right_id = right_id + 3
- WHERE module_class = 'acp'
- AND left_id > {$row2['left_id']}
- AND left_id < {$row2['right_id']}";
- $db->sql_query($sql);
-
- $sql = 'SELECT * FROM ' . MODULES_TABLE . "
- WHERE module_langname = 'ACP_MANAGE_USERS'
- AND module_class = 'acp'";
- $result = $db->sql_query_limit($sql, 1);
- $module_data = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
-
- $module_data['left_id'] = $row2['left_id'] + 1;
- $module_data['right_id'] = $row2['left_id'] + 2;
-
- $sql = 'UPDATE ' . MODULES_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $module_data) . "
- WHERE module_id = {$module_data['module_id']}";
- $db->sql_query($sql);
+ // Move main module 4 up...
+ for ($i = 1; $i <= 4; $i++)
+ {
+ $sql = 'SELECT *
+ FROM ' . MODULES_TABLE . "
+ WHERE module_name = 'main'
+ AND module_class = 'acp'
+ AND module_mode = 'main'";
+ $result = $db->sql_query($sql);
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ $_module->move_module_by($row, 'move_up', 1);
+ }
+
+ // Move permissions intro screen module 4 up...
+ for ($i = 1; $i <= 4; $i++)
+ {
+ $sql = 'SELECT *
+ FROM ' . MODULES_TABLE . "
+ WHERE module_name = 'permissions'
+ AND module_class = 'acp'
+ AND module_mode = 'intro'";
+ $result = $db->sql_query($sql);
+ $row = $db->sql_fetchrow($result);
+ $db->sql_freeresult($result);
+
+ $_module->move_module_by($row, 'move_up', 1);
+ }
}
// And now for the special ones
@@ -1340,36 +1301,31 @@ class install_install extends module
{
$sql = 'SELECT * FROM ' . MODULES_TABLE . "
WHERE module_langname = '$mod_name'
- AND module_class = '$module_class'
+ AND module_class = '$module_class'
+ AND module_name <> ''
LIMIT 1";
$result = $db->sql_query($sql);
$module_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
- $sql = 'UPDATE ' . MODULES_TABLE . "
- SET left_id = left_id + 2, right_id = right_id + 2
- WHERE module_class = '" . $module_class . "'
- AND left_id > {$row2['right_id']}";
- $db->sql_query($sql);
-
- $sql = 'UPDATE ' . MODULES_TABLE . "
- SET right_id = right_id + 2
- WHERE module_class = '" . $module_class . "'
- AND {$row2['left_id']} BETWEEN left_id AND right_id";
- $db->sql_query($sql);
-
unset($module_data['module_id']);
+ unset($module_data['left_id']);
+ unset($module_data['right_id']);
+
$module_data['parent_id'] = $row2['module_id'];
- $module_data['left_id'] = $row2['right_id'];
- $module_data['right_id'] = $row2['right_id'] + 1;
- $sql = 'INSERT INTO ' . MODULES_TABLE . ' ' . $db->sql_build_array('INSERT', $module_data);
- $db->sql_query($sql);
+ $_module->update_module_data($module_data, true);
+
+ // Check for last sql error happened
+ if ($db->sql_error_triggered)
+ {
+ $error = $db->sql_error($db->sql_error_sql);
+ $this->p_master->db_error($error['message'], $db->sql_error_sql, __LINE__, __FILE__);
+ }
}
}
}
- recalc_btree('module_id', MODULES_TABLE, $module_class);
$_module->remove_cache_file();
}
}
@@ -1876,6 +1832,7 @@ class install_install extends module
'UCP_ZEBRA' => null,
),
);
+
var $module_extras = array(
'acp' => array(
'ACP_QUICK_ACCESS' => array(