From 4392054044d3bf63481098cca9e27e17ae306fa0 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Sat, 13 Oct 2012 17:06:01 -0500 Subject: [PATCH 1/4] [ticket/11103] Reported pm notifications require m_report permissions PHPBB3-11103 --- phpBB/includes/notification/type/report_pm.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/phpBB/includes/notification/type/report_pm.php b/phpBB/includes/notification/type/report_pm.php index db0ad6ac6e..3619c5510c 100644 --- a/phpBB/includes/notification/type/report_pm.php +++ b/phpBB/includes/notification/type/report_pm.php @@ -74,6 +74,17 @@ class phpbb_notification_type_report_pm extends phpbb_notification_type_pm return (int) $pm['report_id']; } + /** + * Is available + */ + public function is_available() + { + $m_approve = $this->auth->acl_getf($this->permission, true); + + return (!empty($m_approve)); + } + + /** * Find the users who want to receive notifications * (copied from post_in_queue) From 397d039ce5c7b61145b4ff8daa41e511a75122c6 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Sat, 13 Oct 2012 17:37:59 -0500 Subject: [PATCH 2/4] [ticket/11103] Allow global moderators to receive moderator notifications PHPBB3-11103 --- phpBB/includes/notification/type/post_in_queue.php | 5 ++++- phpBB/includes/notification/type/topic_in_queue.php | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/phpBB/includes/notification/type/post_in_queue.php b/phpBB/includes/notification/type/post_in_queue.php index f00a83de36..4f92eb157a 100644 --- a/phpBB/includes/notification/type/post_in_queue.php +++ b/phpBB/includes/notification/type/post_in_queue.php @@ -87,13 +87,16 @@ class phpbb_notification_type_post_in_queue extends phpbb_notification_type_post 'ignore_users' => array(), ), $options); - $auth_approve = $this->auth->acl_get_list(false, $this->permission, $post['forum_id']); + // 0 is for global + $auth_approve = $this->auth->acl_get_list(false, $this->permission, array($post['forum_id'], 0)); if (empty($auth_approve)) { return array(); } + $auth_approve[$post['forum_id']] = array_unique(array_merge($auth_approve[$post['forum_id']], $auth_approve[0])); + $notify_users = array(); $sql = 'SELECT * diff --git a/phpBB/includes/notification/type/topic_in_queue.php b/phpBB/includes/notification/type/topic_in_queue.php index 176ec0b901..96f09cef9e 100644 --- a/phpBB/includes/notification/type/topic_in_queue.php +++ b/phpBB/includes/notification/type/topic_in_queue.php @@ -80,13 +80,16 @@ class phpbb_notification_type_topic_in_queue extends phpbb_notification_type_top 'ignore_users' => array(), ), $options); - $auth_approve = $this->auth->acl_get_list(false, 'm_approve', $topic['forum_id']); + // 0 is for global + $auth_approve = $this->auth->acl_get_list(false, 'm_approve', array($topic['forum_id'], 0)); if (empty($auth_approve)) { return array(); } + $auth_approve[$topic['forum_id']] = array_unique(array_merge($auth_approve[$topic['forum_id']], $auth_approve[0])); + $notify_users = array(); $sql = 'SELECT * From c60b15294a72d5a2be8e7d23fd1b4052ec944ec8 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Sat, 13 Oct 2012 17:49:12 -0500 Subject: [PATCH 3/4] [ticket/11103] Global moderators with m_approve permission never need approval They do not need to receive notifications if their post/topic is approved or disapproved PHPBB3-11103 --- phpBB/includes/notification/type/approve_post.php | 8 ++++++++ phpBB/includes/notification/type/approve_topic.php | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/phpBB/includes/notification/type/approve_post.php b/phpBB/includes/notification/type/approve_post.php index 9275ec2f6d..dbd2e4417f 100644 --- a/phpBB/includes/notification/type/approve_post.php +++ b/phpBB/includes/notification/type/approve_post.php @@ -57,6 +57,14 @@ class phpbb_notification_type_approve_post extends phpbb_notification_type_post return 'approve_post'; } + /** + * Is available + */ + public function is_available() + { + return !$this->auth->acl_get('m_approve'); + } + /** * Find the users who want to receive notifications * diff --git a/phpBB/includes/notification/type/approve_topic.php b/phpBB/includes/notification/type/approve_topic.php index 325ccd0eab..3608bfba85 100644 --- a/phpBB/includes/notification/type/approve_topic.php +++ b/phpBB/includes/notification/type/approve_topic.php @@ -57,6 +57,14 @@ class phpbb_notification_type_approve_topic extends phpbb_notification_type_topi return 'approve_topic'; } + /** + * Is available + */ + public function is_available() + { + return !$this->auth->acl_get('m_approve'); + } + /** * Find the users who want to receive notifications * From 39fd31d3aedd5d583041b1ee76bed3e7d0edcf36 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Sat, 13 Oct 2012 18:12:33 -0500 Subject: [PATCH 4/4] [ticket/11103] Trying to fix an odd issue with unread status on approved posts From a recent change, when your posts/topics are approved, they will be marked read automatically because you've read the topic/post already. To change that I've forced the notification to be marked unread and attempted to reset the read status on the post/topic to be unread before the post that was approved. This does not seem to work so well and I don't know of any way this can really be properly fixed, so the code I was working on I've commented out. For now, users will just need to manually mark these types of notifications as read. I cannot think of a way for this to be fixed without running two additional queries on every viewtopic. PHPBB3-11103 --- .../notification/type/approve_post.php | 32 +++++++++++++++++++ .../notification/type/approve_topic.php | 30 +++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/phpBB/includes/notification/type/approve_post.php b/phpBB/includes/notification/type/approve_post.php index dbd2e4417f..68e8352a13 100644 --- a/phpBB/includes/notification/type/approve_post.php +++ b/phpBB/includes/notification/type/approve_post.php @@ -114,6 +114,38 @@ class phpbb_notification_type_approve_post extends phpbb_notification_type_post return $notify_users; } + /** + * Pre create insert array function + * This allows you to perform certain actions, like run a query + * and load data, before create_insert_array() is run. The data + * returned from this function will be sent to create_insert_array(). + * + * @param array $post Post data from submit_post + * @param array $notify_users Notify users list + * Formated from find_users_for_notification() + * @return array Whatever you want to send to create_insert_array(). + */ + public function pre_create_insert_array($post, $notify_users) + { + /*if (!sizeof($notify_users)) + { + return array(); + } + + // Mark the topic unread before the post + $sql = 'UPDATE ' . TOPICS_TRACK_TABLE . ' + SET mark_time = ' . (int) ($post['post_time'] - 1) . ' + WHERE topic_id = ' . (int) $post['topic_id'] . ' + AND ' . $this->db->sql_in_set('user_id', array_keys($notify_users)); + $this->db->sql_query($sql);*/ + + // In the parent class, this is used to check if the post is already + // read by a user and marks the notification read if it was marked read. + // Returning an empty array in effect, forces it to be marked as unread + // (and also saves a query) + return array(); + } + /** * Function for preparing the data for insertion in an SQL query * (The service handles insertion) diff --git a/phpBB/includes/notification/type/approve_topic.php b/phpBB/includes/notification/type/approve_topic.php index 3608bfba85..f3a94e44b8 100644 --- a/phpBB/includes/notification/type/approve_topic.php +++ b/phpBB/includes/notification/type/approve_topic.php @@ -114,6 +114,36 @@ class phpbb_notification_type_approve_topic extends phpbb_notification_type_topi return $notify_users; } + /** + * Pre create insert array function + * This allows you to perform certain actions, like run a query + * and load data, before create_insert_array() is run. The data + * returned from this function will be sent to create_insert_array(). + * + * @param array $post Post data from submit_post + * @param array $notify_users Notify users list + * Formated from find_users_for_notification() + * @return array Whatever you want to send to create_insert_array(). + */ + public function pre_create_insert_array($post, $notify_users) + { + /*if (!sizeof($notify_users)) + { + return array(); + } + + // Mark the topic unread + $sql = 'DELETE FROM ' . TOPICS_TRACK_TABLE . ' + WHERE topic_id = ' . (int) $post['topic_id'] . ' + AND ' . $this->db->sql_in_set('user_id', array_keys($notify_users)); + $this->db->sql_query($sql*/ + + // In the parent class, this is used to check if the post is already + // read by a user and marks the notification read if it was marked read. + // Returning an empty array in effect, forces it to be marked as unread + return array(); + } + /** * Function for preparing the data for insertion in an SQL query * (The service handles insertion)