summaryrefslogtreecommitdiff
path: root/modules/notification/helpers/notification.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/notification/helpers/notification.php')
-rw-r--r--modules/notification/helpers/notification.php109
1 files changed, 91 insertions, 18 deletions
diff --git a/modules/notification/helpers/notification.php b/modules/notification/helpers/notification.php
index 96493a2..7eaa067 100644
--- a/modules/notification/helpers/notification.php
+++ b/modules/notification/helpers/notification.php
@@ -1,4 +1,10 @@
<?php defined("SYSPATH") or die("No direct script access.");
+require_once("Exception.php");
+require_once("XMPPLog.php");
+require_once("Roster.php");
+require_once("XMLObj.php");
+require_once("XMLStream.php");
+require_once("XMPP.php");
/**
* Gallery - a web based photo album viewer and editor
* Copyright (C) 2000-2013 Bharat Mediratta
@@ -66,7 +72,7 @@ class notification {
}
}
- static function get_subscribers($item) {
+ static function get_subscriber_users($item) {
$subscriber_ids = array();
foreach (ORM::factory("subscription")
->select("user_id")
@@ -81,20 +87,46 @@ class notification {
if (empty($subscriber_ids)) {
return array();
}
- $users = identity::get_user_list($subscriber_ids);
+ return identity::get_user_list($subscriber_ids);
+ }
+
+ static function get_email_subscribers($item) {
+ $users = self::get_subscriber_users($item);
+
+ if (empty($users)) {
+ return array();
+ }
$subscribers = array();
foreach ($users as $user) {
- if (access::user_can($user, "view", $item) && !empty($user->email)) {
+ if (access::user_can($user, "view", $item)
+ && !empty($user->email)
+ && empty($user->jabberid)) {
$subscribers[$user->email] = $user->locale;
}
}
return $subscribers;
}
- static function send_item_updated($original, $item) {
- foreach (self::get_subscribers($item) as $email => $locale) {
- $v = new View("item_updated.html");
+ static function get_jabber_subscribers($item) {
+ $users = self::get_subscriber_users($item);
+
+ if (empty($users)) {
+ return array();
+ }
+
+ $subscribers = array();
+ foreach ($users as $user) {
+ if (access::user_can($user, "view", $item)
+ && !empty($user->jabberid)) {
+ $subscribers[$user->jabberid] = $user->locale;
+ }
+ }
+ return $subscribers;
+ }
+
+ private static function getItemUpdatedView($viewname, $item, $original, $locale) {
+ $v = new View($viewname);
$v->original = $original;
$v->item = $item;
$v->subject = $item->is_album() ?
@@ -102,16 +134,22 @@ class notification {
($item->is_photo() ?
t("Photo \"%title\" updated", array("title" => $original->title, "locale" => $locale))
: t("Movie \"%title\" updated", array("title" => $original->title, "locale" => $locale)));
+ return $v;
+ }
+
+ static function send_item_updated($original, $item) {
+ foreach (self::get_jabber_subscribers($item) as $jabberid => $locale) {
+ $v = self::getItemUpdatedView("item_updated.txt", $item, $original, $locale);
+ self::notifyViaXMPP($jabberid, $locale, $v->render());
+ }
+ foreach (self::get_email_subscribers($item) as $email => $locale) {
+ $v = self::getItemUpdatedView("item_updated.html", $item, $original, $locale);
self::_notify($email, $locale, $item, $v->render(), $v->subject);
}
}
- static function send_item_add($item) {
- $parent = $item->parent();
- foreach (self::get_subscribers($item) as $email => $locale) {
- $v = new View("item_added.html");
- $v->item = $item;
- $v->subject = $item->is_album() ?
+ private static function getItemAddSubject($item, $parent, $locale) {
+ return $item->is_album() ?
t("Album \"%title\" added to \"%parent_title\"",
array("title" => $item->title, "parent_title" => $parent->title, "locale" => $locale)) :
($item->is_photo() ?
@@ -119,14 +157,29 @@ class notification {
array("title" => $item->title, "parent_title" => $parent->title, "locale" => $locale)) :
t("Movie \"%title\" added to \"%parent_title\"",
array("title" => $item->title, "parent_title" => $parent->title, "locale" => $locale)));
- self::_notify($email, $locale, $item, $v->render(), $v->subject);
- }
}
- static function send_item_deleted($item) {
+ static function send_item_add($item) {
$parent = $item->parent();
- foreach (self::get_subscribers($item) as $email => $locale) {
- $v = new View("item_deleted.html");
+ Kohana_Log::add("error", "adding item notifiy");
+
+ foreach (self::get_jabber_subscribers($item) as $jabberid => $locale) {
+ Kohana_Log::add("error", "adding item notifiy jabber");
+ $jabberView = new View("item_added.txt");
+ $jabberView->item = $item;
+ $jabberView->subject = self::getItemAddSubject($item, $parent, $locale);
+ self::notifyViaXMPP($jabberid, $locale, $jabberView->render());
+ }
+ foreach (self::get_email_subscribers($item) as $email => $locale) {
+ $emailView = new View("item_added.html");
+ $emailView->item = $item;
+ $emailView->subject = self::getItemAddSubject($item, $parent, $locale);
+ self::_notify($email, $locale, $item, $emailView->render(), $emailView->subject);
+ }
+ }
+
+ private static function getItemDeletedView($viewname, $item, $parent, $locale) {
+ $v = new View($viewname);
$v->item = $item;
$v->subject = $item->is_album() ?
t("Album \"%title\" removed from \"%parent_title\"",
@@ -137,13 +190,24 @@ class notification {
: t("Movie \"%title\" removed from \"%parent_title\"",
array("title" => $item->title, "parent_title" => $parent->title,
"locale" => $locale)));
+ return $v;
+ }
+
+ static function send_item_deleted($item) {
+ $parent = $item->parent();
+ foreach (self::get_jabber_subscribers($item) as $jabberid => $locale) {
+ $v = self::getItemDeletedView("item_deleted.txt", $item, $parent, $locale);
+ self::notifyViaXMPP($jabberid, $locale, $v->render());
+ }
+ foreach (self::get_email_subscribers($item) as $email => $locale) {
+ $v = self::getItemDeletedView("item_deleted.html", $item, $parent, $locale);
self::_notify($email, $locale, $item, $v->render(), $v->subject);
}
}
static function send_comment_published($comment) {
$item = $comment->item();
- foreach (self::get_subscribers($item) as $email => $locale) {
+ foreach (self::get_email_subscribers($item) as $email => $locale) {
$v = new View("comment_published.html");
$v->comment = $comment;
$v->subject = $item->is_album() ?
@@ -197,6 +261,15 @@ class notification {
}
}
+ private static function notifyViaXMPP($jabberid, $locale, $text) {
+ $XMPP = new XMPP('jabber.mail-zur.de', 5222, 'gallery', 'gallery', 'pics');
+ $XMPP->connect(5);
+ $XMPP->processUntil('session_start', 10);
+ //$XMPP->presence();
+ $XMPP->message($jabberid, $text, 'chat');
+ $XMPP->disconnect();
+ }
+
private static function _notify($email, $locale, $item, $text, $subject) {
if (!batch::in_progress()) {
Sendmail::factory()