X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FItem.php;h=0a480d755bdf224997f23aca92a9d84025e4f920;hb=b333c7ae2ef38b54a837f3443b76cb02cedbbfd1;hp=01a0b7497cb6397f6762222c2e540d566c021066;hpb=288b508e2a0b985fb7308f2f07a9a3d16d4302c7;p=friendica.git diff --git a/src/Model/Item.php b/src/Model/Item.php index 01a0b7497c..0a480d755b 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -75,8 +75,9 @@ class Item extends BaseObject Term::insertFromFileFieldByItemId($item['id']); self::updateThread($item['id']); - // We only need to notfiy others when it is an original entry from us - if ($item['origin']) { + // We only need to notfiy others when it is an original entry from us. + // Only call the notifier when the item has some content relevant change. + if ($item['origin'] && in_array('edited', array_keys($fields))) { Worker::add(PRIORITY_HIGH, "Notifier", 'edit_post', $item['id']); } } @@ -112,15 +113,17 @@ class Item extends BaseObject public static function deleteById($item_id, $priority = PRIORITY_HIGH) { // locate item to be deleted - $fields = ['id', 'uid', 'parent', 'parent-uri', 'origin', 'deleted', - 'file', 'resource-id', 'event-id', 'attach', + $fields = ['id', 'uri', 'uid', 'parent', 'parent-uri', 'origin', + 'deleted', 'file', 'resource-id', 'event-id', 'attach', 'verb', 'object-type', 'object', 'target', 'contact-id']; $item = dba::selectFirst('item', $fields, ['id' => $item_id]); if (!DBM::is_result($item)) { + logger('Item with ID ' . $item_id . " hasn't been found.", LOGGER_DEBUG); return false; } if ($item['deleted']) { + logger('Item with ID ' . $item_id . ' has already been deleted.', LOGGER_DEBUG); return false; } @@ -129,8 +132,6 @@ class Item extends BaseObject $parent = ['origin' => false]; } - logger('delete item: ' . $item['id'], LOGGER_DEBUG); - // clean up categories and tags so they don't end up as orphans $matches = false; @@ -183,16 +184,27 @@ class Item extends BaseObject Term::insertFromFileFieldByItemId($item['id']); self::deleteThread($item['id'], $item['parent-uri']); + if (!dba::exists('item', ["`uri` = ? AND `uid` != 0 AND NOT `deleted`", $item['uri']])) { + self::delete(['uri' => $item['uri'], 'uid' => 0, 'deleted' => false], $priority); + } + // If it's the parent of a comment thread, kill all the kids if ($item['id'] == $item['parent']) { - self::delete(['parent' => $item['parent']], $priority); + self::delete(['parent' => $item['parent'], 'deleted' => false], $priority); } - // send the notification upstream/downstream + // Is it our comment and/or our thread? if ($item['origin'] || $parent['origin']) { + + // When we delete the original post we will delete all existing copies on the server as well + self::delete(['uri' => $item['uri'], 'deleted' => false], $priority); + + // send the notification upstream/downstream Worker::add(['priority' => $priority, 'dont_fork' => true], "Notifier", "drop", intval($item['id'])); } + logger('Item with ID ' . $item_id . " has been deleted.", LOGGER_DEBUG); + return true; } @@ -333,6 +345,12 @@ class Item extends BaseObject $item['origin'] = 1; $item['network'] = NETWORK_DFRN; $item['protocol'] = PROTOCOL_DFRN; + + if (is_int($notify)) { + $priority = $notify; + } else { + $priority = PRIORITY_HIGH; + } } else { $item['network'] = trim(defaults($item, 'network', NETWORK_PHANTOM)); } @@ -355,6 +373,13 @@ class Item extends BaseObject unset($item['dsprsig']); } + if (!empty($item['diaspora_signed_text'])) { + $diaspora_signed_text = $item['diaspora_signed_text']; + unset($item['diaspora_signed_text']); + } else { + $diaspora_signed_text = ''; + } + // Converting the plink /// @TODO Check if this is really still needed if ($item['network'] == NETWORK_OSTATUS) { @@ -553,7 +578,7 @@ class Item extends BaseObject $fields = ['uri', 'parent-uri', 'id', 'deleted', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', - 'wall', 'private', 'forum_mode']; + 'wall', 'private', 'forum_mode', 'origin']; $condition = ['uri' => $item['parent-uri'], 'uid' => $item['uid']]; $params = ['order' => ['id' => false]]; $parent = dba::selectFirst('item', $fields, $condition, $params); @@ -805,6 +830,12 @@ class Item extends BaseObject 'signature' => $dsprsig->signature, 'signer' => $dsprsig->signer]); } + if (!empty($diaspora_signed_text)) { + // Formerly we stored the signed text, the signature and the author in different fields. + // We now store the raw data so that we are more flexible. + dba::insert('sign', ['iid' => $current_post, 'signed_text' => $diaspora_signed_text]); + } + $deleted = self::tagDeliver($item['uid'], $current_post); /* @@ -848,7 +879,9 @@ class Item extends BaseObject check_user_notification($current_post); if ($notify) { - Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", $notify_type, $current_post); + Worker::add(['priority' => $priority, 'dont_fork' => true], "Notifier", $notify_type, $current_post); + } elseif (!empty($parent) && $parent['origin']) { + Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", "comment-import", $current_post); } return $current_post; @@ -857,9 +890,10 @@ class Item extends BaseObject /** * @brief Distributes public items to the receivers * - * @param integer $itemid Item ID that should be added + * @param integer $itemid Item ID that should be added + * @param string $signed_text Original text (for Diaspora signatures), JSON encoded. */ - public static function distribute($itemid) + public static function distribute($itemid, $signed_text = '') { $condition = ["`id` IN (SELECT `parent` FROM `item` WHERE `id` = ?)", $itemid]; $parent = dba::selectFirst('item', ['owner-id'], $condition); @@ -894,14 +928,22 @@ class Item extends BaseObject $users[$contact['uid']] = $contact['uid']; } + $origin_uid = 0; + if ($item['uri'] != $item['parent-uri']) { - $parents = dba::select('item', ['uid'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]); + $parents = dba::select('item', ['uid', 'origin'], ["`uri` = ? AND `uid` != 0", $item['parent-uri']]); while ($parent = dba::fetch($parents)) { $users[$parent['uid']] = $parent['uid']; + if ($parent['origin'] && !$item['origin']) { + $origin_uid = $parent['uid']; + } } } foreach ($users as $uid) { + if ($origin_uid == $uid) { + $item['diaspora_signed_text'] = $signed_text; + } self::storeForUser($itemid, $item, $uid); } }