diff --git a/phpBB/adm/admin_groups.php b/phpBB/adm/admin_groups.php index 62abc4ddf2..457b8bdcd3 100644 --- a/phpBB/adm/admin_groups.php +++ b/phpBB/adm/admin_groups.php @@ -11,6 +11,12 @@ // // ------------------------------------------------------------- +// TODO +// Remove hard-coded text strings +// Hidden/Normal type for "Special Groups" +// Group avatar handling ... +// Mass user pref setting via group membership + if (!empty($setmodules)) { if (!$auth->acl_get('a_group')) @@ -39,26 +45,15 @@ if (!$auth->acl_get('a_group')) // Check and set some common vars $update = (isset($_POST['update'])) ? true : false; $mode = request_var('mode', ''); +$action = (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : request_var('action', '')); $group_id = request_var('g', 0); $mark_ary = request_var('mark', 0); $name_ary = request_var('usernames', ''); -$start = ($action == 'member') ? request_var('start', 0) : 0; -$start_mod = ($action == 'leader') ? request_var('start', 0) : 0; -//!empty($_POST['usernames'])) ? array_unique(explode("\n", $_POST['usernames'])) : false; -$group_type = $group_name = $group_desc = $group_colour = $group_rank = $group_avatar = false; +$leader = request_var('leader', 0); +$start = request_var('start', 0); -if (isset($_POST['add'])) -{ - $action = 'add'; -} -else if (isset($_POST['addleaders']) || isset($_POST['addusers'])) -{ - $action = (isset($_POST['addleaders'])) ? 'addleaders' : 'addusers'; -} -else -{ - $action = (isset($_REQUEST['action'])) ? htmlspecialchars($_REQUEST['action']) : ''; -} +// Clear some vars +$group_type = $group_name = $group_desc = $group_colour = $group_rank = $group_avatar = false; // Grab basic data for group, if group_id is set and exists if ($group_id) @@ -105,6 +100,7 @@ switch ($mode) break; case 'demote': + case 'promote': case 'deleteusers': case 'delete': if (!$group_id) @@ -112,7 +108,7 @@ switch ($mode) trigger_error($user->lang['NO_GROUP']); } - if ($error = remove_from_group($action, $group_id, $mark_ary, false, $group_name)) + if ($error = group_memberships($action, $group_id, $mark_ary, false, $group_name)) { trigger_error($user->lang[$error]); } @@ -121,7 +117,6 @@ switch ($mode) trigger_error($user->lang[$message]); break; - case 'addleaders': case 'addusers': if (!$group_id) { @@ -133,8 +128,10 @@ switch ($mode) trigger_error($user->lang['NO_USERS']); } + $name_ary = array_unique(explode("\n", $name_ary)); + // Add user/s to group - if ($error = add_to_group($action, $group_id, false, $name_ary, $group_colour, $group_rank, $group_avatar, $group_avatar_type)) + if ($error = add_to_group($action, $group_id, false, $name_ary, $leader, $group_colour, $group_rank, $group_avatar, $group_avatar_type)) { trigger_error($user->lang[$error]); } @@ -360,6 +357,14 @@ function swatch()

lang['GROUP_MEMBERS_EXPLAIN']; ?>

+
"> + + + + + + + - -

lang['GROUP_MODS']; ?>

- -

lang['GROUP_MODS_EXPLAIN']; ?>

- -">
lang['USERNAME']; ?>Defaultlang['JOINED']; ?>lang['POSTS']; ?>lang['MARK']; ?>
- - - - - + - - - - -
lang['USERNAME']; ?>Defaultlang['JOINED']; ?>lang['POSTS']; ?>lang['MARK']; ?>lang['GROUP_LEAD']; ?>
Select option:  
- - - - - - -
lang['MARK_ALL']; ?> :: lang['UNMARK_ALL']; ?> 
- -
- - - - - - - - - - - - - - - - -
lang['ADD_USERS']; ?>
lang['USER_GETS_GROUP_SET']; ?>:
lang['USER_GETS_GROUP_SET_EXPLAIN']; ?>
lang['YES']; ?>   lang['NO']; ?>
lang['USERNAME']; ?>:
lang['USERNAMES_EXPLAIN']; ?>
  &mode=searchuser&form=mod&field=usernames', '_phpbbsearch', 'HEIGHT=500,resizable=yes,scrollbars=yes,WIDTH=740');return false;" />
- -
- - -

lang['GROUP_LIST']; ?>

- -

lang['GROUP_LIST_EXPLAIN']; ?>

- -
"> - - - - - - - - - + @@ -573,7 +505,7 @@ function swatch() ?> - +
lang['USERNAME']; ?>Defaultlang['JOINED']; ?>lang['POSTS']; ?>lang['MARK']; ?>
Approved Members
"> lang['YES'] : $user->lang['NO']; ?>format_date($row['user_regdate'], $user->lang['DATE_FORMAT']); ?>format_date($row['user_regdate'], $user->lang['DATE_FORMAT']) : '-'; ?>
Select option:  lang['SELECT_OPTION']; ?>:  
@@ -584,22 +516,29 @@ function swatch() -
+ +

lang['ADD_USERS']; ?>

+ +

lang['ADD_USERS_EXPLAIN']; ?>

- + + + + + - + - +
lang['ADD_USERS']; ?>
lang['USER_GETS_GROUP_SET']; ?>:
lang['USER_GETS_GROUP_SET_EXPLAIN']; ?>
lang['USER_GROUP_LEADER']; ?>: lang['YES']; ?>   lang['NO']; ?>
lang['USER_GROUP_DEFAULT']; ?>:
lang['USER_GROUP_DEFAULT_EXPLAIN']; ?>
lang['YES']; ?>   lang['NO']; ?>
lang['USERNAME']; ?>:
lang['USERNAMES_EXPLAIN']; ?>
lang['USERNAME']; ?>:
lang['USERNAMES_EXPLAIN']; ?>
[ ">lang['FIND_USERNAME']; ?> ]
  &mode=searchuser&form=mod&field=usernames', '_phpbbsearch', 'HEIGHT=500,resizable=yes,scrollbars=yes,WIDTH=740');return false;" />
diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index f4f2063b96..1f87533dbf 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -480,7 +480,7 @@ function gen_rand_string($num_chars) // Usergroup functions // -function add_to_group($action, $group_id, $user_id_ary, $username_ary, $colour, $rank, $avatar, $avatar_type) +function add_to_group($action, $group_id, $user_id_ary, $username_ary, $leader, $colour, $rank, $avatar, $avatar_type) { global $db; @@ -491,7 +491,7 @@ function add_to_group($action, $group_id, $user_id_ary, $username_ary, $colour, $$which_ary = array($$which_ary); } - $sql_in = ($which_ary == 'user_id_ary') ? array_map('intval', $$which_ary) : preg_replace('#^[\s]*?(.*?)[\s]*?$#e', "\"'\" . \$db->sql_escape('\\1') . \"'\"", $$which_ary); + $sql_in = ($which_ary == 'user_id_ary') ? array_map('intval', $$which_ary) : preg_replace('#^[\s]*(.*?)[\s]*$#e', "\"'\" . \$db->sql_escape('\\1') . \"'\"", $$which_ary); unset($$which_ary); // Grab the user id/username records @@ -529,7 +529,7 @@ function add_to_group($action, $group_id, $user_id_ary, $username_ary, $colour, { $add_id_ary[] = $row['user_id']; - if ($action == 'addleaders' && !$row['group_leader']) + if ($leader && !$row['group_leader']) { $update_id_ary[] = $row['user_id']; } @@ -550,15 +550,13 @@ function add_to_group($action, $group_id, $user_id_ary, $username_ary, $colour, if (sizeof($add_id_ary)) { - $group_leader = ($action == 'addleaders') ? 1 : 0; - // Insert the new users switch (SQL_LAYER) { case 'mysql': case 'mysql4': $sql = 'INSERT INTO ' . USER_GROUP_TABLE . " (user_id, group_id, group_leader) - VALUES " . implode(', ', preg_replace('#^([0-9]+)$#', "(\\1, $group_id, $group_leader)", $add_id_ary)); + VALUES " . implode(', ', preg_replace('#^([0-9]+)$#', "(\\1, $group_id, $leader)", $add_id_ary)); $db->sql_query($sql); break; @@ -566,7 +564,7 @@ function add_to_group($action, $group_id, $user_id_ary, $username_ary, $colour, case 'mssql-odbc': case 'sqlite': $sql = 'INSERT INTO ' . USER_GROUP_TABLE . " (user_id, group_id, group_leader) - " . implode(' UNION ALL ', preg_replace('#^([0-9]+)$#', "(\\1, $group_id, $group_leader)", $add_id_ary)); + " . implode(' UNION ALL ', preg_replace('#^([0-9]+)$#', "(\\1, $group_id, $leader)", $add_id_ary)); $db->sql_query($sql); break; @@ -574,7 +572,7 @@ function add_to_group($action, $group_id, $user_id_ary, $username_ary, $colour, foreach ($add_id_ary as $user_id) { $sql = 'INSERT INTO ' . USER_GROUP_TABLE . " (user_id, group_id, group_leader) - VALUES ($user_id, $group_id, $group_leader)"; + VALUES ($user_id, $group_id, $leader)"; $db->sql_query($sql); } break; @@ -615,7 +613,7 @@ function add_to_group($action, $group_id, $user_id_ary, $username_ary, $colour, if (!empty($_POST['default'])) { $sql = 'UPDATE ' . USERS_TABLE . " - SET group_id = $group_id, user_colour = '$color', user_rank = " . intval($rank) . " + SET group_id = $group_id, user_colour = '" . $db->sql_escape($color) . "', user_rank = $rank WHERE user_id IN (" . implode(', ', array_merge($add_id_ary, $update_id_ary)) . ")"; $db->sql_query($sql); } @@ -628,7 +626,7 @@ function add_to_group($action, $group_id, $user_id_ary, $username_ary, $colour, include($phpbb_root_path . 'includes/functions_admin.'.$phpEx); } - $log = ($action == 'addleaders') ? 'LOG_MODS_ADDED' : 'LOG_USERS_ADDED'; + $log = ($leader) ? 'LOG_MODS_ADDED' : 'LOG_USERS_ADDED'; add_log('admin', $log, $group_name, implode(', ', $usernames)); return false; @@ -842,7 +840,7 @@ function approve_user($group_id, $user_id_ary, $username_ary, &$group_name) // removed. Setting action to demote true will demote leaders to users // (if appropriate), deleting leaders removes them from group as with // normal users -function remove_from_group($action, $id, $user_id_ary, $username_ary, &$group_name) +function group_memberships($action, $id, $user_id_ary, $username_ary, &$group_name) { global $db; @@ -890,12 +888,21 @@ function remove_from_group($action, $id, $user_id_ary, $username_ary, &$group_na while ($row = $db->sql_fetchrow($result)); $db->sql_freeresult($result); - switch ($type) + switch ($action) { case 'demote': - $sql = 'UPDATE ' . USER_GROUP_TABLE . " + $sql = 'UPDATE ' . USER_GROUP_TABLE . ' SET group_leader = 0 - WHERE $sql_where"; + WHERE user_id IN (' . implode(', ', $id_ary) . ") + AND group_id = $id"; + $db->sql_query($sql); + break; + + case 'promote': + $sql = 'UPDATE ' . USER_GROUP_TABLE . ' + SET group_leader = 1 + WHERE user_id IN (' . implode(', ', $id_ary) . ") + AND group_id = $id"; $db->sql_query($sql); break;