From 54d25ebc91dd7b66ffbbf176c0a11fa17fbae3b3 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 1 Oct 2022 22:26:37 +0000 Subject: [PATCH] Fix picture link removal in "getAttachedData" --- src/Content/Text/BBCode.php | 28 ++++++++++++++++------------ src/Content/Text/Plaintext.php | 25 +++++++++++++++++-------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index 69f5fa6e81..0a07e18f40 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -287,14 +287,17 @@ class BBCode } } + if (!isset($post['type'])) { + $post['text'] = $body; + } + + // Simplify image codes + $post['text'] = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $post['text']); + $post['text'] = preg_replace("/\[img\=(.*?)\](.*?)\[\/img\]/ism", '[img]$1[/img]', $post['text']); + // if nothing is found, it maybe having an image. if (!isset($post['type'])) { - // Simplify image codes - $body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $body); - $body = preg_replace("/\[img\=(.*?)\](.*?)\[\/img\]/ism", '[img]$1[/img]', $body); - $post['text'] = $body; - - if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]#ism", $body, $pictures, PREG_SET_ORDER)) { + if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]#ism", $post['text'], $pictures, PREG_SET_ORDER)) { if ((count($pictures) == 1) && !$has_title) { if (!empty($item['object-type']) && ($item['object-type'] == Activity\ObjectType::IMAGE)) { // Replace the preview picture with the real picture @@ -322,14 +325,14 @@ class BBCode } $post['preview'] = $pictures[0][2]; - $post['text'] = trim(str_replace($pictures[0][0], '', $body)); + $post['text'] = trim(str_replace($pictures[0][0], '', $post['text'])); } else { $imgdata = Images::getInfoFromURLCached($pictures[0][1]); if (($imgdata) && substr($imgdata['mime'], 0, 6) == 'image/') { $post['type'] = 'photo'; $post['image'] = $pictures[0][1]; $post['preview'] = $pictures[0][2]; - $post['text'] = trim(str_replace($pictures[0][0], '', $body)); + $post['text'] = trim(str_replace($pictures[0][0], '', $post['text'])); } } } elseif (count($pictures) > 0) { @@ -341,13 +344,12 @@ class BBCode } $post['image'] = $pictures[0][2]; - $post['text'] = $body; foreach ($pictures as $picture) { $post['text'] = trim(str_replace($picture[0], '', $post['text'])); } } - } elseif (preg_match_all("(\[img\](.*?)\[\/img\])ism", $body, $pictures, PREG_SET_ORDER)) { + } elseif (preg_match_all("(\[img\](.*?)\[\/img\])ism", $post['text'], $pictures, PREG_SET_ORDER)) { if ($has_title) { $post['type'] = 'link'; $post['url'] = $plink; @@ -356,7 +358,6 @@ class BBCode } $post['image'] = $pictures[0][1]; - $post['text'] = $body; foreach ($pictures as $picture) { $post['text'] = trim(str_replace($picture[0], '', $post['text'])); } @@ -396,7 +397,6 @@ class BBCode if (!isset($post['type'])) { $post['type'] = 'text'; - $post['text'] = trim($body); } if (($post['type'] == 'photo') && empty($post['images']) && !empty($post['remote_images'])) { @@ -413,6 +413,10 @@ class BBCode if (isset($data['images'][0])) { $post['image'] = $data['images'][0]['src']; } + } elseif (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]#ism", $post['text'], $pictures, PREG_SET_ORDER)) { + foreach ($pictures as $picture) { + $post['text'] = trim(str_replace($picture[0], '', $post['text'])); + } } DI::profiler()->stopRecording(); diff --git a/src/Content/Text/Plaintext.php b/src/Content/Text/Plaintext.php index 1e76a557bc..5fe7797041 100644 --- a/src/Content/Text/Plaintext.php +++ b/src/Content/Text/Plaintext.php @@ -126,8 +126,6 @@ class Plaintext $body = BBCode::stripAbstract($body); // At first look at data that is attached via "type-..." stuff - // This will hopefully replaced with a dedicated bbcode later - //$post = self::getAttachedData($b['body']); $post = BBCode::getAttachedData($body, $item); if (($item['title'] != '') && ($post['text'] != '')) { @@ -238,11 +236,13 @@ class Plaintext $limit = $limit - 23; } - if (!in_array($link, ['', $item['plink']]) && ($post['type'] != 'photo')) { - $complete_msg .= "\n" . $link; + if (!in_array($link, ['', $item['plink']]) && ($post['type'] != 'photo') && (strpos($complete_msg, $link) === false)) { + $complete_link = $link; + } else { + $complete_link = ''; } - $post['parts'] = self::getParts(trim($complete_msg), $limit); + $post['parts'] = self::getParts(trim($complete_msg), $limit, $complete_link); if (iconv_strlen($msg, 'UTF-8') > $limit) { if (($post['type'] == 'text') && isset($post['url'])) { @@ -271,12 +271,18 @@ class Plaintext * @param integer $limit * @return array */ - private static function getParts(string $message, int $limit): array + private static function getParts(string $message, int $limit, string $link): array { $parts = []; $part = ''; - while (trim($message)) { + if (($link != '') && (strlen($message) <= $limit - 24)) { + return [$message. "\n" . $link]; + } elseif (($link == '') && (strlen($message) <= $limit)) { + return [$message]; + } + + while ($message) { $pos1 = strpos($message, ' '); $pos2 = strpos($message, "\n"); @@ -299,10 +305,13 @@ class Plaintext if (strlen($part . $word) > ($limit - 8)) { $parts[] = trim($part); $part = ''; + if (strlen($message) <= ($limit - 8)) { + $limit -= 23; + } } $part .= $word; } - $parts[] = $part; + $parts[] = trim($part . "\n" . $link); if (count($parts) > 1) { foreach ($parts as $key => $part) {