diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index 3396b642f8..0a9557bc64 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -461,19 +461,33 @@ 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); } /** * 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 @@ -482,14 +496,20 @@ 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] ]; - } else { + } 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]] = [ 'uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $picture[1], @@ -508,14 +528,20 @@ 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 ]; - } else { + } 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]] = [ 'uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $picture[1], @@ -587,7 +613,7 @@ class Media { do { $prebody = $body; - $body = self::insertFromBody(0, $body); + $body = self::insertFromBody(0, $body, false, true); } while ($prebody != $body); return $body; }