From 6e59de2fb5b379a7a839e27c92f7546ee568cf00 Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Tue, 6 Oct 2009 07:55:31 -0700 Subject: Change the notification handler to use the Identity API to lookup subscribers for event notifications. This drove out some issues in the user::users and group::groups API backend. --- modules/notification/helpers/notification.php | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'modules/notification/helpers/notification.php') diff --git a/modules/notification/helpers/notification.php b/modules/notification/helpers/notification.php index 88d92b16..8cf9f428 100644 --- a/modules/notification/helpers/notification.php +++ b/modules/notification/helpers/notification.php @@ -67,15 +67,20 @@ class notification { } static function get_subscribers($item) { - // @todo don't access the user table directly // @todo only return distinct email addresses - $users = ORM::factory("user") - ->join("subscriptions", "users.id", "subscriptions.user_id") - ->join("items", "subscriptions.item_id", "items.id") - ->where("email IS NOT", null) - ->where("items.left_ptr <=", $item->left_ptr) - ->where("items.right_ptr >", $item->right_ptr) - ->find_all(); + $subscriber_ids = array(); + foreach (ORM::factory("subscription") + ->select("user_id") + ->join("items", "subscriptions.item_id", "items.id") + ->where("items.left_ptr <=", $item->left_ptr) + ->where("items.right_ptr >", $item->right_ptr) + ->find_all() + ->as_array() as $subscriber) { + $subscriber_ids[] = $subscriber->user_id; + } + + $users = user::users(array("in" => array("id", $subscriber_ids), + "where" => array("email IS NOT" => null))); $subscribers = array(); foreach ($users as $user) { -- cgit v1.2.3