diff options
| author | Nathaniel Guse <nathaniel.guse@gmail.com> | 2012-09-27 10:37:37 -0500 |
|---|---|---|
| committer | Nathaniel Guse <nathaniel.guse@gmail.com> | 2012-09-27 10:37:37 -0500 |
| commit | ae91a0a846828b44a53c2a7cd724e0ba062b0f3e (patch) | |
| tree | 1bcd36a425c6cc11cc924b9b53831f6edefc09e9 /phpBB | |
| parent | 544fbe35f4b5cd12e4556c9c300f471a4092dc41 (diff) | |
| download | forums-ae91a0a846828b44a53c2a7cd724e0ba062b0f3e.tar forums-ae91a0a846828b44a53c2a7cd724e0ba062b0f3e.tar.gz forums-ae91a0a846828b44a53c2a7cd724e0ba062b0f3e.tar.bz2 forums-ae91a0a846828b44a53c2a7cd724e0ba062b0f3e.tar.xz forums-ae91a0a846828b44a53c2a7cd724e0ba062b0f3e.zip | |
[ticket/11103] Allow grouping of multiple types in ucp notification options
Ability to hide notification types from UCP Notification options
(if users do not have permission to use the notification type, or for
whatever reason they should not see it)
PHPBB3-11103
Diffstat (limited to 'phpBB')
| -rw-r--r-- | phpBB/includes/notifications/service.php | 15 | ||||
| -rw-r--r-- | phpBB/includes/notifications/type/approve_post.php | 11 | ||||
| -rw-r--r-- | phpBB/includes/notifications/type/approve_topic.php | 11 | ||||
| -rw-r--r-- | phpBB/includes/notifications/type/base.php | 16 | ||||
| -rw-r--r-- | phpBB/includes/notifications/type/disapprove_post.php | 11 | ||||
| -rw-r--r-- | phpBB/includes/notifications/type/disapprove_topic.php | 11 | ||||
| -rw-r--r-- | phpBB/includes/notifications/type/interface.php | 2 | ||||
| -rw-r--r-- | phpBB/includes/notifications/type/post_in_queue.php | 41 | ||||
| -rw-r--r-- | phpBB/includes/notifications/type/topic_in_queue.php | 43 | ||||
| -rw-r--r-- | phpBB/includes/ucp/info/ucp_notifications.php | 2 | ||||
| -rw-r--r-- | phpBB/includes/ucp/ucp_notifications.php | 4 | ||||
| -rw-r--r-- | phpBB/styles/prosilver/template/ucp_notifications.html | 6 |
12 files changed, 153 insertions, 20 deletions
diff --git a/phpBB/includes/notifications/service.php b/phpBB/includes/notifications/service.php index 3160864f37..174b73f9a5 100644 --- a/phpBB/includes/notifications/service.php +++ b/phpBB/includes/notifications/service.php @@ -457,9 +457,16 @@ class phpbb_notifications_service include($file); } - if (method_exists($class, 'get_item_type')) + if ($class::is_available($this->phpbb_container) && method_exists($class, 'get_item_type')) { - $subscription_types[] = $class::get_item_type(); + if ($class::$notification_option === false) + { + $subscription_types[$class::get_item_type()] = $class::get_item_type(); + } + else + { + $subscription_types[$class::$notification_option['id']] = $class::$notification_option; + } } } @@ -548,6 +555,8 @@ class phpbb_notifications_service */ public function load_users($user_ids) { + $user_ids[] = ANONYMOUS; + // Load the users $user_ids = array_unique($user_ids); @@ -577,7 +586,7 @@ class phpbb_notifications_service */ public function get_user($user_id) { - return $this->users[$user_id]; + return (isset($this->users[$user_id])) ? $this->users[$user_id] : $this->users[ANONYMOUS]; } /** diff --git a/phpBB/includes/notifications/type/approve_post.php b/phpBB/includes/notifications/type/approve_post.php index b5e5cfd337..a3a52b8780 100644 --- a/phpBB/includes/notifications/type/approve_post.php +++ b/phpBB/includes/notifications/type/approve_post.php @@ -40,6 +40,17 @@ class phpbb_notifications_type_approve_post extends phpbb_notifications_type_pos protected $language_key = 'NOTIFICATION_POST_APPROVED'; /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id' and 'lang') + */ + public static $notification_option = array( + 'id' => 'moderation_queue', + 'lang' => 'NOTIFICATION_TYPE_MODERATION_QUEUE', + ); + + /** * Get the type of notification this is * phpbb_notifications_type_ */ diff --git a/phpBB/includes/notifications/type/approve_topic.php b/phpBB/includes/notifications/type/approve_topic.php index 3ba871599e..ba7227c671 100644 --- a/phpBB/includes/notifications/type/approve_topic.php +++ b/phpBB/includes/notifications/type/approve_topic.php @@ -40,6 +40,17 @@ class phpbb_notifications_type_approve_topic extends phpbb_notifications_type_to protected $language_key = 'NOTIFICATION_TOPIC_APPROVED'; /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id' and 'lang') + */ + public static $notification_option = array( + 'id' => 'moderation_queue', + 'lang' => 'NOTIFICATION_TYPE_MODERATION_QUEUE', + ); + + /** * Get the type of notification this is * phpbb_notifications_type_ */ diff --git a/phpBB/includes/notifications/type/base.php b/phpBB/includes/notifications/type/base.php index 710f1f7c6e..0da4dc8d93 100644 --- a/phpBB/includes/notifications/type/base.php +++ b/phpBB/includes/notifications/type/base.php @@ -37,6 +37,14 @@ abstract class phpbb_notifications_type_base implements phpbb_notifications_type protected $users = array(); /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id' and 'lang') + */ + public static $notification_option = false; + + /** * Indentification data * item_type * item_id @@ -237,6 +245,14 @@ abstract class phpbb_notifications_type_base implements phpbb_notifications_type } /** + * Is available (fall-back) + */ + public static function is_available(ContainerBuilder $phpbb_container) + { + return true; + } + + /** * -------------- Helper functions ------------------- */ diff --git a/phpBB/includes/notifications/type/disapprove_post.php b/phpBB/includes/notifications/type/disapprove_post.php index e0b7bfb178..6911af5b08 100644 --- a/phpBB/includes/notifications/type/disapprove_post.php +++ b/phpBB/includes/notifications/type/disapprove_post.php @@ -40,6 +40,17 @@ class phpbb_notifications_type_disapprove_post extends phpbb_notifications_type_ protected $language_key = 'NOTIFICATION_POST_DISAPPROVED'; /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id' and 'lang') + */ + public static $notification_option = array( + 'id' => 'moderation_queue', + 'lang' => 'NOTIFICATION_TYPE_MODERATION_QUEUE', + ); + + /** * Get the type of notification this is * phpbb_notifications_type_ */ diff --git a/phpBB/includes/notifications/type/disapprove_topic.php b/phpBB/includes/notifications/type/disapprove_topic.php index 7ad4c4edb8..dab5ec1b02 100644 --- a/phpBB/includes/notifications/type/disapprove_topic.php +++ b/phpBB/includes/notifications/type/disapprove_topic.php @@ -40,6 +40,17 @@ class phpbb_notifications_type_disapprove_topic extends phpbb_notifications_type protected $language_key = 'NOTIFICATION_TOPIC_DISAPPROVED'; /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id' and 'lang') + */ + public static $notification_option = array( + 'id' => 'moderation_queue', + 'lang' => 'NOTIFICATION_TYPE_MODERATION_QUEUE', + ); + + /** * Get the type of notification this is * phpbb_notifications_type_ */ diff --git a/phpBB/includes/notifications/type/interface.php b/phpBB/includes/notifications/type/interface.php index de08576a38..c85d7441f6 100644 --- a/phpBB/includes/notifications/type/interface.php +++ b/phpBB/includes/notifications/type/interface.php @@ -25,6 +25,8 @@ interface phpbb_notifications_type_interface public static function get_item_id($type_data); + public static function is_available(ContainerBuilder $phpbb_container); + public static function find_users_for_notification(ContainerBuilder $phpbb_container, $type_data); public function get_title(); diff --git a/phpBB/includes/notifications/type/post_in_queue.php b/phpBB/includes/notifications/type/post_in_queue.php index cd3a452856..0043a38944 100644 --- a/phpBB/includes/notifications/type/post_in_queue.php +++ b/phpBB/includes/notifications/type/post_in_queue.php @@ -40,6 +40,17 @@ class phpbb_notifications_type_post_in_queue extends phpbb_notifications_type_po protected $language_key = 'NOTIFICATION_POST_IN_QUEUE'; /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id' and 'lang') + */ + public static $notification_option = array( + 'id' => 'needs_approval', + 'lang' => 'NOTIFICATION_TYPE_IN_MODERATION_QUEUE', + ); + + /** * Get the type of notification this is * phpbb_notifications_type_ */ @@ -49,6 +60,16 @@ class phpbb_notifications_type_post_in_queue extends phpbb_notifications_type_po } /** + * Is available + */ + public static function is_available(ContainerBuilder $phpbb_container) + { + $m_approve = $phpbb_container->get('auth')->acl_getf('m_approve', true); + + return (!empty($m_approve)); + } + + /** * Find the users who want to receive notifications * * @param ContainerBuilder $phpbb_container @@ -58,9 +79,8 @@ class phpbb_notifications_type_post_in_queue extends phpbb_notifications_type_po */ public static function find_users_for_notification(ContainerBuilder $phpbb_container, $post) { - /* todo - * find what type of notification they'd like to receive - */ + $db = $phpbb_container->get('dbal.conn'); + $auth_approve = $phpbb_container->get('auth')->acl_get_list(false, 'm_approve', $post['forum_id']); if (empty($auth_approve)) @@ -70,10 +90,21 @@ class phpbb_notifications_type_post_in_queue extends phpbb_notifications_type_po $notify_users = array(); - foreach ($auth_approve[$post['forum_id']]['m_approve'] as $user_id) + $sql = 'SELECT * + FROM ' . USER_NOTIFICATIONS_TABLE . " + WHERE item_type = 'needs_approval' + AND " . $db->sql_in_set('user_id', $auth_approve[$topic['forum_id']]['m_approve']); + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) { - $notify_users[$user_id] = array(''); + if (!isset($rowset[$row['user_id']])) + { + $notify_users[$row['user_id']] = array(); + } + + $notify_users[$row['user_id']][] = $row['method']; } + $db->sql_freeresult($result); return $notify_users; } diff --git a/phpBB/includes/notifications/type/topic_in_queue.php b/phpBB/includes/notifications/type/topic_in_queue.php index 583ab5d8b3..dda647d18e 100644 --- a/phpBB/includes/notifications/type/topic_in_queue.php +++ b/phpBB/includes/notifications/type/topic_in_queue.php @@ -40,6 +40,27 @@ class phpbb_notifications_type_topic_in_queue extends phpbb_notifications_type_t protected $language_key = 'NOTIFICATION_TOPIC_IN_QUEUE'; /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id' and 'lang') + */ + public static $notification_option = array( + 'id' => 'needs_approval', + 'lang' => 'NOTIFICATION_TYPE_IN_MODERATION_QUEUE', + ); + + /** + * Is available + */ + public static function is_available(ContainerBuilder $phpbb_container) + { + $m_approve = $phpbb_container->get('auth')->acl_getf('m_approve', true); + + return (!empty($m_approve)); + } + + /** * Get the type of notification this is * phpbb_notifications_type_ */ @@ -58,9 +79,8 @@ class phpbb_notifications_type_topic_in_queue extends phpbb_notifications_type_t */ public static function find_users_for_notification(ContainerBuilder $phpbb_container, $topic) { - /* todo - * find what type of notification they'd like to receive - */ + $db = $phpbb_container->get('dbal.conn'); + $auth_approve = $phpbb_container->get('auth')->acl_get_list(false, 'm_approve', $topic['forum_id']); if (empty($auth_approve)) @@ -70,10 +90,21 @@ class phpbb_notifications_type_topic_in_queue extends phpbb_notifications_type_t $notify_users = array(); - foreach ($auth_approve[$topic['forum_id']]['m_approve'] as $user_id) + $sql = 'SELECT * + FROM ' . USER_NOTIFICATIONS_TABLE . " + WHERE item_type = 'needs_approval' + AND " . $db->sql_in_set('user_id', $auth_approve[$topic['forum_id']]['m_approve']); + $result = $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) { - $notify_users[$user_id] = array(''); + if (!isset($rowset[$row['user_id']])) + { + $notify_users[$row['user_id']] = array(); + } + + $notify_users[$row['user_id']][] = $row['method']; } + $db->sql_freeresult($result); return $notify_users; } @@ -88,7 +119,7 @@ class phpbb_notifications_type_topic_in_queue extends phpbb_notifications_type_t */ public function create_insert_array($topic) { - $data = parent::create_insert_array($post); + $data = parent::create_insert_array($topic); $this->time = $data['time'] = time(); diff --git a/phpBB/includes/ucp/info/ucp_notifications.php b/phpBB/includes/ucp/info/ucp_notifications.php index f1e6bf65b8..4bc9ae2cea 100644 --- a/phpBB/includes/ucp/info/ucp_notifications.php +++ b/phpBB/includes/ucp/info/ucp_notifications.php @@ -16,7 +16,7 @@ class ucp_notifications_info { return array( 'filename' => 'ucp_notifications', - 'title' => 'UCP_NOTIFICATIONS', + 'title' => 'UCP_NOTIFICATION_OPTIONS', 'version' => '1.0.0', 'modes' => array( 'notification_options' => array('title' => 'UCP_NOTIFICATION_OPTIONS', 'auth' => '', 'cat' => array('UCP_MAIN')), diff --git a/phpBB/includes/ucp/ucp_notifications.php b/phpBB/includes/ucp/ucp_notifications.php index 0a01cd1cde..86052ada14 100644 --- a/phpBB/includes/ucp/ucp_notifications.php +++ b/phpBB/includes/ucp/ucp_notifications.php @@ -76,12 +76,12 @@ class ucp_notifications */ public function output_notification_types($block = 'notification_types', phpbb_notifications_service $phpbb_notifications, phpbb_template $template, phpbb_user $user) { - foreach($phpbb_notifications->get_subscription_types() as $type) + foreach($phpbb_notifications->get_subscription_types() as $type => $data) { $template->assign_block_vars($block, array( 'TYPE' => $type, - 'NAME' => $user->lang('NOTIFICATION_TYPE_' . strtoupper($type)), + 'NAME' => (isset($data['lang'])) ? $user->lang($data['lang']) : $user->lang('NOTIFICATION_TYPE_' . strtoupper($type)), )); $this->output_notification_methods($block . '.notification_methods', $phpbb_notifications, $template, $user); diff --git a/phpBB/styles/prosilver/template/ucp_notifications.html b/phpBB/styles/prosilver/template/ucp_notifications.html index 7ded4d01fe..0479e66efe 100644 --- a/phpBB/styles/prosilver/template/ucp_notifications.html +++ b/phpBB/styles/prosilver/template/ucp_notifications.html @@ -6,7 +6,7 @@ <div class="inner"> <ul class="topiclist"> <li class="header"> - <dl class="icon"> + <dl> <dt>{L_NOTIFICATION_TYPE}</dt> <!-- BEGIN notification_methods --> <dd class="mark">{notification_methods.NAME}</dd> @@ -15,11 +15,11 @@ </dl> </li> </ul> - <ul class="topiclist cplist"> + <ul class="topiclist cplist"> <!-- BEGIN notification_types --> <li class="row<!-- IF notification_types.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->"> - <dl class="icon"> + <dl> <dt> {notification_types.NAME} </dt> |
