diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 29d6618f11..8a3fa47b9c 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -1931,7 +1931,13 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow { $error[] = (!utf8_strlen($name)) ? $user->lang['GROUP_ERR_USERNAME'] : $user->lang['GROUP_ERR_USER_LONG']; } - + + $err = group_validate_groupname($group_id, $name); + if (!empty($err)) + { + $error[] = $user->lang[$err]; + } + if (!in_array($type, array(GROUP_OPEN, GROUP_CLOSED, GROUP_HIDDEN, GROUP_SPECIAL, GROUP_FREE))) { $error[] = $user->lang['GROUP_ERR_TYPE']; @@ -2462,6 +2468,47 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna return true; } + +/** +* A small version of validate_username to check for a group name's existence. To be called directly, +*/ +function group_validate_groupname($group_id, $groupname) +{ + global $config, $db; + + $groupname = utf8_clean_string($groupname); + + if (!empty($group_id)) + { + $sql = 'SELECT group_name + FROM ' . GROUPS_TABLE . ' + WHERE group_id = ' . (int)$group_id; + $result = $db->sql_query($sql); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + $allowed_groupname = utf8_clean_string($row['group_name']); + if ($allowed_groupname == $groupname) + { + return false; + } + } + + $sql = 'SELECT group_name + FROM ' . GROUPS_TABLE . " + WHERE LOWER(group_name) = '" . $db->sql_escape(utf8_strtolower($groupname)) . "'"; + $result = $db->sql_query($sql); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + if ($row) + { + return 'GROUP_NAME_TAKEN'; + } +} + + + /** * Set users default group * diff --git a/phpBB/language/en/acp/groups.php b/phpBB/language/en/acp/groups.php index ee50b3f8ec..cb33b590ca 100644 --- a/phpBB/language/en/acp/groups.php +++ b/phpBB/language/en/acp/groups.php @@ -75,6 +75,7 @@ $lang = array_merge($lang, array( 'GROUP_MODS_DEMOTED' => 'Group leaders demoted successfully.', 'GROUP_MODS_PROMOTED' => 'Group members promoted successfully.', 'GROUP_NAME' => 'Group name', + 'GROUP_NAME_TAKEN' => 'The group name you entered is already in use, please select an alternative.', 'GROUP_OPEN' => 'Open', 'GROUP_PENDING' => 'Pending members', 'GROUP_PROMOTE' => 'Promote to group leader',