diff options
author | Friendika <info@friendika.com> | 2011-01-31 14:01:38 -0800 |
---|---|---|
committer | Friendika <info@friendika.com> | 2011-01-31 14:01:38 -0800 |
commit | 1908c7ad8217f35bffd32458de2ab5646f57affe (patch) | |
tree | c3c591655dbf9340a7d445b3c14e2da8a1167096 /include/notifier.php | |
parent | d8877b88d6c26e29019312f02297411817692361 (diff) | |
download | volse-hubzilla-1908c7ad8217f35bffd32458de2ab5646f57affe.tar.gz volse-hubzilla-1908c7ad8217f35bffd32458de2ab5646f57affe.tar.bz2 volse-hubzilla-1908c7ad8217f35bffd32458de2ab5646f57affe.zip |
deliver up to 150 contacts per person using dfrn - in case hub is whacked
Diffstat (limited to 'include/notifier.php')
-rw-r--r-- | include/notifier.php | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/include/notifier.php b/include/notifier.php index 59e29d7d1..87095e814 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -255,7 +255,7 @@ function notifier_run($argv, $argc){ $recip_str = implode(', ', $recipients); - $r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 ", + $r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 AND `pending` = 0 ", dbesc($recip_str) ); if(! count($r)){ @@ -370,6 +370,54 @@ function notifier_run($argv, $argc){ } } + if($notify_hub) { + + /** + * + * If you have less than 150 dfrn friends and it's a public message, + * we'll just go ahead and push them out securely with dfrn/rino. + * If you've got more than that, you'll have to rely on PuSH delivery. + * + */ + + $max_allowed = ((get_config('system','maxpubdeliver') === false) ? 150 : intval(get_config('system','maxdeliver'))); + + + /** + * + * Only get the bare essentials and go back for the full record. + * If you've got a lot of friends and we grab all the details at once it could exhaust memory. + * + */ + + $r = q("SELECT `id`, `name` FROM `contact` + WHERE `network` = 'dfrn' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 + AND `rel` != %d ", + intval($owner['uid']), + intval(REL_FAN) + ); + + if((count($r)) && ($max_allowed < count($r))) { + foreach($r as $rr) { + + /* Don't deliver to folks who have already been delivered to */ + + if(! in_array($rr['id'], $conversants)) { + $n = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", + intval($rr['id']) + ); + if(count($n)) { + + logger('notifier: dfrnpubdelivery: ' . $n[0]['name']); + $deliver_status = dfrn_deliver($owner,$n[0],$atom); + } + } + else + logger('notifier: dfrnpubdelivery: ignoring ' . $rr['name']); + } + } + } + return; } |