phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / acp / acp_groups.php

History | View | Annotate | Download (28.4 kB)

1 5319 acydburn
<?php
2 8147 acydburn
/**
3 5319 acydburn
*
4 5319 acydburn
* @package acp
5 5319 acydburn
* @version $Id$
6 8147 acydburn
* @copyright (c) 2005 phpBB Group
7 8147 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5319 acydburn
*
9 5319 acydburn
*/
10 5319 acydburn
11 5319 acydburn
/**
12 8147 acydburn
* @ignore
13 8147 acydburn
*/
14 8147 acydburn
if (!defined('IN_PHPBB'))
15 8147 acydburn
{
16 8147 acydburn
        exit;
17 8147 acydburn
}
18 8147 acydburn
19 8147 acydburn
/**
20 5319 acydburn
* @package acp
21 5319 acydburn
*/
22 5319 acydburn
class acp_groups
23 5319 acydburn
{
24 5558 acydburn
        var $u_action;
25 5558 acydburn
26 5319 acydburn
        function main($id, $mode)
27 5319 acydburn
        {
28 5319 acydburn
                global $config, $db, $user, $auth, $template, $cache;
29 6015 acydburn
                global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
30 5319 acydburn
31 5319 acydburn
                $user->add_lang('acp/groups');
32 5319 acydburn
                $this->tpl_name = 'acp_groups';
33 5319 acydburn
                $this->page_title = 'ACP_GROUPS_MANAGE';
34 5319 acydburn
35 8120 kellanved
                $form_key = 'acp_groups';
36 8120 kellanved
                add_form_key($form_key);
37 8120 kellanved
38 5319 acydburn
                include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
39 5319 acydburn
40 5319 acydburn
                // Check and set some common vars
41 5319 acydburn
                $action                = (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : request_var('action', ''));
42 5319 acydburn
                $group_id        = request_var('g', 0);
43 5319 acydburn
                $mark_ary        = request_var('mark', array(0));
44 6513 acydburn
                $name_ary        = request_var('usernames', '', true);
45 5319 acydburn
                $leader                = request_var('leader', 0);
46 5319 acydburn
                $default        = request_var('default', 0);
47 5319 acydburn
                $start                = request_var('start', 0);
48 5319 acydburn
                $update                = (isset($_POST['update'])) ? true : false;
49 5319 acydburn
50 8120 kellanved
51 5319 acydburn
                // Clear some vars
52 10757 git-gate
                $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && phpbb_is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
53 5319 acydburn
                $group_row = array();
54 5319 acydburn
55 5319 acydburn
                // Grab basic data for group, if group_id is set and exists
56 5319 acydburn
                if ($group_id)
57 5319 acydburn
                {
58 8147 acydburn
                        $sql = 'SELECT *
59 8147 acydburn
                                FROM ' . GROUPS_TABLE . "
60 5319 acydburn
                                WHERE group_id = $group_id";
61 5319 acydburn
                        $result = $db->sql_query($sql);
62 5319 acydburn
                        $group_row = $db->sql_fetchrow($result);
63 5319 acydburn
                        $db->sql_freeresult($result);
64 5319 acydburn
65 5319 acydburn
                        if (!$group_row)
66 5319 acydburn
                        {
67 6320 acydburn
                                trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
68 5319 acydburn
                        }
69 6650 acydburn
70 6650 acydburn
                        // Check if the user is allowed to manage this group if set to founder only.
71 6650 acydburn
                        if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
72 6650 acydburn
                        {
73 6650 acydburn
                                trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
74 6650 acydburn
                        }
75 5319 acydburn
                }
76 5319 acydburn
77 5319 acydburn
                // Which page?
78 5319 acydburn
                switch ($action)
79 5319 acydburn
                {
80 5319 acydburn
                        case 'approve':
81 5319 acydburn
                        case 'demote':
82 5319 acydburn
                        case 'promote':
83 5319 acydburn
                                if (!$group_id)
84 5319 acydburn
                                {
85 6320 acydburn
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
86 5319 acydburn
                                }
87 6073 acydburn
88 5319 acydburn
                                // Approve, demote or promote
89 7022 davidmj
                                $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
90 8634 Kellanved
                                $error = group_user_attributes($action, $group_id, $mark_ary, false, $group_name);
91 9053 acydburn
92 8634 Kellanved
                                if (!$error)
93 5319 acydburn
                                {
94 8634 Kellanved
                                        switch ($action)
95 8634 Kellanved
                                        {
96 8634 Kellanved
                                                case 'demote':
97 8634 Kellanved
                                                        $message = 'GROUP_MODS_DEMOTED';
98 8634 Kellanved
                                                break;
99 6073 acydburn
100 8634 Kellanved
                                                case 'promote':
101 8634 Kellanved
                                                        $message = 'GROUP_MODS_PROMOTED';
102 8634 Kellanved
                                                break;
103 6073 acydburn
104 8634 Kellanved
                                                case 'approve':
105 8634 Kellanved
                                                        $message = 'USERS_APPROVED';
106 8634 Kellanved
                                                break;
107 8634 Kellanved
                                        }
108 8634 Kellanved
109 8634 Kellanved
                                        trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
110 5319 acydburn
                                }
111 8634 Kellanved
                                else
112 8634 Kellanved
                                {
113 8634 Kellanved
                                        trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
114 8634 Kellanved
                                }
115 9053 acydburn
116 5319 acydburn
                        break;
117 5319 acydburn
118 5319 acydburn
                        case 'default':
119 5319 acydburn
                                if (!$group_id)
120 5319 acydburn
                                {
121 6320 acydburn
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
122 5319 acydburn
                                }
123 5319 acydburn
124 5319 acydburn
                                if (confirm_box(true))
125 5319 acydburn
                                {
126 7025 davidmj
                                        $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
127 7150 acydburn
128 5319 acydburn
                                        if (!sizeof($mark_ary))
129 5319 acydburn
                                        {
130 5319 acydburn
                                                $start = 0;
131 6073 acydburn
132 5319 acydburn
                                                do
133 5319 acydburn
                                                {
134 8147 acydburn
                                                        $sql = 'SELECT user_id
135 5319 acydburn
                                                                FROM ' . USER_GROUP_TABLE . "
136 8147 acydburn
                                                                WHERE group_id = $group_id
137 5319 acydburn
                                                                ORDER BY user_id";
138 5319 acydburn
                                                        $result = $db->sql_query_limit($sql, 200, $start);
139 5319 acydburn
140 5319 acydburn
                                                        $mark_ary = array();
141 5319 acydburn
                                                        if ($row = $db->sql_fetchrow($result))
142 5319 acydburn
                                                        {
143 5319 acydburn
                                                                do
144 5319 acydburn
                                                                {
145 5319 acydburn
                                                                        $mark_ary[] = $row['user_id'];
146 5319 acydburn
                                                                }
147 5319 acydburn
                                                                while ($row = $db->sql_fetchrow($result));
148 5319 acydburn
149 7025 davidmj
                                                                group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
150 5319 acydburn
151 5319 acydburn
                                                                $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
152 5319 acydburn
                                                        }
153 5319 acydburn
                                                        else
154 5319 acydburn
                                                        {
155 5319 acydburn
                                                                $start = 0;
156 5319 acydburn
                                                        }
157 5319 acydburn
                                                        $db->sql_freeresult($result);
158 5319 acydburn
                                                }
159 5319 acydburn
                                                while ($start);
160 5319 acydburn
                                        }
161 5319 acydburn
                                        else
162 5319 acydburn
                                        {
163 7025 davidmj
                                                group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
164 5319 acydburn
                                        }
165 5319 acydburn
166 6161 acydburn
                                        trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
167 5319 acydburn
                                }
168 5319 acydburn
                                else
169 5319 acydburn
                                {
170 5319 acydburn
                                        confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
171 5319 acydburn
                                                'mark'                => $mark_ary,
172 5319 acydburn
                                                'g'                        => $group_id,
173 5319 acydburn
                                                'i'                        => $id,
174 5319 acydburn
                                                'mode'                => $mode,
175 5319 acydburn
                                                'action'        => $action))
176 5319 acydburn
                                        );
177 5319 acydburn
                                }
178 5319 acydburn
179 5319 acydburn
                        break;
180 5319 acydburn
181 5319 acydburn
                        case 'deleteusers':
182 5319 acydburn
                        case 'delete':
183 9053 acydburn
                                if (!$group_id)
184 9052 Kellanved
                                {
185 9052 Kellanved
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
186 9052 Kellanved
                                }
187 9052 Kellanved
                                else if ($action === 'delete' && $group_row['group_type'] == GROUP_SPECIAL)
188 9052 Kellanved
                                {
189 9052 Kellanved
                                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
190 9052 Kellanved
                                }
191 9053 acydburn
192 5319 acydburn
                                if (confirm_box(true))
193 5319 acydburn
                                {
194 5319 acydburn
                                        $error = '';
195 5319 acydburn
196 5319 acydburn
                                        switch ($action)
197 5319 acydburn
                                        {
198 5319 acydburn
                                                case 'delete':
199 5574 acydburn
                                                        if (!$auth->acl_get('a_groupdel'))
200 5574 acydburn
                                                        {
201 6320 acydburn
                                                                trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
202 5574 acydburn
                                                        }
203 5574 acydburn
204 5319 acydburn
                                                        $error = group_delete($group_id, $group_row['group_name']);
205 5319 acydburn
                                                break;
206 5319 acydburn
207 5319 acydburn
                                                case 'deleteusers':
208 7019 davidmj
                                                        $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
209 7019 davidmj
                                                        $error = group_user_del($group_id, $mark_ary, false, $group_name);
210 5319 acydburn
                                                break;
211 5319 acydburn
                                        }
212 5319 acydburn
213 6224 acydburn
                                        $back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&amp;action=list&amp;g=' . $group_id;
214 6224 acydburn
215 5319 acydburn
                                        if ($error)
216 5319 acydburn
                                        {
217 6320 acydburn
                                                trigger_error($user->lang[$error] . adm_back_link($back_link), E_USER_WARNING);
218 5319 acydburn
                                        }
219 5319 acydburn
220 5319 acydburn
                                        $message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE';
221 6224 acydburn
                                        trigger_error($user->lang[$message] . adm_back_link($back_link));
222 5319 acydburn
                                }
223 5319 acydburn
                                else
224 5319 acydburn
                                {
225 5319 acydburn
                                        confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
226 5319 acydburn
                                                'mark'                => $mark_ary,
227 5319 acydburn
                                                'g'                        => $group_id,
228 5319 acydburn
                                                'i'                        => $id,
229 5319 acydburn
                                                'mode'                => $mode,
230 5319 acydburn
                                                'action'        => $action))
231 5319 acydburn
                                        );
232 5319 acydburn
                                }
233 5319 acydburn
                        break;
234 5319 acydburn
235 5319 acydburn
                        case 'addusers':
236 5319 acydburn
                                if (!$group_id)
237 5319 acydburn
                                {
238 6320 acydburn
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
239 5319 acydburn
                                }
240 5319 acydburn
241 5319 acydburn
                                if (!$name_ary)
242 5319 acydburn
                                {
243 6320 acydburn
                                        trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
244 5319 acydburn
                                }
245 5319 acydburn
246 5319 acydburn
                                $name_ary = array_unique(explode("\n", $name_ary));
247 6601 acydburn
                                $group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
248 5319 acydburn
249 5319 acydburn
                                // Add user/s to group
250 6601 acydburn
                                if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
251 5319 acydburn
                                {
252 6320 acydburn
                                        trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id), E_USER_WARNING);
253 5319 acydburn
                                }
254 5319 acydburn
255 6366 acydburn
                                $message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
256 6161 acydburn
                                trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&amp;action=list&amp;g=' . $group_id));
257 5319 acydburn
                        break;
258 5319 acydburn
259 5319 acydburn
                        case 'edit':
260 5319 acydburn
                        case 'add':
261 5319 acydburn
262 7330 acydburn
                                include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
263 7330 acydburn
264 5319 acydburn
                                $data = $submit_ary = array();
265 5319 acydburn
266 5319 acydburn
                                if ($action == 'edit' && !$group_id)
267 5319 acydburn
                                {
268 6320 acydburn
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
269 5319 acydburn
                                }
270 5319 acydburn
271 5574 acydburn
                                if ($action == 'add' && !$auth->acl_get('a_groupadd'))
272 5574 acydburn
                                {
273 6320 acydburn
                                        trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
274 5574 acydburn
                                }
275 5574 acydburn
276 5319 acydburn
                                $error = array();
277 5319 acydburn
                                $user->add_lang('ucp');
278 8120 kellanved
279 5319 acydburn
                                $avatar_select = basename(request_var('avatar_select', ''));
280 5319 acydburn
                                $category = basename(request_var('category', ''));
281 5319 acydburn
282 5319 acydburn
                                // Did we submit?
283 5319 acydburn
                                if ($update)
284 5319 acydburn
                                {
285 8120 kellanved
                                        if (!check_form_key($form_key))
286 8120 kellanved
                                        {
287 8120 kellanved
                                                trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
288 8120 kellanved
                                        }
289 8120 kellanved
290 7920 acydburn
                                        $group_name        = utf8_normalize_nfc(request_var('group_name', '', true));
291 7920 acydburn
                                        $group_desc = utf8_normalize_nfc(request_var('group_desc', '', true));
292 5319 acydburn
                                        $group_type        = request_var('group_type', GROUP_FREE);
293 5319 acydburn
294 5709 acydburn
                                        $allow_desc_bbcode        = request_var('desc_parse_bbcode', false);
295 5709 acydburn
                                        $allow_desc_urls        = request_var('desc_parse_urls', false);
296 5709 acydburn
                                        $allow_desc_smilies        = request_var('desc_parse_smilies', false);
297 5709 acydburn
298 5319 acydburn
                                        $data['uploadurl']        = request_var('uploadurl', '');
299 6905 acydburn
                                        $data['remotelink']        = request_var('remotelink', '');
300 6905 acydburn
                                        $data['width']                = request_var('width', '');
301 6905 acydburn
                                        $data['height']                = request_var('height', '');
302 5319 acydburn
                                        $delete                                = request_var('delete', '');
303 5319 acydburn
304 5319 acydburn
                                        $submit_ary = array(
305 6650 acydburn
                                                'colour'                        => request_var('group_colour', ''),
306 6650 acydburn
                                                'rank'                                => request_var('group_rank', 0),
307 6650 acydburn
                                                'receive_pm'                => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
308 6650 acydburn
                                                'legend'                        => isset($_REQUEST['group_legend']) ? 1 : 0,
309 6650 acydburn
                                                'message_limit'                => request_var('group_message_limit', 0),
310 8911 acydburn
                                                'max_recipients'        => request_var('group_max_recipients', 0),
311 7007 acydburn
                                                'founder_manage'        => 0,
312 9625 acydburn
                                                'skip_auth'                        => request_var('group_skip_auth', 0),
313 5319 acydburn
                                        );
314 5319 acydburn
315 6650 acydburn
                                        if ($user->data['user_type'] == USER_FOUNDER)
316 6650 acydburn
                                        {
317 6650 acydburn
                                                $submit_ary['founder_manage'] = isset($_REQUEST['group_founder_manage']) ? 1 : 0;
318 6650 acydburn
                                        }
319 6650 acydburn
320 5319 acydburn
                                        if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
321 5319 acydburn
                                        {
322 5319 acydburn
                                                // Avatar stuff
323 5319 acydburn
                                                $var_ary = array(
324 8147 acydburn
                                                        'uploadurl'                => array('string', true, 5, 255),
325 8147 acydburn
                                                        'remotelink'        => array('string', true, 5, 255),
326 8147 acydburn
                                                        'width'                        => array('string', true, 1, 3),
327 8147 acydburn
                                                        'height'                => array('string', true, 1, 3),
328 5319 acydburn
                                                );
329 5319 acydburn
330 5319 acydburn
                                                if (!($error = validate_data($data, $var_ary)))
331 5319 acydburn
                                                {
332 5319 acydburn
                                                        $data['user_id'] = "g$group_id";
333 5319 acydburn
334 5319 acydburn
                                                        if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
335 5319 acydburn
                                                        {
336 5319 acydburn
                                                                list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
337 5319 acydburn
                                                        }
338 5319 acydburn
                                                        else if ($data['remotelink'])
339 5319 acydburn
                                                        {
340 5319 acydburn
                                                                list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
341 5319 acydburn
                                                        }
342 5319 acydburn
                                                }
343 5319 acydburn
                                        }
344 5319 acydburn
                                        else if ($avatar_select && $config['allow_avatar_local'])
345 5319 acydburn
                                        {
346 5319 acydburn
                                                // check avatar gallery
347 5319 acydburn
                                                if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category))
348 5319 acydburn
                                                {
349 5319 acydburn
                                                        $submit_ary['avatar_type'] = AVATAR_GALLERY;
350 5319 acydburn
351 5319 acydburn
                                                        list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
352 5319 acydburn
                                                        $submit_ary['avatar'] = $category . '/' . $avatar_select;
353 5319 acydburn
                                                }
354 5319 acydburn
                                        }
355 7007 acydburn
                                        else if ($delete)
356 7007 acydburn
                                        {
357 7007 acydburn
                                                $submit_ary['avatar'] = '';
358 7007 acydburn
                                                $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
359 7007 acydburn
                                        }
360 6905 acydburn
                                        else if ($data['width'] && $data['height'])
361 6905 acydburn
                                        {
362 6905 acydburn
                                                // Only update the dimensions?
363 6905 acydburn
                                                if ($config['avatar_max_width'] || $config['avatar_max_height'])
364 6905 acydburn
                                                {
365 6905 acydburn
                                                        if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height'])
366 6905 acydburn
                                                        {
367 6905 acydburn
                                                                $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
368 6905 acydburn
                                                        }
369 6905 acydburn
                                                }
370 6905 acydburn
371 6905 acydburn
                                                if (!sizeof($error))
372 6905 acydburn
                                                {
373 6905 acydburn
                                                        if ($config['avatar_min_width'] || $config['avatar_min_height'])
374 6905 acydburn
                                                        {
375 6905 acydburn
                                                                if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height'])
376 6905 acydburn
                                                                {
377 6905 acydburn
                                                                        $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']);
378 6905 acydburn
                                                                }
379 6905 acydburn
                                                        }
380 6905 acydburn
                                                }
381 6905 acydburn
382 6905 acydburn
                                                if (!sizeof($error))
383 6905 acydburn
                                                {
384 6905 acydburn
                                                        $submit_ary['avatar_width'] = $data['width'];
385 6905 acydburn
                                                        $submit_ary['avatar_height'] = $data['height'];
386 6905 acydburn
                                                }
387 6905 acydburn
                                        }
388 5319 acydburn
389 7429 kellanved
                                        if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']))) || $delete)
390 5319 acydburn
                                        {
391 5319 acydburn
                                                if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
392 5319 acydburn
                                                {
393 7740 kellanved
                                                        avatar_delete('group', $group_row, true);
394 5319 acydburn
                                                }
395 5319 acydburn
                                        }
396 5319 acydburn
397 10826 git-gate
                                        // Validate the length of "Maximum number of allowed recipients per private message" setting.
398 10826 git-gate
                                        // We use 16777215 as a maximum because it matches MySQL unsigned mediumint maximum value
399 10826 git-gate
                                        // which is the lowest amongst DBMSes supported by phpBB3
400 10826 git-gate
                                        if ($max_recipients_error = validate_data($submit_ary, array('max_recipients' => array('num', false, 0, 16777215))))
401 10826 git-gate
                                        {
402 10826 git-gate
                                                // Replace "error" string with its real, localised form
403 10826 git-gate
                                                $error = array_merge($error, array_map(array(&$user, 'lang'), $max_recipients_error));
404 10826 git-gate
                                        }
405 10826 git-gate
406 5765 acydburn
                                        if (!sizeof($error))
407 5765 acydburn
                                        {
408 5765 acydburn
                                                // Only set the rank, colour, etc. if it's changed or if we're adding a new
409 8147 acydburn
                                                // group. This prevents existing group members being updated if no changes
410 5765 acydburn
                                                // were made.
411 6073 acydburn
412 5765 acydburn
                                                $group_attributes = array();
413 9625 acydburn
                                                $test_variables = array(
414 9625 acydburn
                                                        'rank'                        => 'int',
415 9625 acydburn
                                                        'colour'                => 'string',
416 9625 acydburn
                                                        'avatar'                => 'string',
417 9625 acydburn
                                                        'avatar_type'        => 'int',
418 9625 acydburn
                                                        'avatar_width'        => 'int',
419 9625 acydburn
                                                        'avatar_height'        => 'int',
420 9625 acydburn
                                                        'receive_pm'        => 'int',
421 9625 acydburn
                                                        'legend'                => 'int',
422 9625 acydburn
                                                        'message_limit'        => 'int',
423 9625 acydburn
                                                        'max_recipients'=> 'int',
424 9625 acydburn
                                                        'founder_manage'=> 'int',
425 9625 acydburn
                                                        'skip_auth'                => 'int',
426 9625 acydburn
                                                );
427 9625 acydburn
428 9625 acydburn
                                                foreach ($test_variables as $test => $type)
429 5319 acydburn
                                                {
430 5765 acydburn
                                                        if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test]))
431 5765 acydburn
                                                        {
432 9625 acydburn
                                                                settype($submit_ary[$test], $type);
433 5765 acydburn
                                                                $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
434 5765 acydburn
                                                        }
435 5319 acydburn
                                                }
436 5319 acydburn
437 5765 acydburn
                                                if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
438 5574 acydburn
                                                {
439 5765 acydburn
                                                        $group_perm_from = request_var('group_perm_from', 0);
440 5574 acydburn
441 5765 acydburn
                                                        // Copy permissions?
442 6915 acydburn
                                                        // If the user has the a_authgroups permission and at least one additional permission ability set the permissions are fully transferred.
443 6816 acydburn
                                                        // We do not limit on one auth category because this can lead to incomplete permissions being tricky to fix for the admin, roles being assigned or added non-default permissions.
444 6816 acydburn
                                                        // Since the user only has the option to copy permissions from non leader managed groups this seems to be a good compromise.
445 6816 acydburn
                                                        if ($group_perm_from && $action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth'))
446 5715 acydburn
                                                        {
447 6839 acydburn
                                                                $sql = 'SELECT group_founder_manage
448 6816 acydburn
                                                                        FROM ' . GROUPS_TABLE . '
449 5765 acydburn
                                                                        WHERE group_id = ' . $group_perm_from;
450 5765 acydburn
                                                                $result = $db->sql_query($sql);
451 6816 acydburn
                                                                $check_row = $db->sql_fetchrow($result);
452 6816 acydburn
                                                                $db->sql_freeresult($result);
453 5715 acydburn
454 6816 acydburn
                                                                // Check the group if non-founder
455 6839 acydburn
                                                                if ($check_row && ($user->data['user_type'] == USER_FOUNDER || $check_row['group_founder_manage'] == 0))
456 5715 acydburn
                                                                {
457 6816 acydburn
                                                                        // From the mysql documentation:
458 6816 acydburn
                                                                        // Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14.
459 6816 acydburn
                                                                        // Due to this we stay on the safe side if we do the insertion "the manual way"
460 5715 acydburn
461 6816 acydburn
                                                                        // Copy permisisons from/to the acl groups table (only group_id gets changed)
462 6816 acydburn
                                                                        $sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
463 6816 acydburn
                                                                                FROM ' . ACL_GROUPS_TABLE . '
464 6816 acydburn
                                                                                WHERE group_id = ' . $group_perm_from;
465 6816 acydburn
                                                                        $result = $db->sql_query($sql);
466 5765 acydburn
467 6816 acydburn
                                                                        $groups_sql_ary = array();
468 6816 acydburn
                                                                        while ($row = $db->sql_fetchrow($result))
469 6816 acydburn
                                                                        {
470 6816 acydburn
                                                                                $groups_sql_ary[] = array(
471 6816 acydburn
                                                                                        'group_id'                        => (int) $group_id,
472 6816 acydburn
                                                                                        'forum_id'                        => (int) $row['forum_id'],
473 6816 acydburn
                                                                                        'auth_option_id'        => (int) $row['auth_option_id'],
474 6816 acydburn
                                                                                        'auth_role_id'                => (int) $row['auth_role_id'],
475 6816 acydburn
                                                                                        'auth_setting'                => (int) $row['auth_setting']
476 6816 acydburn
                                                                                );
477 6816 acydburn
                                                                        }
478 6816 acydburn
                                                                        $db->sql_freeresult($result);
479 6816 acydburn
480 6816 acydburn
                                                                        // Now insert the data
481 6816 acydburn
                                                                        $db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary);
482 6816 acydburn
483 6816 acydburn
                                                                        $auth->acl_clear_prefetch();
484 6816 acydburn
                                                                }
485 5715 acydburn
                                                        }
486 5715 acydburn
487 6054 acydburn
                                                        $cache->destroy('sql', GROUPS_TABLE);
488 6054 acydburn
489 5765 acydburn
                                                        $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
490 5765 acydburn
                                                        trigger_error($user->lang[$message] . adm_back_link($this->u_action));
491 5574 acydburn
                                                }
492 5765 acydburn
                                        }
493 5574 acydburn
494 5765 acydburn
                                        if (sizeof($error))
495 5709 acydburn
                                        {
496 5709 acydburn
                                                $group_rank = $submit_ary['rank'];
497 5709 acydburn
498 5709 acydburn
                                                $group_desc_data = array(
499 5709 acydburn
                                                        'text'                        => $group_desc,
500 5709 acydburn
                                                        'allow_bbcode'        => $allow_desc_bbcode,
501 5709 acydburn
                                                        'allow_smilies'        => $allow_desc_smilies,
502 5709 acydburn
                                                        'allow_urls'        => $allow_desc_urls
503 5709 acydburn
                                                );
504 5709 acydburn
                                        }
505 5319 acydburn
                                }
506 5319 acydburn
                                else if (!$group_id)
507 5319 acydburn
                                {
508 7920 acydburn
                                        $group_name = utf8_normalize_nfc(request_var('group_name', '', true));
509 5709 acydburn
                                        $group_desc_data = array(
510 5709 acydburn
                                                'text'                        => '',
511 5709 acydburn
                                                'allow_bbcode'        => true,
512 5709 acydburn
                                                'allow_smilies'        => true,
513 5709 acydburn
                                                'allow_urls'        => true
514 5709 acydburn
                                        );
515 5319 acydburn
                                        $group_rank = 0;
516 5319 acydburn
                                        $group_type = GROUP_OPEN;
517 5319 acydburn
                                }
518 5319 acydburn
                                else
519 5319 acydburn
                                {
520 5319 acydburn
                                        $group_name = $group_row['group_name'];
521 6188 davidmj
                                        $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
522 5319 acydburn
                                        $group_type = $group_row['group_type'];
523 5319 acydburn
                                        $group_rank = $group_row['group_rank'];
524 5319 acydburn
                                }
525 5319 acydburn
526 8147 acydburn
                                $sql = 'SELECT *
527 5319 acydburn
                                        FROM ' . RANKS_TABLE . '
528 5319 acydburn
                                        WHERE rank_special = 1
529 5319 acydburn
                                        ORDER BY rank_title';
530 5319 acydburn
                                $result = $db->sql_query($sql);
531 5319 acydburn
532 5319 acydburn
                                $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
533 5451 acydburn
534 5451 acydburn
                                while ($row = $db->sql_fetchrow($result))
535 5319 acydburn
                                {
536 5451 acydburn
                                        $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
537 5451 acydburn
                                        $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
538 5319 acydburn
                                }
539 5319 acydburn
                                $db->sql_freeresult($result);
540 5319 acydburn
541 5319 acydburn
                                $type_free                = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
542 5319 acydburn
                                $type_open                = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
543 5319 acydburn
                                $type_closed        = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
544 5319 acydburn
                                $type_hidden        = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
545 5319 acydburn
546 7330 acydburn
                                $avatar_img = (!empty($group_row['group_avatar'])) ? get_user_avatar($group_row['group_avatar'], $group_row['group_avatar_type'], $group_row['group_avatar_width'], $group_row['group_avatar_height'], 'GROUP_AVATAR') : '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />';
547 6660 acydburn
548 5319 acydburn
                                $display_gallery = (isset($_POST['display_gallery'])) ? true : false;
549 5319 acydburn
550 5319 acydburn
                                if ($config['allow_avatar_local'] && $display_gallery)
551 5319 acydburn
                                {
552 5319 acydburn
                                        avatar_gallery($category, $avatar_select, 4);
553 5319 acydburn
                                }
554 5319 acydburn
555 5366 acydburn
                                $back_link = request_var('back_link', '');
556 5366 acydburn
557 5366 acydburn
                                switch ($back_link)
558 5366 acydburn
                                {
559 5366 acydburn
                                        case 'acp_users_groups':
560 6015 acydburn
                                                $u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=groups&amp;u=' . request_var('u', 0));
561 5366 acydburn
                                        break;
562 5366 acydburn
563 5366 acydburn
                                        default:
564 5558 acydburn
                                                $u_back = $this->u_action;
565 5366 acydburn
                                        break;
566 5366 acydburn
                                }
567 5366 acydburn
568 5319 acydburn
                                $template->assign_vars(array(
569 5319 acydburn
                                        'S_EDIT'                        => true,
570 5574 acydburn
                                        'S_ADD_GROUP'                => ($action == 'add') ? true : false,
571 6816 acydburn
                                        'S_GROUP_PERM'                => ($action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth')) ? true : false,
572 5319 acydburn
                                        'S_INCLUDE_SWATCH'        => true,
573 5319 acydburn
                                        'S_CAN_UPLOAD'                => $can_upload,
574 5319 acydburn
                                        'S_ERROR'                        => (sizeof($error)) ? true : false,
575 5319 acydburn
                                        'S_SPECIAL_GROUP'        => ($group_type == GROUP_SPECIAL) ? true : false,
576 5319 acydburn
                                        'S_DISPLAY_GALLERY'        => ($config['allow_avatar_local'] && !$display_gallery) ? true : false,
577 5319 acydburn
                                        'S_IN_GALLERY'                => ($config['allow_avatar_local'] && $display_gallery) ? true : false,
578 6650 acydburn
                                        'S_USER_FOUNDER'        => ($user->data['user_type'] == USER_FOUNDER) ? true : false,
579 5319 acydburn
580 5319 acydburn
                                        'ERROR_MSG'                                => (sizeof($error)) ? implode('<br />', $error) : '',
581 5319 acydburn
                                        'GROUP_NAME'                        => ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name,
582 5449 davidmj
                                        'GROUP_INTERNAL_NAME'        => $group_name,
583 5709 acydburn
                                        'GROUP_DESC'                        => $group_desc_data['text'],
584 5319 acydburn
                                        'GROUP_RECEIVE_PM'                => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
585 6650 acydburn
                                        'GROUP_FOUNDER_MANAGE'        => (isset($group_row['group_founder_manage']) && $group_row['group_founder_manage']) ? ' checked="checked"' : '',
586 5740 acydburn
                                        'GROUP_LEGEND'                        => (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
587 5319 acydburn
                                        'GROUP_MESSAGE_LIMIT'        => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
588 8911 acydburn
                                        'GROUP_MAX_RECIPIENTS'        => (isset($group_row['group_max_recipients'])) ? $group_row['group_max_recipients'] : 0,
589 5319 acydburn
                                        'GROUP_COLOUR'                        => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
590 9625 acydburn
                                        'GROUP_SKIP_AUTH'                => (!empty($group_row['group_skip_auth'])) ? ' checked="checked"' : '',
591 5319 acydburn
592 5709 acydburn
                                        'S_DESC_BBCODE_CHECKED'        => $group_desc_data['allow_bbcode'],
593 5709 acydburn
                                        'S_DESC_URLS_CHECKED'        => $group_desc_data['allow_urls'],
594 5709 acydburn
                                        'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
595 6073 acydburn
596 5319 acydburn
                                        'S_RANK_OPTIONS'                => $rank_options,
597 6816 acydburn
                                        'S_GROUP_OPTIONS'                => group_select_options(false, false, (($user->data['user_type'] == USER_FOUNDER) ? false : 0)),
598 7286 acydburn
                                        'AVATAR'                                => $avatar_img,
599 5319 acydburn
                                        'AVATAR_IMAGE'                        => $avatar_img,
600 5319 acydburn
                                        'AVATAR_MAX_FILESIZE'        => $config['avatar_filesize'],
601 7114 acydburn
                                        'AVATAR_WIDTH'                        => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
602 7114 acydburn
                                        'AVATAR_HEIGHT'                        => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
603 5319 acydburn
604 5449 davidmj
                                        'GROUP_TYPE_FREE'                => GROUP_FREE,
605 5449 davidmj
                                        'GROUP_TYPE_OPEN'                => GROUP_OPEN,
606 5449 davidmj
                                        'GROUP_TYPE_CLOSED'                => GROUP_CLOSED,
607 5449 davidmj
                                        'GROUP_TYPE_HIDDEN'                => GROUP_HIDDEN,
608 5449 davidmj
                                        'GROUP_TYPE_SPECIAL'        => GROUP_SPECIAL,
609 5449 davidmj
610 5319 acydburn
                                        'GROUP_FREE'                => $type_free,
611 5319 acydburn
                                        'GROUP_OPEN'                => $type_open,
612 5319 acydburn
                                        'GROUP_CLOSED'                => $type_closed,
613 5319 acydburn
                                        'GROUP_HIDDEN'                => $type_hidden,
614 5319 acydburn
615 5366 acydburn
                                        'U_BACK'                        => $u_back,
616 6015 acydburn
                                        'U_SWATCH'                        => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&amp;name=group_colour'),
617 5558 acydburn
                                        'U_ACTION'                        => "{$this->u_action}&amp;action=$action&amp;g=$group_id",
618 5319 acydburn
                                        'L_AVATAR_EXPLAIN'        => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)),
619 9625 acydburn
                                ));
620 5319 acydburn
621 5319 acydburn
                                return;
622 5319 acydburn
                        break;
623 5319 acydburn
624 5319 acydburn
                        case 'list':
625 5319 acydburn
626 5319 acydburn
                                if (!$group_id)
627 5319 acydburn
                                {
628 6320 acydburn
                                        trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
629 5319 acydburn
                                }
630 5319 acydburn
631 5319 acydburn
                                $this->page_title = 'GROUP_MEMBERS';
632 5319 acydburn
633 7007 acydburn
                                // Grab the leaders - always, on every page...
634 9625 acydburn
                                $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_regdate, u.user_colour, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
635 8147 acydburn
                                        FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
636 8147 acydburn
                                        WHERE ug.group_id = $group_id
637 7007 acydburn
                                                AND u.user_id = ug.user_id
638 7007 acydburn
                                                AND ug.group_leader = 1
639 6698 acydburn
                                        ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
640 7007 acydburn
                                $result = $db->sql_query($sql);
641 5319 acydburn
642 5319 acydburn
                                while ($row = $db->sql_fetchrow($result))
643 5319 acydburn
                                {
644 7007 acydburn
                                        $template->assign_block_vars('leader', array(
645 7007 acydburn
                                                'U_USER_EDIT'                => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
646 5319 acydburn
647 7007 acydburn
                                                'USERNAME'                        => $row['username'],
648 9625 acydburn
                                                'USERNAME_COLOUR'        => $row['user_colour'],
649 7007 acydburn
                                                'S_GROUP_DEFAULT'        => ($row['group_id'] == $group_id) ? true : false,
650 7007 acydburn
                                                'JOINED'                        => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
651 7007 acydburn
                                                'USER_POSTS'                => $row['user_posts'],
652 9625 acydburn
                                                'USER_ID'                        => $row['user_id'],
653 9625 acydburn
                                        ));
654 5319 acydburn
                                }
655 5319 acydburn
                                $db->sql_freeresult($result);
656 5319 acydburn
657 7007 acydburn
                                // Total number of group members (non-leaders)
658 8147 acydburn
                                $sql = 'SELECT COUNT(user_id) AS total_members
659 8147 acydburn
                                        FROM ' . USER_GROUP_TABLE . "
660 8147 acydburn
                                        WHERE group_id = $group_id
661 7007 acydburn
                                                AND group_leader = 0";
662 7007 acydburn
                                $result = $db->sql_query($sql);
663 7007 acydburn
                                $total_members = (int) $db->sql_fetchfield('total_members');
664 7007 acydburn
                                $db->sql_freeresult($result);
665 7007 acydburn
666 5319 acydburn
                                $s_action_options = '';
667 5319 acydburn
                                $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE');
668 5319 acydburn
669 5319 acydburn
                                foreach ($options as $option => $lang)
670 5319 acydburn
                                {
671 5319 acydburn
                                        $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
672 5319 acydburn
                                }
673 5319 acydburn
674 5319 acydburn
                                $template->assign_vars(array(
675 5319 acydburn
                                        'S_LIST'                        => true,
676 5319 acydburn
                                        'S_GROUP_SPECIAL'        => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
677 5319 acydburn
                                        'S_ACTION_OPTIONS'        => $s_action_options,
678 5319 acydburn
679 5319 acydburn
                                        'S_ON_PAGE'                => on_page($total_members, $config['topics_per_page'], $start),
680 5558 acydburn
                                        'PAGINATION'        => generate_pagination($this->u_action . "&amp;action=$action&amp;g=$group_id", $total_members, $config['topics_per_page'], $start, true),
681 6161 acydburn
                                        'GROUP_NAME'        => ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'],
682 5319 acydburn
683 5558 acydburn
                                        'U_ACTION'                        => $this->u_action . "&amp;g=$group_id",
684 5558 acydburn
                                        'U_BACK'                        => $this->u_action,
685 6161 acydburn
                                        'U_FIND_USERNAME'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=list&amp;field=usernames'),
686 8099 acydburn
                                        'U_DEFAULT_ALL'                => "{$this->u_action}&amp;action=default&amp;g=$group_id",
687 8099 acydburn
                                ));
688 5319 acydburn
689 7007 acydburn
                                // Grab the members
690 9625 acydburn
                                $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_colour, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
691 8147 acydburn
                                        FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
692 8147 acydburn
                                        WHERE ug.group_id = $group_id
693 7007 acydburn
                                                AND u.user_id = ug.user_id
694 7007 acydburn
                                                AND ug.group_leader = 0
695 7007 acydburn
                                        ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
696 7007 acydburn
                                $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
697 5319 acydburn
698 5319 acydburn
                                $pending = false;
699 5319 acydburn
700 7007 acydburn
                                while ($row = $db->sql_fetchrow($result))
701 5319 acydburn
                                {
702 5319 acydburn
                                        if ($row['user_pending'] && !$pending)
703 5319 acydburn
                                        {
704 5319 acydburn
                                                $template->assign_block_vars('member', array(
705 5319 acydburn
                                                        'S_PENDING'                => true)
706 5319 acydburn
                                                );
707 5319 acydburn
708 5319 acydburn
                                                $pending = true;
709 5319 acydburn
                                        }
710 5319 acydburn
711 5319 acydburn
                                        $template->assign_block_vars('member', array(
712 6015 acydburn
                                                'U_USER_EDIT'                => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;action=edit&amp;u={$row['user_id']}"),
713 5319 acydburn
714 5319 acydburn
                                                'USERNAME'                        => $row['username'],
715 9625 acydburn
                                                'USERNAME_COLOUR'        => $row['user_colour'],
716 5319 acydburn
                                                'S_GROUP_DEFAULT'        => ($row['group_id'] == $group_id) ? true : false,
717 5701 acydburn
                                                'JOINED'                        => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
718 5319 acydburn
                                                'USER_POSTS'                => $row['user_posts'],
719 5319 acydburn
                                                'USER_ID'                        => $row['user_id'])
720 5319 acydburn
                                        );
721 5319 acydburn
                                }
722 7007 acydburn
                                $db->sql_freeresult($result);
723 5319 acydburn
724 5319 acydburn
                                return;
725 5319 acydburn
                        break;
726 5319 acydburn
                }
727 5319 acydburn
728 5319 acydburn
                $template->assign_vars(array(
729 5558 acydburn
                        'U_ACTION'                => $this->u_action,
730 5574 acydburn
                        'S_GROUP_ADD'        => ($auth->acl_get('a_groupadd')) ? true : false)
731 5319 acydburn
                );
732 5319 acydburn
733 7108 davidmj
                // Get us all the groups
734 7108 davidmj
                $sql = 'SELECT g.group_id, g.group_name, g.group_type
735 5319 acydburn
                        FROM ' . GROUPS_TABLE . ' g
736 5319 acydburn
                        ORDER BY g.group_type ASC, g.group_name';
737 5319 acydburn
                $result = $db->sql_query($sql);
738 5319 acydburn
739 7117 davidmj
                $lookup = $cached_group_data = array();
740 7108 davidmj
                while ($row = $db->sql_fetchrow($result))
741 7108 davidmj
                {
742 7108 davidmj
                        $type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
743 7246 acydburn
744 7108 davidmj
                        // used to determine what type a group is
745 7108 davidmj
                        $lookup[$row['group_id']] = $type;
746 7246 acydburn
747 7108 davidmj
                        // used for easy access to the data within a group
748 7108 davidmj
                        $cached_group_data[$type][$row['group_id']] = $row;
749 7246 acydburn
                        $cached_group_data[$type][$row['group_id']]['total_members'] = 0;
750 7108 davidmj
                }
751 7108 davidmj
                $db->sql_freeresult($result);
752 7108 davidmj
753 7108 davidmj
                // How many people are in which group?
754 7108 davidmj
                $sql = 'SELECT COUNT(ug.user_id) AS total_members, ug.group_id
755 7108 davidmj
                        FROM ' . USER_GROUP_TABLE . ' ug
756 7108 davidmj
                        WHERE ' . $db->sql_in_set('ug.group_id', array_keys($lookup)) . '
757 7108 davidmj
                        GROUP BY ug.group_id';
758 7108 davidmj
                $result = $db->sql_query($sql);
759 7108 davidmj
760 5319 acydburn
                while ($row = $db->sql_fetchrow($result))
761 5319 acydburn
                {
762 7108 davidmj
                        $type = $lookup[$row['group_id']];
763 7117 davidmj
                        $cached_group_data[$type][$row['group_id']]['total_members'] = $row['total_members'];
764 5319 acydburn
                }
765 5319 acydburn
                $db->sql_freeresult($result);
766 5319 acydburn
767 7246 acydburn
                // The order is... normal, then special
768 7259 acydburn
                ksort($cached_group_data);
769 7246 acydburn
770 7117 davidmj
                foreach ($cached_group_data as $type => $row_ary)
771 7108 davidmj
                {
772 5319 acydburn
                        if ($type == 'special')
773 5319 acydburn
                        {
774 5319 acydburn
                                $template->assign_block_vars('groups', array(
775 5319 acydburn
                                        'S_SPECIAL'                        => true)
776 5319 acydburn
                                );
777 5319 acydburn
                        }
778 5319 acydburn
779 7117 davidmj
                        foreach ($row_ary as $group_id => $row)
780 5319 acydburn
                        {
781 5319 acydburn
                                $group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name'];
782 9053 acydburn
783 5319 acydburn
                                $template->assign_block_vars('groups', array(
784 5558 acydburn
                                        'U_LIST'                => "{$this->u_action}&amp;action=list&amp;g=$group_id",
785 5558 acydburn
                                        'U_EDIT'                => "{$this->u_action}&amp;action=edit&amp;g=$group_id",
786 5574 acydburn
                                        'U_DELETE'                => ($auth->acl_get('a_groupdel')) ? "{$this->u_action}&amp;action=delete&amp;g=$group_id" : '',
787 5319 acydburn
788 5319 acydburn
                                        'S_GROUP_SPECIAL'        => ($row['group_type'] == GROUP_SPECIAL) ? true : false,
789 9053 acydburn
790 5319 acydburn
                                        'GROUP_NAME'        => $group_name,
791 5319 acydburn
                                        'TOTAL_MEMBERS'        => $row['total_members'],
792 9625 acydburn
                                ));
793 5319 acydburn
                        }
794 5319 acydburn
                }
795 5319 acydburn
        }
796 5319 acydburn
}
797 5319 acydburn
798 5319 acydburn
?>