$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'])];
$content_fields['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $content_fields['raw-body']);
$content_fields['raw-body'] = self::setHashtags($content_fields['raw-body']);
- if ($item['author-network'] != Protocol::DFRN) {
- Post\Media::insertFromRelevantUrl($item['uri-id'], $content_fields['raw-body']);
- }
-
+ Post\Media::insertFromRelevantUrl($item['uri-id'], $content_fields['raw-body']);
Post\Content::update($item['uri-id'], $content_fields);
}
* 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']]);
}
return self::GRAVITY_UNKNOWN; // Should not happen
}
+ private static function prepareOriginPost(array $item): array
+ {
+ $item['wall'] = 1;
+ $item['origin'] = 1;
+ $item['network'] = Protocol::DFRN;
+ $item['protocol'] = Conversation::PARCEL_DIRECT;
+ $item['direction'] = Conversation::PUSH;
+
+ $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'])) {
+ $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;
+ }
+
/**
* Inserts item record
*
// If it is a posting where users should get notifications, then define it as wall posting
if ($notify) {
- $item['wall'] = 1;
- $item['origin'] = 1;
- $item['network'] = Protocol::DFRN;
- $item['protocol'] = Conversation::PARCEL_DIRECT;
- $item['direction'] = Conversation::PUSH;
+ $item = self::prepareOriginPost($item);
if (is_int($notify) && in_array($notify, Worker::PRIORITIES)) {
$priority = $notify;
$item['parent-uri'] = $toplevel_parent['uri'];
$item['parent-uri-id'] = $toplevel_parent['uri-id'];
$item['deleted'] = $toplevel_parent['deleted'];
+ $item['wall'] = $toplevel_parent['wall'];
// Reshares have to keep their permissions to allow forums to work
if (!$item['origin'] || ($item['verb'] != Activity::ANNOUNCE)) {
$item['raw-body'] = Post\Media::insertFromBody($item['uri-id'], $item['raw-body']);
$item['raw-body'] = self::setHashtags($item['raw-body']);
- if (!DBA::exists('contact', ['id' => $item['author-id'], 'network' => Protocol::DFRN])) {
- Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body']);
- }
+ Post\Media::insertFromRelevantUrl($item['uri-id'], $item['raw-body']);
// Check for hashtags in the body and repair or add hashtag links
$item['body'] = self::setHashtags($item['body']);
}
}
+ if (!empty($source) && ($transmit || DI::config()->get('debug', 'store_source'))) {
+ Post\Activity::insert($item['uri-id'], $source);
+ }
+
if ($transmit) {
- if (!empty($source)) {
- Post\Activity::insert($item['uri-id'], $source);
- }
Worker::add(['priority' => $priority, 'dont_fork' => true], 'Notifier', $notify_type, (int)$posted_item['uri-id'], (int)$posted_item['uid']);
}
}
$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)) {
$body = $item['body'] ?? '';
- $fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network', 'has-media'];
+ $fields = ['uri-id', 'uri', 'body', 'title', 'author-name', 'author-link', 'author-avatar', 'guid', 'created', 'plink', 'network', 'has-media', 'quote-uri-id', 'post-type'];
$shared_uri_id = 0;
$shared_links = [];
$quote_uri_id = $shared['post']['uri-id'];
$shared_links[] = strtolower($shared['post']['uri']);
$item['body'] = BBCode::removeSharedData($item['body']);
- } elseif (empty($shared_item['uri-id']) && empty($item['quote-uri-id'])) {
+ } elseif (empty($shared_item['uri-id']) && empty($item['quote-uri-id']) && ($item['network'] != Protocol::DIASPORA)) {
$media = Post\Media::getByURIId($item['uri-id'], [Post\Media::ACTIVITY]);
if (!empty($media)) {
$shared_item = Post::selectFirst($fields, ['plink' => $media[0]['url'], 'uid' => [$item['uid'], 0]]);
if (!empty($shared_item['uri-id'])) {
$shared_uri_id = $shared_item['uri-id'];
$shared_links[] = strtolower($shared_item['plink']);
- $shared_attachments = Post\Media::splitAttachments($shared_uri_id, $shared_item['guid'], [], $shared_item['has-media']);
+ $shared_attachments = Post\Media::splitAttachments($shared_uri_id, [], $shared_item['has-media']);
$shared_links = array_merge($shared_links, array_column($shared_attachments['visual'], 'url'));
$shared_links = array_merge($shared_links, array_column($shared_attachments['link'], 'url'));
$shared_links = array_merge($shared_links, array_column($shared_attachments['additional'], 'url'));
$item['body'] = self::replaceVisualAttachments($shared_attachments, $item['body']);
}
- $attachments = Post\Media::splitAttachments($item['uri-id'], $item['guid'] ?? '', $shared_links, $item['has-media'] ?? false);
+ $attachments = Post\Media::splitAttachments($item['uri-id'], $shared_links, $item['has-media'] ?? false);
$item['body'] = self::replaceVisualAttachments($attachments, $item['body'] ?? '');
$item['body'] = preg_replace("/\s*\[attachment .*?\].*?\[\/attachment\]\s*/ism", "\n", $item['body']);
}
if (!empty($shared_attachments)) {
- $s = self::addVisualAttachments($shared_attachments, $item, $s, true);
+ $s = self::addVisualAttachments($shared_attachments, $shared_item, $s, true);
$s = self::addLinkAttachment($shared_uri_id ?: $item['uri-id'], $shared_attachments, $body, $s, true, []);
$s = self::addNonVisualAttachments($shared_attachments, $item, $s, true);
$body = BBCode::removeSharedData($body);
{
// Make sure that for example site parameters aren't used when testing if the link is contained in the body
$urlparts = parse_url($url);
- if (!empty($urlparts)) {
- unset($urlparts['query']);
- unset($urlparts['fragment']);
+ if (empty($urlparts)) {
+ return false;
+ }
+
+ unset($urlparts['query']);
+ unset($urlparts['fragment']);
+
+ try {
$url = (string)Uri::fromParts($urlparts);
- } else {
+ } catch (\InvalidArgumentException $e) {
+ DI::logger()->notice('Invalid URL', ['$url' => $url, '$urlparts' => $urlparts]);
+ /* See https://github.com/friendica/friendica/issues/12113
+ * Malformed URLs will result in a Fatal Error
+ */
return false;
}
if (strpos($body, $url)) {
return true;
}
+
foreach ([0, 1, 2] as $size) {
if (preg_match('#/photo/.*-' . $size . '\.#ism', $url) &&
strpos(preg_replace('#(/photo/.*)-[012]\.#ism', '$1-' . $size . '.', $body), $url)) {
return true;
}
}
+
return false;
}
continue;
}
- if (!empty($attachment['preview'])) {
+ if ($attachment['filetype'] == 'image') {
+ $preview_url = Post\Media::getPreviewUrlForId($attachment['id'], ($attachment['width'] > $attachment['height']) ? Proxy::SIZE_MEDIUM : Proxy::SIZE_LARGE);
+ } elseif (!empty($attachment['preview'])) {
$preview_url = Post\Media::getPreviewUrlForId($attachment['id'], Proxy::SIZE_LARGE);
} else {
$preview_url = '';
}
+ if ($preview_url && self::containsLink($item['body'], $preview_url)) {
+ continue;
+ }
+
if (($attachment['filetype'] == 'video')) {
/// @todo Move the template to /content as well
$media = Renderer::replaceMacros(Renderer::getMarkupTemplate('video_top.tpl'), [
$trailing .= $media;
}
} elseif ($attachment['filetype'] == 'image') {
+ $src_url = Post\Media::getUrlForId($attachment['id']);
+ if (self::containsLink($item['body'], $src_url)) {
+ continue;
+ }
$media = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image.tpl'), [
'$image' => [
- 'src' => Post\Media::getUrlForId($attachment['id']),
- 'preview' => Post\Media::getPreviewUrlForId($attachment['id'], ($attachment['width'] > $attachment['height']) ? Proxy::SIZE_MEDIUM : Proxy::SIZE_LARGE),
+ 'src' => $src_url,
+ 'preview' => $preview_url,
'attachment' => $attachment,
],
]);