diff --git a/phpBB/admin/admin_groups.php b/phpBB/admin/admin_groups.php
index 0411c32959..5874679552 100644
--- a/phpBB/admin/admin_groups.php
+++ b/phpBB/admin/admin_groups.php
@@ -45,13 +45,49 @@ if (!$auth->acl_get('a_group') )
// Check and set some common vars
-$action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ((isset($_POST['addgroup'])) ? 'addgroup' : '');
+$mode = (isset($_REQUEST['mode'])) ? $_REQUEST['mode'] : '';
+if (isset($_POST['addgroup']))
+{
+ $action = 'addgroup';
+}
+else if (isset($_POST['delete']))
+{
+ $action = 'delete';
+}
+else if (isset($_POST['add']))
+{
+ $action = 'add';
+}
+else
+{
+ $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : '';
+}
$group_id = (isset($_REQUEST['g'])) ? intval($_REQUEST['g']) : '';
-$start = (isset($_GET['start'])) ? intval($_GET['start']) : 0;
-// Which page?
+$start = (isset($_GET['start']) && $mode == 'member') ? intval($_GET['start']) : 0;
+$start_mod = (isset($_GET['start']) && $mode == 'mod') ? intval($_GET['start']) : 0;
+$start_pend = (isset($_GET['start']) && $mode == 'pend') ? intval($_GET['start']) : 0;
+
+// Grab basic data for group, if group_id is set since it's used
+// in several places below
+if (!empty($group_id))
+{
+ $sql = "SELECT *
+ FROM " . GROUPS_TABLE . "
+ WHERE group_id = $group_id";
+ $result = $db->sql_query($sql);
+
+ if (!extract($db->sql_fetchrow($result)))
+ {
+ trigger_error($user->lang['NO_GROUP']);
+ }
+ $db->sql_freeresult($result);
+}
+
+// Page header
page_header($user->lang['MANAGE']);
+// Which page?
switch ($action)
{
case 'edit':
@@ -59,21 +95,6 @@ switch ($action)
$error = '';
- // Grab data, even when submitting updates
- if ($action == 'edit')
- {
- $sql = "SELECT *
- FROM " . GROUPS_TABLE . "
- WHERE group_id = $group_id";
- $result = $db->sql_query($sql);
-
- if (!extract($db->sql_fetchrow($result)))
- {
- trigger_error($user->lang['NO_GROUP']);
- }
- $db->sql_freeresult($result);
- }
-
// Did we submit?
if (isset($_POST['submit']) || isset($_POST['submitprefs']))
{
@@ -340,16 +361,7 @@ function swatch()
lang['DISABLED']; ?> lang['ENABLED']; ?> lang['USER_DEFAULT']; ?> |
- |
+ |
@@ -359,11 +371,112 @@ function swatch()
break;
+ case 'deletegroup':
+
+ break;
+
case 'add':
+
+ if (empty($_POST['usernames']))
+ {
+ trigger_error($user->lang['NO_USERS']);
+ }
+ $users = explode("\n", $_POST['usernames']);
+
+ $table_sql = ($mode == 'mod' ) ? GROUPS_MODERATOR_TABLE : USER_GROUP_TABLE;
+
+ // Grab the user ids
+ $sql = "SELECT user_id
+ FROM " . USERS_TABLE . "
+ WHERE username IN (" . implode(', ', preg_replace('#^[\s]*?(.*?)[\s]*?$#', "'\\1'", $users)) . ")";
+ $result = $db->sql_query($sql);
+
+ if (!($row = $db->sql_fetchrow($result)))
+ {
+ trigger_error($user->lang['NO_USERS']);
+ }
+
+ $user_id_ary = array();
+ do
+ {
+ $user_id_ary[] = $row['user_id'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+ $db->sql_freeresult($result);
+
+ // Remove users who are already members of this group
+ $sql = "SELECT user_id
+ FROM $table_sql
+ WHERE user_id IN (" . implode(', ', $user_id_ary) . ")
+ AND group_id = $group_id";
+ $result = $db->sql_query($sql);
+
+ if ($row = $db->sql_fetchrow($result))
+ {
+ $old_user_id_ary = array();
+ do
+ {
+ $old_user_id_ary[] = $row['user_id'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+
+ $user_id_ary = array_diff($user_id_ary, $old_user_id_ary);
+ }
+ $db->sql_freeresult($result);
+
+ // Insert the new users
+ switch (SQL_LAYER)
+ {
+ case 'postgresql':
+ case 'msaccess':
+ case 'mssql-odbc':
+ case 'oracle':
+ case 'db2':
+ foreach ($user_id_ary as $user_id)
+ {
+ $sql = "INSERT INTO $table_sql (user_id, group_id)
+ VALUES ($user_id, $group_id)";
+ $db->sql_query($sql);
+ }
+
+ break;
+
+ case 'mysql':
+ case 'mysql4':
+ $sql = "INSERT INTO $table_sql (user_id, group_id)
+ VALUES " . implode(', ', preg_replace('#^([0-9]+)$#', "(\\1, $group_id)", $user_id_ary));
+ $db->sql_query($sql);
+ break;
+
+ case 'mssql':
+ $sql = "INSERT INTO $table_sql (user_id, group_id)
+ VALUES " . implode(' UNION ALL ', preg_replace('#^([0-9]+)$#', "(\\1, $group_id)", $user_id_ary));
+ $db->sql_query($sql);
+ break;
+ }
+
+ // Update user settings (color, rank) if applicable
+ if (!empty($_POST['settings']))
+ {
+ $sql = "UPDATE " . USERS_TABLE ."
+ SET user_colour = '$group_colour', user_rank = " . intval($group_rank) . "
+ WHERE user_id IN (" . implode(', ', $user_id_ary) . ")";
+ $db->sql_query($sql);
+ }
+
+// add_log();
+
+ $message = ($mode == 'mod') ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
+ trigger_error($user->lang[$message]);
+
break;
case 'delete':
- case 'deletegroup':
+
+ break;
+
+ case 'approve':
+
break;
case 'list':
@@ -395,7 +508,7 @@ function swatch()
lang['GROUP_MODS_EXPLAIN']; ?>
-