2013-02-26 01:09:40 +00:00
< ? php /** @file */
2011-08-26 14:29:22 +00:00
2011-01-28 13:04:18 +00:00
require_once ( " boot.php " );
2011-10-21 10:33:34 +00:00
require_once ( 'include/queue_fn.php' );
2012-02-24 06:11:26 +00:00
require_once ( 'include/html2plain.php' );
2011-01-28 13:04:18 +00:00
2011-09-04 12:07:25 +00:00
/*
* This file was at one time responsible for doing all deliveries , but this caused
* big problems on shared hosting systems , where the process might get killed by the
* hosting provider and nothing would get delivered .
* It now only delivers one message under certain cases , and invokes a queued
* delivery mechanism ( include / deliver . php ) to deliver individual contacts at
* controlled intervals .
* This has a much better chance of surviving random processes getting killed
* by the hosting provider .
2013-01-05 01:16:35 +00:00
*
* The basic flow is :
* Identify the type of message
* Collect any information that needs to be sent
* Convert it into a suitable generic format for sending
* Figure out who the recipients are and if we need to relay
* through a conversation owner
* Once we know what recipients are involved , collect a list of
* destination sites
* Build and store a queue item for each unique site and invoke
* a delivery process for each site or a small number of sites ( 1 - 3 )
* and add a slight delay between each delivery invocation if desired ( usually )
*
2011-09-04 12:07:25 +00:00
*/
2012-08-12 01:54:23 +00:00
/*
* The notifier is typically called with :
*
* proc_run ( 'php' , " include/notifier.php " , COMMAND , ITEM_ID );
*
* where COMMAND is one of the following :
*
* activity ( in diaspora . php , dfrn_confirm . php , profiles . php )
* comment - import ( in diaspora . php , items . php )
* comment - new ( in item . php )
* drop ( in diaspora . php , items . php , photos . php )
* edit_post ( in item . php )
* event ( in events . php )
* expire ( in items . php )
* like ( in like . php , poke . php )
* mail ( in message . php )
* suggest ( in fsuggest . php )
* tag ( in photos . php , poke . php , tagger . php )
* tgroup ( in items . php )
* wall - new ( in photos . php , item . php )
*
* and ITEM_ID is the id of the item in the database that needs to be sent to others .
2012-11-13 04:59:18 +00:00
*
* ZOT
2012-11-30 02:15:13 +00:00
* permission_update abook_id
2013-06-14 23:54:58 +00:00
* refresh_all channel_id
2013-09-18 03:50:09 +00:00
* purge_all channel_id
2013-08-15 03:09:02 +00:00
* expire channel_id
2012-11-28 01:09:01 +00:00
* relay item_id ( item was relayed to owner , we will deliver it as owner )
2012-11-13 04:59:18 +00:00
*
2012-08-12 01:54:23 +00:00
*/
2012-11-13 04:59:18 +00:00
require_once ( 'include/cli_startup.php' );
require_once ( 'include/zot.php' );
2013-01-03 07:07:46 +00:00
require_once ( 'include/queue_fn.php' );
2012-08-12 01:54:23 +00:00
2011-01-28 13:04:18 +00:00
function notifier_run ( $argv , $argc ){
2012-11-13 04:59:18 +00:00
cli_startup ();
$a = get_app ();
2010-09-26 23:30:21 +00:00
2010-08-18 01:44:13 +00:00
require_once ( " session.php " );
require_once ( " datetime.php " );
2010-09-17 10:10:19 +00:00
require_once ( 'include/items.php' );
2010-11-01 03:36:59 +00:00
require_once ( 'include/bbcode.php' );
2012-11-06 07:52:01 +00:00
2010-08-18 01:44:13 +00:00
if ( $argc < 3 )
2011-01-24 21:01:56 +00:00
return ;
2010-08-17 03:47:40 +00:00
2012-05-03 23:55:03 +00:00
logger ( 'notifier: invoked: ' . print_r ( $argv , true ), LOGGER_DEBUG );
2010-11-25 10:53:19 +00:00
2010-08-17 03:47:40 +00:00
$cmd = $argv [ 1 ];
2010-07-09 00:49:41 +00:00
2012-11-13 04:59:18 +00:00
$item_id = $argv [ 2 ];
$extra = (( $argc > 3 ) ? $argv [ 3 ] : null );
2012-11-15 01:02:30 +00:00
if ( ! $item_id )
return ;
2012-11-13 04:59:18 +00:00
if ( $cmd == 'permission_update' ) {
// Get the recipient
$r = q ( " select abook.*, hubloc.* from abook
left join hubloc on hubloc_hash = abook_xchan
2012-11-19 02:30:00 +00:00
where abook_id = % d and not ( abook_flags & % d ) limit 1 " ,
intval ( $item_id ),
intval ( ABOOK_FLAG_SELF )
2012-11-13 04:59:18 +00:00
);
if ( $r ) {
// Get the sender
$s = q ( " select * from channel where channel_id = %d limit 1 " ,
intval ( $r [ 0 ][ 'abook_channel' ])
);
if ( $s ) {
// send a refresh message to each hub they have registered here
$h = q ( " select * from hubloc where hubloc_hash = '%s' " ,
dbesc ( $r [ 0 ][ 'hubloc_hash' ])
);
if ( $h ) {
foreach ( $h as $hh ) {
2012-11-16 05:52:05 +00:00
$data = zot_build_packet ( $s [ 0 ], 'refresh' , array ( array (
2012-11-13 04:59:18 +00:00
'guid' => $hh [ 'hubloc_guid' ],
'guid_sig' => $hh [ 'hubloc_guid_sig' ],
'url' => $hh [ 'hubloc_url' ])
2012-11-16 05:52:05 +00:00
));
if ( $data ) {
$result = zot_zot ( $hh [ 'hubloc_callback' ], $data );
2012-11-16 23:53:02 +00:00
// zot_queue_item is not yet written
2012-11-19 02:30:00 +00:00
// if(! $result['success'])
2012-11-16 05:52:05 +00:00
// zot_queue_item();
}
2012-11-13 04:59:18 +00:00
}
}
}
}
2012-11-30 02:15:13 +00:00
return ;
2012-11-13 04:59:18 +00:00
}
2010-07-08 14:03:25 +00:00
2011-03-16 00:31:49 +00:00
$expire = false ;
2011-08-26 14:29:22 +00:00
$mail = false ;
$fsuggest = false ;
2011-02-11 11:17:16 +00:00
$top_level = false ;
2010-07-08 14:03:25 +00:00
$recipients = array ();
2010-11-01 03:36:59 +00:00
$url_recipients = array ();
2011-08-17 03:43:34 +00:00
$normal_mode = true ;
2013-06-14 23:54:58 +00:00
$packet_type = 'undefined' ;
2010-07-09 00:49:41 +00:00
2011-08-17 03:43:34 +00:00
if ( $cmd === 'mail' ) {
$normal_mode = false ;
2011-08-26 14:29:22 +00:00
$mail = true ;
2012-12-06 00:44:07 +00:00
$private = true ;
2010-07-30 13:09:20 +00:00
$message = q ( " SELECT * FROM `mail` WHERE `id` = %d LIMIT 1 " ,
intval ( $item_id )
);
2011-01-24 21:01:56 +00:00
if ( ! count ( $message )){
2011-01-28 13:04:18 +00:00
return ;
2011-01-24 21:01:56 +00:00
}
2012-12-06 00:44:07 +00:00
xchan_mail_query ( $message [ 0 ]);
$uid = $message [ 0 ][ 'channel_id' ];
$recipients [] = $message [ 0 ][ 'to_xchan' ];
2010-07-30 13:09:20 +00:00
$item = $message [ 0 ];
2012-12-06 00:44:07 +00:00
$encoded_item = encode_mail ( $item );
2012-12-19 00:29:57 +00:00
2012-12-06 00:44:07 +00:00
$s = q ( " select * from channel where channel_id = %d limit 1 " ,
intval ( $item [ 'channel_id' ])
);
if ( $s )
$channel = $s [ 0 ];
2012-12-19 00:29:57 +00:00
2010-07-30 13:09:20 +00:00
}
2011-03-16 00:31:49 +00:00
elseif ( $cmd === 'expire' ) {
2011-08-17 03:43:34 +00:00
$normal_mode = false ;
2011-03-16 00:31:49 +00:00
$expire = true ;
2013-08-15 03:09:02 +00:00
$items = q ( " SELECT * FROM item WHERE uid = %d AND ( item_flags & %d )
AND ( item_restrict & % d ) AND `changed` > UTC_TIMESTAMP () - INTERVAL 10 MINUTE " ,
intval ( $item_id ),
intval ( ITEM_WALL ),
intval ( ITEM_DELETED )
2011-03-16 00:31:49 +00:00
);
$uid = $item_id ;
$item_id = 0 ;
2013-08-15 03:09:02 +00:00
if ( ! $items )
2011-03-16 00:31:49 +00:00
return ;
2013-08-15 03:09:02 +00:00
// FIXME
// This will require a special zot packet containing a list of item message_id's to be expired.
// This packet will be public, since we cannot selectively deliver here.
// We need the handling on this end to create the array, and the handling on the remote end
// to verify permissions (for each item) and process it. Until this is complete, the expire feature will be disabled.
return ;
2011-03-16 00:31:49 +00:00
}
2011-06-27 02:30:57 +00:00
elseif ( $cmd === 'suggest' ) {
2011-08-17 03:43:34 +00:00
$normal_mode = false ;
2011-08-26 14:29:22 +00:00
$fsuggest = true ;
2011-06-27 02:30:57 +00:00
$suggest = q ( " SELECT * FROM `fsuggest` WHERE `id` = %d LIMIT 1 " ,
intval ( $item_id )
);
if ( ! count ( $suggest ))
return ;
$uid = $suggest [ 0 ][ 'uid' ];
$recipients [] = $suggest [ 0 ][ 'cid' ];
$item = $suggest [ 0 ];
}
2013-06-14 23:54:58 +00:00
elseif ( $cmd === 'refresh_all' ) {
2013-06-18 09:51:43 +00:00
logger ( 'notifier: refresh_all: ' . $item_id );
2013-06-14 23:54:58 +00:00
$s = q ( " select * from channel where channel_id = %d limit 1 " ,
intval ( $item_id )
);
if ( $s )
$channel = $s [ 0 ];
$uid = $item_id ;
$recipients = array ();
2013-09-09 04:05:39 +00:00
$r = q ( " select abook_xchan from abook where abook_channel = %d " ,
intval ( $item_id )
2013-06-14 23:54:58 +00:00
);
if ( $r ) {
foreach ( $r as $rr ) {
$recipients [] = $rr [ 'abook_xchan' ];
}
}
$private = false ;
$packet_type = 'refresh' ;
}
2013-09-18 03:50:09 +00:00
elseif ( $cmd === 'purge_all' ) {
logger ( 'notifier: purge_all: ' . $item_id );
$s = q ( " select * from channel where channel_id = %d limit 1 " ,
intval ( $item_id )
);
if ( $s )
$channel = $s [ 0 ];
$uid = $item_id ;
$recipients = array ();
$r = q ( " select abook_xchan from abook where abook_channel = %d " ,
intval ( $item_id )
);
if ( $r ) {
foreach ( $r as $rr ) {
$recipients [] = $rr [ 'abook_xchan' ];
}
}
$private = false ;
$packet_type = 'purge' ;
}
2010-07-30 13:09:20 +00:00
else {
2010-07-07 06:08:38 +00:00
2012-11-16 05:52:05 +00:00
// Normal items
2012-11-15 01:02:30 +00:00
2012-11-16 05:52:05 +00:00
// Fetch the target item
2012-11-28 01:09:01 +00:00
2012-11-16 05:52:05 +00:00
$r = q ( " SELECT * FROM item WHERE id = %d and parent != 0 LIMIT 1 " ,
2010-07-30 13:09:20 +00:00
intval ( $item_id )
);
2011-02-04 12:25:53 +00:00
2012-11-16 05:52:05 +00:00
if ( ! $r )
2011-01-28 13:04:18 +00:00
return ;
2012-11-28 01:09:01 +00:00
2012-11-15 01:02:30 +00:00
xchan_query ( $r );
2012-11-28 01:09:01 +00:00
2012-11-16 05:52:05 +00:00
$r = fetch_post_tags ( $r );
2011-08-17 03:43:34 +00:00
$target_item = $r [ 0 ];
2013-01-29 03:24:36 +00:00
if ( $target_item [ 'item_restrict' ] & ITEM_DELETED )
logger ( 'notifier: target item ITEM_DELETED' , LOGGER_DEBUG );
2013-05-27 12:27:35 +00:00
if ( $target_item [ 'item_restrict' ] & ITEM_DELAYED_PUBLISH ) {
logger ( 'notifier: target item ITEM_DELAYED_PUBLISH' , LOGGER_DEBUG );
return ;
}
2013-01-29 03:24:36 +00:00
2013-06-16 02:31:38 +00:00
if ( $target_item [ 'item_restrict' ] & ITEM_WEBPAGE ) {
logger ( 'notifier: target item ITEM_WEBPAGE' , LOGGER_DEBUG );
return ;
}
2013-08-13 00:42:52 +00:00
if ( $target_item [ 'item_restrict' ] & ITEM_BUILDBLOCK ) {
logger ( 'notifier: target item ITEM_BUILDBLOCK' , LOGGER_DEBUG );
return ;
}
2013-09-02 03:11:04 +00:00
if ( $target_item [ 'item_restrict' ] & ITEM_PDL ) {
logger ( 'notifier: target item ITEM_PDL' , LOGGER_DEBUG );
return ;
}
2013-06-16 02:31:38 +00:00
2012-11-19 02:30:00 +00:00
$s = q ( " select * from channel where channel_id = %d limit 1 " ,
intval ( $target_item [ 'uid' ])
);
2012-11-20 00:51:15 +00:00
if ( $s )
$channel = $s [ 0 ];
2012-11-19 02:30:00 +00:00
2012-11-28 01:09:01 +00:00
2012-11-16 05:52:05 +00:00
if ( $target_item [ 'id' ] == $target_item [ 'parent' ]) {
$parent_item = $target_item ;
$top_level_post = true ;
}
else {
// fetch the parent item
$r = q ( " SELECT * from item where id = %d order by id asc " ,
2012-11-27 11:08:26 +00:00
intval ( $target_item [ 'parent' ])
2012-11-16 05:52:05 +00:00
);
2012-11-27 11:08:26 +00:00
2012-11-16 05:52:05 +00:00
if ( ! $r )
return ;
xchan_query ( $r );
$r = fetch_post_tags ( $r );
$parent_item = $r [ 0 ];
$top_level_post = false ;
}
2012-11-28 01:09:01 +00:00
2012-11-16 05:52:05 +00:00
2012-11-16 23:53:02 +00:00
$encoded_item = encode_item ( $target_item );
2012-11-16 05:52:05 +00:00
$relay_to_owner = ((( ! $top_level_post ) && ( $target_item [ 'item_flags' ] & ITEM_ORIGIN )) ? true : false );
2013-01-04 11:36:32 +00:00
2013-01-14 02:35:12 +00:00
$uplink = false ;
2013-01-04 11:36:32 +00:00
// $cmd === 'relay' indicates the owner is sending it to the original recipients
// don't allow the item in the relay command to relay to owner under any circumstances, it will loop
2013-01-25 00:44:10 +00:00
logger ( 'notifier: relay_to_owner: ' . (( $relay_to_owner ) ? 'true' : 'false' ), LOGGER_DATA );
logger ( 'notifier: top_level_post: ' . (( $top_level_post ) ? 'true' : 'false' ), LOGGER_DATA );
logger ( 'notifier: target_item_flags: ' . $target_item [ 'item_flags' ] . ' ' . (( $target_item [ 'item_flags' ] & ITEM_ORIGIN ) ? 'true' : 'false' ), LOGGER_DATA );
2013-01-04 11:36:32 +00:00
2013-01-14 02:35:12 +00:00
// tag_deliver'd post which needs to be sent back to the original author
2013-01-05 01:04:44 +00:00
2013-01-14 02:35:12 +00:00
if (( $cmd === 'uplink' ) && ( $parent_item [ 'item_flags' ] & ITEM_UPLINK ) && ( ! $top_level_post )) {
2013-10-14 01:36:28 +00:00
logger ( 'notifier: uplink' );
$uplink = true ;
2013-01-14 02:35:12 +00:00
}
if (( $relay_to_owner || $uplink ) && ( $cmd !== 'relay' )) {
2012-11-16 05:52:05 +00:00
logger ( 'notifier: followup relay' , LOGGER_DEBUG );
2013-10-14 01:36:28 +00:00
$recipients = array (( $uplink ) ? $parent_item [ 'source_xchan' ] : $parent_item [ 'owner_xchan' ]);
2012-11-19 03:19:16 +00:00
$private = true ;
2012-11-16 23:53:02 +00:00
if ( ! $encoded_item [ 'flags' ])
$encoded_item [ 'flags' ] = array ();
$encoded_item [ 'flags' ][] = 'relay' ;
2012-11-16 05:52:05 +00:00
}
else {
logger ( 'notifier: normal distribution' , LOGGER_DEBUG );
2012-11-28 01:09:01 +00:00
if ( $cmd === 'relay' )
logger ( 'notifier: owner relay' );
2013-01-14 02:35:12 +00:00
// if our parent is a tag_delivery recipient, uplink to the original author causing
// a delivery fork.
if (( $parent_item [ 'item_flags' ] & ITEM_UPLINK ) && ( ! $top_level_post ) && ( $cmd !== 'uplink' )) {
logger ( 'notifier: uplinking this item' );
proc_run ( 'php' , 'include/notifier.php' , 'uplink' , $item_id );
}
2012-11-19 03:19:16 +00:00
$private = false ;
$recipients = collect_recipients ( $parent_item , $private );
2012-11-16 05:52:05 +00:00
// FIXME add any additional recipients such as mentions, etc.
2012-11-16 23:53:02 +00:00
// don't send deletions onward for other people's stuff
// TODO verify this is needed - copied logic from same place in old code
2012-11-16 05:52:05 +00:00
2012-11-16 23:53:02 +00:00
if (( $target_item [ 'item_restrict' ] & ITEM_DELETED ) && ( ! ( $target_item [ 'item_flags' ] & ITEM_WALL ))) {
logger ( 'notifier: ignoring delete notification for non-wall item' );
return ;
}
}
2012-11-16 05:52:05 +00:00
2012-12-06 00:44:07 +00:00
}
2012-11-16 05:52:05 +00:00
2012-12-06 00:44:07 +00:00
// Generic delivery section, we have an encoded item and recipients
// Now start the delivery process
2012-11-16 05:52:05 +00:00
2013-08-01 21:27:40 +00:00
$x = $encoded_item ;
$x [ 'title' ] = 'private' ;
$x [ 'body' ] = 'private' ;
logger ( 'notifier: encoded item: ' . print_r ( $x , true ), LOGGER_DATA );
2012-11-19 03:19:16 +00:00
2012-12-06 00:44:07 +00:00
stringify_array_elms ( $recipients );
if ( ! $recipients )
return ;
2012-11-28 01:09:01 +00:00
2013-07-22 00:19:16 +00:00
// logger('notifier: recipients: ' . print_r($recipients,true));
2012-12-06 00:44:07 +00:00
2013-07-22 00:19:16 +00:00
$env_recips = (( $private ) ? array () : null );
2013-11-21 23:58:42 +00:00
$details = q ( " select xchan_hash, xchan_instance_url, xchan_addr, xchan_guid, xchan_guid_sig from xchan where xchan_hash in ( " . implode ( ',' , $recipients ) . " ) " );
2013-07-22 00:19:16 +00:00
$recip_list = array ();
if ( $details ) {
foreach ( $details as $d ) {
2013-11-21 23:58:42 +00:00
// If the recipient is federated from a traditional network they won't be able to
// handle nomadic identity. If we're publishing from a site that they aren't
// directly connected with, ignore them.
// FIXME: make sure we run through a notifier loop on the hub they're connected
// with if this post comes in from a different hub - so that we will deliver to them.
// On the down side, these channels will stop working if the hub they connected with
// goes down permanently, as they are (doh) not nomadic.
if (( $d [ 'xchan_instance_url' ]) && ( $d [ 'xchan_instance_url' ] != z_root ()))
continue ;
2013-07-22 00:19:16 +00:00
$recip_list [] = $d [ 'xchan_addr' ] . ' (' . $d [ 'xchan_hash' ] . ')' ;
if ( $private )
$env_recips [] = array ( 'guid' => $d [ 'xchan_guid' ], 'guid_sig' => $d [ 'xchan_guid_sig' ]);
2011-08-26 14:29:22 +00:00
}
2012-12-06 00:44:07 +00:00
}
2011-08-26 03:35:55 +00:00
2013-09-13 11:51:55 +00:00
if (( $private ) && ( ! $env_recips )) {
// shouldn't happen
logger ( 'notifier: private message with no envelope recipients.' . print_r ( $argv , true ));
}
2013-07-22 00:19:16 +00:00
logger ( 'notifier: recipients (may be delivered to more if public): ' . print_r ( $recip_list , true ), LOGGER_DEBUG );
2012-12-06 00:44:07 +00:00
// Now we have collected recipients (except for external mentions, FIXME)
// Let's reduce this to a set of hubs.
2013-01-05 00:28:33 +00:00
// for public posts always include our own hub
2013-11-21 05:09:13 +00:00
$sql_extra = (( $private ) ? " " : " or hubloc_url = ' " . dbesc ( z_root ()) . " ' " );
2013-01-05 00:28:33 +00:00
2013-11-21 05:09:13 +00:00
$r = q ( " select hubloc_sitekey, hubloc_flags, hubloc_callback, hubloc_host from hubloc
2013-05-17 03:21:12 +00:00
where hubloc_hash in ( " . implode(',', $recipients ) . " ) $sql_extra group by hubloc_sitekey " );
2012-12-06 00:44:07 +00:00
if ( ! $r ) {
logger ( 'notifier: no hubs' );
return ;
}
$hubs = $r ;
2013-01-05 00:28:33 +00:00
2013-07-22 00:19:16 +00:00
$hublist = array ();
2013-11-21 05:09:13 +00:00
$keys = array ();
2013-09-18 03:50:09 +00:00
foreach ( $hubs as $hub ) {
2013-11-21 05:09:13 +00:00
// don't try to deliver to deleted hublocs - and inexplicably SQL "distinct" and "group by"
// both return records with duplicate keys in rare circumstances
if (( ! ( $hub [ 'hubloc_flags' ] & HUBLOC_FLAGS_DELETED )) && ( ! in_array ( $hub [ 'hubloc_sitekey' ], $keys ))) {
2013-09-18 03:50:09 +00:00
$hublist [] = $hub [ 'hubloc_host' ];
2013-11-21 05:09:13 +00:00
$keys [] = $hub [ 'hubloc_sitekey' ];
2013-09-18 03:50:09 +00:00
}
}
2013-07-22 00:19:16 +00:00
logger ( 'notifier: will notify/deliver to these hubs: ' . print_r ( $hublist , true ), LOGGER_DEBUG );
2012-12-06 00:44:07 +00:00
$interval = (( get_config ( 'system' , 'delivery_interval' ) !== false )
? intval ( get_config ( 'system' , 'delivery_interval' )) : 2 );
$deliveries_per_process = intval ( get_config ( 'system' , 'delivery_batch_count' ));
if ( $deliveries_per_process <= 0 )
$deliveries_per_process = 1 ;
$deliver = array ();
foreach ( $hubs as $hub ) {
$hash = random_string ();
2013-09-18 03:50:09 +00:00
if ( $packet_type === 'refresh' || $packet_type === 'purge' ) {
$n = zot_build_packet ( $channel , $packet_type );
2013-06-14 23:54:58 +00:00
q ( " insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' ) " ,
dbesc ( $hash ),
2013-10-25 02:38:50 +00:00
intval ( $channel [ 'channel_account_id' ]),
2013-06-14 23:54:58 +00:00
intval ( $channel [ 'channel_id' ]),
dbesc ( $hub [ 'hubloc_callback' ]),
intval ( 1 ),
dbesc ( datetime_convert ()),
dbesc ( datetime_convert ()),
dbesc ( $n ),
dbesc ( '' )
);
}
else {
$n = zot_build_packet ( $channel , 'notify' , $env_recips ,(( $private ) ? $hub [ 'hubloc_sitekey' ] : null ), $hash );
q ( " insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' ) " ,
dbesc ( $hash ),
intval ( $target_item [ 'aid' ]),
intval ( $target_item [ 'uid' ]),
dbesc ( $hub [ 'hubloc_callback' ]),
intval ( 1 ),
dbesc ( datetime_convert ()),
dbesc ( datetime_convert ()),
dbesc ( $n ),
dbesc ( json_encode ( $encoded_item ))
);
}
2012-12-06 00:44:07 +00:00
$deliver [] = $hash ;
2011-08-26 03:35:55 +00:00
2012-12-06 00:44:07 +00:00
if ( count ( $deliver ) >= $deliveries_per_process ) {
2012-11-19 02:30:00 +00:00
proc_run ( 'php' , 'include/deliver.php' , $deliver );
2012-12-06 00:44:07 +00:00
$deliver = array ();
if ( $interval )
@ time_sleep_until ( microtime ( true ) + ( float ) $interval );
2011-01-31 22:01:38 +00:00
}
}
2012-12-06 00:44:07 +00:00
// catch any stragglers
if ( count ( $deliver )) {
proc_run ( 'php' , 'include/deliver.php' , $deliver );
}
2013-07-22 00:19:16 +00:00
logger ( 'notifier: basic loop complete.' , LOGGER_DEBUG );
2012-12-06 00:44:07 +00:00
2011-10-12 01:24:37 +00:00
if ( $normal_mode )
call_hooks ( 'notifier_normal' , $target_item );
2013-07-22 00:19:16 +00:00
2011-10-12 01:24:37 +00:00
call_hooks ( 'notifier_end' , $target_item );
2013-07-22 00:19:16 +00:00
logger ( 'notifer: complete.' );
2011-01-28 13:04:18 +00:00
return ;
2012-11-19 02:30:00 +00:00
2011-01-28 13:04:18 +00:00
}
2010-07-08 05:44:22 +00:00
2012-11-19 02:30:00 +00:00
2011-01-28 13:04:18 +00:00
if ( array_search ( __file__ , get_included_files ()) === 0 ){
notifier_run ( $argv , $argc );
killme ();
}