diff --git a/phpBB/includes/ucp/ucp_notifications.php b/phpBB/includes/ucp/ucp_notifications.php
index b0eeb915ec..7a46d3e5aa 100644
--- a/phpBB/includes/ucp/ucp_notifications.php
+++ b/phpBB/includes/ucp/ucp_notifications.php
@@ -62,6 +62,7 @@ class ucp_notifications
foreach ($notification_methods as $method => $method_data)
{
$is_set_notify = $request->is_set_post(str_replace('.', '_', $type . '_' . $method_data['id']));
+ $is_available = $method_data['method']->is_available($type_data['type']);
/**
* Event to perform additional actions before ucp_notifications is submitted
@@ -70,21 +71,26 @@ class ucp_notifications
* @var array type_data The notification type data
* @var array method_data The notification method data
* @var bool is_set_notify The notification is set or not
+ * @var bool is_available The notification is available or not
+ * @var array subscriptions The subscriptions data
*
* @since 3.2.10-RC1
+ * @since 3.3.1-RC1
*/
$vars = [
'type_data',
'method_data',
'is_set_notify',
+ 'is_available',
+ 'subscriptions',
];
extract($phpbb_dispatcher->trigger_event('core.ucp_notifications_submit_notification_is_set', compact($vars)));
- if ($is_set_notify && (!isset($subscriptions[$type]) || !in_array($method_data['id'], $subscriptions[$type])))
+ if ($is_set_notify && $is_available && (!isset($subscriptions[$type]) || !in_array($method_data['id'], $subscriptions[$type])))
{
$phpbb_notifications->add_subscription($type, 0, $method_data['id']);
}
- else if (!$is_set_notify && isset($subscriptions[$type]) && in_array($method_data['id'], $subscriptions[$type]))
+ else if ((!$is_set_notify || !$is_available) && isset($subscriptions[$type]) && in_array($method_data['id'], $subscriptions[$type]))
{
$phpbb_notifications->delete_subscription($type, 0, $method_data['id']);
}
@@ -225,13 +231,16 @@ class ucp_notifications
* @var array type_data The notification type data
* @var array method_data The notification method data
* @var array tpl_ary The template variables
+ * @var array subscriptions The subscriptions data
*
* @since 3.2.10-RC1
+ * @since 3.3.1-RC1
*/
$vars = [
'type_data',
'method_data',
'tpl_ary',
+ 'subscriptions',
];
extract($phpbb_dispatcher->trigger_event('core.ucp_notifications_output_notification_types_modify_template_vars', compact($vars)));
diff --git a/phpBB/phpbb/notification/manager.php b/phpBB/phpbb/notification/manager.php
index 2d6d081d33..ace08e6cf6 100644
--- a/phpBB/phpbb/notification/manager.php
+++ b/phpBB/phpbb/notification/manager.php
@@ -350,6 +350,7 @@ class manager
* @var array notify_users User list to notify
*
* @since 3.2.10-RC1
+ * @since 3.3.1-RC1
*/
$vars = [
'notification_type_name',
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index 8be157c933..7ebe6d431a 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -31,7 +31,7 @@
{notification_types.EXPLAIN}
-