diff options
Diffstat (limited to 'modules/notification/helpers')
-rw-r--r-- | modules/notification/helpers/notification.php | 34 | ||||
-rw-r--r-- | modules/notification/helpers/notification_event.php | 15 |
2 files changed, 33 insertions, 16 deletions
diff --git a/modules/notification/helpers/notification.php b/modules/notification/helpers/notification.php index 88d92b16..9a40b0b9 100644 --- a/modules/notification/helpers/notification.php +++ b/modules/notification/helpers/notification.php @@ -20,7 +20,7 @@ class notification { static function get_subscription($item_id, $user=null) { if (empty($user)) { - $user = user::active(); + $user = identity::active_user(); } return ORM::factory("subscription") @@ -31,7 +31,7 @@ class notification { static function is_watching($item, $user=null) { if (empty($user)) { - $user = user::active(); + $user = identity::active_user(); } return ORM::factory("subscription") @@ -44,7 +44,7 @@ class notification { static function add_watch($item, $user=null) { if ($item->is_album()) { if (empty($user)) { - $user = user::active(); + $user = identity::active_user(); } $subscription = ORM::factory("subscription"); $subscription->item_id = $item->id; @@ -56,7 +56,7 @@ class notification { static function remove_watch($item, $user=null) { if ($item->is_album()) { if (empty($user)) { - $user = user::active(); + $user = identity::active_user(); } $subscription = ORM::factory("subscription") @@ -67,19 +67,25 @@ 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; + } + + if (empty($subscriber_ids)) { + return array(); + } + $users = identity::get_user_list($subscriber_ids); $subscribers = array(); foreach ($users as $user) { - if (access::user_can($user, "view", $item)) { + if (access::user_can($user, "view", $item) && !empty($user->email)) { $subscribers[$user->email] = 1; } } diff --git a/modules/notification/helpers/notification_event.php b/modules/notification/helpers/notification_event.php index c50b04c4..6b2df574 100644 --- a/modules/notification/helpers/notification_event.php +++ b/modules/notification/helpers/notification_event.php @@ -52,6 +52,17 @@ class notification_event_Core { } } + static function user_deleted($user) { + ORM::factory("subscriptions") + ->where(array("user_id", $user->id)) + ->delete_all(); + } + + static function identity_provider_changed($old_provider, $new_provider) { + ORM::factory("subscriptions") + ->delete_all(); + } + static function comment_created($comment) { try { if ($comment->state == "published") { @@ -95,7 +106,7 @@ class notification_event_Core { } static function site_menu($menu, $theme) { - if (!user::active()->guest) { + if (!identity::active_user()->guest) { $item = $theme->item(); if ($item && $item->is_album() && access::can("view", $item)) { @@ -107,7 +118,7 @@ class notification_event_Core { ->append(Menu::factory("link") ->id("watch") ->label($label) - ->css_id("gNotifyLink") + ->css_id("g-notify-link") ->url(url::site("notification/watch/$item->id?csrf=" . access::csrf_token()))); } } |