summaryrefslogtreecommitdiff
path: root/modules/notification/helpers/notification.php
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2009-02-01 03:58:31 +0000
committerTim Almdal <tnalmdal@shaw.ca>2009-02-01 03:58:31 +0000
commit6f358291733b5844f5e9beaa747f554a0049e27a (patch)
treeaf9347258c8423ece92053180fea759720b04aef /modules/notification/helpers/notification.php
parentd49484c9a65681f0ee41490c098a0b4d7a938c0e (diff)
Simplify the setting of a notifications. Notifications are not only
set on a album. The notifications are implicitly active for all child elements. It now sends emails if the email address of the subscribed user has been set. No email, no attempt to send the notification. Still to do, come up with better messages as the current ones are just place holders.
Diffstat (limited to 'modules/notification/helpers/notification.php')
-rw-r--r--modules/notification/helpers/notification.php140
1 files changed, 75 insertions, 65 deletions
diff --git a/modules/notification/helpers/notification.php b/modules/notification/helpers/notification.php
index 79f7288e..00ea994d 100644
--- a/modules/notification/helpers/notification.php
+++ b/modules/notification/helpers/notification.php
@@ -18,7 +18,7 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class notification {
- static function get_subscriptions($item_id, $user=null) {
+ static function get_subscription($item_id, $user=null) {
if (empty($user)) {
$user = user::active();
}
@@ -26,94 +26,104 @@ class notification {
return ORM::factory("subscription")
->where("item_id", $item_id)
->where("user_id", $user->id)
- ->find_all();
+ ->find();
}
- static function is_watching($item_id, $user=null) {
+ static function is_watching($item, $user=null) {
if (empty($user)) {
$user = user::active();
}
- $count = ORM::factory("subscription")
- ->where("item_id", $item_id)
+ return ORM::factory("subscription")
+ ->where("item_id", $item->id)
->where("user_id", $user->id)
- ->count_all();
-
- return $count > 0;
+ ->find()
+ ->loaded;
}
- static function add_watch($item, $watch_children=false, $user=null) {
- if (empty($user)) {
- $user = user::active();
- }
- $subscription = ORM::factory("subscription");
- $subscription->item_id = $item->id;
- $subscription->apply_to_children = $watch_children;
- $subscription->user_id = $user->id;
- $subscription->save();
-
- if ($watch_children && $item->is_album()) {
- $children = ORM::factory("item")
- ->viewable()
- ->where("parent_id", $item->id)
- ->find_all();
- foreach ($children as $child) {
- self::add_watch($child, $watch_children, $user);
+ static function add_watch($item, $user=null) {
+ if ($item->is_album()) {
+ if (empty($user)) {
+ $user = user::active();
}
+ $subscription = ORM::factory("subscription");
+ $subscription->item_id = $item->id;
+ $subscription->user_id = $user->id;
+ $subscription->save();
}
}
- static function remove_watch($item, $watch_children=false, $user=null) {
- if (empty($user)) {
- $user = user::active();
- }
-
- $subscription = ORM::factory("subscription")
- ->where("item_id", $item->id)
- ->where("user_id", $user->id)
- ->find();
- $subscription->delete();
-
- if ($watch_children && $item->is_album()) {
- $children = ORM::factory("item")
- ->viewable()
- ->where("parent_id", $item->id)
- ->find_all();
- foreach ($children as $child) {
- self::remove_watch($child, $watch_children, $user);
+ static function remove_watch($item, $user=null) {
+ if ($item->is_album()) {
+ if (empty($user)) {
+ $user = user::active();
}
+
+ $subscription = ORM::factory("subscription")
+ ->where("item_id", $item->id)
+ ->where("user_id", $user->id)
+ ->find()->delete();
}
}
- static function get_subscribers($item_id) {
- return ORM::factory("subscription")
- ->where("item_id", $item_id)
+ static function get_subscribers($item) {
+ $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 <", $item->left)
+ ->where("items.right >", $item->right)
->find_all();
+
+ $subscribers = array();
+ foreach ($users as $user) {
+ $subscribers[] = $user->email;
+ }
+ return $subscribers;
}
- static function count_subscribers($item_id) {
- return ORM::factory("subscription")
- ->where("item_id", $item_id)
- ->count_all();
+ static function send_item_changed($old, $new=null) {
+ $users = self::get_subscribers($item);
}
-
- static function get_watched_items($user=null) {
- if (empty($user)) {
- $user = user::active();
- }
- return ORM::factory("subscription")
- ->where("user_id", $item_id)
- ->find_all();
+ static function send_item_add($item) {
+ $users = self::get_subscribers($item);
+ Sendmail::factory()
+ ->to($users)
+ ->from("from@gallery3.com")
+ ->subject(t("Item added to Gallery3"))
+ ->message($item->title)
+ ->send();
}
- static function count_watched_items($user=null) {
- if (empty($user)) {
- $user = user::active();
- }
+ static function send_item_delete($item) {
+ $users = self::get_subscribers($item);
+ Sendmail::factory()
+ ->to($users)
+ ->from("from@gallery3.com")
+ ->subject("Item deleted: $item->title")
+ ->message("It was deleted")
+ ->send();
+ }
- return ORM::factory("subscription")
- ->where("user_id", $item_id)
- ->count_all();
+ static function send_comment_added($comment) {
+ $users = self::get_subscribers($comment->item());
+ Sendmail::factory()
+ ->to($users)
+ ->from("from@gallery3.com")
+ ->subject("Comment added to $comment->$item->title")
+ ->message($comment->text)
+ ->send();
}
+
+ static function send_comment_changed($old, $new) {
+ $users = self::get_subscribers($comment->item());
+ Sendmail::factory()
+ ->to($users)
+ ->from("from@gallery3.com")
+ ->subject("Comment updated on item: $comment->$item-title")
+ ->message($new->text)
+ ->send();
+ }
+
}