+
+ private static function addThread($itemid, $onlyshadow = false)
+ {
+ $fields = ['uid', 'created', 'edited', 'commented', 'received', 'changed', 'wall', 'private', 'pubmail',
+ 'moderated', 'visible', 'spam', 'starred', 'bookmark', 'contact-id',
+ 'deleted', 'origin', 'forum_mode', 'mention', 'network', 'author-id', 'owner-id'];
+ $condition = ["`id` = ? AND (`parent` = ? OR `parent` = 0)", $itemid, $itemid];
+ $item = dba::selectFirst('item', $fields, $condition);
+
+ if (!DBM::is_result($item)) {
+ return;
+ }
+
+ $item['iid'] = $itemid;
+
+ if (!$onlyshadow) {
+ $result = dba::insert('thread', $item);
+
+ logger("Add thread for item ".$itemid." - ".print_r($result, true), LOGGER_DEBUG);
+ }
+ }
+
+ private static function updateThread($itemid, $setmention = false)
+ {
+ $fields = ['uid', 'guid', 'title', 'body', 'created', 'edited', 'commented', 'received', 'changed',
+ 'wall', 'private', 'pubmail', 'moderated', 'visible', 'spam', 'starred', 'bookmark', 'contact-id',
+ 'deleted', 'origin', 'forum_mode', 'network', 'rendered-html', 'rendered-hash'];
+ $condition = ["`id` = ? AND (`parent` = ? OR `parent` = 0)", $itemid, $itemid];
+
+ $item = dba::selectFirst('item', $fields, $condition);
+ if (!DBM::is_result($item)) {
+ return;
+ }
+
+ if ($setmention) {
+ $item["mention"] = 1;
+ }
+
+ $sql = "";
+
+ $fields = [];
+
+ foreach ($item as $field => $data) {
+ if (!in_array($field, ["guid", "title", "body", "rendered-html", "rendered-hash"])) {
+ $fields[$field] = $data;
+ }
+ }
+
+ $result = dba::update('thread', $fields, ['iid' => $itemid]);
+
+ logger("Update thread for item ".$itemid." - guid ".$item["guid"]." - ".(int)$result." ".print_r($item, true), LOGGER_DEBUG);
+
+ // Updating a shadow item entry
+ $items = dba::selectFirst('item', ['id'], ['guid' => $item['guid'], 'uid' => 0]);
+
+ if (!DBM::is_result($items)) {
+ return;
+ }
+
+ $fields = ['title' => $item['title'], 'body' => $item['body'],
+ 'rendered-html' => $item['rendered-html'], 'rendered-hash' => $item['rendered-hash']];
+ $result = dba::update('item', $fields, ['id' => $items['id']]);
+
+ logger("Updating public shadow for post ".$items["id"]." - guid ".$item["guid"]." Result: ".print_r($result, true), LOGGER_DEBUG);
+ }
+
+ private static function deleteThread($itemid, $itemuri = "")
+ {
+ $item = dba::selectFirst('thread', ['uid'], ['iid' => $itemid]);
+ if (!DBM::is_result($item)) {
+ logger('No thread found for id '.$itemid, LOGGER_DEBUG);
+ return;
+ }
+
+ // Using dba::delete at this time could delete the associated item entries
+ $result = dba::e("DELETE FROM `thread` WHERE `iid` = ?", $itemid);
+
+ logger("deleteThread: Deleted thread for item ".$itemid." - ".print_r($result, true), LOGGER_DEBUG);
+
+ if ($itemuri != "") {
+ $condition = ["`uri` = ? AND NOT `deleted` AND NOT (`uid` IN (?, 0))", $itemuri, $item["uid"]];
+ if (!dba::exists('item', $condition)) {
+ dba::delete('item', ['uri' => $itemuri, 'uid' => 0]);
+ logger("deleteThread: Deleted shadow for item ".$itemuri, LOGGER_DEBUG);
+ }
+ }
+ }