]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
refactor jabber broadcast for notice_inbox removal
authorEvan Prodromou <evan@status.net>
Wed, 13 Jan 2010 09:13:49 +0000 (01:13 -0800)
committerEvan Prodromou <evan@status.net>
Wed, 13 Jan 2010 09:13:49 +0000 (01:13 -0800)
lib/jabber.php

index 1d0bb9423196368dc1fd39b0ddc07bb88b4433db..69f0d3570cf777d0969417ae53e3571e0815b3ab 100644 (file)
@@ -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;
 }