From 7d91cc73de054c645df61f64ef72ff8aca9cfb4d Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Tue, 9 May 2023 20:44:58 +0000
Subject: [PATCH] Unifiy the creation of photo links

---
 mod/photos.php                    |  4 +---
 src/Model/Post/Media.php          | 10 +++-------
 src/Module/Media/Photo/Upload.php |  2 +-
 src/Module/Profile/Photos.php     |  4 +---
 src/Util/Images.php               | 28 ++++++++++++++++++++++++++++
 5 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/mod/photos.php b/mod/photos.php
index 3d6a1d4051..18118bcd96 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -375,9 +375,7 @@ function photos_post(App $a)
 			$arr['visible']       = 0;
 			$arr['origin']        = 1;
 
-			$arr['body']          = '[url=' . DI::baseUrl() . '/photos/' . $user['nickname'] . '/image/' . $photo['resource-id'] . ']'
-						. '[img]' . DI::baseUrl() . '/photo/' . $photo['resource-id'] . '-' . $photo['scale'] . '.'. $ext . '[/img]'
-						. '[/url]';
+			$arr['body']          = Images::getImageUrl($photo['resource-id'], $user['nickname'], $photo['scale'], $ext, '');
 
 			$item_id = Item::insert($arr);
 		}
diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php
index cc5b16d1e7..5e867d26cf 100644
--- a/src/Model/Post/Media.php
+++ b/src/Model/Post/Media.php
@@ -489,7 +489,7 @@ class Media
 		if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img=([^\[\]]*)\]([^\[\]]*)\[\/img\]\s*\[/url\]#ism", $body, $pictures, PREG_SET_ORDER)) {
 			foreach ($pictures as $picture) {
 				if (self::isLinkToImagePage($picture[1], $picture[2])) {
-					$body = str_replace($picture[0], '[url=' . str_replace(['-1.', '-2.'], '-0.', $picture[2]) . '][img=' . $picture[2] . ']' . $picture[3] . '[/img][/url]', $body);
+					$body = str_replace($picture[0], Images::getPictureUrl(str_replace(['-1.', '-2.'], '-0.', $picture[2]), $picture[2], $picture[3]), $body);
 				}
 			}
 		}
@@ -497,7 +497,7 @@ class Media
 		if (preg_match_all("#\[url=([^\]]+?)\]\s*\[img\]([^\[]+?)\[/img\]\s*\[/url\]#ism", $body, $pictures, PREG_SET_ORDER)) {
 			foreach ($pictures as $picture) {
 				if (self::isLinkToImagePage($picture[1], $picture[2])) {
-					$body = str_replace($picture[0], '[url=' . str_replace(['-1.', '-2.'], '-0.', $picture[2]) . '][img]' . $picture[2] . '[/img][/url]', $body);
+					$body = str_replace($picture[0], Images::getPictureUrl(str_replace(['-1.', '-2.'], '-0.', $picture[2]), $picture[2], ''), $body);
 				}
 			}
 		}
@@ -1005,11 +1005,7 @@ class Media
 
 			if ($media['type'] == self::IMAGE) {
 				if (!empty($media['preview'])) {
-					if (!empty($media['description'])) {
-						$body .= "\n[url=" . $media['url'] . "][img=" . $media['preview'] . ']' . $media['description'] . '[/img][/url]';
-					} else {
-						$body .= "\n[url=" . $media['url'] . "][img]" . $media['preview'] . '[/img][/url]';
-					}
+					$body .= "\n" . Images::getPictureUrl($media['url'], $media['preview'], $media['description']);
 				} else {
 					if (!empty($media['description'])) {
 						$body .= "\n[img=" . $media['url'] . ']' . $media['description'] . '[/img]';
diff --git a/src/Module/Media/Photo/Upload.php b/src/Module/Media/Photo/Upload.php
index 09d31971a4..8ea079c6cf 100644
--- a/src/Module/Media/Photo/Upload.php
+++ b/src/Module/Media/Photo/Upload.php
@@ -180,7 +180,7 @@ class Upload extends \Friendica\BaseModule
 		}
 
 		$this->logger->info('upload done');
-		$this->return(200, "\n\n" . '[url=' . $this->baseUrl . '/photos/' . $owner['nickname'] . '/image/' . $resource_id . '][img=' . $this->baseUrl . "/photo/$resource_id-$preview." . $image->getExt() . "][/img][/url]\n\n");
+		$this->return(200, "\n\n" . Images::getImageUrl($resource_id, $owner['nickname'], $preview, $image->getExt(), '') . "\n\n");
 	}
 
 	/**
diff --git a/src/Module/Profile/Photos.php b/src/Module/Profile/Photos.php
index 03937c655e..720efa060b 100644
--- a/src/Module/Profile/Photos.php
+++ b/src/Module/Profile/Photos.php
@@ -273,9 +273,7 @@ class Photos extends \Friendica\Module\BaseProfile
 		$arr['visible']       = $visible;
 		$arr['origin']        = 1;
 
-		$arr['body']          = '[url=' . $this->baseUrl . '/photos/' . $this->owner['nickname'] . '/image/' . $resource_id . ']'
-			. '[img]' . $this->baseUrl . "/photo/{$resource_id}-{$preview}.".$image->getExt() . '[/img]'
-			. '[/url]';
+		$arr['body']          = Images::getImageUrl($resource_id, $this->owner['nickname'], $preview, $image->getExt(), '');
 
 		$item_id = Item::insert($arr);
 		// Update the photo albums cache
diff --git a/src/Util/Images.php b/src/Util/Images.php
index 90d120081b..08553a1a9c 100644
--- a/src/Util/Images.php
+++ b/src/Util/Images.php
@@ -316,4 +316,32 @@ class Images
 
 		return ['width' => $dest_width, 'height' => $dest_height];
 	}
+
+	/**
+	 * Get a link to a an image link with a preview
+	 *
+	 * @param string $resource_id
+	 * @param string $nickname
+	 * @param integer $preview
+	 * @param string $ext
+	 * @param string $description
+	 * @return string
+	 */
+	public static function getImageUrl(string $resource_id, string $nickname, int $preview, string $ext, string $description): string
+	{
+		return '[url=' . DI::baseUrl() . '/photos/' . $nickname . '/image/' . $resource_id . '][img=' . DI::baseUrl() . '/photo/' . $resource_id . '-' . $preview. '.' . $ext . ']' . $description . '[/img][/url]';
+	}
+
+	/**
+	 * Get a link to a picture with a preview
+	 *
+	 * @param string $photo
+	 * @param string $preview
+	 * @param string $description
+	 * @return string
+	 */
+	public static function getPictureUrl(string $photo, string $preview, string $description): string
+	{
+		return '[url=' . $photo . '][img=' . $preview . ']' . $description . '[/img][/url]';
+	}
 }