From 38cf6ca403b485644405b8ec39af334a877e58b2 Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Fri, 30 Jan 2009 20:52:25 +0000 Subject: The start of the notification module. At this point, the icon has been added to the item menu in the sidebar (both photo and album). There is a corresponding icon in themes/default/images that needs to be spruced up. You can add and remove notifications to albums and photos, but nothing happens under the covers for event handling. --- modules/notification/helpers/notification.php | 119 +++++++++++++++++++++ .../notification/helpers/notification_event.php | 26 +++++ .../helpers/notification_installer.php | 46 ++++++++ modules/notification/helpers/notification_menu.php | 50 +++++++++ 4 files changed, 241 insertions(+) create mode 100644 modules/notification/helpers/notification.php create mode 100644 modules/notification/helpers/notification_event.php create mode 100644 modules/notification/helpers/notification_installer.php create mode 100644 modules/notification/helpers/notification_menu.php (limited to 'modules/notification/helpers') diff --git a/modules/notification/helpers/notification.php b/modules/notification/helpers/notification.php new file mode 100644 index 00000000..79f7288e --- /dev/null +++ b/modules/notification/helpers/notification.php @@ -0,0 +1,119 @@ +where("item_id", $item_id) + ->where("user_id", $user->id) + ->find_all(); + } + + static function is_watching($item_id, $user=null) { + if (empty($user)) { + $user = user::active(); + } + + $count = ORM::factory("subscription") + ->where("item_id", $item_id) + ->where("user_id", $user->id) + ->count_all(); + + return $count > 0; + } + + 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 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 get_subscribers($item_id) { + return ORM::factory("subscription") + ->where("item_id", $item_id) + ->find_all(); + } + + static function count_subscribers($item_id) { + return ORM::factory("subscription") + ->where("item_id", $item_id) + ->count_all(); + } + + 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 count_watched_items($user=null) { + if (empty($user)) { + $user = user::active(); + } + + return ORM::factory("subscription") + ->where("user_id", $item_id) + ->count_all(); + } +} diff --git a/modules/notification/helpers/notification_event.php b/modules/notification/helpers/notification_event.php new file mode 100644 index 00000000..06b5b1f6 --- /dev/null +++ b/modules/notification/helpers/notification_event.php @@ -0,0 +1,26 @@ +query("CREATE TABLE IF NOT EXISTS `subscriptions` ( + `id` int(9) NOT NULL auto_increment, + `item_id` int(9) NOT NULL, + `apply_to_children` tinyint(1) NOT NULL, + `user_id` int(9) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY (`item_id`, `user_id`), + UNIQUE KEY (`user_id`, `item_id`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + module::set_version("notification", 1); + } + } + + static function uninstall() { + $db = Database::instance(); + $db->query("DROP TABLE IF EXISTS `subscriptions`;"); + + module::delete("notification"); + } +} diff --git a/modules/notification/helpers/notification_menu.php b/modules/notification/helpers/notification_menu.php new file mode 100644 index 00000000..8c2e84d8 --- /dev/null +++ b/modules/notification/helpers/notification_menu.php @@ -0,0 +1,50 @@ +guest) { + $item = $theme->item(); + + if ($item) { + $menu + ->append(Menu::factory("dialog") + ->id("watch") + ->label(t("Enable notifications for this album")) + ->url(url::site("notification/watch/$item->id")) + ->css_id("gWatchLink")); + } + } + } + + static function photo($menu, $theme) { + if (!user::active()->guest) { + $item = $theme->item(); + + if ($item) { + $menu + ->append(Menu::factory("dialog") + ->id("watch") + ->label(t("Enable notifications for this photo")) + ->url(url::site("notification/watch/$item->id")) + ->css_id("gWatchLink")); + } + } + } +} -- cgit v1.2.3