1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-05-06 23:55:26 +02:00

[ticket/11103] Add is_disabled column to notifications table

EXTENSION AUTHORS TAKE NOTE! This is to prevent errors with notifications
from extensions!

Set is_disabled to 1 for all your notifications when your extension is
disabled so they are ignored and do not cause errors.

When your extension is enabled again, set is_disabled to 0 and your
notifications will be working again.

PHPBB3-11103
This commit is contained in:
Nathan Guse 2012-10-13 23:24:30 -05:00
parent cb93784126
commit 94ffbb4050
14 changed files with 45 additions and 12 deletions

View File

@ -1303,6 +1303,7 @@ function get_schema_struct()
'item_parent_id' => array('UINT', 0), 'item_parent_id' => array('UINT', 0),
'user_id' => array('UINT', 0), 'user_id' => array('UINT', 0),
'unread' => array('BOOL', 1), 'unread' => array('BOOL', 1),
'is_disabled' => array('BOOL', 0),
'time' => array('TIMESTAMP', 1), 'time' => array('TIMESTAMP', 1),
'data' => array('TEXT_UNI', ''), 'data' => array('TEXT_UNI', ''),
), ),
@ -1314,6 +1315,7 @@ function get_schema_struct()
'user_id' => array('INDEX', 'user_id'), 'user_id' => array('INDEX', 'user_id'),
'time' => array('INDEX', 'time'), 'time' => array('INDEX', 'time'),
'unread' => array('INDEX', 'unread'), 'unread' => array('INDEX', 'unread'),
'is_disabled' => array('INDEX', 'is_disabled'),
), ),
); );

View File

@ -94,7 +94,8 @@ class phpbb_notification_manager
$sql = 'SELECT COUNT(*) AS count $sql = 'SELECT COUNT(*) AS count
FROM ' . NOTIFICATIONS_TABLE . ' FROM ' . NOTIFICATIONS_TABLE . '
WHERE user_id = ' . (int) $options['user_id'] . ' WHERE user_id = ' . (int) $options['user_id'] . '
AND unread = 1'; AND unread = 1
AND is_disabled = 0';
$result = $this->db->sql_query($sql); $result = $this->db->sql_query($sql);
$unread_count = (int) $this->db->sql_fetchfield('count', $result); $unread_count = (int) $this->db->sql_fetchfield('count', $result);
$this->db->sql_freeresult($result); $this->db->sql_freeresult($result);
@ -105,7 +106,8 @@ class phpbb_notification_manager
// Get the total number of notifications // Get the total number of notifications
$sql = 'SELECT COUNT(*) AS count $sql = 'SELECT COUNT(*) AS count
FROM ' . NOTIFICATIONS_TABLE . ' FROM ' . NOTIFICATIONS_TABLE . '
WHERE user_id = ' . (int) $options['user_id']; WHERE user_id = ' . (int) $options['user_id'] . '
AND is_disabled = 0';
$result = $this->db->sql_query($sql); $result = $this->db->sql_query($sql);
$total_count = (int) $this->db->sql_fetchfield('count', $result); $total_count = (int) $this->db->sql_fetchfield('count', $result);
$this->db->sql_freeresult($result); $this->db->sql_freeresult($result);
@ -118,6 +120,7 @@ class phpbb_notification_manager
FROM ' . NOTIFICATIONS_TABLE . ' FROM ' . NOTIFICATIONS_TABLE . '
WHERE user_id = ' . (int) $options['user_id'] . WHERE user_id = ' . (int) $options['user_id'] .
(($options['notification_id']) ? ((is_array($options['notification_id'])) ? ' AND ' . $this->db->sql_in_set('notification_id', $options['notification_id']) : ' AND notification_id = ' . (int) $options['notification_id']) : '') . ' (($options['notification_id']) ? ((is_array($options['notification_id'])) ? ' AND ' . $this->db->sql_in_set('notification_id', $options['notification_id']) : ' AND notification_id = ' . (int) $options['notification_id']) : '') . '
AND is_disabled = 0
ORDER BY ' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']); ORDER BY ' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']);
$result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']); $result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']);
@ -135,6 +138,7 @@ class phpbb_notification_manager
WHERE user_id = ' . (int) $options['user_id'] . ' WHERE user_id = ' . (int) $options['user_id'] . '
AND unread = 1 AND unread = 1
AND ' . $this->db->sql_in_set('notification_id', array_keys($rowset), true) . ' AND ' . $this->db->sql_in_set('notification_id', array_keys($rowset), true) . '
AND is_disabled = 0
ORDER BY ' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']); ORDER BY ' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']);
$result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']); $result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']);
@ -344,7 +348,8 @@ class phpbb_notification_manager
$sql = 'SELECT user_id $sql = 'SELECT user_id
FROM ' . NOTIFICATIONS_TABLE . " FROM ' . NOTIFICATIONS_TABLE . "
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 is_disabled = 0';
$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))
{ {

View File

@ -42,9 +42,12 @@ abstract class phpbb_notification_type_base implements phpbb_notification_type_i
* Indentification data * Indentification data
* item_type * item_type
* item_id * item_id
* item_parent_id // Parent item id (ex: for topic => forum_id, for post => topic_id, etc) * item_parent_id - Parent item id (ex: for topic => forum_id, for post => topic_id, etc)
* user_id * user_id
* unread * unread
* is_disabled - EXTENSION AUTHORS TAKE NOTE! This is to prevent errors with notifications from extensions!
* - Set is_disabled to 1 for all your notifications when your extension is disabled so they are ignored and do not cause errors.
* - When your extension is enabled again, set is_disabled to 0 and your notifications will be working again.
* *
* time * time
* data (special serialized field that each notification type can use to store stuff) * data (special serialized field that each notification type can use to store stuff)

View File

@ -113,7 +113,8 @@ class phpbb_notification_type_bookmark extends phpbb_notification_type_post
FROM ' . NOTIFICATIONS_TABLE . " FROM ' . NOTIFICATIONS_TABLE . "
WHERE item_type = '" . self::get_item_type() . "' WHERE item_type = '" . self::get_item_type() . "'
AND item_parent_id = " . (int) self::get_item_parent_id($post) . ' AND item_parent_id = " . (int) self::get_item_parent_id($post) . '
AND unread = 1'; AND unread = 1
AND is_disabled = 0';
$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))
{ {

View File

@ -138,7 +138,8 @@ class phpbb_notification_type_post extends phpbb_notification_type_base
FROM ' . NOTIFICATIONS_TABLE . " FROM ' . NOTIFICATIONS_TABLE . "
WHERE item_type = '" . self::get_item_type() . "' WHERE item_type = '" . self::get_item_type() . "'
AND item_parent_id = " . (int) self::get_item_parent_id($post) . ' AND item_parent_id = " . (int) self::get_item_parent_id($post) . '
AND unread = 1'; AND unread = 1
AND is_disabled = 0';
$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))
{ {

View File

@ -132,7 +132,8 @@ class phpbb_notification_type_quote extends phpbb_notification_type_post
FROM ' . NOTIFICATIONS_TABLE . " FROM ' . NOTIFICATIONS_TABLE . "
WHERE item_type = '" . self::get_item_type() . "' WHERE item_type = '" . self::get_item_type() . "'
AND item_parent_id = " . (int) self::get_item_parent_id($post) . ' AND item_parent_id = " . (int) self::get_item_parent_id($post) . '
AND unread = 1'; AND unread = 1
AND is_disabled = 0';
$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))
{ {
@ -161,7 +162,8 @@ class phpbb_notification_type_quote extends phpbb_notification_type_post
$sql = 'SELECT user_id $sql = 'SELECT user_id
FROM ' . NOTIFICATIONS_TABLE . " FROM ' . NOTIFICATIONS_TABLE . "
WHERE item_type = '" . self::get_item_type() . "' WHERE item_type = '" . self::get_item_type() . "'
AND item_id = " . self::get_item_id($post); AND item_id = " . self::get_item_id($post) . '
AND is_disabled = 0';
$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))
{ {

View File

@ -1133,6 +1133,7 @@ function database_update_info()
'item_parent_id' => array('UINT', 0), 'item_parent_id' => array('UINT', 0),
'user_id' => array('UINT', 0), 'user_id' => array('UINT', 0),
'unread' => array('BOOL', 1), 'unread' => array('BOOL', 1),
'is_disabled' => array('BOOL', 0),
'time' => array('TIMESTAMP', 1), 'time' => array('TIMESTAMP', 1),
'data' => array('TEXT_UNI', ''), 'data' => array('TEXT_UNI', ''),
), ),
@ -1144,6 +1145,7 @@ function database_update_info()
'user_id' => array('INDEX', 'user_id'), 'user_id' => array('INDEX', 'user_id'),
'time' => array('INDEX', 'time'), 'time' => array('INDEX', 'time'),
'unread' => array('INDEX', 'unread'), 'unread' => array('INDEX', 'unread'),
'is_disabled' => array('INDEX', 'is_disabled'),
), ),
), ),
USER_NOTIFICATIONS_TABLE => array( USER_NOTIFICATIONS_TABLE => array(

View File

@ -626,6 +626,7 @@ CREATE TABLE phpbb_notifications (
item_parent_id INTEGER DEFAULT 0 NOT NULL, item_parent_id INTEGER DEFAULT 0 NOT NULL,
user_id INTEGER DEFAULT 0 NOT NULL, user_id INTEGER DEFAULT 0 NOT NULL,
unread INTEGER DEFAULT 1 NOT NULL, unread INTEGER DEFAULT 1 NOT NULL,
is_disabled INTEGER DEFAULT 0 NOT NULL,
time INTEGER DEFAULT 1 NOT NULL, time INTEGER DEFAULT 1 NOT NULL,
data BLOB SUB_TYPE TEXT CHARACTER SET UTF8 DEFAULT '' NOT NULL data BLOB SUB_TYPE TEXT CHARACTER SET UTF8 DEFAULT '' NOT NULL
);; );;
@ -638,6 +639,7 @@ CREATE INDEX phpbb_notifications_item_pid ON phpbb_notifications(item_parent_id)
CREATE INDEX phpbb_notifications_user_id ON phpbb_notifications(user_id);; CREATE INDEX phpbb_notifications_user_id ON phpbb_notifications(user_id);;
CREATE INDEX phpbb_notifications_time ON phpbb_notifications(time);; CREATE INDEX phpbb_notifications_time ON phpbb_notifications(time);;
CREATE INDEX phpbb_notifications_unread ON phpbb_notifications(unread);; CREATE INDEX phpbb_notifications_unread ON phpbb_notifications(unread);;
CREATE INDEX phpbb_notifications_is_disabled ON phpbb_notifications(is_disabled);;
CREATE GENERATOR phpbb_notifications_gen;; CREATE GENERATOR phpbb_notifications_gen;;
SET GENERATOR phpbb_notifications_gen TO 0;; SET GENERATOR phpbb_notifications_gen TO 0;;

View File

@ -761,6 +761,7 @@ CREATE TABLE [phpbb_notifications] (
[item_parent_id] [int] DEFAULT (0) NOT NULL , [item_parent_id] [int] DEFAULT (0) NOT NULL ,
[user_id] [int] DEFAULT (0) NOT NULL , [user_id] [int] DEFAULT (0) NOT NULL ,
[unread] [int] DEFAULT (1) NOT NULL , [unread] [int] DEFAULT (1) NOT NULL ,
[is_disabled] [int] DEFAULT (0) NOT NULL ,
[time] [int] DEFAULT (1) NOT NULL , [time] [int] DEFAULT (1) NOT NULL ,
[data] [varchar] (4000) DEFAULT ('') NOT NULL [data] [varchar] (4000) DEFAULT ('') NOT NULL
) ON [PRIMARY] ) ON [PRIMARY]
@ -791,6 +792,9 @@ GO
CREATE INDEX [unread] ON [phpbb_notifications]([unread]) ON [PRIMARY] CREATE INDEX [unread] ON [phpbb_notifications]([unread]) ON [PRIMARY]
GO GO
CREATE INDEX [is_disabled] ON [phpbb_notifications]([is_disabled]) ON [PRIMARY]
GO
/* /*
Table: 'phpbb_poll_options' Table: 'phpbb_poll_options'

View File

@ -438,6 +438,7 @@ CREATE TABLE phpbb_notifications (
item_parent_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, item_parent_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,
unread tinyint(1) UNSIGNED DEFAULT '1' NOT NULL, unread tinyint(1) UNSIGNED DEFAULT '1' NOT NULL,
is_disabled tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
time int(11) UNSIGNED DEFAULT '1' NOT NULL, time int(11) UNSIGNED DEFAULT '1' NOT NULL,
data blob NOT NULL, data blob NOT NULL,
PRIMARY KEY (notification_id), PRIMARY KEY (notification_id),
@ -446,7 +447,8 @@ CREATE TABLE phpbb_notifications (
KEY item_pid (item_parent_id), KEY item_pid (item_parent_id),
KEY user_id (user_id), KEY user_id (user_id),
KEY time (time), KEY time (time),
KEY unread (unread) KEY unread (unread),
KEY is_disabled (is_disabled)
); );

View File

@ -438,6 +438,7 @@ CREATE TABLE phpbb_notifications (
item_parent_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, item_parent_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,
unread tinyint(1) UNSIGNED DEFAULT '1' NOT NULL, unread tinyint(1) UNSIGNED DEFAULT '1' NOT NULL,
is_disabled tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
time int(11) UNSIGNED DEFAULT '1' NOT NULL, time int(11) UNSIGNED DEFAULT '1' NOT NULL,
data text NOT NULL, data text NOT NULL,
PRIMARY KEY (notification_id), PRIMARY KEY (notification_id),
@ -446,7 +447,8 @@ CREATE TABLE phpbb_notifications (
KEY item_pid (item_parent_id), KEY item_pid (item_parent_id),
KEY user_id (user_id), KEY user_id (user_id),
KEY time (time), KEY time (time),
KEY unread (unread) KEY unread (unread),
KEY is_disabled (is_disabled)
) CHARACTER SET `utf8` COLLATE `utf8_bin`; ) CHARACTER SET `utf8` COLLATE `utf8_bin`;

View File

@ -850,6 +850,7 @@ CREATE TABLE phpbb_notifications (
item_parent_id number(8) DEFAULT '0' NOT NULL, item_parent_id number(8) DEFAULT '0' NOT NULL,
user_id number(8) DEFAULT '0' NOT NULL, user_id number(8) DEFAULT '0' NOT NULL,
unread number(1) DEFAULT '1' NOT NULL, unread number(1) DEFAULT '1' NOT NULL,
is_disabled number(1) DEFAULT '0' NOT NULL,
time number(11) DEFAULT '1' NOT NULL, time number(11) DEFAULT '1' NOT NULL,
data clob DEFAULT '' , data clob DEFAULT '' ,
CONSTRAINT pk_phpbb_notifications PRIMARY KEY (notification_id) CONSTRAINT pk_phpbb_notifications PRIMARY KEY (notification_id)
@ -868,6 +869,8 @@ CREATE INDEX phpbb_notifications_time ON phpbb_notifications (time)
/ /
CREATE INDEX phpbb_notifications_unread ON phpbb_notifications (unread) CREATE INDEX phpbb_notifications_unread ON phpbb_notifications (unread)
/ /
CREATE INDEX phpbb_notifications_is_disabled ON phpbb_notifications (is_disabled)
/
CREATE SEQUENCE phpbb_notifications_seq CREATE SEQUENCE phpbb_notifications_seq
/ /

View File

@ -608,6 +608,7 @@ CREATE TABLE phpbb_notifications (
item_parent_id INT4 DEFAULT '0' NOT NULL CHECK (item_parent_id >= 0), item_parent_id INT4 DEFAULT '0' NOT NULL CHECK (item_parent_id >= 0),
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0), user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
unread INT2 DEFAULT '1' NOT NULL CHECK (unread >= 0), unread INT2 DEFAULT '1' NOT NULL CHECK (unread >= 0),
is_disabled INT2 DEFAULT '0' NOT NULL CHECK (is_disabled >= 0),
time INT4 DEFAULT '1' NOT NULL CHECK (time >= 0), time INT4 DEFAULT '1' NOT NULL CHECK (time >= 0),
data varchar(4000) DEFAULT '' NOT NULL, data varchar(4000) DEFAULT '' NOT NULL,
PRIMARY KEY (notification_id) PRIMARY KEY (notification_id)
@ -619,6 +620,7 @@ CREATE INDEX phpbb_notifications_item_pid ON phpbb_notifications (item_parent_id
CREATE INDEX phpbb_notifications_user_id ON phpbb_notifications (user_id); CREATE INDEX phpbb_notifications_user_id ON phpbb_notifications (user_id);
CREATE INDEX phpbb_notifications_time ON phpbb_notifications (time); CREATE INDEX phpbb_notifications_time ON phpbb_notifications (time);
CREATE INDEX phpbb_notifications_unread ON phpbb_notifications (unread); CREATE INDEX phpbb_notifications_unread ON phpbb_notifications (unread);
CREATE INDEX phpbb_notifications_is_disabled ON phpbb_notifications (is_disabled);
/* /*
Table: 'phpbb_poll_options' Table: 'phpbb_poll_options'

View File

@ -425,6 +425,7 @@ CREATE TABLE phpbb_notifications (
item_parent_id INTEGER UNSIGNED NOT NULL DEFAULT '0', item_parent_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0', user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
unread INTEGER UNSIGNED NOT NULL DEFAULT '1', unread INTEGER UNSIGNED NOT NULL DEFAULT '1',
is_disabled INTEGER UNSIGNED NOT NULL DEFAULT '0',
time INTEGER UNSIGNED NOT NULL DEFAULT '1', time INTEGER UNSIGNED NOT NULL DEFAULT '1',
data text(65535) NOT NULL DEFAULT '' data text(65535) NOT NULL DEFAULT ''
); );
@ -435,6 +436,7 @@ CREATE INDEX phpbb_notifications_item_pid ON phpbb_notifications (item_parent_id
CREATE INDEX phpbb_notifications_user_id ON phpbb_notifications (user_id); CREATE INDEX phpbb_notifications_user_id ON phpbb_notifications (user_id);
CREATE INDEX phpbb_notifications_time ON phpbb_notifications (time); CREATE INDEX phpbb_notifications_time ON phpbb_notifications (time);
CREATE INDEX phpbb_notifications_unread ON phpbb_notifications (unread); CREATE INDEX phpbb_notifications_unread ON phpbb_notifications (unread);
CREATE INDEX phpbb_notifications_is_disabled ON phpbb_notifications (is_disabled);
# Table: 'phpbb_poll_options' # Table: 'phpbb_poll_options'
CREATE TABLE phpbb_poll_options ( CREATE TABLE phpbb_poll_options (