From f0b41709eb40237334de5d9a0ae7adbcd95fb841 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 25 Jun 2012 17:45:33 -0700 Subject: [PATCH] improve remote delete forwarding --- include/api.php | 2 +- include/items.php | 64 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/include/api.php b/include/api.php index cee1fde23b..09cca8d8db 100644 --- a/include/api.php +++ b/include/api.php @@ -565,7 +565,7 @@ if(requestdata('lat') && requestdata('long')) $_REQUEST['coord'] = sprintf("%s %s",requestdata('lat'),requestdata('long')); $_REQUEST['profile_uid'] = local_user(); -// if(requestdata('parent')) + if($parent) $_REQUEST['type'] = 'net-comment'; else { diff --git a/include/items.php b/include/items.php index e495393fa5..b90b5434ff 100755 --- a/include/items.php +++ b/include/items.php @@ -2148,6 +2148,66 @@ function local_delivery($importer,$data) { } if($deleted) { + + $is_reply = false; + $r = q("select * from item where uri = '%s' and id = parent limit 1", + dbesc($uri) + ); + if(count($r)) { + $parent_uri = $r[0]['parent-uri']; + if($r[0]['parent-uri'] != $uri && $r[0]['thr-parent'] != $uri) + $is_reply = true; + } + + + if($is_reply) { + $community = false; + + if($importer['page-flags'] == PAGE_COMMUNITY || $importer['page-flags'] == PAGE_PRVGROUP ) { + $sql_extra = ''; + $community = true; + logger('local_delivery: possible community delete'); + } + else + $sql_extra = " and contact.self = 1 and item.wall = 1 "; + + // was the top-level post for this reply written by somebody on this site? + // Specifically, the recipient? + + $is_a_remote_delete = false; + + $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`,`item`.`wall`, + `contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item` + LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` + WHERE `item`.`uri` = '%s' AND (`item`.`parent-uri` = '%s' or `item`.`thr-parent` = '%s') + AND `item`.`uid` = %d + $sql_extra + LIMIT 1", + dbesc($parent_uri), + dbesc($parent_uri), + dbesc($parent_uri), + intval($importer['importer_uid']) + ); + if($r && count($r)) + $is_a_remote_delete = true; + + // Does this have the characteristics of a community or private group comment? + // If it's a reply to a wall post on a community/prvgroup page it's a + // valid community comment. Also forum_mode makes it valid for sure. + // If neither, it's not. + + if($is_a_remote_delete && $community) { + if((! $r[0]['forum_mode']) && (! $r[0]['wall'])) { + $is_a_remote_delete = false; + logger('local_delivery: not a community delete'); + } + } + + if($is_a_remote_delete) { + logger('local_delivery: received remote delete'); + } + } + $r = q("SELECT `item`.*, `contact`.`self` FROM `item` left join contact on `item`.`contact-id` = `contact`.`id` WHERE `uri` = '%s' AND `item`.`uid` = %d AND `contact-id` = %d AND NOT `item`.`file` LIKE '%%[%%' LIMIT 1", dbesc($uri), @@ -2235,7 +2295,9 @@ function local_delivery($importer,$data) { ); } } - } + if($is_a_remote_delete) + proc_run('php',"include/notifier.php","delete",$item['id']); + } } } }