diff options
Diffstat (limited to 'modules/notification/helpers/notification.php')
| -rw-r--r-- | modules/notification/helpers/notification.php | 109 |
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() |
