summaryrefslogtreecommitdiff
path: root/modules/notification/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'modules/notification/helpers')
-rw-r--r--modules/notification/helpers/notification.php34
-rw-r--r--modules/notification/helpers/notification_event.php15
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())));
}
}