aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorkasimi <mail@kasimi.net>2017-08-24 10:36:54 +0200
committerkasimi <mail@kasimi.net>2017-08-24 10:39:59 +0200
commitec2d983ab1864affc6fd5718fc2faede488301dd (patch)
tree5c9029ea1cd7bf21b446b6e255e62c33c450fcb0 /phpBB
parent1e605efaf126f5474bb1be99e7fdaed834ebb2a0 (diff)
downloadforums-ec2d983ab1864affc6fd5718fc2faede488301dd.tar
forums-ec2d983ab1864affc6fd5718fc2faede488301dd.tar.gz
forums-ec2d983ab1864affc6fd5718fc2faede488301dd.tar.bz2
forums-ec2d983ab1864affc6fd5718fc2faede488301dd.tar.xz
forums-ec2d983ab1864affc6fd5718fc2faede488301dd.zip
[ticket/15328] Disable checkbox if notification method isn't supported
PHPBB3-15328
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/includes/ucp/ucp_notifications.php8
-rw-r--r--phpBB/phpbb/notification/manager.php8
-rw-r--r--phpBB/phpbb/notification/method/email.php8
-rw-r--r--phpBB/phpbb/notification/method/jabber.php8
-rw-r--r--phpBB/phpbb/notification/method/messenger_base.php13
-rw-r--r--phpBB/styles/prosilver/template/ucp_notifications.html2
6 files changed, 36 insertions, 11 deletions
diff --git a/phpBB/includes/ucp/ucp_notifications.php b/phpBB/includes/ucp/ucp_notifications.php
index 51bd77bd4c..835db44b90 100644
--- a/phpBB/includes/ucp/ucp_notifications.php
+++ b/phpBB/includes/ucp/ucp_notifications.php
@@ -180,13 +180,13 @@ class ucp_notifications
'GROUP_NAME' => $user->lang($group),
));
- foreach ($subscription_types as $type => $data)
+ foreach ($subscription_types as $type => $type_data)
{
$template->assign_block_vars($block, array(
'TYPE' => $type,
- 'NAME' => $user->lang($data['lang']),
- 'EXPLAIN' => (isset($user->lang[$data['lang'] . '_EXPLAIN'])) ? $user->lang($data['lang'] . '_EXPLAIN') : '',
+ 'NAME' => $user->lang($type_data['lang']),
+ 'EXPLAIN' => (isset($user->lang[$type_data['lang'] . '_EXPLAIN'])) ? $user->lang($type_data['lang'] . '_EXPLAIN') : '',
));
foreach ($notification_methods as $method => $method_data)
@@ -196,6 +196,8 @@ class ucp_notifications
'NAME' => $user->lang($method_data['lang']),
+ 'AVAILABLE' => $method_data['method']->is_available($type_data['type']),
+
'SUBSCRIBED' => (isset($subscriptions[$type]) && in_array($method_data['id'], $subscriptions[$type])) ? true : false,
));
}
diff --git a/phpBB/phpbb/notification/manager.php b/phpBB/phpbb/notification/manager.php
index 6923d96392..1cd7e5bc9a 100644
--- a/phpBB/phpbb/notification/manager.php
+++ b/phpBB/phpbb/notification/manager.php
@@ -475,9 +475,10 @@ class manager
if ($type instanceof \phpbb\notification\type\type_interface && $type->is_available())
{
$options = array_merge(array(
- 'id' => $type->get_type(),
- 'lang' => 'NOTIFICATION_TYPE_' . strtoupper($type->get_type()),
- 'group' => 'NOTIFICATION_GROUP_MISCELLANEOUS',
+ 'type' => $type,
+ 'id' => $type->get_type(),
+ 'lang' => 'NOTIFICATION_TYPE_' . strtoupper($type->get_type()),
+ 'group' => 'NOTIFICATION_GROUP_MISCELLANEOUS',
), (($type::$notification_option !== false) ? $type::$notification_option : array()));
$this->subscription_types[$options['group']][$options['id']] = $options;
@@ -509,6 +510,7 @@ class manager
foreach ($this->get_available_subscription_methods() as $method_name => $method)
{
$subscription_methods[$method_name] = array(
+ 'method' => $method,
'id' => $method->get_type(),
'lang' => str_replace('.', '_', strtoupper($method->get_type())),
);
diff --git a/phpBB/phpbb/notification/method/email.php b/phpBB/phpbb/notification/method/email.php
index 21a6559012..b330aa9da8 100644
--- a/phpBB/phpbb/notification/method/email.php
+++ b/phpBB/phpbb/notification/method/email.php
@@ -56,10 +56,14 @@ class email extends \phpbb\notification\method\messenger_base
/**
* Is this method available for the user?
* This is checked on the notifications options
+ *
+ * @param \phpbb\notification\type\type_interface $notification_type An optional instance of a notification type. If provided, this
+ * method additionally checks if the type provides an email template.
+ * @return bool
*/
- public function is_available()
+ public function is_available(\phpbb\notification\type\type_interface $notification_type = null)
{
- return $this->config['email_enable'] && $this->user->data['user_email'];
+ return parent::is_available($notification_type) && $this->config['email_enable'] && $this->user->data['user_email'];
}
/**
diff --git a/phpBB/phpbb/notification/method/jabber.php b/phpBB/phpbb/notification/method/jabber.php
index 509c6b432c..4b461a5da3 100644
--- a/phpBB/phpbb/notification/method/jabber.php
+++ b/phpBB/phpbb/notification/method/jabber.php
@@ -56,10 +56,14 @@ class jabber extends \phpbb\notification\method\messenger_base
/**
* Is this method available for the user?
* This is checked on the notifications options
+ *
+ * @param \phpbb\notification\type\type_interface $notification_type An optional instance of a notification type. If provided, this
+ * method additionally checks if the type provides an email template.
+ * @return bool
*/
- public function is_available()
+ public function is_available(\phpbb\notification\type\type_interface $notification_type = null)
{
- return ($this->global_available() && $this->user->data['user_jabber']);
+ return parent::is_available($notification_type) && $this->global_available() && $this->user->data['user_jabber'];
}
/**
diff --git a/phpBB/phpbb/notification/method/messenger_base.php b/phpBB/phpbb/notification/method/messenger_base.php
index 1f5525accc..7c99085a95 100644
--- a/phpBB/phpbb/notification/method/messenger_base.php
+++ b/phpBB/phpbb/notification/method/messenger_base.php
@@ -43,6 +43,19 @@ abstract class messenger_base extends \phpbb\notification\method\base
}
/**
+ * Is this method available for the user?
+ * This is checked on the notifications options
+ *
+ * @param \phpbb\notification\type\type_interface $notification_type An optional instance of a notification type. This method returns false
+ * only if the type is provided and if it doesn't provide an email template.
+ * @return bool
+ */
+ public function is_available(\phpbb\notification\type\type_interface $notification_type = null)
+ {
+ return $notification_type === null || $notification_type->get_email_template() !== false;
+ }
+
+ /**
* Notify using phpBB messenger
*
* @param int $notify_method Notify method for messenger (e.g. NOTIFY_IM)
diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html
index 32efae17fd..55e30477d2 100644
--- a/phpBB/styles/prosilver/template/ucp_notifications.html
+++ b/phpBB/styles/prosilver/template/ucp_notifications.html
@@ -31,7 +31,7 @@
<!-- IF notification_types.EXPLAIN --><br />&nbsp; &nbsp;{notification_types.EXPLAIN}<!-- ENDIF -->
</td>
<!-- BEGIN notification_methods -->
- <td class="mark"><input type="checkbox" name="{notification_types.TYPE}_{notification_methods.METHOD}"<!-- IF notification_methods.SUBSCRIBED --> checked="checked"<!-- ENDIF --> /></td>
+ <td class="mark"><input type="checkbox" name="{notification_types.TYPE}_{notification_types.notification_methods.METHOD}"<!-- IF notification_types.notification_methods.AVAILABLE and notification_types.notification_methods.SUBSCRIBED --> checked="checked"<!-- ENDIF --><!-- IF not notification_types.notification_methods.AVAILABLE --> disabled="disabled"<!-- ENDIF --> /></td>
<!-- END notification_methods -->
</tr>
<!-- ENDIF -->