diff options
Diffstat (limited to 'phpBB/includes/functions_privmsgs.php')
| -rw-r--r-- | phpBB/includes/functions_privmsgs.php | 109 | 
1 files changed, 75 insertions, 34 deletions
| diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index 8e1561b842..b2928d5df8 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -881,9 +881,10 @@ function update_unread_status($unread, $msg_id, $user_id, $folder_id)  	global $db, $user, $phpbb_container; +	/* @var $phpbb_notifications \phpbb\notification\manager */  	$phpbb_notifications = $phpbb_container->get('notification_manager'); -	$phpbb_notifications->mark_notifications_read('notification.type.pm', $msg_id, $user_id); +	$phpbb_notifications->mark_notifications('notification.type.pm', $msg_id, $user_id);  	$sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . "  		SET pm_unread = 0 @@ -937,10 +938,10 @@ function mark_folder_read($user_id, $folder_id)  */  function handle_mark_actions($user_id, $mark_action)  { -	global $db, $user, $phpbb_root_path, $phpEx; +	global $db, $user, $phpbb_root_path, $phpEx, $request; -	$msg_ids		= request_var('marked_msg_id', array(0)); -	$cur_folder_id	= request_var('cur_folder_id', PRIVMSGS_NO_BOX); +	$msg_ids		= $request->variable('marked_msg_id', array(0)); +	$cur_folder_id	= $request->variable('cur_folder_id', PRIVMSGS_NO_BOX);  	$confirm		= (isset($_POST['confirm'])) ? true : false;  	if (!sizeof($msg_ids)) @@ -1130,6 +1131,7 @@ function delete_pm($user_id, $msg_ids, $folder_id)  		$user->data['user_unread_privmsg'] -= $num_unread;  	} +	/* @var $phpbb_notifications \phpbb\notification\manager */  	$phpbb_notifications = $phpbb_container->get('notification_manager');  	$phpbb_notifications->delete_notifications('notification.type.pm', array_keys($delete_rows)); @@ -1151,12 +1153,10 @@ function delete_pm($user_id, $msg_ids, $folder_id)  	if (sizeof($delete_ids))  	{  		// Check if there are any attachments we need to remove -		if (!function_exists('delete_attachments')) -		{ -			include($phpbb_root_path . 'includes/functions_admin.' . $phpEx); -		} - -		delete_attachments('message', $delete_ids, false); +		/** @var \phpbb\attachment\manager $attachment_manager */ +		$attachment_manager = $phpbb_container->get('attachment.manager'); +		$attachment_manager->delete('message', $delete_ids, false); +		unset($attachment_manager);  		$sql = 'DELETE FROM ' . PRIVMSGS_TABLE . '  			WHERE ' . $db->sql_in_set('msg_id', $delete_ids); @@ -1243,6 +1243,7 @@ function phpbb_delete_users_pms($user_ids)  	$db->sql_transaction('begin'); +	/* @var $phpbb_notifications \phpbb\notification\manager */  	$phpbb_notifications = $phpbb_container->get('notification_manager');  	if (!empty($undelivered_msg)) @@ -1360,12 +1361,10 @@ function phpbb_delete_users_pms($user_ids)  		if (!empty($delete_ids))  		{  			// Check if there are any attachments we need to remove -			if (!function_exists('delete_attachments')) -			{ -				include($phpbb_root_path . 'includes/functions_admin.' . $phpEx); -			} - -			delete_attachments('message', $delete_ids, false); +			/** @var \phpbb\attachment\manager $attachment_manager */ +			$attachment_manager = $phpbb_container->get('attachment.manager'); +			$attachment_manager->delete('message', $delete_ids, false); +			unset($attachment_manager);  			$sql = 'DELETE FROM ' . PRIVMSGS_TABLE . '  				WHERE ' . $db->sql_in_set('msg_id', $delete_ids); @@ -1433,7 +1432,10 @@ function rebuild_header($check_ary)  */  function write_pm_addresses($check_ary, $author_id, $plaintext = false)  { -	global $db, $user, $template, $phpbb_root_path, $phpEx; +	global $db, $user, $template, $phpbb_root_path, $phpEx, $phpbb_container; + +	/** @var \phpbb\group\helper $group_helper */ +	$group_helper = $phpbb_container->get('group_helper');  	$addresses = array(); @@ -1494,7 +1496,7 @@ function write_pm_addresses($check_ary, $author_id, $plaintext = false)  				{  					if ($check_type == 'to' || $author_id == $user->data['user_id'] || $row['user_id'] == $user->data['user_id'])  					{ -						$address[] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']; +						$address[] = $group_helper->get_name($row['group_name']);  					}  				}  				$db->sql_freeresult($result); @@ -1514,7 +1516,7 @@ function write_pm_addresses($check_ary, $author_id, $plaintext = false)  					{  						if ($check_type == 'to' || $author_id == $user->data['user_id'] || $row['user_id'] == $user->data['user_id'])  						{ -							$row['group_name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']; +							$row['group_name'] = $group_helper->get_name($row['group_name']);  							$address['group'][$row['group_id']] = array('name' => $row['group_name'], 'colour' => $row['group_colour']);  						}  					} @@ -1608,7 +1610,7 @@ function get_folder_status($folder_id, $folder)  */  function submit_pm($mode, $subject, &$data, $put_in_outbox = true)  { -	global $db, $auth, $config, $phpEx, $template, $user, $phpbb_root_path, $phpbb_container, $phpbb_dispatcher; +	global $db, $auth, $config, $phpEx, $template, $user, $phpbb_root_path, $phpbb_container, $phpbb_dispatcher, $request;  	// We do not handle erasing pms here  	if ($mode == 'delete') @@ -1618,17 +1620,21 @@ function submit_pm($mode, $subject, &$data, $put_in_outbox = true)  	$current_time = time(); +	$data_ary = $data;  	/**  	* Get all parts of the PM that are to be submited to the DB.  	*  	* @event core.submit_pm_before  	* @var	string	mode	PM Post mode - post|reply|quote|quotepost|forward|edit  	* @var	string	subject	Subject of the private message -	* @var	array	data	The whole row data of the PM. +	* @var	array	data_ary	The whole row data of the PM.  	* @since 3.1.0-b3 +	* @change 3.2.0-a1 Replaced data with data_ary  	*/ -	$vars = array('mode', 'subject', 'data'); +	$vars = array('mode', 'subject', 'data_ary');  	extract($phpbb_dispatcher->trigger_event('core.submit_pm_before', compact($vars))); +	$data = $data_ary; +	unset($data_ary);  	// Collect some basic information about which tables and which rows to update/insert  	$sql_data = array(); @@ -1902,13 +1908,13 @@ function submit_pm($mode, $subject, &$data, $put_in_outbox = true)  		if ($space_taken && $files_added)  		{ -			set_config_count('upload_dir_size', $space_taken, true); -			set_config_count('num_files', $files_added, true); +			$config->increment('upload_dir_size', $space_taken, false); +			$config->increment('num_files', $files_added, false);  		}  	}  	// Delete draft if post was loaded... -	$draft_id = request_var('draft_loaded', 0); +	$draft_id = $request->variable('draft_loaded', 0);  	if ($draft_id)  	{  		$sql = 'DELETE FROM ' . DRAFTS_TABLE . " @@ -1925,6 +1931,7 @@ function submit_pm($mode, $subject, &$data, $put_in_outbox = true)  		'recipients'			=> $recipients,  	)); +	/* @var $phpbb_notifications \phpbb\notification\manager */  	$phpbb_notifications = $phpbb_container->get('notification_manager');  	if ($mode == 'edit') @@ -1936,18 +1943,22 @@ function submit_pm($mode, $subject, &$data, $put_in_outbox = true)  		$phpbb_notifications->add_notifications('notification.type.pm', $pm_data);  	} +	$data_ary = $data;  	/**  	* Get PM message ID after submission to DB  	*  	* @event core.submit_pm_after  	* @var	string	mode	PM Post mode - post|reply|quote|quotepost|forward|edit  	* @var	string	subject	Subject of the private message -	* @var	array	data	The whole row data of the PM. +	* @var	array	data_ary	The whole row data of the PM.  	* @var	array	pm_data	The data sent to notification class  	* @since 3.1.0-b5 +	* @change 3.2.0-a1 Replaced data with data_ary  	*/ -	$vars = array('mode', 'subject', 'data', 'pm_data'); +	$vars = array('mode', 'subject', 'data_ary', 'pm_data');  	extract($phpbb_dispatcher->trigger_event('core.submit_pm_after', compact($vars))); +	$data = $data_ary; +	unset($data_ary);  	return $data['msg_id'];  } @@ -2096,6 +2107,8 @@ function message_history($msg_id, $user_id, $message_row, $folder, $in_post_mode  			'S_IN_POST_MODE'	=> $in_post_mode,  			'MSG_ID'			=> $row['msg_id'], +			'MESSAGE_TIME'		=> $row['message_time'], +			'USER_ID'			=> $row['user_id'],  			'U_VIEW_MESSAGE'	=> "$url&f=$folder_id&p=" . $row['msg_id'],  			'U_QUOTE'			=> (!$in_post_mode && $auth->acl_get('u_sendpm') && $author_id != ANONYMOUS) ? "$url&mode=compose&action=quote&f=" . $folder_id . "&p=" . $row['msg_id'] : '',  			'U_POST_REPLY_PM'	=> ($author_id != $user->data['user_id'] && $author_id != ANONYMOUS && $auth->acl_get('u_sendpm')) ? "$url&mode=compose&action=reply&f=$folder_id&p=" . $row['msg_id'] : '') @@ -2123,17 +2136,42 @@ function set_user_message_limit()  {  	global $user, $db, $config; -	// Get maximum about from user memberships - if it is 0, there is no limit set and we use the maximum value within the config. -	$sql = 'SELECT MAX(g.group_message_limit) as max_message_limit +	// Get maximum about from user memberships +	$message_limit = phpbb_get_max_setting_from_group($db, $user->data['user_id'], 'message_limit'); + +	// If it is 0, there is no limit set and we use the maximum value within the config. +	$user->data['message_limit'] = (!$message_limit) ? $config['pm_max_msgs'] : $message_limit; +} + +/** + * Get the maximum PM setting for the groups of the user + * + * @param \phpbb\db\driver\driver_interface $db + * @param int $user_id + * @param string $setting Only 'max_recipients' and 'message_limit' are supported + * @return int The maximum setting for all groups of the user, unless one group has '0' + * @throws \InvalidArgumentException If selected group setting is not supported + */ +function phpbb_get_max_setting_from_group(\phpbb\db\driver\driver_interface $db, $user_id, $setting) +{ +	if ($setting !== 'max_recipients' && $setting !== 'message_limit') +	{ +		throw new InvalidArgumentException('Setting "' . $setting . '" is not supported'); +	} + +	// Get maximum number of allowed recipients +	$sql = 'SELECT MIN(g.group_' . $setting . ') as min_setting, MAX(g.group_' . $setting . ') as max_setting  		FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug -		WHERE ug.user_id = ' . $user->data['user_id'] . ' +		WHERE ug.user_id = ' . (int) $user_id . '  			AND ug.user_pending = 0  			AND ug.group_id = g.group_id';  	$result = $db->sql_query($sql); -	$message_limit = (int) $db->sql_fetchfield('max_message_limit'); +	$row = $db->sql_fetchrow($result);  	$db->sql_freeresult($result); +	$max_setting = (int) $row['max_setting']; +	$min_setting = (int) $row['min_setting']; -	$user->data['message_limit'] = (!$message_limit) ? $config['pm_max_msgs'] : $message_limit; +	return ($min_setting > 0) ? $max_setting : 0;  }  /** @@ -2147,7 +2185,10 @@ function set_user_message_limit()  */  function get_recipient_strings($pm_by_id)  { -	global $db, $phpbb_root_path, $phpEx, $user; +	global $db, $phpbb_root_path, $phpEx, $user, $phpbb_container; + +	/** @var \phpbb\group\helper $group_helper */ +	$group_helper = $phpbb_container->get('group_helper');  	$address_list = $recipient_list = $address = array(); @@ -2193,7 +2234,7 @@ function get_recipient_strings($pm_by_id)  			{  				if ($ug_type == 'g')  				{ -					$row['name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['name']] : $row['name']; +					$row['name'] = $group_helper->get_name($row['name']);  				}  				$recipient_list[$ug_type][$row['id']] = array('name' => $row['name'], 'colour' => $row['colour']); | 
