diff --git a/phpBB/adm/admin_groups.php b/phpBB/adm/admin_groups.php
index 4bae471635..ea8016d434 100644
--- a/phpBB/adm/admin_groups.php
+++ b/phpBB/adm/admin_groups.php
@@ -1,23 +1,16 @@
lang['NO_GROUP']);
+ }
+ break;
+
+ case 'approve':
+ if (!$group_id)
+ {
+ trigger_error($user->lang['NO_GROUP']);
+ }
+
+ if (!empty($_POST['mark']))
+ {
+ $id_ary = array_map('intval', $_POST['mark']);
+
+ $sql = 'UPDATE ' . USER_GROUP_TABLE . '
+ SET user_pending = 1
+ WHERE user_id IN (' . implode(', ', $id_ary) . ")
+ AND group_id = $group_id";
+ $db->sql_query($sql);
+
+ $sql = 'SELECT username
+ FROM ' . USERS_TABLE . '
+ WHERE user_id IN (' . implode(', ', $id_ary) . ')';
+ $result = $db->sql_query($sql);
+
+ $usernames = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $usernames[] = $row['username'];
+ }
+ $db->sql_freeresult($result);
+
+ add_log('admin', 'LOG_GROUP_APPROVE', $group_name, implode(', ', $usernames));
+ unset($usernames);
+
+ trigger_error($user->lang['USERS_APPROVED']);
+ }
+ break;
+
+ case 'default':
+ if (!$group_id)
+ {
+ trigger_error($user->lang['NO_GROUP']);
+ }
+
+ $id_ary = (!empty($_POST['mark'])) ? array_map('intval', $_POST['mark']) : false;
+
+ switch (SQL_LAYER)
+ {
+ case 'mysql':
+ case 'mysql4':
+ $start = 0;
+ do
+ {
+ $sql = 'SELECT user_id
+ FROM ' . USER_GROUP_TABLE . "
+ WHERE group_id = $group_id
+ ORDER BY user_id
+ LIMIT $start, 200";
+ $result = $db->sql_query($sql);
+
+ $user_id_ary = array();
+ if ($row = $db->sql_fetchrow($result))
+ {
+ do
+ {
+ $user_id_ary[] = $row['user_id'];
+ }
+ while ($row = $db->sql_fetchrow($result));
+
+ $sql = 'UPDATE ' . USERS_TABLE . "
+ SET group_id = $group_id, user_colour = '$group_colour', user_rank = $group_rank
+ WHERE user_id IN (" . implode(', ', $user_id_ary) . ')';
+ $db->sql_query($sql);
+
+ $start = (sizeof($user_id_ary) < 200) ? 0 : $start + 200;
+ }
+ else
+ {
+ $start = 0;
+ }
+ $db->sql_freeresult($result);
+ }
+ while ($start);
+ break;
+
+ default:
+ $sql = 'UPDATE ' . USERS_TABLE . "
+ SET group_id = $group_id, user_colour = '$group_color', user_rank = $group_rank
+ WHERE user_id IN (
+ SELECT user_id
+ FROM " . USER_GROUP_TABLE . "
+ WHERE group_id = $group_id
+ )";
+ $db->sql_query($sql);
+ break;
+ }
+
+ add_log('admin', 'LOG_GROUP_DEFAULTS', $group_name);
+
+ trigger_error($user->lang['GROUP_DEFS_UPDATED']);
+ break;
+
case 'edit':
case 'addgroup':
+ if ($action == 'edit' && !$group_id)
+ {
+ trigger_error($user->lang['NO_GROUP']);
+ }
// Did we submit?
if ($update)
{
if ($group_type != GROUP_SPECIAL)
{
- $group_name = (!empty($_POST['group_name'])) ? htmlspecialchars($_POST['group_name']) : '';
+ $group_name = (!empty($_POST['group_name'])) ? stripslashes(htmlspecialchars($_POST['group_name'])) : '';
$group_type = (!empty($_POST['group_type'])) ? intval($_POST['group_type']) : '';
}
- $group_description = (!empty($_POST['group_description'])) ? htmlspecialchars($_POST['group_description']) : '';
- $group_colour = (!empty($_POST['group_colour'])) ? htmlspecialchars($_POST['group_colour']) : '';
- $group_rank = (isset($_POST['group_rank'])) ? intval($_POST['group_rank']) : '';
- $group_avatar = (!empty($_POST['group_avatar'])) ? htmlspecialchars($_POST['group_avatar']) : '';
+ $group_description = (!empty($_POST['group_description'])) ? stripslashes(htmlspecialchars($_POST['group_description'])) : '';
+ $group_colour2 = (!empty($_POST['group_colour'])) ? stripslashes(htmlspecialchars($_POST['group_colour'])) : '';
+ $group_avatar2 = (!empty($_POST['group_avatar'])) ? stripslashes(htmlspecialchars($_POST['group_avatar'])) : '';
+ $group_rank2 = (isset($_POST['group_rank'])) ? intval($_POST['group_rank']) : '';
// Check data
- if ($group_name == '' || strlen($group_name) > 40)
+ if (!strlen($group_name) || strlen($group_name) > 40)
{
- $error .= (($error != '') ? '
' : '') . (($group_name == '') ? $user->lang['GROUP_ERR_USERNAME'] : $user->lang['GROUP_ERR_USER_LONG']);
+ $error[] = (!strlen($group_name)) ? $user->lang['GROUP_ERR_USERNAME'] : $user->lang['GROUP_ERR_USER_LONG'];
}
+
if (strlen($group_description) > 255)
{
- $error .= (($error != '') ? '
' : '') . $user->lang['GROUP_ERR_DESC_LONG'];
+ $error[] = $user->lang['GROUP_ERR_DESC_LONG'];
}
+
if ($group_type < GROUP_OPEN || $group_type > GROUP_FREE)
{
- $error .= (($error != '') ? '
' : '') . $user->lang['GROUP_ERR_TYPE'];
+ $error[] = $user->lang['GROUP_ERR_TYPE'];
}
- /*
+
// Update DB
- if (!$error)
+ if (!sizeof($error))
{
// Update group preferences
- $sql = "UPDATE " . GROUPS_TABLE . "
- SET group_name = '$group_name', group_description = '$group_description', group_type = $group_type, group_rank = $group_rank, group_colour = '$group_colour'
- WHERE group_id = $group_id";
+ $sql_ary = array(
+ 'group_name' => (string) $group_name,
+ 'group_description' => (string) $group_description,
+ 'group_type' => (int) $group_type,
+ 'group_rank' => (int) $group_rank2,
+ 'group_colour' => (string) $group_colour2,
+ );
+
+ $sql = ($action == 'edit') ? 'UPDATE ' . GROUPS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . " WHERE group_id = $group_id" : 'INSERT INTO ' . GROUPS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
- $user_sql = '';
- $user_sql .= (isset($_POST['submit'])) ? ((($user_sql != '') ? ', ' : '') . "user_colour = '$group_colour'") : '';
- $user_sql .= (isset($_POST['submit']) && $group_rank != -1) ? ((($user_sql != '') ? ', ' : '') . "user_rank = $group_rank") : '';
-
- // Update group members preferences
- switch (SQL_LAYER)
+ if ($group_id && ($group_colour != $group_colour2 || $group_rank != $group_rank2 || $group_avatar != $group_avatar2))
{
- case 'mysql':
- case 'mysql4':
- // batchwise? 500 at a time or so maybe? try to reduce memory useage
- $more = true;
- $start = 0;
- do
- {
- $sql = 'SELECT user_id
- FROM ' . USER_GROUP_TABLE . "
- WHERE group_id = $group_id
- LIMIT $start, 500";
- $result = $db->sql_query($sql);
+ $sql_ary = array(
+ 'user_rank' => (string) $group_rank2,
+ 'user_colour' => (string) $group_colour2,
+ );
- if ($row = $db->sql_fetchrow($result))
- {
- $user_count = 0;
- $user_id_sql = '';
- do
- {
- $user_id_sql .= (($user_id_sql != '') ? ', ' : '') . $row['user_id'];
- $user_count++;
- }
- while ($row = $db->sql_fetchrow($result));
-
- $sql = 'UPDATE ' . USERS_TABLE . "
- SET $user_sql
- WHERE user_id IN ($user_id_sql)";
- $db->sql_query($sql);
-
- if ($user_count == 500)
- {
- $start += 500;
- }
- else
- {
- $more = false;
- }
- }
- else
- {
- $more = false;
- }
- $db->sql_freeresult($result);
- unset($user_id_sql);
- }
- while ($more);
-
- break;
-
- default:
- $sql ='"UPDATE ' . USERS_TABLE . "
- SET $user_sql
- WHERE user_id IN (
- SELECT user_id
- FROM " . USER_GROUP_TABLE . "
- WHERE group_id = $group_id)";
- $db->sql_query($sql);
+ $sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . "
+ WHERE group_id = $group_id";
+ $db->sql_query($sql);
}
- trigger_error($user->lang['GROUP_UPDATED']);
- }*/
- }
+ $log = ($action == 'edit') ? 'LOG_GROUP_UPDATED' : 'LOG_GROUP_CREATED';
+ add_log('admin', $log, $group_name);
+ $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
+ trigger_error($message);
+ }
+
+ $group_colour = &$group_colour2;
+ $group_rank = &$group_rank2;
+ $group_avatar = &$group_avatar2;
+ }
+ else if (!$group_id)
+ {
+ $group_name = (!empty($_POST['group_name'])) ? stripslashes(htmlspecialchars($_POST['group_name'])) : '';
+ $group_description = $group_colour = $group_avatar = '';
+ $group_type = GROUP_FREE;
+ }
?>
@@ -237,10 +302,10 @@ switch ($mode)
}
$db->sql_freeresult($result);
+ $type_free = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
$type_open = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
$type_closed = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
$type_hidden = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
- $type_free = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
?>
@@ -256,7 +321,7 @@ function swatch()
//-->
-