diff options
author | friendica <info@friendica.com> | 2014-01-22 22:07:47 -0800 |
---|---|---|
committer | friendica <info@friendica.com> | 2014-01-22 22:07:47 -0800 |
commit | 66baa3cab0537a5a2f1a4aad54526b35987da90d (patch) | |
tree | 0c397e38389b4abed4bbd2f6e59eb0c2c3e8c36e /include/items.php | |
parent | 39142002238b416a2d823245cf046ca9eee0bf94 (diff) | |
download | volse-hubzilla-66baa3cab0537a5a2f1a4aad54526b35987da90d.tar.gz volse-hubzilla-66baa3cab0537a5a2f1a4aad54526b35987da90d.tar.bz2 volse-hubzilla-66baa3cab0537a5a2f1a4aad54526b35987da90d.zip |
try to reduce the number of simulaneous deliveries of the same post when dealing with owner relays that have more than one channel instance. If things melt down in the next few hours and I'm not available please revert this. I've reviewed a few times and think it's OK, but this part of the delivery code is traditionally touchy.
Diffstat (limited to 'include/items.php')
-rwxr-xr-x | include/items.php | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/include/items.php b/include/items.php index ea46df9bf..12823c6f9 100755 --- a/include/items.php +++ b/include/items.php @@ -18,10 +18,17 @@ function collect_recipients($item,&$private) { require_once('include/group.php'); - if($item['item_private']) - $private = true; + $private = ((intval($item['item_private'])) ? true : false); + $recipients = array(); + + // if the post is marked private but there are no recipients, only add the author and owner + // as recipients. The ACL for the post may live on the hub of a different clone. We need to + // get the post to that hub. if($item['allow_cid'] || $item['allow_gid'] || $item['deny_cid'] || $item['deny_gid']) { + + // it is private + $allow_people = expand_acl($item['allow_cid']); $allow_groups = expand_groups(expand_acl($item['allow_gid'])); @@ -54,19 +61,19 @@ function collect_recipients($item,&$private) { $private = true; } else { - $recipients = array(); - $r = q("select * from abook where abook_channel = %d and not (abook_flags & %d) and not (abook_flags & %d) and not (abook_flags & %d)", - intval($item['uid']), - intval(ABOOK_FLAG_SELF), - intval(ABOOK_FLAG_PENDING), - intval(ABOOK_FLAG_ARCHIVED) - ); - if($r) { - foreach($r as $rr) { - $recipients[] = $rr['abook_xchan']; + if(! $private) { + $r = q("select abook_xchan from abook where abook_channel = %d and not (abook_flags & %d) and not (abook_flags & %d) and not (abook_flags & %d)", + intval($item['uid']), + intval(ABOOK_FLAG_SELF), + intval(ABOOK_FLAG_PENDING), + intval(ABOOK_FLAG_ARCHIVED) + ); + if($r) { + foreach($r as $rr) { + $recipients[] = $rr['abook_xchan']; + } } } - $private = false; } // This is a somewhat expensive operation but important. |