diff options
-rwxr-xr-x | boot.php | 2 | ||||
-rw-r--r-- | include/deliver.php | 23 | ||||
-rw-r--r-- | include/notifier.php | 12 | ||||
-rw-r--r-- | include/poller.php | 11 | ||||
-rw-r--r-- | include/zot.php | 12 | ||||
-rw-r--r-- | install/schema_mysql.sql | 2 | ||||
-rw-r--r-- | install/schema_postgres.sql | 2 | ||||
-rw-r--r-- | install/update.php | 13 | ||||
-rw-r--r-- | mod/dreport.php | 32 |
9 files changed, 105 insertions, 4 deletions
@@ -50,7 +50,7 @@ define ( 'PLATFORM_NAME', 'hubzilla' ); define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'H'); define ( 'ZOT_REVISION', 1 ); -define ( 'DB_UPDATE_VERSION', 1153 ); +define ( 'DB_UPDATE_VERSION', 1154 ); /** * @brief Constant with a HTML line break. diff --git a/include/deliver.php b/include/deliver.php index 26739fb06..7a43e3d47 100644 --- a/include/deliver.php +++ b/include/deliver.php @@ -15,7 +15,10 @@ function deliver_run($argv, $argc) { logger('deliver: invoked: ' . print_r($argv,true), LOGGER_DATA); + for($x = 1; $x < $argc; $x ++) { + + $dresult = null; $r = q("select * from outq where outq_hash = '%s' limit 1", dbesc($argv[$x]) ); @@ -98,11 +101,29 @@ function deliver_run($argv, $argc) { } else { $msg = array('body' => json_encode(array('success' => true, 'pickup' => array(array('notify' => $notify,'message' => $m))))); - zot_import($msg,z_root()); + $dresult = zot_import($msg,z_root()); } $r = q("delete from outq where outq_hash = '%s'", dbesc($argv[$x]) ); + if($dresult && is_array($dresult)) { + foreach($dresult as $xx) { + if(is_array($xx) && array_key_exists('message_id',$xx)) { + q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s','%s','%s','%s','%s' ) ", + dbesc($xx['message_id']), + dbesc($xx['location']), + dbesc($xx['recipient']), + dbesc($xx['status']), + dbesc(datetime_convert($xx['date'])), + dbesc($xx['sender']) + ); + } + } + } + + q("delete from dreport where dreport_queue = '%s' limit 1", + dbesc($argv[$x]) + ); } } else { diff --git a/include/notifier.php b/include/notifier.php index e16f80ecf..fd95d53e2 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -662,6 +662,18 @@ function notifier_run($argv, $argc){ dbesc($n), dbesc(json_encode($encoded_item)) ); + // only create delivery reports for normal undeleted items + if(array_key_exists('postopts',$target_item) && (! $target_item['item_deleted'])) { + q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_result, dreport_time, dreport_xchan, dreport_queue ) values ( '%s','%s','%s','%s','%s','%s','%s' ) ", + dbesc($target_item['mid']), + dbesc($hub['hubloc_host']), + dbesc($hub['hubloc_host']), + dbesc('queued'), + dbesc(datetime_convert()), + dbesc($channel['channel_hash']), + dbesc($hash) + ); + } } $deliver[] = $hash; diff --git a/include/poller.php b/include/poller.php index 72f22d946..031fb4533 100644 --- a/include/poller.php +++ b/include/poller.php @@ -201,6 +201,17 @@ function poller_run($argv, $argc){ db_utcnow(), db_quoteinterval('30 DAY') ); + // expire old delivery reports + + $keep_reports = intval(get_config('system','expire_delivery_reports')); + if($keep_reports === 0) + $keep_reports = 30; + + q("delete from dreport where dreport_time < %s - INTERVAL %s", + db_utcnow(), + db_quoteinterval($keep_reports . ' DAY') + ); + // expire any expired accounts downgrade_accounts(); diff --git a/include/zot.php b/include/zot.php index f728d8fb9..942998b98 100644 --- a/include/zot.php +++ b/include/zot.php @@ -971,7 +971,11 @@ function zot_process_response($hub, $arr, $outq) { } } } - + + q("delete from dreport where dreport_queue = '%s' limit 1", + dbesc($outq['outq_hash']) + ); + // update the timestamp for this site q("update site set site_dead = 0, site_update = '%s' where site_url = '%s'", @@ -1575,6 +1579,12 @@ function process_delivery($sender, $arr, $deliveries, $relay, $public = false, $ continue; } + if($d['hash'] === $sender['hash']) { + $DR->update('self delivery ignored'); + $result[] = $DR->get(); + continue; + } + $channel = $r[0]; $DR->addto_recipient($channel['channel_name'] . ' <' . $channel['channel_address'] . '@' . get_app()->get_hostname() . '>'); diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql index 3bb3b7133..a21e5f48a 100644 --- a/install/schema_mysql.sql +++ b/install/schema_mysql.sql @@ -359,11 +359,13 @@ CREATE TABLE IF NOT EXISTS `dreport` ( `dreport_result` char(255) NOT NULL DEFAULT '', `dreport_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `dreport_xchan` char(255) NOT NULL DEFAULT '', + `dreport_queue` char(255) NOT NULL DEFAULT '', PRIMARY KEY (`dreport_id`), KEY `dreport_mid` (`dreport_mid`), KEY `dreport_site` (`dreport_site`), KEY `dreport_time` (`dreport_time`), KEY `dreport_xchan` (`dreport_xchan`), + KEY `dreport_queue` (`dreport_queue`), KEY `dreport_channel` (`dreport_channel`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql index 1298f3cb3..26d7d79a3 100644 --- a/install/schema_postgres.sql +++ b/install/schema_postgres.sql @@ -350,6 +350,7 @@ CREATE TABLE IF NOT EXISTS "dreport" ( "dreport_result" char(255) NOT NULL DEFAULT '', "dreport_time" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', "dreport_xchan" char(255) NOT NULL DEFAULT '', + "dreport_queue" char(255) NOT NULL DEFAULT '', PRIMARY KEY ("dreport_id") ); @@ -357,6 +358,7 @@ create index "dreport_mid" on dreport ("dreport_mid"); create index "dreport_site" on dreport ("dreport_site"); create index "dreport_time" on dreport ("dreport_time"); create index "dreport_xchan" on dreport ("dreport_xchan"); +create index "dreport_queue" on dreport ("dreport_queue"); create index "dreport_channel" on dreport ("dreport_channel"); diff --git a/install/update.php b/install/update.php index cf35698df..bef754570 100644 --- a/install/update.php +++ b/install/update.php @@ -1,6 +1,6 @@ <?php -define( 'UPDATE_VERSION' , 1153 ); +define( 'UPDATE_VERSION' , 1154 ); /** * @@ -1854,3 +1854,14 @@ function update_r1152() { return UPDATE_FAILED; } + +function update_r1153() { + + $r1 = q("ALTER TABLE dreport ADD dreport_queue CHAR( 255 ) NOT NULL DEFAULT '' "); + $r2 = q("create index dreport_queue on dreport ( dreport_queue) "); + if($r1 && $r2) + return UPDATE_SUCCESS; + return UPDATE_FAILED; + + +} diff --git a/mod/dreport.php b/mod/dreport.php new file mode 100644 index 000000000..7e245fbe0 --- /dev/null +++ b/mod/dreport.php @@ -0,0 +1,32 @@ +<?php + +function dreport_content(&$a) { + + if(! local_channel()) { + notice( t('Permission denied') . EOL); + return; + } + + $channel = $a->get_channel(); + + $mid = ((argc() > 1) ? argv(1) : ''); + + if(! $mid) { + notice( t('Invalid message') . EOL); + return; + } + + $r = q("select * from dreport where dreport_xchan = '%s' and dreport_mid = '%s'", + dbesc($channel['channel_hash']), + dbesc($mid) + ); + + if(! $r) { + notice( t('no results') . EOL); + return; + } + + return print_r($r,true); + + +}
\ No newline at end of file |