From 8ab90f02c36a4a9cf17bdb6521b6cf8a2868deca Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 29 Oct 2016 21:27:56 +0000 Subject: [PATCH] Shadow entry mechanism improved --- include/items.php | 2 +- include/threads.php | 22 +++++++++++++++++++- mod/item.php | 50 ++++++++++----------------------------------- 3 files changed, 33 insertions(+), 41 deletions(-) diff --git a/include/items.php b/include/items.php index 25bae091ec..41d13616ea 100644 --- a/include/items.php +++ b/include/items.php @@ -938,7 +938,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa if ($arr['parent-uri'] === $arr['uri']) { add_shadow_thread($current_post); } else { - add_shadow_entry($arr); + add_shadow_entry($current_post); } check_item_notification($current_post, $uid); diff --git a/include/threads.php b/include/threads.php index 79340ab2cb..8dfb412525 100644 --- a/include/threads.php +++ b/include/threads.php @@ -97,7 +97,15 @@ function add_shadow_thread($itemid) { unset($item[0]['id']); $item[0]['uid'] = 0; $item[0]['origin'] = 0; + $item[0]['wall'] = 0; $item[0]['contact-id'] = get_contact($item[0]['author-link'], 0); + + if (in_array($item[0]['type'], array("net-comment", "wall-comment"))) { + $item[0]['type'] = 'remote-comment'; + } elseif ($item[0]['type'] == 'wall') { + $item[0]['type'] = 'remote'; + } + $public_shadow = item_store($item[0], false, false, true); logger("Stored public shadow for thread ".$itemid." under id ".$public_shadow, LOGGER_DEBUG); @@ -105,7 +113,10 @@ function add_shadow_thread($itemid) { } } -function add_shadow_entry($item) { +function add_shadow_entry($itemid) { + + $items = q("SELECT * FROM `item` WHERE `id` = %d", intval($itemid)); + $item = $items[0]; // Is this a shadow entry? if ($item['uid'] == 0) @@ -127,7 +138,16 @@ function add_shadow_entry($item) { unset($item['id']); $item['uid'] = 0; + $item['origin'] = 0; + $item['wall'] = 0; $item['contact-id'] = get_contact($item['author-link'], 0); + + if (in_array($item['type'], array("net-comment", "wall-comment"))) { + $item['type'] = 'remote-comment'; + } elseif ($item['type'] == 'wall') { + $item['type'] = 'remote'; + } + $public_shadow = item_store($item, false, false, true); logger("Stored public shadow for comment ".$item['uri']." under id ".$public_shadow, LOGGER_DEBUG); diff --git a/mod/item.php b/mod/item.php index dec7cc05bf..23bc2d0bb0 100644 --- a/mod/item.php +++ b/mod/item.php @@ -1009,50 +1009,22 @@ function item_post(&$a) { } } + if ($post_id == $parent) { + add_thread($post_id); + } else { + update_thread($parent, true); + } + + q("COMMIT"); + create_tags_from_item($post_id); create_files_from_item($post_id); - if ($post_id == $parent) { - add_thread($post_id); - q("COMMIT"); - + // Insert an item entry for UID=0 for global entries + if ($post_id != $parent) { add_shadow_thread($post_id); } else { - update_thread($parent, true); - q("COMMIT"); - - // Insert an item entry for UID=0 for global entries - // We have to remove or change some data before that, - // so that the post appear like a regular received post. - // Additionally there is some data that isn't a database field. - $arr = $datarray; - - $arr['app'] = $arr['source']; - unset($arr['source']); - - unset($arr['self']); - unset($arr['wall']); - unset($arr['origin']); - unset($arr['api_source']); - unset($arr['message_id']); - unset($arr['profile_uid']); - unset($arr['post_id']); - unset($arr['dropitems']); - unset($arr['commenter']); - unset($arr['return']); - unset($arr['preview']); - unset($arr['post_id_random']); - unset($arr['emailcc']); - unset($arr['pubmail_enable']); - unset($arr['category']); - unset($arr['jsreload']); - - if (in_array($arr['type'], array("net-comment", "wall-comment"))) { - $arr['type'] = 'remote-comment'; - } elseif ($arr['type'] == 'wall') { - $arr['type'] = 'remote'; - } - add_shadow_entry($arr); + add_shadow_entry($post_id); } // This is a real juggling act on shared hosting services which kill your processes