$fields['raw-body'] = BBCode::removeSharedData($fields['raw-body']);
}
}
-
+
Post\Media::insertFromAttachmentData($item['uri-id'], $fields['body']);
$content_fields = ['raw-body' => trim($fields['raw-body'] ?? $fields['body'])];
* generate a resource-id and therefore aren't intimately linked to the item.
*/
/// @TODO: this should first check if photo is used elsewhere
- if (strlen($item['resource-id'])) {
+ if ($item['resource-id']) {
Photo::delete(['resource-id' => $item['resource-id'], 'uid' => $item['uid']]);
}
Post\ThreadUser::update($item['uri-id'], $item['uid'], ['hidden' => true]);
}
+ DI::notify()->deleteForItem($item['uri-id']);
+ DI::notification()->deleteForItem($item['uri-id']);
+
Logger::info('Item has been marked for deletion.', ['id' => $item_id]);
return true;
$item['protocol'] = Conversation::PARCEL_DIRECT;
$item['direction'] = Conversation::PUSH;
- if (!empty($item['author-link']) && !empty($item['author-id'])) {
- $owner = User::getOwnerDataById($item['uid']);
+ $owner = User::getOwnerDataById($item['uid']);
+
+ if (empty($item['contact-id'])) {
+ $item['contact-id'] = $owner['id'];
+ }
+
+ if (empty($item['author-link']) && empty($item['author-id'])) {
$item['author-link'] = $owner['url'];
$item['author-name'] = $owner['name'];
$item['author-avatar'] = $owner['thumb'];
}
- if (!empty($item['owner-link']) && !empty($item['owner-id'])) {
+ if (empty($item['owner-link']) && empty($item['owner-id'])) {
$item['owner-link'] = $item['author-link'];
$item['owner-name'] = $item['author-name'];
$item['owner-avatar'] = $item['author-avatar'];
}
+ // Setting the object type if not defined before
+ if (empty($item['object-type'])) {
+ $item['object-type'] = Activity\ObjectType::NOTE; // Default value
+ $objectdata = BBCode::getAttachedData($item['body']);
+
+ if ($objectdata['type'] == 'link') {
+ $item['object-type'] = Activity\ObjectType::BOOKMARK;
+ } elseif ($objectdata['type'] == 'video') {
+ $item['object-type'] = Activity\ObjectType::VIDEO;
+ } elseif ($objectdata['type'] == 'photo') {
+ $item['object-type'] = Activity\ObjectType::IMAGE;
+ }
+ }
+
return $item;
}
return;
}
+ $cdata = Contact::getPublicAndUserContactID($item['author-id'], $item['uid']);
+ if (empty($cdata['user']) || ($cdata['user'] != $item['contact-id'])) {
+ return;
+ }
+
if (!DBA::exists('contact', ['id' => $item['contact-id'], 'remote_self' => Contact::MIRROR_NATIVE_RESHARE])) {
return;
}
public static function isRemoteSelf(array $contact, array &$datarray): bool
{
- if (!$contact['remote_self']) {
+ if ($contact['remote_self'] != Contact::MIRROR_OWN_POST) {
return false;
}
// Prevent the forwarding of posts that are forwarded
- if (!empty($datarray["extid"]) && ($datarray["extid"] == Protocol::DFRN)) {
+ if (!empty($datarray['extid']) && ($datarray['extid'] == Protocol::DFRN)) {
Logger::info('Already forwarded');
return false;
}
// Prevent to forward already forwarded posts
- if ($datarray["app"] == DI::baseUrl()->getHostname()) {
+ if ($datarray['app'] == DI::baseUrl()->getHostname()) {
Logger::info('Already forwarded (second test)');
return false;
}
// Only forward posts
- if ($datarray["verb"] != Activity::POST) {
+ if ($datarray['verb'] != Activity::POST) {
Logger::info('No post');
return false;
}
$datarray2 = $datarray;
Logger::info('remote-self start', ['contact' => $contact['url'], 'remote_self'=> $contact['remote_self'], 'item' => $datarray]);
- if ($contact['remote_self'] == Contact::MIRROR_OWN_POST) {
- $self = DBA::selectFirst('contact', ['id', 'name', 'url', 'thumb'],
- ['uid' => $contact['uid'], 'self' => true]);
- if (DBA::isResult($self)) {
- $datarray['contact-id'] = $self["id"];
-
- $datarray['owner-name'] = $self["name"];
- $datarray['owner-link'] = $self["url"];
- $datarray['owner-avatar'] = $self["thumb"];
-
- $datarray['author-name'] = $datarray['owner-name'];
- $datarray['author-link'] = $datarray['owner-link'];
- $datarray['author-avatar'] = $datarray['owner-avatar'];
-
- unset($datarray['edited']);
-
- unset($datarray['network']);
- unset($datarray['owner-id']);
- unset($datarray['author-id']);
- }
-
- if ($contact['network'] != Protocol::FEED) {
- $old_uri_id = $datarray["uri-id"] ?? 0;
- $datarray["guid"] = System::createUUID();
- unset($datarray["plink"]);
- $datarray["uri"] = self::newURI($datarray["guid"]);
- $datarray["uri-id"] = ItemURI::getIdByURI($datarray["uri"]);
- $datarray["extid"] = Protocol::DFRN;
- $urlpart = parse_url($datarray2['author-link']);
- $datarray["app"] = $urlpart["host"];
- if (!empty($old_uri_id)) {
- Post\Media::copy($old_uri_id, $datarray["uri-id"]);
- }
- unset($datarray["parent-uri"]);
- unset($datarray["thr-parent"]);
- } else {
- $datarray['private'] = self::PUBLIC;
- }
+ $self = DBA::selectFirst('contact', ['id', 'name', 'url', 'thumb'],
+ ['uid' => $contact['uid'], 'self' => true]);
+ if (!DBA::isResult($self)) {
+ Logger::error('Self contact not found', ['uid' => $contact['uid']]);
+ return false;
}
+ $datarray['contact-id'] = $self['id'];
+
+ $datarray['author-name'] = $datarray['owner-name'] = $self['name'];
+ $datarray['author-link'] = $datarray['owner-link'] = $self['url'];
+ $datarray['author-avatar'] = $datarray['owner-avatar'] = $self['thumb'];
+
+ unset($datarray['edited']);
+
+ unset($datarray['network']);
+ unset($datarray['owner-id']);
+ unset($datarray['author-id']);
+
if ($contact['network'] != Protocol::FEED) {
+ $old_uri_id = $datarray['uri-id'] ?? 0;
+ $datarray['guid'] = System::createUUID();
+ unset($datarray['plink']);
+ $datarray['uri'] = self::newURI($datarray['guid']);
+ $datarray['uri-id'] = ItemURI::getIdByURI($datarray['uri']);
+ $datarray['extid'] = Protocol::DFRN;
+ $urlpart = parse_url($datarray2['author-link']);
+ $datarray['app'] = $urlpart['host'];
+ if (!empty($old_uri_id)) {
+ Post\Media::copy($old_uri_id, $datarray['uri-id']);
+ }
+
+ unset($datarray['parent-uri']);
+ unset($datarray['thr-parent']);
+
// Store the original post
$result = self::insert($datarray2);
Logger::info('remote-self post original item', ['contact' => $contact['url'], 'result'=> $result, 'item' => $datarray2]);
} else {
- $datarray["app"] = "Feed";
+ $datarray['private'] = self::PUBLIC;
+ $datarray['app'] = 'Feed';
$result = true;
}
}
$condition = ['vid' => $vids, 'deleted' => false, 'gravity' => self::GRAVITY_ACTIVITY,
- 'author-id' => $author_id, 'uid' => $item['uid'], 'thr-parent-id' => $uri_id];
+ 'author-id' => $author_id, 'uid' => $uid, 'thr-parent-id' => $uri_id];
$like_item = Post::selectFirst(['id', 'guid', 'verb'], $condition);
if (DBA::isResult($like_item)) {
$a = DI::app();
Hook::callAll('prepare_body_init', $item);
+
// In order to provide theme developers more possibilities, event items
// are treated differently.
if ($item['object-type'] === Activity\ObjectType::EVENT && isset($item['event-id'])) {
$item['body'] = self::replaceVisualAttachments($attachments, $item['body'] ?? '');
$item['body'] = preg_replace("/\s*\[attachment .*?\].*?\[\/attachment\]\s*/ism", "\n", $item['body']);
+
self::putInCache($item);
$item['body'] = $body;
$s = $item["rendered-html"];
'filter_reasons' => $filter_reasons
];
Hook::callAll('prepare_body', $hook_data);
- $s = $hook_data['html'];
+ // Remove old images
+ $hook_data['html'] = preg_replace('|(<a.*><img.*>.*</a>)|', '', $hook_data['html']);
+ $grid = self::make_image_grid($hook_data);
+ $s = $hook_data['html'] . $grid;
unset($hook_data);
if (!$attach) {
return $hook_data['html'];
}
+ private function make_image_grid(array &$data)
+ {
+ $item = $data['item'];
+ if ($item['has-media']) {
+ $attachments = Post\Media::splitAttachments($item['uri-id'], [], $item['has-media'] ?? false);
+ if (count($attachments['visual']) > 1) {
+ $img_tags = array();
+ foreach ($attachments['visual'] as $attachment) {
+ $src_url = Post\Media::getUrlForId($attachment['id']);
+ $preview_url = Post\Media::getPreviewUrlForId($attachment['id'], ($attachment['width'] > $attachment['height']) ? Proxy::SIZE_MEDIUM : Proxy::SIZE_LARGE);
+ $img_tag = array(
+ '$image' => [
+ 'src' => $src_url,
+ 'preview' => $preview_url,
+ 'attachment' => $attachment,
+ ]);
+ $img_tags[] = $img_tag;
+ }
+ $img_grid = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image_grid.tpl'), [
+ 'columns' => [
+ 'fc' => $img_tags[0],
+ 'sc' => $img_tags[1],
+ ],
+ ]);
+ return $img_grid;
+ }
+ }
+
+ }
+
/**
* Check if the body contains a link
*