Blame Identity/Models/Html/phpBB/3.0.4/includes/acp/acp_groups.php

d6e8d8
d6e8d8
/**
d6e8d8
*
d6e8d8
* @package acp
d6e8d8
* @version $Id: acp_groups.php 9053 2008-11-09 15:10:40Z acydburn $
d6e8d8
* @copyright (c) 2005 phpBB Group
d6e8d8
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
d6e8d8
*
d6e8d8
*/
d6e8d8
d6e8d8
/**
d6e8d8
* @ignore
d6e8d8
*/
d6e8d8
if (!defined('IN_PHPBB'))
d6e8d8
{
d6e8d8
	exit;
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* @package acp
d6e8d8
*/
d6e8d8
class acp_groups
d6e8d8
{
d6e8d8
	var $u_action;
d6e8d8
d6e8d8
	function main($id, $mode)
d6e8d8
	{
d6e8d8
		global $config, $db, $user, $auth, $template, $cache;
d6e8d8
		global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads;
d6e8d8
d6e8d8
		$user->add_lang('acp/groups');
d6e8d8
		$this->tpl_name = 'acp_groups';
d6e8d8
		$this->page_title = 'ACP_GROUPS_MANAGE';
d6e8d8
d6e8d8
		$form_key = 'acp_groups';
d6e8d8
		add_form_key($form_key);
d6e8d8
d6e8d8
		include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
d6e8d8
d6e8d8
		// Check and set some common vars
d6e8d8
		$action		= (isset($_POST['add'])) ? 'add' : ((isset($_POST['addusers'])) ? 'addusers' : request_var('action', ''));
d6e8d8
		$group_id	= request_var('g', 0);
d6e8d8
		$mark_ary	= request_var('mark', array(0));
d6e8d8
		$name_ary	= request_var('usernames', '', true);
d6e8d8
		$leader		= request_var('leader', 0);
d6e8d8
		$default	= request_var('default', 0);
d6e8d8
		$start		= request_var('start', 0);
d6e8d8
		$update		= (isset($_POST['update'])) ? true : false;
d6e8d8
d6e8d8
d6e8d8
		// Clear some vars
d6e8d8
		$can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && @is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
d6e8d8
		$group_row = array();
d6e8d8
d6e8d8
		// Grab basic data for group, if group_id is set and exists
d6e8d8
		if ($group_id)
d6e8d8
		{
d6e8d8
			$sql = 'SELECT *
d6e8d8
				FROM ' . GROUPS_TABLE . "
d6e8d8
				WHERE group_id = $group_id";
d6e8d8
			$result = $db->sql_query($sql);
d6e8d8
			$group_row = $db->sql_fetchrow($result);
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
d6e8d8
			if (!$group_row)
d6e8d8
			{
d6e8d8
				trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
			}
d6e8d8
d6e8d8
			// Check if the user is allowed to manage this group if set to founder only.
d6e8d8
			if ($user->data['user_type'] != USER_FOUNDER && $group_row['group_founder_manage'])
d6e8d8
			{
d6e8d8
				trigger_error($user->lang['NOT_ALLOWED_MANAGE_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
			}
d6e8d8
		}
d6e8d8
d6e8d8
		// Which page?
d6e8d8
		switch ($action)
d6e8d8
		{
d6e8d8
			case 'approve':
d6e8d8
			case 'demote':
d6e8d8
			case 'promote':
d6e8d8
				if (!$group_id)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				// Approve, demote or promote
d6e8d8
				$group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
d6e8d8
				$error = group_user_attributes($action, $group_id, $mark_ary, false, $group_name);
d6e8d8
d6e8d8
				if (!$error)
d6e8d8
				{
d6e8d8
					switch ($action)
d6e8d8
					{
d6e8d8
						case 'demote':
d6e8d8
							$message = 'GROUP_MODS_DEMOTED';
d6e8d8
						break;
d6e8d8
d6e8d8
						case 'promote':
d6e8d8
							$message = 'GROUP_MODS_PROMOTED';
d6e8d8
						break;
d6e8d8
d6e8d8
						case 'approve':
d6e8d8
							$message = 'USERS_APPROVED';
d6e8d8
						break;
d6e8d8
					}
d6e8d8
d6e8d8
					trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&action=list&g=' . $group_id));
d6e8d8
				}
d6e8d8
				else
d6e8d8
				{
d6e8d8
					trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
			break;
d6e8d8
d6e8d8
			case 'default':
d6e8d8
				if (!$group_id)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				if (confirm_box(true))
d6e8d8
				{
d6e8d8
					$group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
d6e8d8
d6e8d8
					if (!sizeof($mark_ary))
d6e8d8
					{
d6e8d8
						$start = 0;
d6e8d8
d6e8d8
						do
d6e8d8
						{
d6e8d8
							$sql = 'SELECT user_id
d6e8d8
								FROM ' . USER_GROUP_TABLE . "
d6e8d8
								WHERE group_id = $group_id
d6e8d8
								ORDER BY user_id";
d6e8d8
							$result = $db->sql_query_limit($sql, 200, $start);
d6e8d8
d6e8d8
							$mark_ary = array();
d6e8d8
							if ($row = $db->sql_fetchrow($result))
d6e8d8
							{
d6e8d8
								do
d6e8d8
								{
d6e8d8
									$mark_ary[] = $row['user_id'];
d6e8d8
								}
d6e8d8
								while ($row = $db->sql_fetchrow($result));
d6e8d8
d6e8d8
								group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
d6e8d8
d6e8d8
								$start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
d6e8d8
							}
d6e8d8
							else
d6e8d8
							{
d6e8d8
								$start = 0;
d6e8d8
							}
d6e8d8
							$db->sql_freeresult($result);
d6e8d8
						}
d6e8d8
						while ($start);
d6e8d8
					}
d6e8d8
					else
d6e8d8
					{
d6e8d8
						group_user_attributes('default', $group_id, $mark_ary, false, $group_name, $group_row);
d6e8d8
					}
d6e8d8
d6e8d8
					trigger_error($user->lang['GROUP_DEFS_UPDATED'] . adm_back_link($this->u_action . '&action=list&g=' . $group_id));
d6e8d8
				}
d6e8d8
				else
d6e8d8
				{
d6e8d8
					confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
d6e8d8
						'mark'		=> $mark_ary,
d6e8d8
						'g'			=> $group_id,
d6e8d8
						'i'			=> $id,
d6e8d8
						'mode'		=> $mode,
d6e8d8
						'action'	=> $action))
d6e8d8
					);
d6e8d8
				}
d6e8d8
d6e8d8
			break;
d6e8d8
d6e8d8
			case 'deleteusers':
d6e8d8
			case 'delete':
d6e8d8
				if (!$group_id)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
				else if ($action === 'delete' && $group_row['group_type'] == GROUP_SPECIAL)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				if (confirm_box(true))
d6e8d8
				{
d6e8d8
					$error = '';
d6e8d8
d6e8d8
					switch ($action)
d6e8d8
					{
d6e8d8
						case 'delete':
d6e8d8
							if (!$auth->acl_get('a_groupdel'))
d6e8d8
							{
d6e8d8
								trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
							}
d6e8d8
d6e8d8
							$error = group_delete($group_id, $group_row['group_name']);
d6e8d8
						break;
d6e8d8
d6e8d8
						case 'deleteusers':
d6e8d8
							$group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
d6e8d8
							$error = group_user_del($group_id, $mark_ary, false, $group_name);
d6e8d8
						break;
d6e8d8
					}
d6e8d8
d6e8d8
					$back_link = ($action == 'delete') ? $this->u_action : $this->u_action . '&action=list&g=' . $group_id;
d6e8d8
d6e8d8
					if ($error)
d6e8d8
					{
d6e8d8
						trigger_error($user->lang[$error] . adm_back_link($back_link), E_USER_WARNING);
d6e8d8
					}
d6e8d8
d6e8d8
					$message = ($action == 'delete') ? 'GROUP_DELETED' : 'GROUP_USERS_REMOVE';
d6e8d8
					trigger_error($user->lang[$message] . adm_back_link($back_link));
d6e8d8
				}
d6e8d8
				else
d6e8d8
				{
d6e8d8
					confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
d6e8d8
						'mark'		=> $mark_ary,
d6e8d8
						'g'			=> $group_id,
d6e8d8
						'i'			=> $id,
d6e8d8
						'mode'		=> $mode,
d6e8d8
						'action'	=> $action))
d6e8d8
					);
d6e8d8
				}
d6e8d8
			break;
d6e8d8
d6e8d8
			case 'addusers':
d6e8d8
				if (!$group_id)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				if (!$name_ary)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_USERS'] . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				$name_ary = array_unique(explode("\n", $name_ary));
d6e8d8
				$group_name = ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'];
d6e8d8
d6e8d8
				// Add user/s to group
d6e8d8
				if ($error = group_user_add($group_id, false, $name_ary, $group_name, $default, $leader, 0, $group_row))
d6e8d8
				{
d6e8d8
					trigger_error($user->lang[$error] . adm_back_link($this->u_action . '&action=list&g=' . $group_id), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				$message = ($leader) ? 'GROUP_MODS_ADDED' : 'GROUP_USERS_ADDED';
d6e8d8
				trigger_error($user->lang[$message] . adm_back_link($this->u_action . '&action=list&g=' . $group_id));
d6e8d8
			break;
d6e8d8
d6e8d8
			case 'edit':
d6e8d8
			case 'add':
d6e8d8
d6e8d8
				include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
d6e8d8
d6e8d8
				$data = $submit_ary = array();
d6e8d8
d6e8d8
				if ($action == 'edit' && !$group_id)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				if ($action == 'add' && !$auth->acl_get('a_groupadd'))
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				$error = array();
d6e8d8
				$user->add_lang('ucp');
d6e8d8
d6e8d8
				$avatar_select = basename(request_var('avatar_select', ''));
d6e8d8
				$category = basename(request_var('category', ''));
d6e8d8
d6e8d8
				// Did we submit?
d6e8d8
				if ($update)
d6e8d8
				{
d6e8d8
					if (!check_form_key($form_key))
d6e8d8
					{
d6e8d8
						trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
					}
d6e8d8
d6e8d8
					$group_name	= utf8_normalize_nfc(request_var('group_name', '', true));
d6e8d8
					$group_desc = utf8_normalize_nfc(request_var('group_desc', '', true));
d6e8d8
					$group_type	= request_var('group_type', GROUP_FREE);
d6e8d8
d6e8d8
					$allow_desc_bbcode	= request_var('desc_parse_bbcode', false);
d6e8d8
					$allow_desc_urls	= request_var('desc_parse_urls', false);
d6e8d8
					$allow_desc_smilies	= request_var('desc_parse_smilies', false);
d6e8d8
d6e8d8
					$data['uploadurl']	= request_var('uploadurl', '');
d6e8d8
					$data['remotelink']	= request_var('remotelink', '');
d6e8d8
					$data['width']		= request_var('width', '');
d6e8d8
					$data['height']		= request_var('height', '');
d6e8d8
					$delete				= request_var('delete', '');
d6e8d8
d6e8d8
					$submit_ary = array(
d6e8d8
						'colour'			=> request_var('group_colour', ''),
d6e8d8
						'rank'				=> request_var('group_rank', 0),
d6e8d8
						'receive_pm'		=> isset($_REQUEST['group_receive_pm']) ? 1 : 0,
d6e8d8
						'legend'			=> isset($_REQUEST['group_legend']) ? 1 : 0,
d6e8d8
						'message_limit'		=> request_var('group_message_limit', 0),
d6e8d8
						'max_recipients'	=> request_var('group_max_recipients', 0),
d6e8d8
						'founder_manage'	=> 0,
d6e8d8
					);
d6e8d8
d6e8d8
					if ($user->data['user_type'] == USER_FOUNDER)
d6e8d8
					{
d6e8d8
						$submit_ary['founder_manage'] = isset($_REQUEST['group_founder_manage']) ? 1 : 0;
d6e8d8
					}
d6e8d8
d6e8d8
					if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
d6e8d8
					{
d6e8d8
						// Avatar stuff
d6e8d8
						$var_ary = array(
d6e8d8
							'uploadurl'		=> array('string', true, 5, 255),
d6e8d8
							'remotelink'	=> array('string', true, 5, 255),
d6e8d8
							'width'			=> array('string', true, 1, 3),
d6e8d8
							'height'		=> array('string', true, 1, 3),
d6e8d8
						);
d6e8d8
d6e8d8
						if (!($error = validate_data($data, $var_ary)))
d6e8d8
						{
d6e8d8
							$data['user_id'] = "g$group_id";
d6e8d8
d6e8d8
							if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
d6e8d8
							{
d6e8d8
								list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
d6e8d8
							}
d6e8d8
							else if ($data['remotelink'])
d6e8d8
							{
d6e8d8
								list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
d6e8d8
							}
d6e8d8
						}
d6e8d8
					}
d6e8d8
					else if ($avatar_select && $config['allow_avatar_local'])
d6e8d8
					{
d6e8d8
						// check avatar gallery
d6e8d8
						if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category))
d6e8d8
						{
d6e8d8
							$submit_ary['avatar_type'] = AVATAR_GALLERY;
d6e8d8
d6e8d8
							list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
d6e8d8
							$submit_ary['avatar'] = $category . '/' . $avatar_select;
d6e8d8
						}
d6e8d8
					}
d6e8d8
					else if ($delete)
d6e8d8
					{
d6e8d8
						$submit_ary['avatar'] = '';
d6e8d8
						$submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
d6e8d8
					}
d6e8d8
					else if ($data['width'] && $data['height'])
d6e8d8
					{
d6e8d8
						// Only update the dimensions?
d6e8d8
						if ($config['avatar_max_width'] || $config['avatar_max_height'])
d6e8d8
						{
d6e8d8
							if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height'])
d6e8d8
							{
d6e8d8
								$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']);
d6e8d8
							}
d6e8d8
						}
d6e8d8
d6e8d8
						if (!sizeof($error))
d6e8d8
						{
d6e8d8
							if ($config['avatar_min_width'] || $config['avatar_min_height'])
d6e8d8
							{
d6e8d8
								if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height'])
d6e8d8
								{
d6e8d8
									$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']);
d6e8d8
								}
d6e8d8
							}
d6e8d8
						}
d6e8d8
d6e8d8
						if (!sizeof($error))
d6e8d8
						{
d6e8d8
							$submit_ary['avatar_width'] = $data['width'];
d6e8d8
							$submit_ary['avatar_height'] = $data['height'];
d6e8d8
						}
d6e8d8
					}
d6e8d8
d6e8d8
					if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']))) || $delete)
d6e8d8
					{
d6e8d8
						if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
d6e8d8
						{
d6e8d8
							avatar_delete('group', $group_row, true);
d6e8d8
						}
d6e8d8
					}
d6e8d8
d6e8d8
					if (!sizeof($error))
d6e8d8
					{
d6e8d8
						// Only set the rank, colour, etc. if it's changed or if we're adding a new
d6e8d8
						// group. This prevents existing group members being updated if no changes
d6e8d8
						// were made.
d6e8d8
d6e8d8
						$group_attributes = array();
d6e8d8
						$test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height', 'receive_pm', 'legend', 'message_limit', 'max_recipients', 'founder_manage');
d6e8d8
						foreach ($test_variables as $test)
d6e8d8
						{
d6e8d8
							if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test]))
d6e8d8
							{
d6e8d8
								$group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
d6e8d8
							}
d6e8d8
						}
d6e8d8
d6e8d8
						if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
d6e8d8
						{
d6e8d8
							$group_perm_from = request_var('group_perm_from', 0);
d6e8d8
d6e8d8
							// Copy permissions?
d6e8d8
							// If the user has the a_authgroups permission and at least one additional permission ability set the permissions are fully transferred.
d6e8d8
							// 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.
d6e8d8
							// Since the user only has the option to copy permissions from non leader managed groups this seems to be a good compromise.
d6e8d8
							if ($group_perm_from && $action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth'))
d6e8d8
							{
d6e8d8
								$sql = 'SELECT group_founder_manage
d6e8d8
									FROM ' . GROUPS_TABLE . '
d6e8d8
									WHERE group_id = ' . $group_perm_from;
d6e8d8
								$result = $db->sql_query($sql);
d6e8d8
								$check_row = $db->sql_fetchrow($result);
d6e8d8
								$db->sql_freeresult($result);
d6e8d8
d6e8d8
								// Check the group if non-founder
d6e8d8
								if ($check_row && ($user->data['user_type'] == USER_FOUNDER || $check_row['group_founder_manage'] == 0))
d6e8d8
								{
d6e8d8
									// From the mysql documentation:
d6e8d8
									// 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.
d6e8d8
									// Due to this we stay on the safe side if we do the insertion "the manual way"
d6e8d8
d6e8d8
									// Copy permisisons from/to the acl groups table (only group_id gets changed)
d6e8d8
									$sql = 'SELECT forum_id, auth_option_id, auth_role_id, auth_setting
d6e8d8
										FROM ' . ACL_GROUPS_TABLE . '
d6e8d8
										WHERE group_id = ' . $group_perm_from;
d6e8d8
									$result = $db->sql_query($sql);
d6e8d8
d6e8d8
									$groups_sql_ary = array();
d6e8d8
									while ($row = $db->sql_fetchrow($result))
d6e8d8
									{
d6e8d8
										$groups_sql_ary[] = array(
d6e8d8
											'group_id'			=> (int) $group_id,
d6e8d8
											'forum_id'			=> (int) $row['forum_id'],
d6e8d8
											'auth_option_id'	=> (int) $row['auth_option_id'],
d6e8d8
											'auth_role_id'		=> (int) $row['auth_role_id'],
d6e8d8
											'auth_setting'		=> (int) $row['auth_setting']
d6e8d8
										);
d6e8d8
									}
d6e8d8
									$db->sql_freeresult($result);
d6e8d8
d6e8d8
									// Now insert the data
d6e8d8
									$db->sql_multi_insert(ACL_GROUPS_TABLE, $groups_sql_ary);
d6e8d8
d6e8d8
									$auth->acl_clear_prefetch();
d6e8d8
								}
d6e8d8
							}
d6e8d8
d6e8d8
							$cache->destroy('sql', GROUPS_TABLE);
d6e8d8
d6e8d8
							$message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
d6e8d8
							trigger_error($user->lang[$message] . adm_back_link($this->u_action));
d6e8d8
						}
d6e8d8
					}
d6e8d8
d6e8d8
					if (sizeof($error))
d6e8d8
					{
d6e8d8
						$group_rank = $submit_ary['rank'];
d6e8d8
d6e8d8
						$group_desc_data = array(
d6e8d8
							'text'			=> $group_desc,
d6e8d8
							'allow_bbcode'	=> $allow_desc_bbcode,
d6e8d8
							'allow_smilies'	=> $allow_desc_smilies,
d6e8d8
							'allow_urls'	=> $allow_desc_urls
d6e8d8
						);
d6e8d8
					}
d6e8d8
				}
d6e8d8
				else if (!$group_id)
d6e8d8
				{
d6e8d8
					$group_name = utf8_normalize_nfc(request_var('group_name', '', true));
d6e8d8
					$group_desc_data = array(
d6e8d8
						'text'			=> '',
d6e8d8
						'allow_bbcode'	=> true,
d6e8d8
						'allow_smilies'	=> true,
d6e8d8
						'allow_urls'	=> true
d6e8d8
					);
d6e8d8
					$group_rank = 0;
d6e8d8
					$group_type = GROUP_OPEN;
d6e8d8
				}
d6e8d8
				else
d6e8d8
				{
d6e8d8
					$group_name = $group_row['group_name'];
d6e8d8
					$group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
d6e8d8
					$group_type = $group_row['group_type'];
d6e8d8
					$group_rank = $group_row['group_rank'];
d6e8d8
				}
d6e8d8
d6e8d8
				$sql = 'SELECT *
d6e8d8
					FROM ' . RANKS_TABLE . '
d6e8d8
					WHERE rank_special = 1
d6e8d8
					ORDER BY rank_title';
d6e8d8
				$result = $db->sql_query($sql);
d6e8d8
d6e8d8
				$rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
d6e8d8
d6e8d8
				while ($row = $db->sql_fetchrow($result))
d6e8d8
				{
d6e8d8
					$selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
d6e8d8
					$rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
d6e8d8
				}
d6e8d8
				$db->sql_freeresult($result);
d6e8d8
d6e8d8
				$type_free		= ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
d6e8d8
				$type_open		= ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
d6e8d8
				$type_closed	= ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
d6e8d8
				$type_hidden	= ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
d6e8d8
d6e8d8
				$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') : '';
d6e8d8
d6e8d8
				$display_gallery = (isset($_POST['display_gallery'])) ? true : false;
d6e8d8
d6e8d8
				if ($config['allow_avatar_local'] && $display_gallery)
d6e8d8
				{
d6e8d8
					avatar_gallery($category, $avatar_select, 4);
d6e8d8
				}
d6e8d8
d6e8d8
				$back_link = request_var('back_link', '');
d6e8d8
d6e8d8
				switch ($back_link)
d6e8d8
				{
d6e8d8
					case 'acp_users_groups':
d6e8d8
						$u_back = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&mode=groups&u=' . request_var('u', 0));
d6e8d8
					break;
d6e8d8
d6e8d8
					default:
d6e8d8
						$u_back = $this->u_action;
d6e8d8
					break;
d6e8d8
				}
d6e8d8
d6e8d8
				$template->assign_vars(array(
d6e8d8
					'S_EDIT'			=> true,
d6e8d8
					'S_ADD_GROUP'		=> ($action == 'add') ? true : false,
d6e8d8
					'S_GROUP_PERM'		=> ($action == 'add' && $auth->acl_get('a_authgroups') && $auth->acl_gets('a_aauth', 'a_fauth', 'a_mauth', 'a_uauth')) ? true : false,
d6e8d8
					'S_INCLUDE_SWATCH'	=> true,
d6e8d8
					'S_CAN_UPLOAD'		=> $can_upload,
d6e8d8
					'S_ERROR'			=> (sizeof($error)) ? true : false,
d6e8d8
					'S_SPECIAL_GROUP'	=> ($group_type == GROUP_SPECIAL) ? true : false,
d6e8d8
					'S_DISPLAY_GALLERY'	=> ($config['allow_avatar_local'] && !$display_gallery) ? true : false,
d6e8d8
					'S_IN_GALLERY'		=> ($config['allow_avatar_local'] && $display_gallery) ? true : false,
d6e8d8
					'S_USER_FOUNDER'	=> ($user->data['user_type'] == USER_FOUNDER) ? true : false,
d6e8d8
d6e8d8
					'ERROR_MSG'				=> (sizeof($error)) ? implode('
', $error) : '',
d6e8d8
					'GROUP_NAME'			=> ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name,
d6e8d8
					'GROUP_INTERNAL_NAME'	=> $group_name,
d6e8d8
					'GROUP_DESC'			=> $group_desc_data['text'],
d6e8d8
					'GROUP_RECEIVE_PM'		=> (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
d6e8d8
					'GROUP_FOUNDER_MANAGE'	=> (isset($group_row['group_founder_manage']) && $group_row['group_founder_manage']) ? ' checked="checked"' : '',
d6e8d8
					'GROUP_LEGEND'			=> (isset($group_row['group_legend']) && $group_row['group_legend']) ? ' checked="checked"' : '',
d6e8d8
					'GROUP_MESSAGE_LIMIT'	=> (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
d6e8d8
					'GROUP_MAX_RECIPIENTS'	=> (isset($group_row['group_max_recipients'])) ? $group_row['group_max_recipients'] : 0,
d6e8d8
					'GROUP_COLOUR'			=> (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
d6e8d8
d6e8d8
d6e8d8
					'S_DESC_BBCODE_CHECKED'	=> $group_desc_data['allow_bbcode'],
d6e8d8
					'S_DESC_URLS_CHECKED'	=> $group_desc_data['allow_urls'],
d6e8d8
					'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
d6e8d8
d6e8d8
					'S_RANK_OPTIONS'		=> $rank_options,
d6e8d8
					'S_GROUP_OPTIONS'		=> group_select_options(false, false, (($user->data['user_type'] == USER_FOUNDER) ? false : 0)),
d6e8d8
					'AVATAR'				=> $avatar_img,
d6e8d8
					'AVATAR_IMAGE'			=> $avatar_img,
d6e8d8
					'AVATAR_MAX_FILESIZE'	=> $config['avatar_filesize'],
d6e8d8
					'AVATAR_WIDTH'			=> (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
d6e8d8
					'AVATAR_HEIGHT'			=> (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
d6e8d8
d6e8d8
					'GROUP_TYPE_FREE'		=> GROUP_FREE,
d6e8d8
					'GROUP_TYPE_OPEN'		=> GROUP_OPEN,
d6e8d8
					'GROUP_TYPE_CLOSED'		=> GROUP_CLOSED,
d6e8d8
					'GROUP_TYPE_HIDDEN'		=> GROUP_HIDDEN,
d6e8d8
					'GROUP_TYPE_SPECIAL'	=> GROUP_SPECIAL,
d6e8d8
d6e8d8
					'GROUP_FREE'		=> $type_free,
d6e8d8
					'GROUP_OPEN'		=> $type_open,
d6e8d8
					'GROUP_CLOSED'		=> $type_closed,
d6e8d8
					'GROUP_HIDDEN'		=> $type_hidden,
d6e8d8
d6e8d8
					'U_BACK'			=> $u_back,
d6e8d8
					'U_SWATCH'			=> append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&name=group_colour'),
d6e8d8
					'U_ACTION'			=> "{$this->u_action}&action=$action&g=$group_id",
d6e8d8
					'L_AVATAR_EXPLAIN'	=> sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)),
d6e8d8
					)
d6e8d8
				);
d6e8d8
d6e8d8
				return;
d6e8d8
			break;
d6e8d8
d6e8d8
			case 'list':
d6e8d8
d6e8d8
				if (!$group_id)
d6e8d8
				{
d6e8d8
					trigger_error($user->lang['NO_GROUP'] . adm_back_link($this->u_action), E_USER_WARNING);
d6e8d8
				}
d6e8d8
d6e8d8
				$this->page_title = 'GROUP_MEMBERS';
d6e8d8
d6e8d8
				// Grab the leaders - always, on every page...
d6e8d8
				$sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
d6e8d8
					FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
d6e8d8
					WHERE ug.group_id = $group_id
d6e8d8
						AND u.user_id = ug.user_id
d6e8d8
						AND ug.group_leader = 1
d6e8d8
					ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
d6e8d8
				$result = $db->sql_query($sql);
d6e8d8
d6e8d8
				while ($row = $db->sql_fetchrow($result))
d6e8d8
				{
d6e8d8
					$template->assign_block_vars('leader', array(
d6e8d8
						'U_USER_EDIT'		=> append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&action=edit&u={$row['user_id']}"),
d6e8d8
d6e8d8
						'USERNAME'			=> $row['username'],
d6e8d8
						'S_GROUP_DEFAULT'	=> ($row['group_id'] == $group_id) ? true : false,
d6e8d8
						'JOINED'			=> ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
d6e8d8
						'USER_POSTS'		=> $row['user_posts'],
d6e8d8
						'USER_ID'			=> $row['user_id'])
d6e8d8
					);
d6e8d8
				}
d6e8d8
				$db->sql_freeresult($result);
d6e8d8
d6e8d8
				// Total number of group members (non-leaders)
d6e8d8
				$sql = 'SELECT COUNT(user_id) AS total_members
d6e8d8
					FROM ' . USER_GROUP_TABLE . "
d6e8d8
					WHERE group_id = $group_id
d6e8d8
						AND group_leader = 0";
d6e8d8
				$result = $db->sql_query($sql);
d6e8d8
				$total_members = (int) $db->sql_fetchfield('total_members');
d6e8d8
				$db->sql_freeresult($result);
d6e8d8
d6e8d8
				$s_action_options = '';
d6e8d8
				$options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'demote' => 'DEMOTE', 'promote' => 'PROMOTE', 'deleteusers' => 'DELETE');
d6e8d8
d6e8d8
				foreach ($options as $option => $lang)
d6e8d8
				{
d6e8d8
					$s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
d6e8d8
				}
d6e8d8
d6e8d8
				$template->assign_vars(array(
d6e8d8
					'S_LIST'			=> true,
d6e8d8
					'S_GROUP_SPECIAL'	=> ($group_row['group_type'] == GROUP_SPECIAL) ? true : false,
d6e8d8
					'S_ACTION_OPTIONS'	=> $s_action_options,
d6e8d8
d6e8d8
					'S_ON_PAGE'		=> on_page($total_members, $config['topics_per_page'], $start),
d6e8d8
					'PAGINATION'	=> generate_pagination($this->u_action . "&action=$action&g=$group_id", $total_members, $config['topics_per_page'], $start, true),
d6e8d8
					'GROUP_NAME'	=> ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'],
d6e8d8
d6e8d8
					'U_ACTION'			=> $this->u_action . "&g=$group_id",
d6e8d8
					'U_BACK'			=> $this->u_action,
d6e8d8
					'U_FIND_USERNAME'	=> append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=list&field=usernames'),
d6e8d8
					'U_DEFAULT_ALL'		=> "{$this->u_action}&action=default&g=$group_id",
d6e8d8
				));
d6e8d8
d6e8d8
				// Grab the members
d6e8d8
				$sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending
d6e8d8
					FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug
d6e8d8
					WHERE ug.group_id = $group_id
d6e8d8
						AND u.user_id = ug.user_id
d6e8d8
						AND ug.group_leader = 0
d6e8d8
					ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username_clean";
d6e8d8
				$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
d6e8d8
d6e8d8
				$pending = false;
d6e8d8
d6e8d8
				while ($row = $db->sql_fetchrow($result))
d6e8d8
				{
d6e8d8
					if ($row['user_pending'] && !$pending)
d6e8d8
					{
d6e8d8
						$template->assign_block_vars('member', array(
d6e8d8
							'S_PENDING'		=> true)
d6e8d8
						);
d6e8d8
d6e8d8
						$pending = true;
d6e8d8
					}
d6e8d8
d6e8d8
					$template->assign_block_vars('member', array(
d6e8d8
						'U_USER_EDIT'		=> append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&action=edit&u={$row['user_id']}"),
d6e8d8
d6e8d8
						'USERNAME'			=> $row['username'],
d6e8d8
						'S_GROUP_DEFAULT'	=> ($row['group_id'] == $group_id) ? true : false,
d6e8d8
						'JOINED'			=> ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
d6e8d8
						'USER_POSTS'		=> $row['user_posts'],
d6e8d8
						'USER_ID'			=> $row['user_id'])
d6e8d8
					);
d6e8d8
				}
d6e8d8
				$db->sql_freeresult($result);
d6e8d8
d6e8d8
				return;
d6e8d8
			break;
d6e8d8
		}
d6e8d8
d6e8d8
		$template->assign_vars(array(
d6e8d8
			'U_ACTION'		=> $this->u_action,
d6e8d8
			'S_GROUP_ADD'	=> ($auth->acl_get('a_groupadd')) ? true : false)
d6e8d8
		);
d6e8d8
d6e8d8
		// Get us all the groups
d6e8d8
		$sql = 'SELECT g.group_id, g.group_name, g.group_type
d6e8d8
			FROM ' . GROUPS_TABLE . ' g
d6e8d8
			ORDER BY g.group_type ASC, g.group_name';
d6e8d8
		$result = $db->sql_query($sql);
d6e8d8
d6e8d8
		$lookup = $cached_group_data = array();
d6e8d8
		while ($row = $db->sql_fetchrow($result))
d6e8d8
		{
d6e8d8
			$type = ($row['group_type'] == GROUP_SPECIAL) ? 'special' : 'normal';
d6e8d8
d6e8d8
			// used to determine what type a group is
d6e8d8
			$lookup[$row['group_id']] = $type;
d6e8d8
d6e8d8
			// used for easy access to the data within a group
d6e8d8
			$cached_group_data[$type][$row['group_id']] = $row;
d6e8d8
			$cached_group_data[$type][$row['group_id']]['total_members'] = 0;
d6e8d8
		}
d6e8d8
		$db->sql_freeresult($result);
d6e8d8
d6e8d8
		// How many people are in which group?
d6e8d8
		$sql = 'SELECT COUNT(ug.user_id) AS total_members, ug.group_id
d6e8d8
			FROM ' . USER_GROUP_TABLE . ' ug
d6e8d8
			WHERE ' . $db->sql_in_set('ug.group_id', array_keys($lookup)) . '
d6e8d8
			GROUP BY ug.group_id';
d6e8d8
		$result = $db->sql_query($sql);
d6e8d8
d6e8d8
		while ($row = $db->sql_fetchrow($result))
d6e8d8
		{
d6e8d8
			$type = $lookup[$row['group_id']];
d6e8d8
			$cached_group_data[$type][$row['group_id']]['total_members'] = $row['total_members'];
d6e8d8
		}
d6e8d8
		$db->sql_freeresult($result);
d6e8d8
d6e8d8
		// The order is... normal, then special
d6e8d8
		ksort($cached_group_data);
d6e8d8
d6e8d8
		foreach ($cached_group_data as $type => $row_ary)
d6e8d8
		{
d6e8d8
			if ($type == 'special')
d6e8d8
			{
d6e8d8
				$template->assign_block_vars('groups', array(
d6e8d8
					'S_SPECIAL'			=> true)
d6e8d8
				);
d6e8d8
			}
d6e8d8
d6e8d8
			foreach ($row_ary as $group_id => $row)
d6e8d8
			{
d6e8d8
				$group_name = (!empty($user->lang['G_' . $row['group_name']]))? $user->lang['G_' . $row['group_name']] : $row['group_name'];
d6e8d8
d6e8d8
				$template->assign_block_vars('groups', array(
d6e8d8
					'U_LIST'		=> "{$this->u_action}&action=list&g=$group_id",
d6e8d8
					'U_EDIT'		=> "{$this->u_action}&action=edit&g=$group_id",
d6e8d8
					'U_DELETE'		=> ($auth->acl_get('a_groupdel')) ? "{$this->u_action}&action=delete&g=$group_id" : '',
d6e8d8
d6e8d8
					'S_GROUP_SPECIAL'	=> ($row['group_type'] == GROUP_SPECIAL) ? true : false,
d6e8d8
d6e8d8
					'GROUP_NAME'	=> $group_name,
d6e8d8
					'TOTAL_MEMBERS'	=> $row['total_members'],
d6e8d8
					)
d6e8d8
				);
d6e8d8
			}
d6e8d8
		}
d6e8d8
	}
d6e8d8
}
d6e8d8
d6e8d8
?>