diff options
Diffstat (limited to 'phpBB/includes/ucp/ucp_groups.php')
| -rw-r--r-- | phpBB/includes/ucp/ucp_groups.php | 264 | 
1 files changed, 120 insertions, 144 deletions
| diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php index 663b5bc931..b9606945b4 100644 --- a/phpBB/includes/ucp/ucp_groups.php +++ b/phpBB/includes/ucp/ucp_groups.php @@ -1,10 +1,13 @@  <?php  /**  * -* @package ucp -* @version $Id$ -* @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file.  *  */ @@ -18,7 +21,6 @@ if (!defined('IN_PHPBB'))  /**  * ucp_groups -* @package ucp  */  class ucp_groups  { @@ -26,16 +28,17 @@ class ucp_groups  	function main($id, $mode)  	{ -		global $config, $phpbb_root_path, $phpEx; +		global $config, $phpbb_root_path, $phpEx, $phpbb_admin_path;  		global $db, $user, $auth, $cache, $template; +		global $request, $phpbb_container;  		$user->add_lang('groups');  		$return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');  		$mark_ary	= request_var('mark', array(0)); -		$submit		= (!empty($_POST['submit'])) ? true : false; -		$delete		= (!empty($_POST['delete'])) ? true : false; +		$submit		= $request->variable('submit', false, false, \phpbb\request\request_interface::POST); +		$delete		= $request->variable('delete', false, false, \phpbb\request\request_interface::POST);  		$error = $data = array();  		switch ($mode) @@ -197,38 +200,6 @@ class ucp_groups  								else  								{  									group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1); - -									include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx); -									$messenger = new messenger(); - -									$sql = 'SELECT u.username, u.username_clean, u.user_email, u.user_notify_type, u.user_jabber, u.user_lang -										FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . " u -										WHERE ug.user_id = u.user_id -											AND ug.group_leader = 1 -											AND ug.group_id = $group_id"; -									$result = $db->sql_query($sql); - -									while ($row = $db->sql_fetchrow($result)) -									{ -										$messenger->template('group_request', $row['user_lang']); - -										$messenger->to($row['user_email'], $row['username']); -										$messenger->im($row['user_jabber'], $row['username']); - -										$messenger->assign_vars(array( -											'USERNAME'			=> htmlspecialchars_decode($row['username']), -											'GROUP_NAME'		=> htmlspecialchars_decode($group_row[$group_id]['group_name']), -											'REQUEST_USERNAME'	=> $user->data['username'], - -											'U_PENDING'		=> generate_board_url() . "/ucp.$phpEx?i=groups&mode=manage&action=list&g=$group_id", -											'U_GROUP'		=> generate_board_url() . "/memberlist.$phpEx?mode=group&g=$group_id") -										); - -										$messenger->send($row['user_notify_type']); -									} -									$db->sql_freeresult($result); - -									$messenger->save_queue();  								}  								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']); @@ -417,9 +388,11 @@ class ucp_groups  				if ($group_id)  				{ -					$sql = 'SELECT * -						FROM ' . GROUPS_TABLE . " -						WHERE group_id = $group_id"; +					$sql = 'SELECT g.*, t.teampage_position AS group_teampage +						FROM ' . GROUPS_TABLE . ' g +						LEFT JOIN ' . TEAMPAGE_TABLE . ' t +							ON (t.group_id = g.group_id) +						WHERE g.group_id = ' . $group_id;  					$result = $db->sql_query($sql);  					$group_row = $db->sql_fetchrow($result);  					$db->sql_freeresult($result); @@ -438,7 +411,7 @@ class ucp_groups  					$group_name = $group_row['group_name'];  					$group_type = $group_row['group_type']; -					$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="" />'; +					$avatar = phpbb_get_group_avatar($group_row, 'GROUP_AVATAR', true);  					$template->assign_vars(array(  						'GROUP_NAME'			=> ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name, @@ -447,8 +420,8 @@ class ucp_groups  						'GROUP_DESC_DISP'		=> generate_text_for_display($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_bitfield'], $group_row['group_desc_options']),  						'GROUP_TYPE'			=> $group_row['group_type'], -						'AVATAR'				=> $avatar_img, -						'AVATAR_IMAGE'			=> $avatar_img, +						'AVATAR'				=> (empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar), +						'AVATAR_IMAGE'			=> (empty($avatar) ? '<img src="' . $phpbb_admin_path . 'images/no_avatar.gif" alt="" />' : $avatar),  						'AVATAR_WIDTH'			=> (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',  						'AVATAR_HEIGHT'			=> (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',  					)); @@ -483,10 +456,43 @@ class ucp_groups  						$error = array(); -						$avatar_select = basename(request_var('avatar_select', '')); -						$category = basename(request_var('category', '')); +						// Setup avatar data for later +						$avatars_enabled = false; +						$avatar_drivers = null; +						$avatar_data = null; +						$avatar_error = array(); + +						if ($config['allow_avatar']) +						{ +							$phpbb_avatar_manager = $phpbb_container->get('avatar.manager'); +							$avatar_drivers = $phpbb_avatar_manager->get_enabled_drivers(); + +							// This is normalised data, without the group_ prefix +							$avatar_data = \phpbb\avatar\manager::clean_row($group_row, 'group'); +						} + +						// Handle deletion of avatars +						if ($request->is_set_post('avatar_delete')) +						{ +							if (confirm_box(true)) +							{ +								$phpbb_avatar_manager->handle_avatar_delete($db, $user, $avatar_data, GROUPS_TABLE, 'group_'); +								$cache->destroy('sql', GROUPS_TABLE); -						$can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && phpbb_is_writable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false; +								$message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED'; +								trigger_error($user->lang[$message] . $return_page); +							} +							else +							{ +								confirm_box(false, $user->lang('CONFIRM_AVATAR_DELETE'), build_hidden_fields(array( +										'avatar_delete'     => true, +										'i'                 => $id, +										'mode'              => $mode, +										'g'			        => $group_id, +										'action'            => $action)) +								); +							} +						}  						// Did we submit?  						if ($update) @@ -505,89 +511,31 @@ class ucp_groups  								'receive_pm'	=> isset($_REQUEST['group_receive_pm']) ? 1 : 0,  								'message_limit'	=> request_var('group_message_limit', 0),  								'max_recipients'=> request_var('group_max_recipients', 0), +								'legend'	=> $group_row['group_legend'], +								'teampage'	=> $group_row['group_teampage'],  							); -							$data['uploadurl']	= request_var('uploadurl', ''); -							$data['remotelink'] = request_var('remotelink', ''); -							$data['width']		= request_var('width', ''); -							$data['height']		= request_var('height', ''); -							$delete				= request_var('delete', ''); - -							if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink']) +							if ($config['allow_avatar'])  							{ -								// Avatar stuff -								$var_ary = array( -									'uploadurl'		=> array('string', true, 5, 255), -									'remotelink'	=> array('string', true, 5, 255), -									'width'			=> array('string', true, 1, 3), -									'height'		=> array('string', true, 1, 3), -								); - -								if (!($error = validate_data($data, $var_ary))) -								{ -									$data['user_id'] = "g$group_id"; +								// Handle avatar +								$driver_name = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', '')); +								$config_name = preg_replace('#^avatar\.driver.#', '', $driver_name); -									if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload) -									{ -										list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error); -									} -									else if ($data['remotelink']) -									{ -										list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error); -									} -								} -							} -							else if ($avatar_select && $config['allow_avatar_local']) -							{ -								// check avatar gallery -								if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category)) +								if (in_array($driver_name, $avatar_drivers) && !$request->is_set_post('avatar_delete'))  								{ -									$submit_ary['avatar_type'] = AVATAR_GALLERY; +									$driver = $phpbb_avatar_manager->get_driver($driver_name); +									$result = $driver->process_form($request, $template, $user, $avatar_data, $avatar_error); -									list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select); -									$submit_ary['avatar'] = $category . '/' . $avatar_select; -								} -							} -							else if ($delete) -							{ -								$submit_ary['avatar'] = ''; -								$submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0; -							} -							else if ($data['width'] && $data['height']) -							{ -								// Only update the dimensions? -								if ($config['avatar_max_width'] || $config['avatar_max_height']) -								{ -									if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height']) +									if ($result && empty($avatar_error))  									{ -										$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']); -									} -								} +										$result['avatar_type'] = $driver_name; -								if (!sizeof($error)) -								{ -									if ($config['avatar_min_width'] || $config['avatar_min_height']) -									{ -										if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height']) -										{ -											$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']); -										} +										$submit_ary = array_merge($submit_ary, $result);  									}  								} -								if (!sizeof($error)) -								{ -									$submit_ary['avatar_width'] = $data['width']; -									$submit_ary['avatar_height'] = $data['height']; -								} -							} - -							if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']))) || $delete) -							{ -								if (isset($group_row['group_avatar']) && $group_row['group_avatar']) -								{ -									avatar_delete('group', $group_row, true); -								} +								// Merge any avatars errors into the primary error array +								$error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error));  							}  							if (!check_form_key('ucp_groups')) @@ -607,24 +555,28 @@ class ucp_groups  								// Only set the rank, colour, etc. if it's changed or if we're adding a new  								// group. This prevents existing group members being updated if no changes  								// were made. +								// However there are some attributes that need to be set everytime, +								// otherwise the group gets removed from the feature. +								$set_attributes = array('legend', 'teampage');  								$group_attributes = array();  								$test_variables = array(  									'rank'			=> 'int',  									'colour'		=> 'string',  									'avatar'		=> 'string', -									'avatar_type'	=> 'int', +									'avatar_type'	=> 'string',  									'avatar_width'	=> 'int',  									'avatar_height'	=> 'int',  									'receive_pm'	=> 'int',  									'legend'		=> 'int', +									'teampage'		=> 'int',  									'message_limit'	=> 'int',  									'max_recipients'=> 'int',  								);  								foreach ($test_variables as $test => $type)  								{ -									if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test])) +									if (isset($submit_ary[$test]) && ($action == 'add' || $group_row['group_' . $test] != $submit_ary[$test] || isset($group_attributes['group_avatar']) && strpos($test, 'avatar') === 0 || in_array($test, $set_attributes)))  									{  										settype($submit_ary[$test], $type);  										$group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test]; @@ -634,6 +586,7 @@ class ucp_groups  								if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))  								{  									$cache->destroy('sql', GROUPS_TABLE); +									$cache->destroy('sql', TEAMPAGE_TABLE);  									$message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';  									trigger_error($user->lang[$message] . $return_page); @@ -690,28 +643,51 @@ class ucp_groups  						$type_closed	= ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';  						$type_hidden	= ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : ''; -						$display_gallery = (isset($_POST['display_gallery'])) ? true : false; - -						if ($config['allow_avatar'] && $config['allow_avatar_local'] && $display_gallery) +						// Load up stuff for avatars +						if ($config['allow_avatar'])  						{ -							avatar_gallery($category, $avatar_select, 4); +							$avatars_enabled = false; +							$selected_driver = $phpbb_avatar_manager->clean_driver_name($request->variable('avatar_driver', $avatar_data['avatar_type'])); + +							foreach ($avatar_drivers as $current_driver) +							{ +								$driver = $phpbb_avatar_manager->get_driver($current_driver); + +								$avatars_enabled = true; +								$template->set_filenames(array( +									'avatar' => $driver->get_template_name(), +								)); + +								if ($driver->prepare_form($request, $template, $user, $avatar_data, $avatar_error)) +								{ +									$driver_name = $phpbb_avatar_manager->prepare_driver_name($current_driver); +									$driver_upper = strtoupper($driver_name); +									$template->assign_block_vars('avatar_drivers', array( +										'L_TITLE' => $user->lang($driver_upper . '_TITLE'), +										'L_EXPLAIN' => $user->lang($driver_upper . '_EXPLAIN'), + +										'DRIVER' => $driver_name, +										'SELECTED' => $current_driver == $selected_driver, +										'OUTPUT' => $template->assign_display('avatar'), +									)); +								} +							}  						} -						$avatars_enabled = ($config['allow_avatar'] && (($can_upload && ($config['allow_avatar_upload'] || $config['allow_avatar_remote_upload'])) || ($config['allow_avatar_local'] || $config['allow_avatar_remote']))) ? true : false; +						if (isset($phpbb_avatar_manager) && !$update) +						{ +							// Merge any avatars errors into the primary error array +							$error = array_merge($error, $phpbb_avatar_manager->localize_errors($user, $avatar_error)); +						}  						$template->assign_vars(array(  							'S_EDIT'			=> true,  							'S_INCLUDE_SWATCH'	=> true, -							'S_FORM_ENCTYPE'	=> ($config['allow_avatar'] && $can_upload && ($config['allow_avatar_upload'] || $config['allow_avatar_remote_upload'])) ? ' enctype="multipart/form-data"' : '', +							'S_FORM_ENCTYPE'	=> ' enctype="multipart/form-data"',  							'S_ERROR'			=> (sizeof($error)) ? true : false,  							'S_SPECIAL_GROUP'	=> ($group_type == GROUP_SPECIAL) ? true : false, -							'S_AVATARS_ENABLED'	=> $avatars_enabled, -							'S_DISPLAY_GALLERY'	=> ($config['allow_avatar'] && $config['allow_avatar_local'] && !$display_gallery) ? true : false, -							'S_IN_GALLERY'		=> ($config['allow_avatar_local'] && $display_gallery) ? true : false, - -							'S_UPLOAD_AVATAR_FILE'	=> ($config['allow_avatar'] && $config['allow_avatar_upload'] && $can_upload) ? true : false, -							'S_UPLOAD_AVATAR_URL'	=> ($config['allow_avatar'] && $config['allow_avatar_remote_upload'] && $can_upload) ? true : false, -							'S_LINK_AVATAR'			=> ($config['allow_avatar'] && $config['allow_avatar_remote']) ? true : false, +							'S_AVATARS_ENABLED'	=> ($config['allow_avatar'] && $avatars_enabled), +							'S_GROUP_MANAGE'	=> true,  							'ERROR_MSG'				=> (sizeof($error)) ? implode('<br />', $error) : '',  							'GROUP_RECEIVE_PM'		=> (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '', @@ -724,7 +700,6 @@ class ucp_groups  							'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],  							'S_RANK_OPTIONS'		=> $rank_options, -							'AVATAR_MAX_FILESIZE'	=> $config['avatar_filesize'],  							'GROUP_TYPE_FREE'		=> GROUP_FREE,  							'GROUP_TYPE_OPEN'		=> GROUP_OPEN, @@ -737,9 +712,8 @@ class ucp_groups  							'GROUP_CLOSED'		=> $type_closed,  							'GROUP_HIDDEN'		=> $type_hidden, -							'U_SWATCH'			=> append_sid("{$phpbb_root_path}adm/swatch.$phpEx", 'form=ucp&name=group_colour'),  							'S_UCP_ACTION'		=> $this->u_action . "&action=$action&g=$group_id", -							'L_AVATAR_EXPLAIN'	=> sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024), +							'L_AVATAR_EXPLAIN'	=> phpbb_avatar_explanation_string(),  						));  					break; @@ -852,11 +826,14 @@ class ucp_groups  							$s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';  						} +						$pagination = $phpbb_container->get('pagination'); +						$base_url = $this->u_action . "&action=$action&g=$group_id"; +						$start = $pagination->validate_start($start, $config['topics_per_page'], $total_members); +						$pagination->generate_template_pagination($base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start); +  						$template->assign_vars(array(  							'S_LIST'			=> true,  							'S_ACTION_OPTIONS'	=> $s_action_options, -							'S_ON_PAGE'			=> on_page($total_members, $config['topics_per_page'], $start), -							'PAGINATION'		=> generate_pagination($this->u_action . "&action=$action&g=$group_id", $total_members, $config['topics_per_page'], $start),  							'U_ACTION'			=> $this->u_action . "&g=$group_id",  							'S_UCP_ACTION'		=> $this->u_action . "&g=$group_id", @@ -1075,7 +1052,8 @@ class ucp_groups  								'mode'		=> $mode,  								'action'	=> $action  							); -							confirm_box(false, sprintf($user->lang['GROUP_CONFIRM_ADD_USER' . ((sizeof($name_ary) == 1) ? '' : 'S')], implode(', ', $name_ary)), build_hidden_fields($s_hidden_fields)); + +							confirm_box(false, $user->lang('GROUP_CONFIRM_ADD_USERS', sizeof($name_ary), implode($user->lang['COMMA_SEPARATOR'], $name_ary)), build_hidden_fields($s_hidden_fields));  						}  						trigger_error($user->lang['NO_USERS_ADDED'] . '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '&action=list&g=' . $group_id . '">', '</a>')); @@ -1117,5 +1095,3 @@ class ucp_groups  		$this->tpl_name = 'ucp_groups_' . $mode;  	}  } - -?>
\ No newline at end of file | 
