diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 6c46163f7..437330ce7 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -50,7 +50,7 @@ use Friendica\Util\XML; class BBCode { // Update this value to the current date whenever changes are made to BBCode::convert - const VERSION = '2021-03-21'; + const VERSION = '2021-04-05'; const INTERNAL = 0; const API = 2; @@ -1669,7 +1669,7 @@ class BBCode if ($try_oembed) { // html5 video and audio $text = preg_replace("/\[video\](.*?\.(ogg|ogv|oga|ogm|webm|mp4).*?)\[\/video\]/ism", - '', $text); + '', $text); $text = preg_replace_callback("/\[video\](.*?)\[\/video\]/ism", $try_oembed_callback, $text); $text = preg_replace_callback("/\[audio\](.*?)\[\/audio\]/ism", $try_oembed_callback, $text); diff --git a/src/Model/Item.php b/src/Model/Item.php index c814ac9d8..76402280c 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -2643,50 +2643,7 @@ class Item return $s; } - $as = ''; - $vhead = false; - foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) { - $mime = $attachment['mimetype']; - - $author = ['uid' => 0, 'id' => $item['author-id'], - 'network' => $item['author-network'], 'url' => $item['author-link']]; - $the_url = Contact::magicLinkByContact($author, $attachment['url']); - - if (strpos($mime, 'video') !== false) { - if (!$vhead) { - $vhead = true; - DI::page()['htmlhead'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('videos_head.tpl')); - } - - $as .= Renderer::replaceMacros(Renderer::getMarkupTemplate('video_top.tpl'), [ - '$video' => [ - 'id' => $item['author-id'], - 'title' => DI::l10n()->t('View Video'), - 'src' => $the_url, - 'mime' => $mime, - ], - ]); - } - - $filetype = strtolower(substr($mime, 0, strpos($mime, '/'))); - if ($filetype) { - $filesubtype = strtolower(substr($mime, strpos($mime, '/') + 1)); - $filesubtype = str_replace('.', '-', $filesubtype); - } else { - $filetype = 'unkn'; - $filesubtype = 'unkn'; - } - - $title = Strings::escapeHtml(trim(($attachment['description'] ?? '') ?: $attachment['url'])); - $title .= ' ' . ($attachment['size'] ?? 0) . ' ' . DI::l10n()->t('bytes'); - - $icon = '
'; - $as .= '' . $icon . ''; - } - - if ($as != '') { - $s .= '
'.$as.'
'; - } + $s = self::addMediaAttachments($item, $s); // Map. if (strpos($s, '
') !== false && !empty($item['coord'])) { @@ -2710,6 +2667,74 @@ class Item return $hook_data['html']; } + /** + * Add media attachments to the content + * + * @param array $item + * @param string $content + * @return modified content + */ + private static function addMediaAttachments(array $item, string $content) + { + $leading = ''; + $trailing = ''; + foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) { + $mime = $attachment['mimetype']; + + $author = ['uid' => 0, 'id' => $item['author-id'], + 'network' => $item['author-network'], 'url' => $item['author-link']]; + $the_url = Contact::magicLinkByContact($author, $attachment['url']); + + $filetype = strtolower(substr($mime, 0, strpos($mime, '/'))); + if ($filetype) { + $filesubtype = strtolower(substr($mime, strpos($mime, '/') + 1)); + $filesubtype = str_replace('.', '-', $filesubtype); + } else { + $filetype = 'unkn'; + $filesubtype = 'unkn'; + } + + if (($filetype == 'video')) { + /// @todo Move the template to /content as well + $leading .= Renderer::replaceMacros(Renderer::getMarkupTemplate('video_top.tpl'), [ + '$video' => [ + 'id' => $item['author-id'], + 'src' => $the_url, + 'mime' => $mime, + ], + ]); + } elseif ($filetype == 'audio') { + $leading .= Renderer::replaceMacros(Renderer::getMarkupTemplate('content/audio.tpl'), [ + '$audio' => [ + 'id' => $item['author-id'], + 'src' => $the_url, + 'mime' => $mime, + ], + ]); + } else { + $title = Strings::escapeHtml(trim(($attachment['description'] ?? '') ?: $attachment['url'])); + + if (!empty($attachment['size'])) { + $title .= ' ' . $attachment['size'] . ' ' . DI::l10n()->t('bytes'); + } + + /// @todo Use a template + $icon = '
'; + $trailing .= '' . $icon . ''; + } + } + + if ($leading != '') { + $content = '
' . $leading . '
' . $content; + } + + if ($trailing != '') { + $content .= '
' . $trailing . '
'; + } + + return $content; + } + /** * get private link for item * diff --git a/view/templates/content/audio.tpl b/view/templates/content/audio.tpl new file mode 100644 index 000000000..0b0467ab2 --- /dev/null +++ b/view/templates/content/audio.tpl @@ -0,0 +1,4 @@ + +