}
}
- $item = Post::selectFirst(['id', 'uid', 'origin', 'author-link', 'changed', 'private', 'psid', 'gravity'],
+ $item = Post::selectFirst(['id', 'uid', 'origin', 'author-link', 'changed', 'private', 'psid', 'gravity', 'deleted', 'parent-uri-id'],
['uri-id' => $itemuri['id']], ['order' => ['origin' => true]]);
if (!DBA::isResult($item)) {
}
}
- // Valid items are original post or posted from this node (including in the case of a forum)
- if (!$validated || !$item['origin'] && (parse_url($item['author-link'], PHP_URL_HOST) != parse_url(DI::baseUrl()->get(), PHP_URL_HOST))) {
+ if ($validated) {
+ // Valid items are original post or posted from this node (including in the case of a forum)
+ $validated = ($item['origin'] || (parse_url($item['author-link'], PHP_URL_HOST) == parse_url(DI::baseUrl()->get(), PHP_URL_HOST)));
+
+ if (!$validated && $item['deleted']) {
+ $validated = Post::exists(['origin' => true, 'uri-id' => $item['parent-uri-id']]);
+ }
+ }
+
+ if (!$validated) {
throw new HTTPException\NotFoundException();
}
$pinned = DI::l10n()->t('pinned item');
}
- if ($origin && ($item['gravity'] != GRAVITY_PARENT) && ($item['network'] == Protocol::ACTIVITYPUB)) {
- // ActivityPub doesn't allow removal of remote comments
- $delete = DI::l10n()->t('Delete locally');
- } else {
- // Showing the one or the other text, depending upon if we can only hide it or really delete it.
- $delete = $origin ? DI::l10n()->t('Delete globally') : DI::l10n()->t('Remove locally');
- }
+ // Showing the one or the other text, depending upon if we can only hide it or really delete it.
+ $delete = $origin ? DI::l10n()->t('Delete globally') : DI::l10n()->t('Remove locally');
$drop = false;
$block = false;
return false;
}
- $condition = ['item-uri' => $item['uri'], 'protocol' => Conversation::PARCEL_ACTIVITYPUB];
- $conversation = DBA::selectFirst('conversation', ['source'], $condition);
- if (!$item['origin'] && DBA::isResult($conversation)) {
- $data = json_decode($conversation['source'], true);
- if (!empty($data['type'])) {
- if (in_array($data['type'], ['Create', 'Update'])) {
- if ($object_mode) {
- unset($data['@context']);
- unset($data['signature']);
- }
- Logger::info('Return stored conversation', ['item' => $item_id]);
- return $data;
- } elseif (in_array('as:' . $data['type'], Receiver::CONTENT_TYPES)) {
- if (!empty($data['@context'])) {
- $context = $data['@context'];
- unset($data['@context']);
+ if (!$item['deleted']) {
+ $condition = ['item-uri' => $item['uri'], 'protocol' => Conversation::PARCEL_ACTIVITYPUB];
+ $conversation = DBA::selectFirst('conversation', ['source'], $condition);
+ if (!$item['origin'] && DBA::isResult($conversation)) {
+ $data = json_decode($conversation['source'], true);
+ if (!empty($data['type'])) {
+ if (in_array($data['type'], ['Create', 'Update'])) {
+ if ($object_mode) {
+ unset($data['@context']);
+ unset($data['signature']);
+ }
+ Logger::info('Return stored conversation', ['item' => $item_id]);
+ return $data;
+ } elseif (in_array('as:' . $data['type'], Receiver::CONTENT_TYPES)) {
+ if (!empty($data['@context'])) {
+ $context = $data['@context'];
+ unset($data['@context']);
+ }
+ unset($data['actor']);
+ $object = $data;
}
- unset($data['actor']);
- $object = $data;
}
}
}
$data = [];
}
- if (($item['gravity'] == GRAVITY_ACTIVITY) && ($type != 'Undo')) {
+ if ($type == 'Delete') {
+ $data['id'] = Item::newURI($item['uid'], $item['guid']) . '/' . $type;;
+ } elseif (($item['gravity'] == GRAVITY_ACTIVITY) && ($type != 'Undo')) {
$data['id'] = $item['uri'];
} else {
$data['id'] = $item['uri'] . '/' . $type;