mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
[ticket/11103] Set basic notifications to be enabled by default
Now, if there is no row for the user in the user_notifications table, the user will receive basic notifications. If the user wishes to not receive notifications, a row must be added with notify = 0. For other methods besides the basic (e.g. email, jabber) a row must still be added with notify = 1 for them to receive notifications PHPBB3-11103
This commit is contained in:
parent
eddb56f842
commit
e549b7663d
26 changed files with 219 additions and 483 deletions
|
@ -1781,6 +1781,7 @@ function get_schema_struct()
|
||||||
'item_id' => array('UINT', 0),
|
'item_id' => array('UINT', 0),
|
||||||
'user_id' => array('UINT', 0),
|
'user_id' => array('UINT', 0),
|
||||||
'method' => array('VCHAR:255', ''),
|
'method' => array('VCHAR:255', ''),
|
||||||
|
'notify' => array('BOOL', 1),
|
||||||
),
|
),
|
||||||
'PRIMARY_KEY' => array(
|
'PRIMARY_KEY' => array(
|
||||||
'item_type',
|
'item_type',
|
||||||
|
@ -1791,6 +1792,7 @@ function get_schema_struct()
|
||||||
'KEYS' => array(
|
'KEYS' => array(
|
||||||
'it' => array('INDEX', 'item_type'),
|
'it' => array('INDEX', 'item_type'),
|
||||||
'uid' => array('INDEX', 'user_id'),
|
'uid' => array('INDEX', 'user_id'),
|
||||||
|
'no' => array('INDEX', 'notify'),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -545,41 +545,57 @@ class phpbb_notification_manager
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get subscriptions
|
* Get global subscriptions (item_id = 0)
|
||||||
*
|
*
|
||||||
* @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
|
* @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
|
||||||
* @param bool $only_global True to select only global subscription options (item_id = 0)
|
|
||||||
*
|
*
|
||||||
* @return array Subscriptions
|
* @return array Subscriptions
|
||||||
*/
|
*/
|
||||||
public function get_subscriptions($user_id = false, $only_global = false)
|
public function get_global_subscriptions($user_id = false)
|
||||||
{
|
{
|
||||||
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
|
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
|
||||||
|
|
||||||
$subscriptions = array();
|
$subscriptions = array();
|
||||||
|
|
||||||
$sql = 'SELECT *
|
foreach ($this->get_subscription_types() as $group_name => $types)
|
||||||
|
{
|
||||||
|
foreach ($types as $id => $type)
|
||||||
|
{
|
||||||
|
$sql = 'SELECT method, notify
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . '
|
FROM ' . USER_NOTIFICATIONS_TABLE . '
|
||||||
WHERE user_id = ' . (int) $user_id .
|
WHERE user_id = ' . (int) $user_id . "
|
||||||
(($only_global) ? ' AND item_id = 0' : '');
|
AND item_type = '" . $this->db->sql_escape($id) . "'
|
||||||
|
AND item_id = 0";
|
||||||
$result = $this->db->sql_query($sql);
|
$result = $this->db->sql_query($sql);
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if ($only_global)
|
|
||||||
{
|
|
||||||
if (!isset($subscriptions[$row['item_type']]))
|
|
||||||
{
|
|
||||||
$subscriptions[$row['item_type']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$subscriptions[$row['item_type']][] = $row['method'];
|
$row = $this->db->sql_fetchrow($result);
|
||||||
|
if (!$row)
|
||||||
|
{
|
||||||
|
// No rows at all, default to ''
|
||||||
|
$subscriptions[$id] = array('');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$subscriptions[] = $row;
|
do
|
||||||
|
{
|
||||||
|
if (!$row['notify'])
|
||||||
|
{
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isset($subscriptions[$id]))
|
||||||
|
{
|
||||||
|
$subscriptions[$id] = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$subscriptions[$id][] = $row['method'];
|
||||||
|
}
|
||||||
|
while ($row = $this->db->sql_fetchrow($result));
|
||||||
|
}
|
||||||
|
|
||||||
$this->db->sql_freeresult($result);
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $subscriptions;
|
return $subscriptions;
|
||||||
}
|
}
|
||||||
|
@ -594,17 +610,46 @@ class phpbb_notification_manager
|
||||||
*/
|
*/
|
||||||
public function add_subscription($item_type, $item_id = 0, $method = '', $user_id = false)
|
public function add_subscription($item_type, $item_id = 0, $method = '', $user_id = false)
|
||||||
{
|
{
|
||||||
|
if ($method !== '')
|
||||||
|
{
|
||||||
|
$this->add_subscription($item_type, $item_type, '', $user_id);
|
||||||
|
}
|
||||||
|
|
||||||
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
|
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
|
||||||
|
|
||||||
|
$sql = 'SELECT notify
|
||||||
|
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
||||||
|
WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
|
||||||
|
AND item_id = " . (int) $item_id . '
|
||||||
|
AND user_id = ' .(int) $user_id . "
|
||||||
|
AND method = '" . $this->db->sql_escape($method) . "'";
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
$current = $this->db->sql_fetchfield('notify');
|
||||||
|
$this->db->sql_freeresult();
|
||||||
|
|
||||||
|
if ($current === false)
|
||||||
|
{
|
||||||
$sql = 'INSERT INTO ' . USER_NOTIFICATIONS_TABLE . ' ' .
|
$sql = 'INSERT INTO ' . USER_NOTIFICATIONS_TABLE . ' ' .
|
||||||
$this->db->sql_build_array('INSERT', array(
|
$this->db->sql_build_array('INSERT', array(
|
||||||
'item_type' => $item_type,
|
'item_type' => $item_type,
|
||||||
'item_id' => (int) $item_id,
|
'item_id' => (int) $item_id,
|
||||||
'user_id' => (int) $user_id,
|
'user_id' => (int) $user_id,
|
||||||
'method' => $method,
|
'method' => $method,
|
||||||
|
'notify' => 1,
|
||||||
));
|
));
|
||||||
$this->db->sql_query($sql);
|
$this->db->sql_query($sql);
|
||||||
}
|
}
|
||||||
|
else if (!$current)
|
||||||
|
{
|
||||||
|
$sql = 'UPDATE ' . USER_NOTIFICATIONS_TABLE . "
|
||||||
|
SET notify = 1
|
||||||
|
WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
|
||||||
|
AND item_id = " . (int) $item_id . '
|
||||||
|
AND user_id = ' .(int) $user_id . "
|
||||||
|
AND method = '" . $this->db->sql_escape($method) . "'";
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a subscription
|
* Delete a subscription
|
||||||
|
@ -618,12 +663,46 @@ class phpbb_notification_manager
|
||||||
{
|
{
|
||||||
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
|
$user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
|
||||||
|
|
||||||
$sql = 'DELETE FROM ' . USER_NOTIFICATIONS_TABLE . "
|
// If no method, make sure that no other notification methods for this item are selected before deleting
|
||||||
|
if ($method === '')
|
||||||
|
{
|
||||||
|
$sql = 'SELECT COUNT(*) as count
|
||||||
|
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
||||||
|
WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
|
||||||
|
AND item_id = " . (int) $item_id . '
|
||||||
|
AND user_id = ' .(int) $user_id . "
|
||||||
|
AND method <> ''
|
||||||
|
AND notify = 1";
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
$count = $this->db->sql_fetchfield('count');
|
||||||
|
$this->db->sql_freeresult();
|
||||||
|
|
||||||
|
if ($count)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = 'UPDATE ' . USER_NOTIFICATIONS_TABLE . "
|
||||||
|
SET notify = 0
|
||||||
WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
|
WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
|
||||||
AND item_id = " . (int) $item_id . '
|
AND item_id = " . (int) $item_id . '
|
||||||
AND user_id = ' .(int) $user_id . "
|
AND user_id = ' .(int) $user_id . "
|
||||||
AND method = '" . $this->db->sql_escape($method) . "'";
|
AND method = '" . $this->db->sql_escape($method) . "'";
|
||||||
$this->db->sql_query($sql);
|
$this->db->sql_query($sql);
|
||||||
|
|
||||||
|
if (!$this->db->sql_affectedrows())
|
||||||
|
{
|
||||||
|
$sql = 'INSERT INTO ' . USER_NOTIFICATIONS_TABLE . ' ' .
|
||||||
|
$this->db->sql_build_array('INSERT', array(
|
||||||
|
'item_type' => $item_type,
|
||||||
|
'item_id' => (int) $item_id,
|
||||||
|
'user_id' => (int) $user_id,
|
||||||
|
'method' => $method,
|
||||||
|
'notify' => 0,
|
||||||
|
));
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -73,30 +73,9 @@ class phpbb_notification_type_approve_post extends phpbb_notification_type_post
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$notify_users = array();
|
return $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], array_merge($options, array(
|
||||||
|
'item_type' => self::$notification_option['id'],
|
||||||
$sql = 'SELECT *
|
)));
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . self::$notification_option['id'] . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_read[$post['forum_id']]['f_read']);
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $notify_users;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -73,30 +73,9 @@ class phpbb_notification_type_approve_topic extends phpbb_notification_type_topi
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$notify_users = array();
|
return $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], array_merge($options, array(
|
||||||
|
'item_type' => self::$notification_option['id'],
|
||||||
$sql = 'SELECT *
|
)));
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . self::$notification_option['id'] . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_read[$post['forum_id']]['f_read']);
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $notify_users;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -310,26 +310,54 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
|
||||||
/**
|
/**
|
||||||
* Find the users who want to receive notifications (helper)
|
* Find the users who want to receive notifications (helper)
|
||||||
*
|
*
|
||||||
* @param array $item_id The item_id to search for
|
* @param array $user_ids User IDs to check if they want to receive notifications
|
||||||
|
* (Bool False to check all users besides anonymous and bots (USER_IGNORE))
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function _find_users_for_notification($item_id, $options)
|
protected function check_user_notification_options($user_ids = false, $options = array())
|
||||||
{
|
{
|
||||||
$options = array_merge(array(
|
$options = array_merge(array(
|
||||||
'ignore_users' => array(),
|
'ignore_users' => array(),
|
||||||
|
'item_type' => get_class($this),
|
||||||
|
'item_id' => 0, // Global by default
|
||||||
), $options);
|
), $options);
|
||||||
|
|
||||||
$rowset = array();
|
if ($user_ids === false)
|
||||||
|
{
|
||||||
|
$user_ids = array();
|
||||||
|
|
||||||
$sql = 'SELECT *
|
$sql = 'SELECT user_id
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
FROM ' . USERS_TABLE . '
|
||||||
WHERE item_type = '" . get_class($this) . "'
|
WHERE user_id <> ' . ANONYMOUS . '
|
||||||
AND item_id = " . (int) $item_id;
|
AND user_type <> ' . USER_IGNORE;
|
||||||
$result = $this->db->sql_query($sql);
|
$result = $this->db->sql_query($sql);
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
$user_ids[] = $row['user_id'];
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($user_ids))
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$rowset = $resulting_user_ids = array();
|
||||||
|
|
||||||
|
$sql = 'SELECT user_id, method, notify
|
||||||
|
FROM ' . USER_NOTIFICATIONS_TABLE . '
|
||||||
|
WHERE ' . $this->db->sql_in_set('user_id', $user_ids) . "
|
||||||
|
AND item_type = '" . $this->db->sql_escape($options['item_type']) . "'
|
||||||
|
AND item_id = " . (int) $options['item_id'];
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$resulting_user_ids[] = $row['user_id'];
|
||||||
|
|
||||||
|
if (!$row['notify'] || (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']])))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -341,8 +369,18 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
|
||||||
|
|
||||||
$rowset[$row['user_id']][] = $row['method'];
|
$rowset[$row['user_id']][] = $row['method'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->sql_freeresult($result);
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
|
foreach ($user_ids as $user_id)
|
||||||
|
{
|
||||||
|
if (!in_array($user_id, $resulting_user_ids) && !isset($options['ignore_users'][$user_id]))
|
||||||
|
{
|
||||||
|
// No rows at all for this user, default to ''
|
||||||
|
$rowset[$user_id] = array('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $rowset;
|
return $rowset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,28 +87,7 @@ class phpbb_notification_type_bookmark extends phpbb_notification_type_post
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$notify_users = array();
|
$notify_users = $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], $options);
|
||||||
|
|
||||||
$sql = 'SELECT *
|
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . get_class($this) . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_read[$post['forum_id']]['f_read']);
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
|
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
|
||||||
$update_notifications = array();
|
$update_notifications = array();
|
||||||
|
|
|
@ -80,33 +80,11 @@ class phpbb_notification_type_pm extends phpbb_notification_type_base
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unset($pm['recipients'][$pm['from_user_id']]);
|
||||||
|
|
||||||
$this->notification_manager->load_users(array_keys($pm['recipients']));
|
$this->notification_manager->load_users(array_keys($pm['recipients']));
|
||||||
|
|
||||||
$notify_users = array();
|
return $this->check_user_notification_options(array_keys($pm['recipients']), $options);
|
||||||
|
|
||||||
$sql = 'SELECT *
|
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . get_class($this) . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', array_keys($pm['recipients'])) . '
|
|
||||||
AND user_id <> ' . $pm['from_user_id'];
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $notify_users;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -108,28 +108,7 @@ class phpbb_notification_type_post extends phpbb_notification_type_base
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$notify_users = array();
|
$notify_users = $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], $options);
|
||||||
|
|
||||||
$sql = 'SELECT *
|
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . get_class($this) . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_read[$post['forum_id']]['f_read']);
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
|
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
|
||||||
$update_notifications = array();
|
$update_notifications = array();
|
||||||
|
|
|
@ -82,30 +82,9 @@ class phpbb_notification_type_post_in_queue extends phpbb_notification_type_post
|
||||||
|
|
||||||
$auth_approve[$post['forum_id']] = array_unique(array_merge($auth_approve[$post['forum_id']], $auth_approve[0]));
|
$auth_approve[$post['forum_id']] = array_unique(array_merge($auth_approve[$post['forum_id']], $auth_approve[0]));
|
||||||
|
|
||||||
$notify_users = array();
|
return $this->check_user_notification_options($auth_approve[$post['forum_id']][$this->permission], array_merge($options, array(
|
||||||
|
'item_type' => self::$notification_option['id'],
|
||||||
$sql = 'SELECT *
|
)));
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . self::$notification_option['id'] . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_approve[$post['forum_id']][$this->permission]);
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $notify_users;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -106,28 +106,7 @@ class phpbb_notification_type_quote extends phpbb_notification_type_post
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$notify_users = array();
|
$notify_users = $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], $options);
|
||||||
|
|
||||||
$sql = 'SELECT *
|
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . get_class($this) . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_read[$post['forum_id']]['f_read']);
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
|
// Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
|
||||||
$update_notifications = array();
|
$update_notifications = array();
|
||||||
|
|
|
@ -96,31 +96,14 @@ class phpbb_notification_type_report_pm extends phpbb_notification_type_pm
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$notify_users = array();
|
if (($key = array_search($this->user->data['user_id'], $auth_approve[$post['forum_id']][$this->permission])))
|
||||||
|
|
||||||
$sql = 'SELECT *
|
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . self::$notification_option['id'] . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_approve[$post['forum_id']][$this->permission]) . '
|
|
||||||
AND user_id <> ' . $this->user->data['user_id'];
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
{
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
unset($auth_approve[$post['forum_id']][$this->permission][$key]);
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
return $this->check_user_notification_options($auth_approve[$post['forum_id']][$this->permission], array_merge($options, array(
|
||||||
{
|
'item_type' => self::$notification_option['id'],
|
||||||
$notify_users[$row['user_id']] = array();
|
)));
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $notify_users;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -82,10 +82,6 @@ class phpbb_notification_type_topic extends phpbb_notification_type_base
|
||||||
'ignore_users' => array(),
|
'ignore_users' => array(),
|
||||||
), $options);
|
), $options);
|
||||||
|
|
||||||
// Let's continue to use the phpBB subscriptions system, at least for now.
|
|
||||||
// It may not be the nicest thing, but it is already working and it would be significant work to replace it
|
|
||||||
//$users = parent::_find_users_for_notification($phpbb_container, $topic['forum_id']);
|
|
||||||
|
|
||||||
$users = array();
|
$users = array();
|
||||||
|
|
||||||
$sql = 'SELECT user_id
|
$sql = 'SELECT user_id
|
||||||
|
@ -112,30 +108,7 @@ class phpbb_notification_type_topic extends phpbb_notification_type_base
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
$notify_users = array();
|
return $this->check_user_notification_options($auth_read[$topic['forum_id']]['f_read'], $options);
|
||||||
|
|
||||||
$sql = 'SELECT *
|
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . get_class($this) . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_read[$topic['forum_id']]['f_read']);
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $notify_users;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -75,30 +75,9 @@ class phpbb_notification_type_topic_in_queue extends phpbb_notification_type_top
|
||||||
|
|
||||||
$auth_approve[$topic['forum_id']] = array_unique(array_merge($auth_approve[$topic['forum_id']], $auth_approve[0]));
|
$auth_approve[$topic['forum_id']] = array_unique(array_merge($auth_approve[$topic['forum_id']], $auth_approve[0]));
|
||||||
|
|
||||||
$notify_users = array();
|
return $this->check_user_notification_options($auth_approve[$topic['forum_id']]['m_approve'], array_merge($options, array(
|
||||||
|
'item_type' => self::$notification_option['id'],
|
||||||
$sql = 'SELECT *
|
)));
|
||||||
FROM ' . USER_NOTIFICATIONS_TABLE . "
|
|
||||||
WHERE item_type = '" . self::$notification_option['id'] . "'
|
|
||||||
AND " . $this->db->sql_in_set('user_id', $auth_approve[$topic['forum_id']]['m_approve']);
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
if (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']]))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($rowset[$row['user_id']]))
|
|
||||||
{
|
|
||||||
$notify_users[$row['user_id']] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$notify_users[$row['user_id']][] = $row['method'];
|
|
||||||
}
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $notify_users;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -32,7 +32,7 @@ class ucp_notifications
|
||||||
switch ($mode)
|
switch ($mode)
|
||||||
{
|
{
|
||||||
case 'notification_options':
|
case 'notification_options':
|
||||||
$subscriptions = $phpbb_notifications->get_subscriptions(false, true);
|
$subscriptions = $phpbb_notifications->get_global_subscriptions(false);
|
||||||
|
|
||||||
// Add/remove subscriptions
|
// Add/remove subscriptions
|
||||||
if ($request->is_set_post('submit'))
|
if ($request->is_set_post('submit'))
|
||||||
|
@ -48,15 +48,6 @@ class ucp_notifications
|
||||||
{
|
{
|
||||||
foreach($subscription_types as $type => $data)
|
foreach($subscription_types as $type => $data)
|
||||||
{
|
{
|
||||||
if ($request->is_set_post($type . '_notification') && !isset($subscriptions[$type]))
|
|
||||||
{
|
|
||||||
$phpbb_notifications->add_subscription($type);
|
|
||||||
}
|
|
||||||
else if (!$request->is_set_post($type . '_notification') && isset($subscriptions[$type]))
|
|
||||||
{
|
|
||||||
$phpbb_notifications->delete_subscription($type);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($notification_methods as $method)
|
foreach($notification_methods as $method)
|
||||||
{
|
{
|
||||||
if ($request->is_set_post($type . '_' . $method) && (!isset($subscriptions[$type]) || !in_array($method, $subscriptions[$type])))
|
if ($request->is_set_post($type . '_' . $method) && (!isset($subscriptions[$type]) || !in_array($method, $subscriptions[$type])))
|
||||||
|
@ -68,6 +59,15 @@ class ucp_notifications
|
||||||
$phpbb_notifications->delete_subscription($type, 0, $method);
|
$phpbb_notifications->delete_subscription($type, 0, $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($request->is_set_post($type . '_notification') && !isset($subscriptions[$type]))
|
||||||
|
{
|
||||||
|
$phpbb_notifications->add_subscription($type);
|
||||||
|
}
|
||||||
|
else if (!$request->is_set_post($type . '_notification') && isset($subscriptions[$type]))
|
||||||
|
{
|
||||||
|
$phpbb_notifications->delete_subscription($type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ class ucp_notifications
|
||||||
|
|
||||||
$this->output_notification_methods('notification_methods', $phpbb_notifications, $template, $user);
|
$this->output_notification_methods('notification_methods', $phpbb_notifications, $template, $user);
|
||||||
|
|
||||||
$this->output_notification_types('notification_types', $phpbb_notifications, $template, $user);
|
$this->output_notification_types($subscriptions, 'notification_types', $phpbb_notifications, $template, $user);
|
||||||
|
|
||||||
$this->tpl_name = 'ucp_notifications';
|
$this->tpl_name = 'ucp_notifications';
|
||||||
$this->page_title = 'UCP_NOTIFICATION_OPTIONS';
|
$this->page_title = 'UCP_NOTIFICATION_OPTIONS';
|
||||||
|
@ -165,10 +165,9 @@ class ucp_notifications
|
||||||
* @param phpbb_template $template
|
* @param phpbb_template $template
|
||||||
* @param phpbb_user $user
|
* @param phpbb_user $user
|
||||||
*/
|
*/
|
||||||
public function output_notification_types($block = 'notification_types', phpbb_notification_manager $phpbb_notifications, phpbb_template $template, phpbb_user $user)
|
public function output_notification_types($subscriptions, $block = 'notification_types', phpbb_notification_manager $phpbb_notifications, phpbb_template $template, phpbb_user $user)
|
||||||
{
|
{
|
||||||
$notification_methods = $phpbb_notifications->get_subscription_methods();
|
$notification_methods = $phpbb_notifications->get_subscription_methods();
|
||||||
$subscriptions = $phpbb_notifications->get_subscriptions(false, true);
|
|
||||||
|
|
||||||
foreach($phpbb_notifications->get_subscription_types() as $group => $subscription_types)
|
foreach($phpbb_notifications->get_subscription_types() as $group => $subscription_types)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1154,6 +1154,7 @@ function database_update_info()
|
||||||
'item_id' => array('UINT', 0),
|
'item_id' => array('UINT', 0),
|
||||||
'user_id' => array('UINT', 0),
|
'user_id' => array('UINT', 0),
|
||||||
'method' => array('VCHAR:255', ''),
|
'method' => array('VCHAR:255', ''),
|
||||||
|
'notify' => array('BOOL', 1),
|
||||||
),
|
),
|
||||||
'PRIMARY_KEY' => array(
|
'PRIMARY_KEY' => array(
|
||||||
'item_type',
|
'item_type',
|
||||||
|
@ -1164,6 +1165,7 @@ function database_update_info()
|
||||||
'KEYS' => array(
|
'KEYS' => array(
|
||||||
'it' => array('INDEX', 'item_type'),
|
'it' => array('INDEX', 'item_type'),
|
||||||
'uid' => array('INDEX', 'user_id'),
|
'uid' => array('INDEX', 'user_id'),
|
||||||
|
'no' => array('INDEX', 'notify'),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -2755,7 +2757,7 @@ function change_database_data(&$no_updates, $version)
|
||||||
$config->set('site_home_text', '');
|
$config->set('site_home_text', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (true)//!isset($config['load_notifications']))
|
if (!isset($config['load_notifications']))
|
||||||
{
|
{
|
||||||
$config->set('load_notifications', 1);
|
$config->set('load_notifications', 1);
|
||||||
|
|
||||||
|
@ -2819,48 +2821,6 @@ function change_database_data(&$no_updates, $version)
|
||||||
$db->sql_freeresult($result);
|
$db->sql_freeresult($result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
// Add default notifications
|
|
||||||
$default_notifications = array(
|
|
||||||
array(
|
|
||||||
'check' => ($config['allow_topic_notify']),
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'check' => ($config['allow_forum_notify']),
|
|
||||||
'item_type' => 'phpbb_notification_type_topic',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'check' => ($config['allow_bookmarks']),
|
|
||||||
'item_type' => 'phpbb_notification_type_bookmark',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'check' => ($config['allow_privmsg']),
|
|
||||||
'item_type' => 'phpbb_notification_type_pm',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach ($default_notifications as $convert_data)
|
|
||||||
{
|
|
||||||
if ($convert_data['check'])
|
|
||||||
{
|
|
||||||
$sql = 'SELECT user_id
|
|
||||||
FROM ' . USERS_TABLE . '
|
|
||||||
WHERE user_id <> ' . ANONYMOUS . '
|
|
||||||
AND user_type <> ' . USER_IGNORE;
|
|
||||||
$result = $db->sql_query($sql);
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
|
||||||
{
|
|
||||||
_sql('INSERT INTO ' . USER_NOTIFICATIONS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
|
|
||||||
'item_type' => $convert_data['item_type'],
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => $row['user_id'],
|
|
||||||
'method' => '',
|
|
||||||
)), $errored, $error_ary);
|
|
||||||
}
|
|
||||||
$db->sql_freeresult($result);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1240,13 +1240,15 @@ CREATE TABLE phpbb_user_notifications (
|
||||||
item_type VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
item_type VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
||||||
item_id INTEGER DEFAULT 0 NOT NULL,
|
item_id INTEGER DEFAULT 0 NOT NULL,
|
||||||
user_id INTEGER DEFAULT 0 NOT NULL,
|
user_id INTEGER DEFAULT 0 NOT NULL,
|
||||||
method VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL
|
method VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
|
||||||
|
notify INTEGER DEFAULT 1 NOT NULL
|
||||||
);;
|
);;
|
||||||
|
|
||||||
ALTER TABLE phpbb_user_notifications ADD PRIMARY KEY (item_type, item_id, user_id, method);;
|
ALTER TABLE phpbb_user_notifications ADD PRIMARY KEY (item_type, item_id, user_id, method);;
|
||||||
|
|
||||||
CREATE INDEX phpbb_user_notifications_it ON phpbb_user_notifications(item_type);;
|
CREATE INDEX phpbb_user_notifications_it ON phpbb_user_notifications(item_type);;
|
||||||
CREATE INDEX phpbb_user_notifications_uid ON phpbb_user_notifications(user_id);;
|
CREATE INDEX phpbb_user_notifications_uid ON phpbb_user_notifications(user_id);;
|
||||||
|
CREATE INDEX phpbb_user_notifications_no ON phpbb_user_notifications(notify);;
|
||||||
|
|
||||||
# Table: 'phpbb_user_group'
|
# Table: 'phpbb_user_group'
|
||||||
CREATE TABLE phpbb_user_group (
|
CREATE TABLE phpbb_user_group (
|
||||||
|
|
|
@ -1526,7 +1526,8 @@ CREATE TABLE [phpbb_user_notifications] (
|
||||||
[item_type] [varchar] (255) DEFAULT ('') NOT NULL ,
|
[item_type] [varchar] (255) DEFAULT ('') NOT NULL ,
|
||||||
[item_id] [int] DEFAULT (0) NOT NULL ,
|
[item_id] [int] DEFAULT (0) NOT NULL ,
|
||||||
[user_id] [int] DEFAULT (0) NOT NULL ,
|
[user_id] [int] DEFAULT (0) NOT NULL ,
|
||||||
[method] [varchar] (255) DEFAULT ('') NOT NULL
|
[method] [varchar] (255) DEFAULT ('') NOT NULL ,
|
||||||
|
[notify] [int] DEFAULT (1) NOT NULL
|
||||||
) ON [PRIMARY]
|
) ON [PRIMARY]
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
@ -1546,6 +1547,9 @@ GO
|
||||||
CREATE INDEX [uid] ON [phpbb_user_notifications]([user_id]) ON [PRIMARY]
|
CREATE INDEX [uid] ON [phpbb_user_notifications]([user_id]) ON [PRIMARY]
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
CREATE INDEX [no] ON [phpbb_user_notifications]([notify]) ON [PRIMARY]
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Table: 'phpbb_user_group'
|
Table: 'phpbb_user_group'
|
||||||
|
|
|
@ -877,9 +877,11 @@ CREATE TABLE phpbb_user_notifications (
|
||||||
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
method varbinary(255) DEFAULT '' NOT NULL,
|
method varbinary(255) DEFAULT '' NOT NULL,
|
||||||
|
notify tinyint(1) UNSIGNED DEFAULT '1' NOT NULL,
|
||||||
PRIMARY KEY (item_type, item_id, user_id, method),
|
PRIMARY KEY (item_type, item_id, user_id, method),
|
||||||
KEY it (item_type),
|
KEY it (item_type),
|
||||||
KEY uid (user_id)
|
KEY uid (user_id),
|
||||||
|
KEY no (notify)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -877,9 +877,11 @@ CREATE TABLE phpbb_user_notifications (
|
||||||
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
item_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
method varchar(255) DEFAULT '' NOT NULL,
|
method varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
notify tinyint(1) UNSIGNED DEFAULT '1' NOT NULL,
|
||||||
PRIMARY KEY (item_type, item_id, user_id, method),
|
PRIMARY KEY (item_type, item_id, user_id, method),
|
||||||
KEY it (item_type),
|
KEY it (item_type),
|
||||||
KEY uid (user_id)
|
KEY uid (user_id),
|
||||||
|
KEY no (notify)
|
||||||
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
|
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1645,6 +1645,7 @@ CREATE TABLE phpbb_user_notifications (
|
||||||
item_id number(8) DEFAULT '0' NOT NULL,
|
item_id number(8) DEFAULT '0' NOT NULL,
|
||||||
user_id number(8) DEFAULT '0' NOT NULL,
|
user_id number(8) DEFAULT '0' NOT NULL,
|
||||||
method varchar2(255) DEFAULT '' ,
|
method varchar2(255) DEFAULT '' ,
|
||||||
|
notify number(1) DEFAULT '1' NOT NULL,
|
||||||
CONSTRAINT pk_phpbb_user_notifications PRIMARY KEY (item_type, item_id, user_id, method)
|
CONSTRAINT pk_phpbb_user_notifications PRIMARY KEY (item_type, item_id, user_id, method)
|
||||||
)
|
)
|
||||||
/
|
/
|
||||||
|
@ -1653,6 +1654,8 @@ CREATE INDEX phpbb_user_notifications_it ON phpbb_user_notifications (item_type)
|
||||||
/
|
/
|
||||||
CREATE INDEX phpbb_user_notifications_uid ON phpbb_user_notifications (user_id)
|
CREATE INDEX phpbb_user_notifications_uid ON phpbb_user_notifications (user_id)
|
||||||
/
|
/
|
||||||
|
CREATE INDEX phpbb_user_notifications_no ON phpbb_user_notifications (notify)
|
||||||
|
/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Table: 'phpbb_user_group'
|
Table: 'phpbb_user_group'
|
||||||
|
|
|
@ -1127,11 +1127,13 @@ CREATE TABLE phpbb_user_notifications (
|
||||||
item_id INT4 DEFAULT '0' NOT NULL CHECK (item_id >= 0),
|
item_id INT4 DEFAULT '0' NOT NULL CHECK (item_id >= 0),
|
||||||
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
|
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
|
||||||
method varchar(255) DEFAULT '' NOT NULL,
|
method varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
notify INT2 DEFAULT '1' NOT NULL CHECK (notify >= 0),
|
||||||
PRIMARY KEY (item_type, item_id, user_id, method)
|
PRIMARY KEY (item_type, item_id, user_id, method)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX phpbb_user_notifications_it ON phpbb_user_notifications (item_type);
|
CREATE INDEX phpbb_user_notifications_it ON phpbb_user_notifications (item_type);
|
||||||
CREATE INDEX phpbb_user_notifications_uid ON phpbb_user_notifications (user_id);
|
CREATE INDEX phpbb_user_notifications_uid ON phpbb_user_notifications (user_id);
|
||||||
|
CREATE INDEX phpbb_user_notifications_no ON phpbb_user_notifications (notify);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Table: 'phpbb_user_group'
|
Table: 'phpbb_user_group'
|
||||||
|
|
|
@ -771,13 +771,8 @@ INSERT INTO phpbb_extensions (group_id, extension) VALUES (9, 'ogg');
|
||||||
INSERT INTO phpbb_extensions (group_id, extension) VALUES (9, 'ogm');
|
INSERT INTO phpbb_extensions (group_id, extension) VALUES (9, 'ogm');
|
||||||
|
|
||||||
# User Notification Options (for first user)
|
# User Notification Options (for first user)
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('report', 0, 2, '');
|
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('needs_approval', 0, 2, '');
|
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_bookmark', 0, 2, '');
|
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_pm', 0, 2, '');
|
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_post', 0, 2, '');
|
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_post', 0, 2, '');
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_post', 0, 2, 'phpbb_notification_method_email');
|
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_post', 0, 2, 'phpbb_notification_method_email');
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_quote', 0, 2, '');
|
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_topic', 0, 2, '');
|
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_topic', 0, 2, '');
|
||||||
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_topic', 0, 2, 'phpbb_notification_method_email');
|
INSERT INTO phpbb_user_notifications (item_type, item_id, user_id, method) VALUES('phpbb_notification_type_topic', 0, 2, 'phpbb_notification_method_email');
|
||||||
|
|
||||||
|
|
|
@ -850,11 +850,13 @@ CREATE TABLE phpbb_user_notifications (
|
||||||
item_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
item_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||||
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||||
method varchar(255) NOT NULL DEFAULT '',
|
method varchar(255) NOT NULL DEFAULT '',
|
||||||
|
notify INTEGER UNSIGNED NOT NULL DEFAULT '1',
|
||||||
PRIMARY KEY (item_type, item_id, user_id, method)
|
PRIMARY KEY (item_type, item_id, user_id, method)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX phpbb_user_notifications_it ON phpbb_user_notifications (item_type);
|
CREATE INDEX phpbb_user_notifications_it ON phpbb_user_notifications (item_type);
|
||||||
CREATE INDEX phpbb_user_notifications_uid ON phpbb_user_notifications (user_id);
|
CREATE INDEX phpbb_user_notifications_uid ON phpbb_user_notifications (user_id);
|
||||||
|
CREATE INDEX phpbb_user_notifications_no ON phpbb_user_notifications (notify);
|
||||||
|
|
||||||
# Table: 'phpbb_user_group'
|
# Table: 'phpbb_user_group'
|
||||||
CREATE TABLE phpbb_user_group (
|
CREATE TABLE phpbb_user_group (
|
||||||
|
|
|
@ -70,7 +70,7 @@ class phpbb_mock_notification_manager
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function get_subscriptions()
|
public function get_global_subscriptions()
|
||||||
{
|
{
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ class phpbb_ext_test_notification_type_test extends phpbb_notification_type_base
|
||||||
|
|
||||||
public function find_users_for_notification($post, $options = array())
|
public function find_users_for_notification($post, $options = array())
|
||||||
{
|
{
|
||||||
return $this->_find_users_for_notification(0, $options);
|
return $this->check_user_notification_options(array(0), $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create_insert_array($post, $pre_create_data = array())
|
public function create_insert_array($post, $pre_create_data = array())
|
||||||
|
|
|
@ -119,159 +119,19 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||||
|
|
||||||
public function test_subscriptions()
|
public function test_subscriptions()
|
||||||
{
|
{
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 0, '');
|
$this->notifications->delete_subscription('phpbb_notification_type_post', 0, '', 2);
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 0, '', 1);
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_quote', 0, '', 1);
|
$this->assertArrayNotHasKey('phpbb_notification_type_post', $this->notifications->get_global_subscriptions(2));
|
||||||
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 0, '', 2);
|
$this->notifications->add_subscription('phpbb_notification_type_post', 0, '', 2);
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 0, 'email', 2);
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 0, 'jabber', 2);
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 1, '', 2);
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 1, 'email', 2);
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 1, 'jabber', 2);
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 2, '', 2);
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 2, 'email', 2);
|
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_post', 2, 'jabber', 2);
|
|
||||||
|
|
||||||
$this->assertEquals(array(
|
$this->assertArrayHasKey('phpbb_notification_type_post', $this->notifications->get_global_subscriptions(2));
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => 0,
|
|
||||||
'method' => '',
|
|
||||||
),
|
|
||||||
), $this->notifications->get_subscriptions());
|
|
||||||
|
|
||||||
$this->assertEquals(array(
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => 1,
|
|
||||||
'method' => '',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_quote',
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => 1,
|
|
||||||
'method' => '',
|
|
||||||
),
|
|
||||||
), $this->notifications->get_subscriptions(1));
|
|
||||||
|
|
||||||
$this->assertEquals(array(
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => '',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'email',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'jabber',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 1,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => '',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 1,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'email',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 1,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'jabber',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 2,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => '',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 2,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'email',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 2,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'jabber',
|
|
||||||
),
|
|
||||||
), $this->notifications->get_subscriptions(2));
|
|
||||||
|
|
||||||
$this->assertEquals(array(
|
|
||||||
'phpbb_notification_type_post' => array(
|
|
||||||
'',
|
|
||||||
'email',
|
|
||||||
'jabber',
|
|
||||||
),
|
|
||||||
), $this->notifications->get_subscriptions(2, true));
|
|
||||||
|
|
||||||
$this->notifications->delete_subscription('phpbb_notification_type_post', 0, '', 2);
|
|
||||||
$this->notifications->delete_subscription('phpbb_notification_type_post', 1, 'email', 2);
|
|
||||||
$this->notifications->delete_subscription('phpbb_notification_type_post', 2, 'jabber', 2);
|
|
||||||
|
|
||||||
$this->assertEquals(array(
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'email',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 0,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'jabber',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 1,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => '',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 1,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'jabber',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 2,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => '',
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
'item_type' => 'phpbb_notification_type_post',
|
|
||||||
'item_id' => 2,
|
|
||||||
'user_id' => 2,
|
|
||||||
'method' => 'email',
|
|
||||||
),
|
|
||||||
), $this->notifications->get_subscriptions(2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_notifications()
|
public function test_notifications()
|
||||||
{
|
{
|
||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
$this->notifications->add_subscription('phpbb_ext_test_notification_type_test');
|
|
||||||
|
|
||||||
// Used to test post notifications later
|
// Used to test post notifications later
|
||||||
$db->sql_query('INSERT INTO ' . TOPICS_WATCH_TABLE . ' ' . $db->sql_build_array('INSERT', array(
|
$db->sql_query('INSERT INTO ' . TOPICS_WATCH_TABLE . ' ' . $db->sql_build_array('INSERT', array(
|
||||||
'topic_id' => 2,
|
'topic_id' => 2,
|
||||||
|
@ -320,7 +180,6 @@ class phpbb_notification_test extends phpbb_database_test_case
|
||||||
'topic_id' => 2,
|
'topic_id' => 2,
|
||||||
'user_id' => 0,
|
'user_id' => 0,
|
||||||
)));
|
)));
|
||||||
$this->notifications->add_subscription('phpbb_notification_type_bookmark');
|
|
||||||
|
|
||||||
$this->notifications->add_notifications(array('phpbb_notification_type_quote', 'phpbb_notification_type_bookmark', 'phpbb_notification_type_post', 'phpbb_ext_test_notification_type_test'), array(
|
$this->notifications->add_notifications(array('phpbb_notification_type_quote', 'phpbb_notification_type_bookmark', 'phpbb_notification_type_post', 'phpbb_ext_test_notification_type_test'), array(
|
||||||
'post_id' => '5',
|
'post_id' => '5',
|
||||||
|
|
Loading…
Add table
Reference in a new issue