aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/docs/CHANGELOG.html4
-rw-r--r--phpBB/includes/ucp/ucp_pm_compose.php112
2 files changed, 92 insertions, 24 deletions
diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html
index 38a2316b2b..37409f6e71 100644
--- a/phpBB/docs/CHANGELOG.html
+++ b/phpBB/docs/CHANGELOG.html
@@ -133,6 +133,8 @@
<li>[Change] Allow setting birth year to current year.</li>
<li>[Change] Do not use the topics posted table when performing an egosearch.</li>
<li>[Change] Log the forum name that topics are moved into.</li>
+ <li>[Change] Automatically add users/groups to the PM recipient list, if entered or selected.</li>
+ <li>[Change] Reply to PM now includes all previous recipients and not only the original sender.</li>
<li>[Feature] Allow limited inheritance for template sets.</li>
<li>[Feature] Allow hard disabling of the template editor.</li>
@@ -140,6 +142,8 @@
<li>[Feature] Ability to define nullar/singular/plural language entries</li>
<li>[Feature] Ability to mimic sprintf() calls with $user-&gt;lang() with the ability to correctly assign nullar/singular/plural language entries.</li>
<li>[Feature] Added the possibility to force user posts put in queue if post count is lower than an admin defined value. Guest posting is not affected by this setting.</li>
+ <li>[Feature] Added 'max_recipients' setting for private messages. This setting allows admins to define the maximum number of recipients per private message with a board-wide setting and a group-specific setting.</li>
+ <li>[Feature] Added new permission setting for sending private messages to groups. Now there are two permissions to define sending private messages to multiple recipients and private messages to groups.</li>
</ul>
<a name="v301"></a><h3>1.ii. Changes since 3.0.1</h3>
diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php
index c69c5da6cd..75683abfba 100644
--- a/phpBB/includes/ucp/ucp_pm_compose.php
+++ b/phpBB/includes/ucp/ucp_pm_compose.php
@@ -45,6 +45,11 @@ function compose_pm($id, $mode, $action)
// Do NOT use request_var or specialchars here
$address_list = isset($_REQUEST['address_list']) ? $_REQUEST['address_list'] : array();
+ if (!is_array($address_list))
+ {
+ $address_list = array();
+ }
+
$submit = (isset($_POST['post'])) ? true : false;
$preview = (isset($_POST['preview'])) ? true : false;
$save = (isset($_POST['save'])) ? true : false;
@@ -79,7 +84,8 @@ function compose_pm($id, $mode, $action)
// Output PM_TO box if message composing
if ($action != 'edit')
{
- if ($config['allow_mass_pm'] && $auth->acl_get('u_masspm'))
+ // Add groups to PM box
+ if ($config['allow_mass_pm'] && $auth->acl_get('u_masspm_group'))
{
$sql = 'SELECT g.group_id, g.group_name, g.group_type
FROM ' . GROUPS_TABLE . ' g';
@@ -112,7 +118,7 @@ function compose_pm($id, $mode, $action)
$template->assign_vars(array(
'S_SHOW_PM_BOX' => true,
'S_ALLOW_MASS_PM' => ($config['allow_mass_pm'] && $auth->acl_get('u_masspm')) ? true : false,
- 'S_GROUP_OPTIONS' => ($config['allow_mass_pm'] && $auth->acl_get('u_masspm')) ? $group_options : '',
+ 'S_GROUP_OPTIONS' => ($config['allow_mass_pm'] && $auth->acl_get('u_masspm_group')) ? $group_options : '',
'U_FIND_USERNAME' => append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=searchuser&amp;form=postform&amp;field=username_list&amp;select_single=$select_single"),
));
}
@@ -281,7 +287,24 @@ function compose_pm($id, $mode, $action)
if (($action == 'reply' || $action == 'quote' || $action == 'quotepost') && !sizeof($address_list) && !$refresh && !$submit && !$preview)
{
- $address_list = array('u' => array($post['author_id'] => 'to'));
+ if ($action == 'quotepost')
+ {
+ $address_list = array('u' => array($post['author_id'] => 'to'));
+ }
+ else
+ {
+ // We try to include every previously listed member from the TO Header
+ $address_list = rebuild_header(array('to' => $post['to_address']));
+
+ // Add the author (if he is already listed then this is no shame (it will be overwritten))
+ $address_list['u'][$post['author_id']] = 'to';
+
+ // Now, make sure the user itself is not listed. ;)
+ if (isset($address_list['u'][$user->data['user_id']]))
+ {
+ unset($address_list['u'][$user->data['user_id']]);
+ }
+ }
}
else if ($action == 'edit' && !sizeof($address_list) && !$refresh && !$submit && !$preview)
{
@@ -315,7 +338,7 @@ function compose_pm($id, $mode, $action)
$check_value = 0;
}
- if (($to_group_id || isset($address_list['g'])) && (!$config['allow_mass_pm'] || !$auth->acl_get('u_masspm')))
+ if (($to_group_id || isset($address_list['g'])) && (!$config['allow_mass_pm'] || !$auth->acl_get('u_masspm_group')))
{
trigger_error('NO_AUTH_GROUP_MESSAGE');
}
@@ -380,14 +403,43 @@ function compose_pm($id, $mode, $action)
redirect(append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;mode=view&amp;action=view_message&amp;p=' . $msg_id));
}
+ // Get maximum number of allowed recipients
+ $sql = 'SELECT MAX(g.group_max_recipients) as max_recipients
+ FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
+ WHERE ug.user_id = ' . $user->data['user_id'] . '
+ AND ug.user_pending = 0
+ AND ug.group_id = g.group_id';
+ $result = $db->sql_query($sql);
+ $max_recipients = (int) $db->sql_fetchfield('max_recipients');
+ $db->sql_freeresult($result);
+
+ $max_recipients = (!$max_recipients) ? $config['pm_max_recipients'] : $max_recipients;
+
+ // Damn php and globals - i know, this is horrible
+ global $refresh, $submit, $preview;
+
// Handle User/Group adding/removing
handle_message_list_actions($address_list, $error, $remove_u, $remove_g, $add_to, $add_bcc);
- // Check for too many recipients
+ // Check mass pm to group permission
+ if ((!$config['allow_mass_pm'] || !$auth->acl_get('u_masspm_group')) && !empty($address_list['g']))
+ {
+ $address_list = array();
+ $error[] = $user->lang['NO_AUTH_GROUP_MESSAGE'];
+ }
+
+ // Check mass pm to users permission
if ((!$config['allow_mass_pm'] || !$auth->acl_get('u_masspm')) && num_recipients($address_list) > 1)
{
- $address_list = get_recipient_pos($address_list, 1);
- $error[] = $user->lang['TOO_MANY_RECIPIENTS'];
+ $address_list = get_recipients($address_list, 1);
+ $error[] = $user->lang('TOO_MANY_RECIPIENTS', 1);
+ }
+
+ // Check for too many recipients
+ if (!empty($address_list['u']) && $max_recipients && sizeof($address_list['u']) > $max_recipients)
+ {
+ $address_list = get_recipients($address_list, $max_recipients);
+ $error[] = $user->lang('TOO_MANY_RECIPIENTS', $max_recipients);
}
// Always check if the submitted attachment data is valid and belongs to the user.
@@ -949,6 +1001,7 @@ function compose_pm($id, $mode, $action)
'URL_STATUS' => ($url_status) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'],
'MINI_POST_IMG' => $user->img('icon_post_target', $user->lang['PM']),
'ERROR' => (sizeof($error)) ? implode('<br />', $error) : '',
+ 'MAX_RECIPIENTS' => ($config['allow_mass_pm'] && ($auth->acl_get('u_masspm') || $auth->acl_get('u_masspm_group'))) ? $max_recipients : 0,
'S_COMPOSE_PM' => true,
'S_EDIT_POST' => ($action == 'edit'),
@@ -1027,14 +1080,33 @@ function handle_message_list_actions(&$address_list, &$error, $remove_u, $remove
}
}
+ // Add Selected Groups
+ $group_list = request_var('group_list', array(0));
+
+ // Build usernames to add
+ $usernames = (isset($_REQUEST['username'])) ? array(request_var('username', '', true)) : array();
+ $username_list = request_var('username_list', '', true);
+ if ($username_list)
+ {
+ $usernames = array_merge($usernames, explode("\n", $username_list));
+ }
+
+ // If add to or add bcc not pressed, users could still have usernames listed they want to add...
+ if (!$add_to && !$add_bcc && (sizeof($group_list) || sizeof($usernames)))
+ {
+ $add_to = true;
+
+ global $refresh, $submit, $preview;
+
+ $refresh = $preview = true;
+ $submit = false;
+ }
+
// Add User/Group [TO]
if ($add_to || $add_bcc)
{
$type = ($add_to) ? 'to' : 'bcc';
- // Add Selected Groups
- $group_list = request_var('group_list', array(0));
-
if (sizeof($group_list))
{
foreach ($group_list as $group_id)
@@ -1046,14 +1118,6 @@ function handle_message_list_actions(&$address_list, &$error, $remove_u, $remove
// User ID's to add...
$user_id_ary = array();
- // Build usernames to add
- $usernames = (isset($_REQUEST['username'])) ? array(request_var('username', '', true)) : array();
- $username_list = request_var('username_list', '', true);
- if ($username_list)
- {
- $usernames = array_merge($usernames, explode("\n", $username_list));
- }
-
// Reveal the correct user_ids
if (sizeof($usernames))
{
@@ -1068,7 +1132,7 @@ function handle_message_list_actions(&$address_list, &$error, $remove_u, $remove
}
// Add Friends if specified
- $friend_list = (is_array($_REQUEST['add_' . $type])) ? array_map('intval', array_keys($_REQUEST['add_' . $type])) : array();
+ $friend_list = (isset($_REQUEST['add_' . $type]) && is_array($_REQUEST['add_' . $type])) ? array_map('intval', array_keys($_REQUEST['add_' . $type])) : array();
$user_id_ary = array_merge($user_id_ary, $friend_list);
foreach ($user_id_ary as $user_id)
@@ -1144,22 +1208,22 @@ function num_recipients($address_list)
}
/**
-* Get recipient at position 'pos'
+* Get number of 'num_recipients' recipients from first position
*/
-function get_recipient_pos($address_list, $position = 1)
+function get_recipients($address_list, $num_recipients = 1)
{
$recipient = array();
- $count = 1;
+ $count = 0;
foreach ($address_list as $field => $adr_ary)
{
foreach ($adr_ary as $id => $type)
{
- if ($count == $position)
+ if ($count >= $num_recipients)
{
- $recipient[$field][$id] = $type;
break 2;
}
+ $recipient[$field][$id] = $type;
$count++;
}
}