~azzar1/unity/add-show-desktop-key

443 by dcoles
Added Forum application along with unmodifed version of phpBB3 "Olympus" 3.0.0
1
<?php
2
/**
3
*
4
* @package ucp
5
* @version $Id: ucp_groups.php,v 1.67 2007/10/05 14:36:33 acydburn Exp $
6
* @copyright (c) 2005 phpBB Group
7
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8
*
9
*/
10
11
/**
12
* @ignore
13
*/
14
if (!defined('IN_PHPBB'))
15
{
16
	exit;
17
}
18
19
/**
20
* ucp_groups
21
* @package ucp
22
*/
23
class ucp_groups
24
{
25
	var $u_action;
26
27
	function main($id, $mode)
28
	{
29
		global $config, $phpbb_root_path, $phpEx;
30
		global $db, $user, $auth, $cache, $template;
31
32
		$user->add_lang('groups');
33
34
		$return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');
35
36
		$mark_ary	= request_var('mark', array(0));
37
		$submit		= (!empty($_POST['submit'])) ? true : false;
38
		$delete		= (!empty($_POST['delete'])) ? true : false;
39
		$error = $data = array();
40
41
		switch ($mode)
42
		{
43
			case 'membership':
44
		
45
				$this->page_title = 'UCP_USERGROUPS_MEMBER';
46
47
				if ($submit || isset($_POST['change_default']))
48
				{
49
					$action = (isset($_POST['change_default'])) ? 'change_default' : request_var('action', '');
50
					$group_id = ($action == 'change_default') ? request_var('default', 0) : request_var('selected', 0);
51
52
					if (!$group_id)
53
					{
54
						trigger_error('NO_GROUP_SELECTED');
55
					}
56
57
					$sql = 'SELECT group_id, group_name, group_type
58
						FROM ' . GROUPS_TABLE . "
59
						WHERE group_id IN ($group_id, {$user->data['group_id']})";
60
					$result = $db->sql_query($sql);
61
62
					$group_row = array();
63
					while ($row = $db->sql_fetchrow($result))
64
					{
65
						$row['group_name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
66
						$group_row[$row['group_id']] = $row;
67
					}
68
					$db->sql_freeresult($result);
69
70
					if (!sizeof($group_row))
71
					{
72
						trigger_error('GROUP_NOT_EXIST');
73
					}
74
75
					switch ($action)
76
					{
77
						case 'change_default':
78
							// User already having this group set as default?
79
							if ($group_id == $user->data['group_id'])
80
							{
81
								trigger_error($user->lang['ALREADY_DEFAULT_GROUP'] . $return_page);
82
							}
83
84
							if (!$auth->acl_get('u_chggrp'))
85
							{
86
								trigger_error($user->lang['NOT_AUTHORISED'] . $return_page);
87
							}
88
89
							// User needs to be member of the group in order to make it default
90
							if (!group_memberships($group_id, $user->data['user_id'], true))
91
							{
92
								trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
93
							}
94
95
							if (confirm_box(true))
96
							{
97
								group_user_attributes('default', $group_id, $user->data['user_id']);
98
99
								add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_CHANGE', sprintf($user->lang['USER_GROUP_CHANGE'], $group_row[$user->data['group_id']]['group_name'], $group_row[$group_id]['group_name']));
100
101
								meta_refresh(3, $this->u_action);
102
								trigger_error($user->lang['CHANGED_DEFAULT_GROUP'] . $return_page);
103
							}
104
							else
105
							{
106
								$s_hidden_fields = array(
107
									'default'		=> $group_id,
108
									'change_default'=> true
109
								);
110
111
								confirm_box(false, sprintf($user->lang['GROUP_CHANGE_DEFAULT'], $group_row[$group_id]['group_name']), build_hidden_fields($s_hidden_fields));
112
							}
113
114
						break;
115
116
						case 'resign':
117
118
							// User tries to resign from default group but is not allowed to change it?
119
							if ($group_id == $user->data['group_id'] && !$auth->acl_get('u_chggrp'))
120
							{
121
								trigger_error($user->lang['NOT_RESIGN_FROM_DEFAULT_GROUP'] . $return_page);
122
							}
123
124
							if (!($row = group_memberships($group_id, $user->data['user_id'])))
125
							{
126
								trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
127
							}
128
							list(, $row) = each($row);
129
130
							if (confirm_box(true))
131
							{
132
								group_user_del($group_id, $user->data['user_id']);
133
134
								add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_RESIGN', $group_row[$group_id]['group_name']);
135
136
								meta_refresh(3, $this->u_action);
137
								trigger_error($user->lang[($row['user_pending']) ? 'GROUP_RESIGNED_PENDING' : 'GROUP_RESIGNED_MEMBERSHIP'] . $return_page);
138
							}
139
							else
140
							{
141
								$s_hidden_fields = array(
142
									'selected'		=> $group_id,
143
									'action'		=> 'resign',
144
									'submit'		=> true
145
								);
146
147
								confirm_box(false, ($row['user_pending']) ? 'GROUP_RESIGN_PENDING' : 'GROUP_RESIGN_MEMBERSHIP', build_hidden_fields($s_hidden_fields));
148
							}
149
150
						break;
151
152
						case 'join':
153
154
							$sql = 'SELECT ug.*, u.username, u.username_clean, u.user_email
155
								FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
156
								WHERE ug.user_id = u.user_id
157
									AND ug.group_id = ' . $group_id . '
158
									AND ug.user_id = ' . $user->data['user_id'];
159
							$result = $db->sql_query($sql);
160
							$row = $db->sql_fetchrow($result);
161
							$db->sql_freeresult($result);
162
163
							if ($row)
164
							{
165
								if ($row['user_pending'])
166
								{
167
									trigger_error($user->lang['ALREADY_IN_GROUP_PENDING'] . $return_page);
168
								}
169
170
								trigger_error($user->lang['ALREADY_IN_GROUP'] . $return_page);
171
							}
172
173
							// Check permission to join (open group or request)
174
							if ($group_row[$group_id]['group_type'] != GROUP_OPEN && $group_row[$group_id]['group_type'] != GROUP_FREE)
175
							{
176
								trigger_error($user->lang['CANNOT_JOIN_GROUP'] . $return_page);
177
							}
178
179
							if (confirm_box(true))
180
							{
181
								if ($group_row[$group_id]['group_type'] == GROUP_FREE)
182
								{
183
									group_user_add($group_id, $user->data['user_id']);
184
185
									$email_template = 'group_added';
186
								}
187
								else
188
								{
189
									group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1);
190
191
									$email_template = 'group_request';
192
								}
193
194
								include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
195
								$messenger = new messenger();
196
197
								$sql = 'SELECT u.username, u.username_clean, u.user_email, u.user_notify_type, u.user_jabber, u.user_lang
198
									FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
199
									WHERE ug.user_id = u.user_id
200
										AND ' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? "ug.user_id = {$user->data['user_id']}" : 'ug.group_leader = 1') . "
201
										AND ug.group_id = $group_id";
202
								$result = $db->sql_query($sql);
203
204
								while ($row = $db->sql_fetchrow($result))
205
								{
206
									$messenger->template($email_template, $row['user_lang']);
207
208
									$messenger->to($row['user_email'], $row['username']);
209
									$messenger->im($row['user_jabber'], $row['username']);
210
211
									$messenger->assign_vars(array(
212
										'USERNAME'		=> htmlspecialchars_decode($row['username']),
213
										'GROUP_NAME'	=> htmlspecialchars_decode($group_row[$group_id]['group_name']),
214
215
										'U_PENDING'		=> generate_board_url() . "/ucp.$phpEx?i=groups&mode=manage&action=list&g=$group_id",
216
										'U_GROUP'		=> generate_board_url() . "/memberlist.$phpEx?mode=group&g=$group_id")
217
									);
218
219
									$messenger->send($row['user_notify_type']);
220
								}
221
								$db->sql_freeresult($result);
222
223
								$messenger->save_queue();
224
225
								add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_JOIN' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? '' : '_PENDING'), $group_row[$group_id]['group_name']);
226
227
								meta_refresh(3, $this->u_action);
228
								trigger_error($user->lang[($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOINED' : 'GROUP_JOINED_PENDING'] . $return_page);
229
							}
230
							else
231
							{
232
								$s_hidden_fields = array(
233
									'selected'		=> $group_id,
234
									'action'		=> 'join',
235
									'submit'		=> true
236
								);
237
238
								confirm_box(false, ($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOIN' : 'GROUP_JOIN_PENDING', build_hidden_fields($s_hidden_fields));
239
							}
240
241
						break;
242
243
						case 'demote':
244
245
							if (!($row = group_memberships($group_id, $user->data['user_id'])))
246
							{
247
								trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
248
							}
249
							list(, $row) = each($row);
250
251
							if (!$row['group_leader'])
252
							{
253
								trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
254
							}
255
256
							if (confirm_box(true))
257
							{
258
								group_user_attributes('demote', $group_id, $user->data['user_id']);
259
260
								add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_DEMOTE', $group_row[$group_id]['group_name']);
261
262
								meta_refresh(3, $this->u_action);
263
								trigger_error($user->lang['USER_GROUP_DEMOTED'] . $return_page);
264
							}
265
							else
266
							{
267
								$s_hidden_fields = array(
268
									'selected'		=> $group_id,
269
									'action'		=> 'demote',
270
									'submit'		=> true
271
								);
272
273
								confirm_box(false, 'USER_GROUP_DEMOTE', build_hidden_fields($s_hidden_fields));
274
							}
275
276
						break;
277
					}
278
				}
279
280
				$sql = 'SELECT g.*, ug.group_leader, ug.user_pending
281
					FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
282
					WHERE ug.user_id = ' . $user->data['user_id'] . '
283
						AND g.group_id = ug.group_id
284
					ORDER BY g.group_type DESC, g.group_name';
285
				$result = $db->sql_query($sql);
286
287
				$group_id_ary = array();
288
				$leader_count = $member_count = $pending_count = 0;
289
				while ($row = $db->sql_fetchrow($result))
290
				{
291
					$block = ($row['group_leader']) ? 'leader' : (($row['user_pending']) ? 'pending' : 'member');
292
293
					switch ($row['group_type'])
294
					{
295
						case GROUP_OPEN:
296
							$group_status = 'OPEN';
297
						break;
298
299
						case GROUP_CLOSED:
300
							$group_status = 'CLOSED';
301
						break;
302
303
						case GROUP_HIDDEN:
304
							$group_status = 'HIDDEN';
305
						break;
306
307
						case GROUP_SPECIAL:
308
							$group_status = 'SPECIAL';
309
						break;
310
311
						case GROUP_FREE:
312
							$group_status = 'FREE';
313
						break;
314
					}
315
316
					$template->assign_block_vars($block, array(
317
						'GROUP_ID'		=> $row['group_id'],
318
						'GROUP_NAME'	=> ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'],
319
						'GROUP_DESC'	=> ($row['group_type'] <> GROUP_SPECIAL) ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'],
320
						'GROUP_SPECIAL'	=> ($row['group_type'] <> GROUP_SPECIAL) ? false : true,
321
						'GROUP_STATUS'	=> $user->lang['GROUP_IS_' . $group_status],
322
						'GROUP_COLOUR'	=> $row['group_colour'],
323
324
						'U_VIEW_GROUP'	=> append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']),
325
326
						'S_GROUP_DEFAULT'	=> ($row['group_id'] == $user->data['group_id']) ? true : false,
327
						'S_ROW_COUNT'		=> ${$block . '_count'}++)
328
					);
329
330
					$group_id_ary[] = $row['group_id'];
331
				}
332
				$db->sql_freeresult($result);
333
334
				// Hide hidden groups unless user is an admin with group privileges
335
				$sql_and = ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')';
336
337
				$sql = 'SELECT group_id, group_name, group_colour, group_desc, group_desc_uid, group_desc_bitfield, group_desc_options, group_type, group_founder_manage
338
					FROM ' . GROUPS_TABLE . '
339
					WHERE ' . ((sizeof($group_id_ary)) ? $db->sql_in_set('group_id', $group_id_ary, true) . ' AND ' : '') . "
340
						group_type $sql_and
341
					ORDER BY group_type DESC, group_name";
342
				$result = $db->sql_query($sql);
343
344
				$nonmember_count = 0;
345
				while ($row = $db->sql_fetchrow($result))
346
				{
347
					switch ($row['group_type'])
348
					{
349
						case GROUP_OPEN:
350
							$group_status = 'OPEN';
351
						break;
352
353
						case GROUP_CLOSED:
354
							$group_status = 'CLOSED';
355
						break;
356
357
						case GROUP_HIDDEN:
358
							$group_status = 'HIDDEN';
359
						break;
360
361
						case GROUP_SPECIAL:
362
							$group_status = 'SPECIAL';
363
						break;
364
365
						case GROUP_FREE:
366
							$group_status = 'FREE';
367
						break;
368
					}
369
370
					$template->assign_block_vars('nonmember', array(
371
						'GROUP_ID'		=> $row['group_id'],
372
						'GROUP_NAME'	=> ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'],
373
						'GROUP_DESC'	=> ($row['group_type'] <> GROUP_SPECIAL) ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'],
374
						'GROUP_SPECIAL'	=> ($row['group_type'] <> GROUP_SPECIAL) ? false : true,
375
						'GROUP_CLOSED'	=> ($row['group_type'] <> GROUP_CLOSED || $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? false : true,
376
						'GROUP_STATUS'	=> $user->lang['GROUP_IS_' . $group_status],
377
						'S_CAN_JOIN'	=> ($row['group_type'] == GROUP_OPEN || $row['group_type'] == GROUP_FREE) ? true : false,
378
						'GROUP_COLOUR'	=> $row['group_colour'],
379
380
						'U_VIEW_GROUP'	=> append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']),
381
382
						'S_ROW_COUNT'	=> $nonmember_count++)
383
					);
384
				}
385
				$db->sql_freeresult($result);
386
387
				$template->assign_vars(array(
388
					'S_CHANGE_DEFAULT'	=> ($auth->acl_get('u_chggrp')) ? true : false,
389
					'S_LEADER_COUNT'	=> $leader_count,
390
					'S_MEMBER_COUNT'	=> $member_count,
391
					'S_PENDING_COUNT'	=> $pending_count,
392
					'S_NONMEMBER_COUNT'	=> $nonmember_count,
393
394
					'S_UCP_ACTION'			=> $this->u_action)
395
				);
396
397
			break;
398
399
			case 'manage':
400
401
				$this->page_title = 'UCP_USERGROUPS_MANAGE';
402
				$action		= (isset($_POST['addusers'])) ? 'addusers' : request_var('action', '');
403
				$group_id	= request_var('g', 0);
404
				add_form_key('ucp_groups');
405
406
				if ($group_id)
407
				{
408
					$sql = 'SELECT *
409
						FROM ' . GROUPS_TABLE . "
410
						WHERE group_id = $group_id";
411
					$result = $db->sql_query($sql);
412
					$group_row = $db->sql_fetchrow($result);
413
					$db->sql_freeresult($result);
414
415
					if (!$group_row)
416
					{
417
						trigger_error($user->lang['NO_GROUP'] . $return_page);
418
					}
419
420
					// Check if the user is allowed to manage this group if set to founder only.
421
					if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
422
					{
423
						trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . $return_page, E_USER_WARNING);
424
					}
425
				}
426
427
				switch ($action)
428
				{
429
					case 'edit':
430
431
						include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
432
433
						if (!$group_id)
434
						{
435
							trigger_error($user->lang['NO_GROUP'] . $return_page);
436
						}
437
438
						if (!($row = group_memberships($group_id, $user->data['user_id'])))
439
						{
440
							trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
441
						}
442
						list(, $row) = each($row);
443
444
						if (!$row['group_leader'])
445
						{
446
							trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
447
						}
448
449
						$file_uploads = (@ini_get('file_uploads') || strtolower(@ini_get('file_uploads')) == 'on') ? true : false;
450
						$user->add_lang(array('acp/groups', 'acp/common'));
451
452
						$data = $submit_ary = array();
453
454
						$update	= (isset($_POST['update'])) ? true : false;
455
456
						$error = array();
457
458
						$avatar_select = basename(request_var('avatar_select', ''));
459
						$category = basename(request_var('category', ''));
460
461
						$can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && @is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
462
463
						// Did we submit?
464
						if ($update)
465
						{
466
							$group_name	= utf8_normalize_nfc(request_var('group_name', '', true));
467
							$group_desc = utf8_normalize_nfc(request_var('group_desc', '', true));
468
							$group_type	= request_var('group_type', GROUP_FREE);
469
470
							$allow_desc_bbcode	= request_var('desc_parse_bbcode', false);
471
							$allow_desc_urls	= request_var('desc_parse_urls', false);
472
							$allow_desc_smilies	= request_var('desc_parse_smilies', false);
473
474
							$submit_ary = array(
475
								'colour'		=> request_var('group_colour', ''),
476
								'rank'			=> request_var('group_rank', 0),
477
								'receive_pm'	=> isset($_REQUEST['group_receive_pm']) ? 1 : 0,
478
								'message_limit'	=> request_var('group_message_limit', 0)
479
							);
480
481
							$data['uploadurl']	= request_var('uploadurl', '');
482
							$data['remotelink'] = request_var('remotelink', '');
483
							$data['width']		= request_var('width', '');
484
							$data['height']		= request_var('height', '');
485
							$delete				= request_var('delete', '');
486
487
							if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
488
							{
489
								// Avatar stuff
490
								$var_ary = array(
491
									'uploadurl'		=> array('string', true, 5, 255),
492
									'remotelink'	=> array('string', true, 5, 255),
493
									'width'			=> array('string', true, 1, 3),
494
									'height'		=> array('string', true, 1, 3),
495
								);
496
497
								if (!($error = validate_data($data, $var_ary)))
498
								{
499
									$data['user_id'] = "g$group_id";
500
501
									if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
502
									{
503
										list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
504
									}
505
									else if ($data['remotelink'])
506
									{
507
										list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
508
									}
509
								}
510
							}
511
							else if ($avatar_select && $config['allow_avatar_local'])
512
							{
513
								// check avatar gallery
514
								if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category))
515
								{
516
									$submit_ary['avatar_type'] = AVATAR_GALLERY;
517
518
									list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
519
									$submit_ary['avatar'] = $category . '/' . $avatar_select;
520
								}
521
							}
522
							else if ($delete)
523
							{
524
								$submit_ary['avatar'] = '';
525
								$submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
526
							}
527
							else if ($data['width'] && $data['height'])
528
							{
529
								// Only update the dimensions?
530
								if ($config['avatar_max_width'] || $config['avatar_max_height'])
531
								{
532
									if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height'])
533
									{
534
										$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']);
535
									}
536
								}
537
538
								if (!sizeof($error))
539
								{
540
									if ($config['avatar_min_width'] || $config['avatar_min_height'])
541
									{
542
										if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height'])
543
										{
544
											$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']);
545
										}
546
									}
547
								}
548
549
								if (!sizeof($error))
550
								{
551
									$submit_ary['avatar_width'] = $data['width'];
552
									$submit_ary['avatar_height'] = $data['height'];
553
								}
554
							}
555
556
							if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']))) || $delete)
557
							{
558
								if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
559
								{
560
									avatar_delete('group', $group_row, true);
561
								}
562
							}
563
564
							if (!check_form_key('ucp_groups'))
565
							{
566
								$error[] = $user->lang['FORM_INVALID'];
567
							}
568
569
							if (!sizeof($error))
570
							{
571
								// Only set the rank, colour, etc. if it's changed or if we're adding a new
572
								// group. This prevents existing group members being updated if no changes
573
								// were made.
574
						
575
								$group_attributes = array();
576
								$test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height');
577
								foreach ($test_variables as $test)
578
								{
579
									if ($action == 'add' || (isset($submit_ary[$test]) && $group_row['group_' . $test] != $submit_ary[$test]))
580
									{
581
										$group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
582
									}
583
								}
584
585
								if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
586
								{
587
									$cache->destroy('sql', GROUPS_TABLE);
588
589
									$message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
590
									trigger_error($user->lang[$message] . $return_page);
591
								}
592
							}
593
594
							if (sizeof($error))
595
							{
596
								$group_rank = $submit_ary['rank'];
597
598
								$group_desc_data = array(
599
									'text'			=> $group_desc,
600
									'allow_bbcode'	=> $allow_desc_bbcode,
601
									'allow_smilies'	=> $allow_desc_smilies,
602
									'allow_urls'	=> $allow_desc_urls
603
								);
604
							}
605
						}
606
						else if (!$group_id)
607
						{
608
							$group_name = utf8_normalize_nfc(request_var('group_name', '', true));
609
							$group_desc_data = array(
610
								'text'			=> '',
611
								'allow_bbcode'	=> true,
612
								'allow_smilies'	=> true,
613
								'allow_urls'	=> true
614
							);
615
							$group_rank = 0;
616
							$group_type = GROUP_OPEN;
617
						}
618
						else
619
						{
620
							$group_name = $group_row['group_name'];
621
							$group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
622
							$group_type = $group_row['group_type'];
623
							$group_rank = $group_row['group_rank'];
624
						}
625
626
						$sql = 'SELECT *
627
							FROM ' . RANKS_TABLE . '
628
							WHERE rank_special = 1
629
							ORDER BY rank_title';
630
						$result = $db->sql_query($sql);
631
632
						$rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
633
						while ($row = $db->sql_fetchrow($result))
634
						{
635
							$selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
636
							$rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
637
						}
638
						$db->sql_freeresult($result);
639
640
						$type_free		= ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
641
						$type_open		= ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
642
						$type_closed	= ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
643
						$type_hidden	= ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
644
645
						$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_root_path . 'adm/images/no_avatar.gif" alt="" />';
646
647
						$display_gallery = (isset($_POST['display_gallery'])) ? true : false;
648
649
						if ($config['allow_avatar_local'] && $display_gallery)
650
						{
651
							avatar_gallery($category, $avatar_select, 4);
652
						}
653
						
654
						$avatars_enabled = ($can_upload || ($config['allow_avatar_local'] || $config['allow_avatar_remote'])) ? true : false;
655
656
657
						$template->assign_vars(array(
658
							'S_EDIT'			=> true,
659
							'S_INCLUDE_SWATCH'	=> true,
660
							'S_CAN_UPLOAD'		=> $can_upload,
661
							'S_FORM_ENCTYPE'	=> ($can_upload) ? ' enctype="multipart/form-data"' : '',
662
							'S_ERROR'			=> (sizeof($error)) ? true : false,
663
							'S_SPECIAL_GROUP'	=> ($group_type == GROUP_SPECIAL) ? true : false,
664
							'S_AVATARS_ENABLED'	=> $avatars_enabled,
665
							'S_DISPLAY_GALLERY'	=> ($config['allow_avatar_local'] && !$display_gallery) ? true : false,
666
							'S_IN_GALLERY'		=> ($config['allow_avatar_local'] && $display_gallery) ? true : false,
667
668
							'ERROR_MSG'				=> (sizeof($error)) ? implode('<br />', $error) : '',
669
							'GROUP_NAME'			=> ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name,
670
							'GROUP_INTERNAL_NAME'	=> $group_name,
671
							'GROUP_DESC'			=> $group_desc_data['text'],
672
							'GROUP_RECEIVE_PM'		=> (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
673
							'GROUP_MESSAGE_LIMIT'	=> (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
674
							'GROUP_COLOUR'			=> (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
675
676
							'S_DESC_BBCODE_CHECKED'	=> $group_desc_data['allow_bbcode'],
677
							'S_DESC_URLS_CHECKED'	=> $group_desc_data['allow_urls'],
678
							'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
679
680
							'S_RANK_OPTIONS'		=> $rank_options,
681
							'AVATAR'				=> $avatar_img,
682
							'AVATAR_IMAGE'			=> $avatar_img,
683
							'AVATAR_MAX_FILESIZE'	=> $config['avatar_filesize'],
684
							'AVATAR_WIDTH'			=> (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
685
							'AVATAR_HEIGHT'			=> (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
686
687
							'GROUP_TYPE_FREE'		=> GROUP_FREE,
688
							'GROUP_TYPE_OPEN'		=> GROUP_OPEN,
689
							'GROUP_TYPE_CLOSED'		=> GROUP_CLOSED,
690
							'GROUP_TYPE_HIDDEN'		=> GROUP_HIDDEN,
691
							'GROUP_TYPE_SPECIAL'	=> GROUP_SPECIAL,
692
693
							'GROUP_FREE'		=> $type_free,
694
							'GROUP_OPEN'		=> $type_open,
695
							'GROUP_CLOSED'		=> $type_closed,
696
							'GROUP_HIDDEN'		=> $type_hidden,
697
698
							'U_SWATCH'			=> append_sid("{$phpbb_root_path}adm/swatch.$phpEx", 'form=ucp&amp;name=group_colour'),
699
							'S_UCP_ACTION'		=> $this->u_action . "&amp;action=$action&amp;g=$group_id",
700
							'L_AVATAR_EXPLAIN'	=> sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)))
701
						);
702
703
					break;
704
705
					case 'list':
706
707
						if (!$group_id)
708
						{
709
							trigger_error($user->lang['NO_GROUP'] . $return_page);
710
						}
711
712
						if (!($row = group_memberships($group_id, $user->data['user_id'])))
713
						{
714
							trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
715
						}
716
						list(, $row) = each($row);
717
718
						if (!$row['group_leader'])
719
						{
720
							trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
721
						}
722
723
						$user->add_lang(array('acp/groups', 'acp/common'));
724
						$start = request_var('start', 0);
725
726
						// Grab the leaders - always, on every page...
727
						$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
728
							FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
729
							WHERE ug.group_id = $group_id
730
								AND u.user_id = ug.user_id
731
								AND ug.group_leader = 1
732
							ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
733
						$result = $db->sql_query($sql);
734
735
						while ($row = $db->sql_fetchrow($result))
736
						{
737
							$template->assign_block_vars('leader', array(
738
								'USERNAME'			=> $row['username'],
739
								'USERNAME_COLOUR'	=> $row['user_colour'],
740
								'USERNAME_FULL'		=> get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
741
								'U_USER_VIEW'		=> get_username_string('profile', $row['user_id'], $row['username']),
742
								'S_GROUP_DEFAULT'	=> ($row['group_id'] == $group_id) ? true : false,
743
								'JOINED'			=> ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
744
								'USER_POSTS'		=> $row['user_posts'],
745
								'USER_ID'			=> $row['user_id'])
746
							);
747
						}
748
						$db->sql_freeresult($result);
749
750
						// Total number of group members (non-leaders)
751
						$sql = 'SELECT COUNT(user_id) AS total_members
752
							FROM ' . USER_GROUP_TABLE . "
753
							WHERE group_id = $group_id
754
								AND group_leader = 0";
755
						$result = $db->sql_query($sql);
756
						$total_members = (int) $db->sql_fetchfield('total_members');
757
						$db->sql_freeresult($result);
758
759
						// Grab the members
760
						$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
761
							FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
762
							WHERE ug.group_id = $group_id
763
								AND u.user_id = ug.user_id
764
								AND ug.group_leader = 0
765
							ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
766
						$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
767
768
						$pending = false;
769
770
						while ($row = $db->sql_fetchrow($result))
771
						{
772
							if ($row['user_pending'] && !$pending)
773
							{
774
								$template->assign_block_vars('member', array(
775
									'S_PENDING'		=> true)
776
								);
777
778
								$pending = true;
779
							}
780
781
							$template->assign_block_vars('member', array(
782
								'USERNAME'			=> $row['username'],
783
								'USERNAME_COLOUR'	=> $row['user_colour'],
784
								'USERNAME_FULL'		=> get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
785
								'U_USER_VIEW'		=> get_username_string('profile', $row['user_id'], $row['username']),
786
								'S_GROUP_DEFAULT'	=> ($row['group_id'] == $group_id) ? true : false,
787
								'JOINED'			=> ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
788
								'USER_POSTS'		=> $row['user_posts'],
789
								'USER_ID'			=> $row['user_id'])
790
							);
791
						}
792
						$db->sql_freeresult($result);
793
794
						$s_action_options = '';
795
						$options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'deleteusers' => 'DELETE');
796
797
						foreach ($options as $option => $lang)
798
						{
799
							$s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
800
						}
801
802
						$template->assign_vars(array(
803
							'S_LIST'			=> true,
804
							'S_ACTION_OPTIONS'	=> $s_action_options,
805
							'S_ON_PAGE'			=> on_page($total_members, $config['topics_per_page'], $start),
806
							'PAGINATION'		=> generate_pagination($this->u_action . "&amp;action=$action&amp;g=$group_id", $total_members, $config['topics_per_page'], $start),
807
808
							'U_ACTION'			=> $this->u_action . "&amp;g=$group_id",
809
							'U_FIND_USERNAME'	=> append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=ucp&amp;field=usernames'),
810
						));
811
812
					break;
813
814
					case 'approve':
815
816
						if (!$group_id)
817
						{
818
							trigger_error($user->lang['NO_GROUP'] . $return_page);
819
						}
820
821
						if (!($row = group_memberships($group_id, $user->data['user_id'])))
822
						{
823
							trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
824
						}
825
						list(, $row) = each($row);
826
827
						if (!$row['group_leader'])
828
						{
829
							trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
830
						}
831
832
						$user->add_lang('acp/groups');
833
834
						// Approve, demote or promote
835
						group_user_attributes('approve', $group_id, $mark_ary, false, false);
836
837
						trigger_error($user->lang['USERS_APPROVED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
838
839
					break;
840
841
					case 'default':
842
843
						if (!$group_id)
844
						{
845
							trigger_error($user->lang['NO_GROUP'] . $return_page);
846
						}
847
848
						if (!($row = group_memberships($group_id, $user->data['user_id'])))
849
						{
850
							trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
851
						}
852
						list(, $row) = each($row);
853
854
						if (!$row['group_leader'])
855
						{
856
							trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
857
						}
858
859
						$group_row['group_name'] = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
860
861
						if (confirm_box(true))
862
						{
863
							if (!sizeof($mark_ary))
864
							{
865
								$start = 0;
866
				
867
								do
868
								{
869
									$sql = 'SELECT user_id
870
										FROM ' . USER_GROUP_TABLE . "
871
										WHERE group_id = $group_id
872
										ORDER BY user_id";
873
									$result = $db->sql_query_limit($sql, 200, $start);
874
875
									$mark_ary = array();
876
									if ($row = $db->sql_fetchrow($result))
877
									{
878
										do
879
										{
880
											$mark_ary[] = $row['user_id'];
881
										}
882
										while ($row = $db->sql_fetchrow($result));
883
884
										group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
885
886
										$start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
887
									}
888
									else
889
									{
890
										$start = 0;
891
									}
892
									$db->sql_freeresult($result);
893
								}
894
								while ($start);
895
							}
896
							else
897
							{
898
								group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
899
							}
900
901
							$user->add_lang('acp/groups');
902
903
							trigger_error($user->lang['GROUP_DEFS_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
904
						}
905
						else
906
						{
907
							$user->add_lang('acp/common');
908
909
							confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
910
								'mark'		=> $mark_ary,
911
								'g'			=> $group_id,
912
								'i'			=> $id,
913
								'mode'		=> $mode,
914
								'action'	=> $action))
915
							);
916
						}
917
918
					break;
919
920
					case 'deleteusers':
921
922
						$user->add_lang(array('acp/groups', 'acp/common'));
923
924
						if (!($row = group_memberships($group_id, $user->data['user_id'])))
925
						{
926
							trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
927
						}
928
						list(, $row) = each($row);
929
930
						if (!$row['group_leader'])
931
						{
932
							trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
933
						}
934
935
						$group_row['group_name'] = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
936
937
						if (confirm_box(true))
938
						{
939
							if (!$group_id)
940
							{
941
								trigger_error($user->lang['NO_GROUP'] . $return_page);
942
							}
943
944
							$error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']);
945
946
							if ($error)
947
							{
948
								trigger_error($user->lang[$error] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
949
							}
950
951
							trigger_error($user->lang['GROUP_USERS_REMOVE'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
952
						}
953
						else
954
						{
955
							confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
956
								'mark'		=> $mark_ary,
957
								'g'			=> $group_id,
958
								'i'			=> $id,
959
								'mode'		=> $mode,
960
								'action'	=> $action))
961
							);
962
						}
963
964
					break;
965
966
					case 'addusers':
967
968
						$user->add_lang(array('acp/groups', 'acp/common'));
969
970
						$names = utf8_normalize_nfc(request_var('usernames', '', true));
971
972
						if (!$group_id)
973
						{
974
							trigger_error($user->lang['NO_GROUP'] . $return_page);
975
						}
976
977
						if (!$names)
978
						{
979
							trigger_error($user->lang['NO_USERS'] . $return_page);
980
						}
981
982
						if (!($row = group_memberships($group_id, $user->data['user_id'])))
983
						{
984
							trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
985
						}
986
						list(, $row) = each($row);
987
988
						if (!$row['group_leader'])
989
						{
990
							trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
991
						}
992
993
						$name_ary = array_unique(explode("\n", $names));
994
						$group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
995
996
						$default = request_var('default', 0);
997
						
998
						if (confirm_box(true))
999
						{
1000
							// Add user/s to group
1001
							if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, 0, 0, $group_row))
1002
							{
1003
								trigger_error($user->lang[$error] . $return_page);
1004
							}
1005
						}
1006
						else
1007
						{
1008
							$s_hidden_fields = array(
1009
								'default'	=> $default,
1010
								'usernames'	=> $names,
1011
								'g'			=> $group_id,
1012
								'i'			=> $id,
1013
								'mode'		=> $mode,
1014
								'action'	=> $action
1015
							);
1016
							confirm_box(false, sprintf($user->lang['GROUP_CONFIRM_ADD_USER' . ((sizeof($name_ary) == 1) ? '' : 'S')], implode(', ', $name_ary)), build_hidden_fields($s_hidden_fields));
1017
						}
1018
1019
						trigger_error($user->lang['GROUP_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&amp;action=list&amp;g=' . $group_id . '">', '</a>'));
1020
1021
					break;
1022
1023
					default:
1024
						$user->add_lang('acp/common');
1025
1026
						$sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_desc, g.group_desc_uid, g.group_desc_bitfield, g.group_desc_options, g.group_type, ug.group_leader
1027
							FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
1028
							WHERE ug.user_id = ' . $user->data['user_id'] . '
1029
								AND g.group_id = ug.group_id
1030
								AND ug.group_leader = 1
1031
							ORDER BY g.group_type DESC, g.group_name';
1032
						$result = $db->sql_query($sql);
1033
1034
						while ($value = $db->sql_fetchrow($result))
1035
						{
1036
							$template->assign_block_vars('leader', array(
1037
								'GROUP_NAME'	=> ($value['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $value['group_name']] : $value['group_name'],
1038
								'GROUP_DESC'	=> generate_text_for_display($value['group_desc'], $value['group_desc_uid'], $value['group_desc_bitfield'], $value['group_desc_options']),
1039
								'GROUP_TYPE'	=> $value['group_type'],
1040
								'GROUP_ID'		=> $value['group_id'],
1041
								'GROUP_COLOUR'	=> $value['group_colour'],
1042
1043
								'U_LIST'	=> $this->u_action . "&amp;action=list&amp;g={$value['group_id']}",
1044
								'U_EDIT'	=> $this->u_action . "&amp;action=edit&amp;g={$value['group_id']}")
1045
							);
1046
						}
1047
						$db->sql_freeresult($result);
1048
1049
					break;
1050
				}
1051
1052
			break;
1053
		}
1054
1055
		$this->tpl_name = 'ucp_groups_' . $mode;
1056
	}
1057
}
1058
1059
?>