<?php
/**
- * @copyright Copyright (C) 2020, Friendica
+ * @copyright Copyright (C) 2010-2021, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
{
$attachments = [];
- // Currently deactivated, since it creates side effects on Mastodon and Pleroma.
- // It will be reactivated, once this cleared.
- /*
- $attach_data = BBCode::getAttachmentData($item['body']);
- if (!empty($attach_data['url'])) {
- $attachment = ['type' => 'Page',
- 'mediaType' => 'text/html',
- 'url' => $attach_data['url']];
-
- if (!empty($attach_data['title'])) {
- $attachment['name'] = $attach_data['title'];
- }
-
- if (!empty($attach_data['description'])) {
- $attachment['summary'] = $attach_data['description'];
+ $uriids = [$item['uri-id']];
+ $shared = BBCode::fetchShareAttributes($item['body']);
+ if (!empty($shared['guid'])) {
+ $shared_item = Post::selectFirst(['uri-id'], ['guid' => $shared['guid']]);
+ if (!empty($shared_item['uri-id'])) {
+ $uriids[] = $shared_item['uri-id'];
}
+ }
- if (!empty($attach_data['image'])) {
- $imgdata = Images::getInfoFromURLCached($attach_data['image']);
- if ($imgdata) {
- $attachment['icon'] = ['type' => 'Image',
- 'mediaType' => $imgdata['mime'],
- 'width' => $imgdata[0],
- 'height' => $imgdata[1],
- 'url' => $attach_data['image']];
+ $urls = [];
+ foreach ($uriids as $uriid) {
+ foreach (Post\Media::getByURIId($uriid, [Post\Media::DOCUMENT, Post\Media::TORRENT]) as $attachment) {
+ if (in_array($attachment['url'], $urls)) {
+ continue;
}
- }
+ $urls[] = $attachment['url'];
- $attachments[] = $attachment;
- }
- */
- foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
- $attachments[] = ['type' => 'Document',
- 'mediaType' => $attachment['mimetype'],
- 'url' => $attachment['url'],
- 'name' => $attachment['description']];
+ $attachments[] = ['type' => 'Document',
+ 'mediaType' => $attachment['mimetype'],
+ 'url' => $attachment['url'],
+ 'name' => $attachment['description']];
+ }
}
if ($type != 'Note') {
return $attachments;
}
- foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::AUDIO, Post\Media::IMAGE, Post\Media::VIDEO]) as $attachment) {
- $attachments[] = ['type' => 'Document',
- 'mediaType' => $attachment['mimetype'],
- 'url' => $attachment['url'],
- 'name' => $attachment['description']];
+ foreach ($uriids as $uriid) {
+ foreach (Post\Media::getByURIId($uriid, [Post\Media::AUDIO, Post\Media::IMAGE, Post\Media::VIDEO]) as $attachment) {
+ if (in_array($attachment['url'], $urls)) {
+ continue;
+ }
+ $urls[] = $attachment['url'];
+
+ $attachments[] = ['type' => 'Document',
+ 'mediaType' => $attachment['mimetype'],
+ 'url' => $attachment['url'],
+ 'name' => $attachment['description']];
+ }
+ // Currently deactivated, since it creates side effects on Mastodon and Pleroma.
+ // It will be activated, once this cleared.
+ /*
+ foreach (Post\Media::getByURIId($uriid, [Post\Media::HTML]) as $attachment) {
+ if (in_array($attachment['url'], $urls)) {
+ continue;
+ }
+ $urls[] = $attachment['url'];
+
+ $attachments[] = ['type' => 'Page',
+ 'mediaType' => $attachment['mimetype'],
+ 'url' => $attachment['url'],
+ 'name' => $attachment['description']];
+ }*/
}
return $attachments;
return '[url=' . $data['url'] . ']@' . $data['nick'] . '[/url]';
}
+ /**
+ * Callback function to replace a Friendica style mention in a mention for a summary
+ *
+ * @param array $match Matching values for the callback
+ * @return string Replaced mention
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ */
+ private static function mentionAddrCallback($match)
+ {
+ if (empty($match[1])) {
+ return '';
+ }
+
+ $data = Contact::getByURL($match[1], false, ['addr']);
+ if (empty($data['addr'])) {
+ return $match[0];
+ }
+
+ return '@' . $data['addr'];
+ }
+
/**
* Remove image elements since they are added as attachment
*
* @return array with the event data
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- public static function createEvent($item)
+ private static function createEvent($item)
{
$event = [];
$event['name'] = $item['event-summary'];
$event['location'] = self::createLocation($item);
}
+ $event['dfrn:adjust'] = (bool)$item['event-adjust'];
+
return $event;
}
if ($type == 'Note') {
$body = $item['raw-body'] ?? self::removePictures($body);
} elseif (($type == 'Article') && empty($data['summary'])) {
- $data['summary'] = BBCode::toPlaintext(Plaintext::shorten(self::removePictures($body), 1000));
+ $regexp = "/[@!]\[url\=([^\[\]]*)\].*?\[\/url\]/ism";
+ $summary = preg_replace_callback($regexp, ['self', 'mentionAddrCallback'], $body);
+ $data['summary'] = BBCode::toPlaintext(Plaintext::shorten(self::removePictures($summary), 1000));
}
if (empty($item['uid']) || !Feature::isEnabled($item['uid'], 'explicit_mentions')) {
$richbody = preg_replace_callback($regexp, ['self', 'mentionCallback'], $item['body']);
$richbody = BBCode::removeAttachment($richbody);
- $data['contentMap'][$language] = BBCode::convert($richbody, false);
+ $data['contentMap'][$language] = BBCode::convert($richbody, false, BBCode::EXTERNAL);
}
$data['source'] = ['content' => $item['body'], 'mediaType' => "text/bbcode"];