mirror of
https://github.com/phpbb/phpbb.git
synced 2025-02-24 12:03:21 +01:00
[ticket/11103] Work on the pm type and email method
PHPBB3-11103
This commit is contained in:
parent
7b0b6fc63c
commit
7fee0cfdf6
@ -1855,6 +1855,19 @@ function submit_pm($mode, $subject, &$data, $put_in_outbox = true)
|
||||
*/
|
||||
function pm_notification($mode, $author, $recipients, $subject, $message, $msg_id)
|
||||
{
|
||||
global $phpbb_container;
|
||||
|
||||
$phpbb_notifications = $phpbb_container->get('notifications');
|
||||
|
||||
$phpbb_notifications->add_notifications('pm', array(
|
||||
'author_id' => $author,
|
||||
'recipients' => $recipients,
|
||||
'message_subject' => $subject,
|
||||
'msg_id' => $msg_id,
|
||||
));
|
||||
|
||||
return;
|
||||
|
||||
global $db, $user, $config, $phpbb_root_path, $phpEx, $auth;
|
||||
|
||||
$subject = censor_text($subject);
|
||||
|
@ -26,6 +26,8 @@ abstract class phpbb_notifications_method_base implements phpbb_notifications_me
|
||||
protected $phpbb_container;
|
||||
protected $db;
|
||||
protected $user;
|
||||
protected $phpbb_root_path;
|
||||
protected $php_ext;
|
||||
|
||||
/**
|
||||
* Queue of messages to be sent
|
||||
@ -42,6 +44,9 @@ abstract class phpbb_notifications_method_base implements phpbb_notifications_me
|
||||
// Some common things we're going to use
|
||||
$this->db = $phpbb_container->get('dbal.conn');
|
||||
$this->user = $phpbb_container->get('user');
|
||||
|
||||
$this->phpbb_root_path = $phpbb_container->getParameter('core.root_path');
|
||||
$this->php_ext = $phpbb_container->getParameter('core.php_ext');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,7 +70,11 @@ abstract class phpbb_notifications_method_base implements phpbb_notifications_me
|
||||
$this->notify($notification);
|
||||
}
|
||||
|
||||
// Empty queue
|
||||
$this->empty_queue();
|
||||
}
|
||||
|
||||
protected function empty_queue()
|
||||
{
|
||||
$this->queue = array();
|
||||
}
|
||||
}
|
||||
|
@ -33,4 +33,65 @@ class phpbb_notifications_method_email extends phpbb_notifications_method_base
|
||||
{
|
||||
// email the user
|
||||
}
|
||||
|
||||
public function run_queue()
|
||||
{
|
||||
if (!sizeof($this->queue))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Load all users we want to notify (we need their email address)
|
||||
$user_ids = $users = array();
|
||||
foreach ($this->queue as $notification)
|
||||
{
|
||||
$user_ids[] = $notification->user_id;
|
||||
}
|
||||
|
||||
$sql = 'SELECT * FROM ' . USERS_TABLE . '
|
||||
WHERE ' . $this->db->sql_in_set('user_id', $user_ids);
|
||||
$result = $this->db->sql_query($sql);
|
||||
while ($row = $this->db->sql_fetchrow($result))
|
||||
{
|
||||
$users[$row['user_id']] = $row;
|
||||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
// Load the messenger
|
||||
if (!class_exists('messenger'))
|
||||
{
|
||||
include($this->phpbb_root_path . 'includes/functions_messenger.' . $this->php_ext);
|
||||
}
|
||||
$messenger = new messenger();
|
||||
$board_url = generate_board_url();
|
||||
|
||||
// Time to go through the queue and send emails
|
||||
foreach ($this->queue as $notification)
|
||||
{
|
||||
$notification->users($users);
|
||||
|
||||
$user = $notification->get_user();
|
||||
|
||||
$messenger->template('privmsg_notify', $user['user_lang']);
|
||||
|
||||
$messenger->to($user['user_email'], $user['username']);
|
||||
|
||||
$messenger->assign_vars(array(
|
||||
'SUBJECT' => htmlspecialchars_decode($notification->get_title()),
|
||||
'AUTHOR_NAME' => '',
|
||||
'USERNAME' => htmlspecialchars_decode($user['username']),
|
||||
|
||||
'U_INBOX' => $board_url . "/ucp.{$this->php_ext}?i=pm&folder=inbox",
|
||||
'U_VIEW_MESSAGE' => $board_url . "/ucp.{$this->php_ext}?i=pm&mode=view&p={$notification->get_item_id()}",
|
||||
));
|
||||
|
||||
$messenger->send($addr['method']);
|
||||
}
|
||||
|
||||
// Save the queue in the messenger class (has to be called or these emails could be lost?)
|
||||
$messenger->save_queue();
|
||||
|
||||
// We're done, empty the queue
|
||||
$this->empty_queue();
|
||||
}
|
||||
}
|
||||
|
@ -141,19 +141,7 @@ class phpbb_notifications_service
|
||||
*/
|
||||
|
||||
// find out which users want to receive this type of notification
|
||||
$sql = 'SELECT user_id FROM ' . USERS_TABLE . '
|
||||
WHERE ' . $this->db->sql_in_set('user_id', array(2));
|
||||
$result = $this->db->sql_query($sql);
|
||||
while ($row = $this->db->sql_fetchrow($result))
|
||||
{
|
||||
if (!isset($notify_users[$row['user_id']]))
|
||||
{
|
||||
$notify_users[$row['user_id']] = array();
|
||||
}
|
||||
|
||||
$notify_users[$row['user_id']][] = '';
|
||||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
$notify_users = $item_type_class_name::find_users_for_notification($data);
|
||||
|
||||
// Make sure not to send new notifications to users who've already been notified about this item
|
||||
// This may happen when an item was added, but now new users are able to see the item
|
||||
|
@ -58,6 +58,7 @@ abstract class phpbb_notifications_type_base implements phpbb_notifications_type
|
||||
|
||||
// Some common things we're going to use
|
||||
$this->db = $phpbb_container->get('dbal.conn');
|
||||
|
||||
$this->phpbb_root_path = $phpbb_container->getParameter('core.root_path');
|
||||
$this->php_ext = $phpbb_container->getParameter('core.php_ext');
|
||||
|
||||
@ -114,7 +115,7 @@ abstract class phpbb_notifications_type_base implements phpbb_notifications_type
|
||||
* @param int $user_id
|
||||
* @return array
|
||||
*/
|
||||
protected function get_user($user_id)
|
||||
public function get_user($user_id)
|
||||
{
|
||||
return $this->users[$user_id];
|
||||
}
|
||||
@ -149,11 +150,11 @@ abstract class phpbb_notifications_type_base implements phpbb_notifications_type
|
||||
* Function for preparing the data for insertion in an SQL query
|
||||
* (The service handles insertion)
|
||||
*
|
||||
* @param array $special_data Data unique to this notification type
|
||||
* @param array $type_data Data unique to this notification type
|
||||
*
|
||||
* @return array Array of data ready to be inserted into the database
|
||||
*/
|
||||
public function create_insert_array($special_data)
|
||||
public function create_insert_array($type_data)
|
||||
{
|
||||
// Defaults
|
||||
$data = array_merge(array(
|
||||
@ -173,13 +174,13 @@ abstract class phpbb_notifications_type_base implements phpbb_notifications_type
|
||||
* Function for preparing the data for update in an SQL query
|
||||
* (The service handles insertion)
|
||||
*
|
||||
* @param array $special_data Data unique to this notification type
|
||||
* @param array $type_data Data unique to this notification type
|
||||
*
|
||||
* @return array Array of data ready to be updated in the database
|
||||
*/
|
||||
public function create_update_array($special_data)
|
||||
public function create_update_array($type_data)
|
||||
{
|
||||
$data = $this->create_insert_array($special_data);
|
||||
$data = $this->create_insert_array($type_data);
|
||||
|
||||
// Unset data unique to each row
|
||||
unset(
|
||||
|
@ -23,11 +23,13 @@ interface phpbb_notifications_type_interface
|
||||
{
|
||||
public static function get_item_type();
|
||||
|
||||
public static function get_item_id($post);
|
||||
public static function get_item_id($type_data);
|
||||
|
||||
public function get_title();
|
||||
|
||||
public function get_url();
|
||||
|
||||
public function create_insert_array($special_data);
|
||||
public function create_insert_array($type_data);
|
||||
|
||||
public function find_users_for_notification($type_data);
|
||||
}
|
||||
|
@ -84,16 +84,73 @@ class phpbb_notifications_type_pm extends phpbb_notifications_type_base
|
||||
*
|
||||
* @return array Array of data ready to be inserted into the database
|
||||
*/
|
||||
public function create_insert_array($post)
|
||||
public function create_insert_array($pm)
|
||||
{
|
||||
$this->item_id = $post['msg_id'];
|
||||
$this->item_id = $pm['msg_id'];
|
||||
|
||||
$this->set_data('author_id', $post['author_id']);
|
||||
$this->set_data('author_id', $pm['author_id']);
|
||||
|
||||
$this->set_data('message_subject', $post['message_subject']);
|
||||
$this->set_data('message_subject', $pm['message_subject']);
|
||||
|
||||
$this->time = $post['message_time'];
|
||||
return parent::create_insert_array($pm);
|
||||
}
|
||||
|
||||
return parent::create_insert_array($post);
|
||||
/**
|
||||
* Find the users who want to receive notifications
|
||||
*
|
||||
* @param array $pm Data from
|
||||
* @return array
|
||||
*/
|
||||
public function find_users_for_notification($pm)
|
||||
{
|
||||
$user = $this->phpbb_container->get('user');
|
||||
|
||||
// Exclude guests, current user and banned users from notifications
|
||||
unset($pm['recipients'][ANONYMOUS], $pm['recipients'][$user->data['user_id']]);
|
||||
|
||||
if (!sizeof($pm['recipients']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!function_exists('phpbb_get_banned_user_ids'))
|
||||
{
|
||||
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
|
||||
}
|
||||
$banned_users = phpbb_get_banned_user_ids(array_keys($pm['recipients']));
|
||||
$pm['recipients'] = array_diff(array_keys($pm['recipients']), $banned_users);
|
||||
|
||||
if (!sizeof($pm['recipients']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$sql = 'SELECT user_id, user_notify_pm, user_notify_type
|
||||
FROM ' . USERS_TABLE . '
|
||||
WHERE ' . $db->sql_in_set('user_id', $pm['recipients']);
|
||||
$result = $db->sql_query($sql);
|
||||
|
||||
$pm['recipients'] = array();
|
||||
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
if ($row['user_notify_pm'])
|
||||
{
|
||||
$pm['recipients'][$row['user_id']] = array();
|
||||
|
||||
if ($row['user_notify_type'] == NOTIFY_EMAIL || $row['user_notify_type'] == NOTIFY_BOTH)
|
||||
{
|
||||
$pm['recipients'][$row['user_id']][] = 'email';
|
||||
}
|
||||
|
||||
if ($row['user_notify_type'] == NOTIFY_IM || $row['user_notify_type'] == NOTIFY_BOTH)
|
||||
{
|
||||
$pm['recipients'][$row['user_id']][] = 'jabber';
|
||||
}
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
return $pm['recipients'];
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user