From cb97c26e884ba7c78afad01e6c05d32b9df6fde5 Mon Sep 17 00:00:00 2001 From: Tristan Darricau Date: Wed, 14 May 2014 02:06:48 +0200 Subject: [PATCH] [ticket/12435] purge_notifications() fails for unused notifications https://tracker.phpbb.com/browse/PHPBB3-12435 PHPBB3-12435 --- phpBB/phpbb/notification/manager.php | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/phpBB/phpbb/notification/manager.php b/phpBB/phpbb/notification/manager.php index 09d9677ccd..33f0ae986e 100644 --- a/phpBB/phpbb/notification/manager.php +++ b/phpBB/phpbb/notification/manager.php @@ -760,17 +760,28 @@ class manager */ public function purge_notifications($notification_type_name) { - $notification_type_id = $this->get_notification_type_id($notification_type_name); + // If the notification was never used, it was never put in the database and so its id was never cached. + // If this notification was added by an extension, this one will call purge_notification in the purge step, + // and get_notification_type_id() will throw an exception. + // The notification was never used, thus we can silently drop the exception. + try + { + $notification_type_id = $this->get_notification_type_id($notification_type_name); - $sql = 'DELETE FROM ' . $this->notifications_table . ' - WHERE notification_type_id = ' . (int) $notification_type_id; - $this->db->sql_query($sql); + $sql = 'DELETE FROM ' . $this->notifications_table . ' + WHERE notification_type_id = ' . (int) $notification_type_id; + $this->db->sql_query($sql); - $sql = 'DELETE FROM ' . $this->notification_types_table . ' - WHERE notification_type_id = ' . (int) $notification_type_id; - $this->db->sql_query($sql); + $sql = 'DELETE FROM ' . $this->notification_types_table . ' + WHERE notification_type_id = ' . (int) $notification_type_id; + $this->db->sql_query($sql); - $this->cache->destroy('notification_type_ids'); + $this->cache->destroy('notification_type_ids'); + } + catch (\phpbb\notification\exception $e) + { + // Continue + } } /**