From eefebaff49822d702f647e4e3896597705aaec36 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 15 Mar 2023 21:15:10 +0000 Subject: [PATCH 1/2] Improved handling of images with links --- src/Model/Post/Media.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index 3396b642f8..221a11a700 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -470,10 +470,12 @@ class Media * Add media links and remove them from the body * * @param integer $uriid - * @param string $body + * @param string $body + * @param bool $endmatch + * @param bool $removepicturelinks * @return string Body without media links */ - public static function insertFromBody(int $uriid, string $body, bool $endmatch = false): string + public static function insertFromBody(int $uriid, string $body, bool $endmatch = false, bool $removepicturelinks = false): string { $endmatchpattern = $endmatch ? '\z' : ''; // Simplify image codes @@ -489,7 +491,7 @@ class Media 'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $image, 'preview' => $picture[2], 'description' => $picture[3] ]; - } else { + } elseif ($removepicturelinks) { $body = str_replace($picture[0], '', $body); $attachments[$picture[1]] = [ 'uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $picture[1], @@ -515,7 +517,7 @@ class Media 'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $image, 'preview' => $picture[2], 'description' => null ]; - } else { + } elseif ($removepicturelinks) { $body = str_replace($picture[0], '', $body); $attachments[$picture[1]] = [ 'uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $picture[1], @@ -587,7 +589,7 @@ class Media { do { $prebody = $body; - $body = self::insertFromBody(0, $body); + $body = self::insertFromBody(0, $body, false, true); } while ($prebody != $body); return $body; } From 31693c2d1f749d744964eee0b0fe79db589fac2c Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 16 Mar 2023 05:01:05 +0000 Subject: [PATCH 2/2] Separation between picture links --- src/Model/Post/Media.php | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index 221a11a700..0a9557bc64 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -461,9 +461,21 @@ class Media * @param string $preview Preview picture * @return boolean */ - private static function isPictureLink(string $page, string $preview): bool + private static function isLinkToPhoto(string $page, string $preview): bool { - return (preg_match('#/photo/.*-0\.#ism', $page) || preg_match('#/photos/.*/image/#ism', $page)) && preg_match('#/photo/.*-[01]\.#ism', $preview); + return preg_match('#/photo/.*-0\.#ism', $page) && preg_match('#/photo/.*-[01]\.#ism', $preview); + } + + /** + * Tests for path patterns that are usef for picture links in Friendica + * + * @param string $page Link to the image page + * @param string $preview Preview picture + * @return boolean + */ + private static function isLinkToImagePage(string $page, string $preview): bool + { + return preg_match('#/photos/.*/image/#ism', $page) && preg_match('#/photo/.*-[01]\.#ism', $preview); } /** @@ -484,13 +496,19 @@ class Media $attachments = []; if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img=([^\[\]]*)\]([^\[\]]*)\[\/img\]\s*\[/url\]$endmatchpattern#ism", $body, $pictures, PREG_SET_ORDER)) { foreach ($pictures as $picture) { - if (self::isPictureLink($picture[1], $picture[2])) { + if (self::isLinkToImagePage($picture[1], $picture[2])) { $body = str_replace($picture[0], '', $body); $image = str_replace('-1.', '-0.', $picture[2]); $attachments[$image] = [ 'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $image, 'preview' => $picture[2], 'description' => $picture[3] ]; + } elseif (self::isLinkToPhoto($picture[1], $picture[2])) { + $body = str_replace($picture[0], '', $body); + $attachments[$picture[1]] = [ + 'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $picture[1], + 'preview' => $picture[2], 'description' => $picture[3] + ]; } elseif ($removepicturelinks) { $body = str_replace($picture[0], '', $body); $attachments[$picture[1]] = [ @@ -510,13 +528,19 @@ class Media if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]$endmatchpattern#ism", $body, $pictures, PREG_SET_ORDER)) { foreach ($pictures as $picture) { - if (self::isPictureLink($picture[1], $picture[2])) { + if (self::isLinkToImagePage($picture[1], $picture[2])) { $body = str_replace($picture[0], '', $body); $image = str_replace('-1.', '-0.', $picture[2]); $attachments[$image] = [ 'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $image, 'preview' => $picture[2], 'description' => null ]; + } elseif (self::isLinkToPhoto($picture[1], $picture[2])) { + $body = str_replace($picture[0], '', $body); + $attachments[$picture[1]] = [ + 'uri-id' => $uriid, 'type' => self::IMAGE, 'url' => $picture[1], + 'preview' => $picture[2], 'description' => null + ]; } elseif ($removepicturelinks) { $body = str_replace($picture[0], '', $body); $attachments[$picture[1]] = [