mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-31 14:00:31 +02:00
[ticket/11744] Group join request notification
PHPBB3-11744
This commit is contained in:
@@ -59,7 +59,7 @@ class phpbb_notification_manager
|
||||
|
||||
/**
|
||||
* Notification Constructor
|
||||
*
|
||||
*
|
||||
* @param array $notification_types
|
||||
* @param array $notification_methods
|
||||
* @param ContainerBuilder $phpbb_container
|
||||
@@ -490,15 +490,15 @@ class phpbb_notification_manager
|
||||
*
|
||||
* @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $item_id is identical for the specified types)
|
||||
* @param int|array $item_id Identifier within the type (or array of ids)
|
||||
* @param array $data Data specific for this type that will be updated
|
||||
* @param bool|int|array $parent_id Parent identifier within the type (or array of ids), used in combination with item_id if specified
|
||||
*/
|
||||
public function delete_notifications($notification_type_name, $item_id)
|
||||
public function delete_notifications($notification_type_name, $item_id, $parent_id = false)
|
||||
{
|
||||
if (is_array($notification_type_name))
|
||||
{
|
||||
foreach ($notification_type_name as $type)
|
||||
{
|
||||
$this->delete_notifications($type, $item_id);
|
||||
$this->delete_notifications($type, $item_id, $parent_id);
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -508,7 +508,8 @@ class phpbb_notification_manager
|
||||
|
||||
$sql = 'DELETE FROM ' . $this->notifications_table . '
|
||||
WHERE notification_type_id = ' . (int) $notification_type_id . '
|
||||
AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id);
|
||||
AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id) .
|
||||
(($parent_id !== false) ? ' AND ' . ((is_array($parent_id) ? $this->db->sql_in_set('item_parent_id', $parent_id) : 'item_parent_id = ' . (int) $parent_id)) : '');
|
||||
$this->db->sql_query($sql);
|
||||
}
|
||||
|
||||
@@ -834,12 +835,12 @@ class phpbb_notification_manager
|
||||
protected function load_object($object_name)
|
||||
{
|
||||
$object = $this->phpbb_container->get($object_name);
|
||||
|
||||
|
||||
if (method_exists($object, 'set_notification_manager'))
|
||||
{
|
||||
$object->set_notification_manager($this);
|
||||
}
|
||||
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
||||
|
161
phpBB/phpbb/notification/type/group_request.php
Normal file
161
phpBB/phpbb/notification/type/group_request.php
Normal file
@@ -0,0 +1,161 @@
|
||||
<?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 extends phpbb_notification_type_base
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_type()
|
||||
{
|
||||
return 'group_request';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static $notification_option = array(
|
||||
'lang' => 'NOTIFICATION_TYPE_GROUP_REQUEST',
|
||||
);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function is_available()
|
||||
{
|
||||
// Leader of any groups?
|
||||
$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);
|
||||
$row = $this->db->sql_fetchrow($result);
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
return (!empty($row)) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function get_item_id($group)
|
||||
{
|
||||
return (int) $group['user_id'];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function get_item_parent_id($group)
|
||||
{
|
||||
// Group id is the parent
|
||||
return (int) $group['group_id'];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function find_users_for_notification($group, $options = array())
|
||||
{
|
||||
$options = array_merge(array(
|
||||
'ignore_users' => array(),
|
||||
), $options);
|
||||
|
||||
$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);
|
||||
|
||||
$user_ids = array();
|
||||
while ($row = $this->db->sql_fetchrow($result))
|
||||
{
|
||||
$user_ids[] = $row['user_id'];
|
||||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
$this->user_loader->load_users($user_ids);
|
||||
|
||||
return $this->check_user_notification_options($user_ids, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_avatar()
|
||||
{
|
||||
return $this->user_loader->get_avatar($this->item_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_title()
|
||||
{
|
||||
$username = $this->user_loader->get_username($this->item_id, 'no_profile');
|
||||
|
||||
return $this->user->lang('NOTIFICATION_GROUP_REQUEST', $username, $this->get_data('group_name'));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_email_template()
|
||||
{
|
||||
return 'group_request';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_email_template_variables()
|
||||
{
|
||||
$user_data = $this->user_loader->get_user($this->item_id);
|
||||
|
||||
return array(
|
||||
'GROUP_NAME' => htmlspecialchars_decode($this->get_data('group_name')),
|
||||
'REQUEST_USERNAME' => htmlspecialchars_decode($user_data['username']),
|
||||
|
||||
'U_PENDING' => generate_board_url() . "/ucp.{$this->php_ext}?i=groups&mode=manage&action=list&g={$this->item_parent_id}",
|
||||
'U_GROUP' => generate_board_url() . "/memberlist.{$this->php_ext}?mode=group&g={$this->item_parent_id}",
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function get_url()
|
||||
{
|
||||
return append_sid($this->phpbb_root_path . 'ucp.' . $this->php_ext, "i=groups&mode=manage&action=list&g={$this->item_parent_id}");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function users_to_query()
|
||||
{
|
||||
return array($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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user