diff --git a/src/Content/Item.php b/src/Content/Item.php index 26df55fd06..1bf3e68726 100644 --- a/src/Content/Item.php +++ b/src/Content/Item.php @@ -859,7 +859,7 @@ class Item $user = User::getById($post['uid'], ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid']); if (!$user) { - throw new HTTPException\NotFoundException($this->l10n->t('Unable to locate original post.')); + throw new HTTPException\NotFoundException($this->l10n->t('Unable to fetch user.')); } $post['allow_cid'] = isset($request['contact_allow']) ? $this->aclFormatter->toString($request['contact_allow']) : $user['allow_cid'] ?? ''; @@ -957,10 +957,30 @@ class Item $post['origin'] = true; $post['wall'] = $post['wall'] ?? true; $post['guid'] = $post['guid'] ?? System::createUUID(); - $post['uri'] = $post['uri'] ?? ItemModel::newURI($post['guid']); $post['verb'] = $post['verb'] ?? Activity::POST; + + if (empty($post['uri'])) { + $post['thr-parent'] = $post['uri'] = ItemModel::newURI($post['guid']); + $post['gravity'] = ItemModel::GRAVITY_PARENT; + } + $owner = User::getOwnerDataById($post['uid']); + if (!isset($post['allow_cid']) || !isset($post['allow_gid']) || !isset($post['deny_cid']) || !isset($post['deny_gid'])) { + $post['allow_cid'] = $owner['allow_cid']; + $post['allow_gid'] = $owner['allow_gid']; + $post['deny_cid'] = $owner['deny_cid']; + $post['deny_gid'] = $owner['deny_gid']; + } + + if ($post['allow_gid'] || $post['allow_cid'] || $post['deny_gid'] || $post['deny_cid']) { + $post['private'] = ItemModel::PRIVATE; + } elseif ($this->pConfig->get($post['uid'], 'system', 'unlisted')) { + $post['private'] = ItemModel::UNLISTED; + } else { + $post['private'] = ItemModel::PUBLIC; + } + if (empty($post['contact-id'])) { $post['contact-id'] = $owner['id']; } diff --git a/src/Model/Item.php b/src/Model/Item.php index afa51461e8..fb638d6e93 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -1224,6 +1224,8 @@ class Item Post\Content::insert($item['uri-id'], $item); } + $item['parent'] = $parent_id; + // Create Diaspora signature if ($item['origin'] && empty($item['diaspora_signed_text']) && ($item['gravity'] != self::GRAVITY_PARENT)) { $signed = Diaspora::createCommentSignature($item); @@ -1741,16 +1743,16 @@ class Item $item['origin'] = 0; $item['wall'] = 0; - $item['contact-id'] = self::contactId($item); - $notify = false; if ($item['gravity'] == self::GRAVITY_PARENT) { $contact = DBA::selectFirst('contact', [], ['id' => $item['contact-id'], 'self' => false]); if (DBA::isResult($contact)) { $notify = self::isRemoteSelf($contact, $item); + $item['wall'] = (bool)$notify; } } + $item['contact-id'] = self::contactId($item); $distributed = self::insert($item, $notify); if (!$distributed) { diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index 0b005570b2..26d5376e4e 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -2079,6 +2079,7 @@ class DFRN // This is my contact on another system, but it's really me. // Turn this into a wall post. $notify = Item::isRemoteSelf($importer, $item); + $item['wall'] = (bool)$notify; $posted_id = Item::insert($item, $notify); diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php index 63a9fbfbdc..ccbe35e712 100644 --- a/src/Protocol/Feed.php +++ b/src/Protocol/Feed.php @@ -624,6 +624,7 @@ class Feed Logger::info('Stored feed', ['item' => $item]); $notify = Item::isRemoteSelf($contact, $item); + $item['wall'] = (bool)$notify; // Distributed items should have a well-formatted URI. // Additionally, we have to avoid conflicts with identical URI between imported feeds and these items.