diff --git a/phpBB/phpbb/notification/method/webpush.php b/phpBB/phpbb/notification/method/webpush.php index 5ec857af05..5091c2823d 100644 --- a/phpBB/phpbb/notification/method/webpush.php +++ b/phpBB/phpbb/notification/method/webpush.php @@ -169,15 +169,7 @@ class webpush extends messenger_base $this->user_loader->load_users($notify_users, array(USER_IGNORE)); // Get subscriptions for users - $user_subscription_map = []; - $sql = 'SELECT subscription_id, user_id, endpoint, p256dh, auth - FROM ' . $this->push_subscriptions_table . ' - WHERE ' . $this->db->sql_in_set('user_id', $notify_users); - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - $user_subscription_map[$row['user_id']][] = $row; - } + $user_subscription_map = $this->get_user_subscription_map($notify_users); $auth = [ 'VAPID' => [ @@ -316,4 +308,29 @@ class webpush extends messenger_base return array_intersect_key($data, $row); } + + /** + * Get subscriptions for notify users + * + * @param array $notify_users Users to notify + * + * @return array Subscription map + */ + protected function get_user_subscription_map(array $notify_users): array + { + // Get subscriptions for users + $user_subscription_map = []; + + $sql = 'SELECT subscription_id, user_id, endpoint, p256dh, auth + FROM ' . $this->push_subscriptions_table . ' + WHERE ' . $this->db->sql_in_set('user_id', $notify_users); + $result = $this->db->sql_query($sql); + while ($row = $this->db->sql_fetchrow($result)) + { + $user_subscription_map[$row['user_id']][] = $row; + } + $this->db->sql_freeresult($result); + + return $user_subscription_map; + } } diff --git a/tests/notification/notification_method_webpush_test.php b/tests/notification/notification_method_webpush_test.php index ce79f57838..888ad11a3b 100644 --- a/tests/notification/notification_method_webpush_test.php +++ b/tests/notification/notification_method_webpush_test.php @@ -338,7 +338,14 @@ class notification_method_webpush_test extends phpbb_tests_notification_base $subscription_info = []; foreach ($expected_users as $user_id => $user_data) { - $subscription_info[$user_id] = $this->create_subscription_for_user($user_id); + $subscription_info[$user_id][] = $this->create_subscription_for_user($user_id); + } + + // Create second subscription for first user ID passed + if (count($expected_users)) + { + $first_user_id = array_key_first($expected_users); + $subscription_info[$first_user_id][] = $this->create_subscription_for_user($first_user_id); } $post_data = array_merge([ @@ -361,7 +368,7 @@ class notification_method_webpush_test extends phpbb_tests_notification_base foreach ($expected_users as $user_id => $data) { - $messages = $this->get_messages_for_subscription($subscription_info[$user_id]['clientHash']); + $messages = $this->get_messages_for_subscription($subscription_info[$user_id][0]['clientHash']); $this->assertEmpty($messages); } @@ -372,7 +379,7 @@ class notification_method_webpush_test extends phpbb_tests_notification_base foreach ($expected_users as $user_id => $data) { - $messages = $this->get_messages_for_subscription($subscription_info[$user_id]['clientHash']); + $messages = $this->get_messages_for_subscription($subscription_info[$user_id][0]['clientHash']); $this->assertNotEmpty($messages); } }