refactor jabber broadcast for notice_inbox removal
This commit is contained in:
parent
43ff542189
commit
23599da91e
@ -356,77 +356,42 @@ function jabber_broadcast_notice($notice)
|
|||||||
|
|
||||||
$conn = jabber_connect();
|
$conn = jabber_connect();
|
||||||
|
|
||||||
// First, get users to whom this is a direct reply
|
$ni = $notice->whoGets();
|
||||||
$user = new User();
|
|
||||||
$UT = common_config('db','type')=='pgsql'?'"user"':'user';
|
foreach ($ni as $user_id => $reason) {
|
||||||
$user->query("SELECT $UT.id, $UT.jabber " .
|
$user = User::staticGet('user_id', $user_id);
|
||||||
"FROM $UT JOIN reply ON $UT.id = reply.profile_id " .
|
if (empty($user) ||
|
||||||
'WHERE reply.notice_id = ' . $notice->id . ' ' .
|
empty($user->jabber) ||
|
||||||
"AND $UT.jabber is not null " .
|
!$user->jabbernotify) {
|
||||||
"AND $UT.jabbernotify = 1 " .
|
// either not a local user, or just not found
|
||||||
"AND $UT.jabberreplies = 1 ");
|
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."));
|
||||||
|
}
|
||||||
|
|
||||||
while ($user->fetch()) {
|
|
||||||
common_log(LOG_INFO,
|
common_log(LOG_INFO,
|
||||||
'Sending reply notice ' . $notice->id . ' to ' . $user->jabber,
|
'Sending notice ' . $notice->id . ' to ' . $user->jabber,
|
||||||
__FILE__);
|
__FILE__);
|
||||||
$conn->message($user->jabber, $msg, 'chat', null, $entry);
|
$conn->message($user->jabber, $msg, 'chat', null, $entry);
|
||||||
$conn->processTime(0);
|
$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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user