1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-02-23 03:19:01 +01:00

Merge pull request #1620 from EXreaction/ticket/11745

Group join approved notification
This commit is contained in:
David King 2013-09-12 21:25:00 -07:00
commit f22b959257
7 changed files with 176 additions and 35 deletions

View File

@ -121,6 +121,24 @@ services:
tags:
- { name: notification.type }
notification.type.group_request_approved:
class: phpbb_notification_type_group_request_approved
scope: prototype # scope MUST be prototype for this to work!
arguments:
- @user_loader
- @dbal.conn
- @cache.driver
- @user
- @auth
- @config
- %core.root_path%
- %core.php_ext%
- %tables.notification_types%
- %tables.notifications%
- %tables.user_notifications%
tags:
- { name: notification.type }
notification.type.pm:
class: phpbb_notification_type_pm
scope: prototype # scope MUST be prototype for this to work!

View File

@ -2929,11 +2929,10 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna
AND ' . $db->sql_in_set('ug.user_id', $user_id_ary);
$result = $db->sql_query($sql);
$user_id_ary = $email_users = array();
$user_id_ary = array();
while ($row = $db->sql_fetchrow($result))
{
$user_id_ary[] = $row['user_id'];
$email_users[] = $row;
}
$db->sql_freeresult($result);
@ -2948,29 +2947,13 @@ function group_user_attributes($action, $group_id, $user_id_ary = false, $userna
AND " . $db->sql_in_set('user_id', $user_id_ary);
$db->sql_query($sql);
// Send approved email to users...
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
$messenger = new messenger();
foreach ($email_users as $row)
{
$messenger->template('group_approved', $row['user_lang']);
$messenger->set_addresses($row);
$messenger->assign_vars(array(
'USERNAME' => htmlspecialchars_decode($row['username']),
'GROUP_NAME' => htmlspecialchars_decode($group_name),
'U_GROUP' => generate_board_url() . "/ucp.$phpEx?i=groups&mode=membership")
);
$messenger->send($row['user_notify_type']);
}
$messenger->save_queue();
$phpbb_notifications = $phpbb_container->get('notification_manager');
$phpbb_notifications->add_notifications('group_request_approved', array(
'user_ids' => $user_id_ary,
'group_id' => $group_id,
'group_name' => $group_name,
));
$phpbb_notifications->delete_notifications('group_request', $user_id_ary, $group_id);
$log = 'LOG_USERS_APPROVED';

View File

@ -424,6 +424,7 @@ $lang = array_merge($lang, array(
),
'NOTIFICATION_BOOKMARK' => '%1$s replied to the topic "%2$s" you have bookmarked.',
'NOTIFICATION_GROUP_REQUEST' => '%1$s is requesting to join the group %2$s.',
'NOTIFICATION_GROUP_REQUEST_APPROVED' => 'Your request to join the group %1$s has been approved.',
'NOTIFICATION_PM' => '%1$s sent you a Private Message "%2$s".',
'NOTIFICATION_POST' => '%1$s replied to the topic "%2$s".',
'NOTIFICATION_POST_APPROVED' => 'Your post was approved "%2$s".',

View File

@ -1,10 +0,0 @@
Subject: Your request has been approved
Congratulations,
Your request to join the "{GROUP_NAME}" group on "{SITENAME}" has been approved.
Click on the following link to see your group membership.
{U_GROUP}
{EMAIL_SIG}

View File

@ -38,7 +38,8 @@ class phpbb_notification_type_group_request extends phpbb_notification_type_base
public function is_available()
{
// Leader of any groups?
$sql = 'SELECT group_id FROM ' . USER_GROUP_TABLE . '
$sql = 'SELECT group_id
FROM ' . USER_GROUP_TABLE . '
WHERE user_id = ' . (int) $this->user->data['user_id'] . '
AND group_leader = 1';
$result = $this->db->sql_query_limit($sql, 1);
@ -74,7 +75,8 @@ class phpbb_notification_type_group_request extends phpbb_notification_type_base
'ignore_users' => array(),
), $options);
$sql = 'SELECT user_id FROM ' . USER_GROUP_TABLE . '
$sql = 'SELECT user_id
FROM ' . USER_GROUP_TABLE . '
WHERE group_leader = 1
AND group_id = ' . (int) $group['group_id'];
$result = $this->db->sql_query($sql);

View File

@ -0,0 +1,118 @@
<?php
/**
*
* @package notifications
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
class phpbb_notification_type_group_request_approved extends phpbb_notification_type_base
{
/**
* {@inheritdoc}
*/
public function get_type()
{
return 'group_request_approved';
}
/**
* {@inheritdoc}
*/
public function is_available()
{
return false;
}
/**
* {@inheritdoc}
*/
public static function get_item_id($group)
{
return (int) $group['group_id'];
}
/**
* {@inheritdoc}
*/
public static function get_item_parent_id($group)
{
return 0;
}
/**
* {@inheritdoc}
*/
public function find_users_for_notification($group, $options = array())
{
$users = array();
$group['user_ids'] = (!is_array($group['user_ids'])) ? array($group['user_ids']) : $group['user_ids'];
foreach ($group['user_ids'] as $user_id)
{
$users[$user_id] = array('');
}
return $users;
}
/**
* {@inheritdoc}
*/
public function get_title()
{
return $this->user->lang('NOTIFICATION_GROUP_REQUEST_APPROVED', $this->get_data('group_name'));
}
/**
* {@inheritdoc}
*/
public function get_url()
{
return append_sid($this->phpbb_root_path . 'memberlist.' . $this->php_ext, "mode=group&g={$this->item_id}");
}
/**
* {@inheritdoc}
*/
public function create_insert_array($group, $pre_create_data = array())
{
$this->set_data('group_name', $group['group_name']);
return parent::create_insert_array($group, $pre_create_data);
}
/**
* {@inheritdoc}
*/
public function users_to_query()
{
return array();
}
/**
* {@inheritdoc}
*/
public function get_email_template()
{
return false;
}
/**
* {@inheritdoc}
*/
public function get_email_template_variables()
{
return array();
}
}

View File

@ -22,6 +22,7 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas
parent::get_notification_types(),
array(
'group_request',
'group_request_approved',
)
);
}
@ -76,5 +77,33 @@ class phpbb_notification_group_request_test extends phpbb_tests_notification_bas
'user_id' => 2,
)
);
// Approve user 3 joining the group
group_user_attributes('approve', $group_id, array(3));
// user 3 pending notification should have been deleted
$this->assert_notifications(
array(),
array(
'user_id' => 2,
)
);
$this->assert_notifications(
array(
// user 3 approved notification
array(
'item_id' => $group_id, // user_id of requesting join
'user_id' => 3,
'notification_read' => 0,
'notification_data' => array(
'group_name' => 'test',
),
),
),
array(
'user_id' => 3,
)
);
}
}