diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/notification/helpers/notification.php | 21 | ||||
-rw-r--r-- | modules/user/libraries/drivers/Identity/Gallery.php | 36 |
2 files changed, 37 insertions, 20 deletions
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) { diff --git a/modules/user/libraries/drivers/Identity/Gallery.php b/modules/user/libraries/drivers/Identity/Gallery.php index 774ef77c..5e201cb7 100644 --- a/modules/user/libraries/drivers/Identity/Gallery.php +++ b/modules/user/libraries/drivers/Identity/Gallery.php @@ -211,12 +211,7 @@ class Identity_Gallery_Driver implements Identity_Driver { * @return array the group list. */ public function list_users($filter=array()) { - $user = ORM::factory("user"); - foreach($filter as $method => $args) { - $user->$method($args); - } - - return $user->find_all(); + return $this->_do_search("user", $filter); } @@ -226,12 +221,7 @@ class Identity_Gallery_Driver implements Identity_Driver { * @return array the group list. */ public function list_groups($filter=array()) { - $user = ORM::factory("group"); - foreach($filter as $method => $args) { - $user->$method($args); - } - - return $user->find_all(); + return $this->_do_search("group", $filter); } /** @@ -243,4 +233,26 @@ class Identity_Gallery_Driver implements Identity_Driver { public function get_edit_rules($object_type) { return (object)ORM::factory($object_type)->rules; } + + /** + * Build the query based on the supplied filters for the specified model. + * @param string $object_type to return rules for ("user"|"group") + * @param mixed $filters options to apply to the selection. + */ + private function _do_search($object_type, $filter) { + $object = ORM::factory($object_type); + + foreach ($filter as $method => $args) { + switch ($method) { + case "in": + $object->in($args[0], $args[1]); + break; + default: + $object->$method($args); + } + } + + return $object->find_all(); + } + } // End Identity Gallery Driver
\ No newline at end of file |