summaryrefslogtreecommitdiff
path: root/lib/jabber.php
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2010-01-13 01:13:49 -0800
committerEvan Prodromou <evan@status.net>2010-01-13 01:13:49 -0800
commit23599da91e9d4abbd6e73ef3f44c58f302a5231a (patch)
tree651db1cab634993e124c3abcf41ea2fabd4d05b1 /lib/jabber.php
parent43ff54218934663910f11762ee2a1c1083b119c7 (diff)
refactor jabber broadcast for notice_inbox removal
Diffstat (limited to 'lib/jabber.php')
-rw-r--r--lib/jabber.php95
1 files changed, 30 insertions, 65 deletions
diff --git a/lib/jabber.php b/lib/jabber.php
index 1d0bb9423..69f0d3570 100644
--- a/lib/jabber.php
+++ b/lib/jabber.php
@@ -356,77 +356,42 @@ function jabber_broadcast_notice($notice)
$conn = jabber_connect();
- // First, get users to whom this is a direct reply
- $user = new User();
- $UT = common_config('db','type')=='pgsql'?'"user"':'user';
- $user->query("SELECT $UT.id, $UT.jabber " .
- "FROM $UT JOIN reply ON $UT.id = reply.profile_id " .
- 'WHERE reply.notice_id = ' . $notice->id . ' ' .
- "AND $UT.jabber is not null " .
- "AND $UT.jabbernotify = 1 " .
- "AND $UT.jabberreplies = 1 ");
-
- while ($user->fetch()) {
+ $ni = $notice->whoGets();
+
+ foreach ($ni as $user_id => $reason) {
+ $user = User::staticGet('user_id', $user_id);
+ if (empty($user) ||
+ empty($user->jabber) ||
+ !$user->jabbernotify) {
+ // either not a local user, or just not found
+ continue;
+ }
+ switch ($reason) {
+ case NOTICE_INBOX_SOURCE_REPLY:
+ if (!$user->jabberreplies) {
+ continue;
+ }
+ break;
+ case NOTICE_INBOX_SOURCE_SUB:
+ $sub = Subscription::pkeyGet(array('subscriber' => $user->id,
+ 'subscribed' => $notice->profile_id));
+ if (empty($sub) || !$sub->jabber) {
+ continue;
+ }
+ break;
+ case NOTICE_INBOX_SOURCE_GROUP:
+ break;
+ default:
+ throw new Exception(_("Unknown inbox source."));
+ }
+
common_log(LOG_INFO,
- 'Sending reply notice ' . $notice->id . ' to ' . $user->jabber,
+ 'Sending notice ' . $notice->id . ' to ' . $user->jabber,
__FILE__);
$conn->message($user->jabber, $msg, 'chat', null, $entry);
$conn->processTime(0);
- $sent_to[$user->id] = 1;
}
- $user->free();
-
- // Now, get users subscribed to this profile
-
- $user = new User();
- $user->query("SELECT $UT.id, $UT.jabber " .
- "FROM $UT JOIN subscription " .
- "ON $UT.id = subscription.subscriber " .
- 'WHERE subscription.subscribed = ' . $notice->profile_id . ' ' .
- "AND $UT.jabber is not null " .
- "AND $UT.jabbernotify = 1 " .
- 'AND subscription.jabber = 1 ');
-
- while ($user->fetch()) {
- if (!array_key_exists($user->id, $sent_to)) {
- common_log(LOG_INFO,
- 'Sending notice ' . $notice->id . ' to ' . $user->jabber,
- __FILE__);
- $conn->message($user->jabber, $msg, 'chat', null, $entry);
- // To keep the incoming queue from filling up,
- // we service it after each send.
- $conn->processTime(0);
- $sent_to[$user->id] = 1;
- }
- }
-
- // Now, get users who have it in their inbox because of groups
-
- $user = new User();
- $user->query("SELECT $UT.id, $UT.jabber " .
- "FROM $UT JOIN notice_inbox " .
- "ON $UT.id = notice_inbox.user_id " .
- 'WHERE notice_inbox.notice_id = ' . $notice->id . ' ' .
- 'AND notice_inbox.source = 2 ' .
- "AND $UT.jabber is not null " .
- "AND $UT.jabbernotify = 1 ");
-
- while ($user->fetch()) {
- if (!array_key_exists($user->id, $sent_to)) {
- common_log(LOG_INFO,
- 'Sending notice ' . $notice->id . ' to ' . $user->jabber,
- __FILE__);
- $conn->message($user->jabber, $msg, 'chat', null, $entry);
- // To keep the incoming queue from filling up,
- // we service it after each send.
- $conn->processTime(0);
- $sent_to[$user->id] = 1;
- }
- }
-
- $user->free();
-
return true;
}