diff --git a/include/api.php b/include/api.php index 2c9ae9b387..d8cd6d2e21 100644 --- a/include/api.php +++ b/include/api.php @@ -2693,19 +2693,29 @@ function api_get_entitities(&$text, $bbcode) } } - preg_match_all("/\[img](.*?)\[\/img\]/ism", $bbcode, $images); + preg_match_all("/\[img\=(.*?)\](.*?)\[\/img\]/ism", $bbcode, $images, PREG_SET_ORDER); $ordered_images = []; - foreach ($images[1] as $image) { - //$start = strpos($text, $url, $offset); - $start = iconv_strpos($text, $image, 0, "UTF-8"); + foreach ($images as $image) { + $start = iconv_strpos($text, Photo::getGUID($image[1]), 0, "UTF-8"); if (!($start === false)) { - $ordered_images[$start] = $image; + $ordered_images[$start] = ['url' => $image[1], 'alt' => $image[2]]; + } + } + + preg_match_all("/\[img](.*?)\[\/img\]/ism", $bbcode, $images); + foreach ($images[1] as $image) { + $start = iconv_strpos($text, Photo::getGUID($image), 0, "UTF-8"); + if (!($start === false)) { + $ordered_images[$start] = ['url' => $image, 'alt' => '']; } } //$entities["media"] = array(); $offset = 0; - foreach ($ordered_images as $url) { + foreach ($ordered_images as $image) { + $url = $image['url']; + $ext_alt_text = $image['alt']; + $display_url = str_replace(["http://www.", "https://www."], ["", ""], $url); $display_url = str_replace(["http://", "https://"], ["", ""], $display_url); @@ -2713,7 +2723,7 @@ function api_get_entitities(&$text, $bbcode) $display_url = substr($display_url, 0, 25)."…"; } - $start = iconv_strpos($text, $url, $offset, "UTF-8"); + $start = iconv_strpos($text, Photo::getGUID($url), $offset, "UTF-8"); if (!($start === false)) { $image = Image::getInfoFromURL($url); if ($image) { @@ -2752,6 +2762,7 @@ function api_get_entitities(&$text, $bbcode) "url" => $url, "display_url" => $display_url, "expanded_url" => $url, + "ext_alt_text" => $ext_alt_text, "type" => "photo", "sizes" => $sizes]; } diff --git a/src/Model/Photo.php b/src/Model/Photo.php index f2a77b01fc..c983fdc058 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -21,6 +21,7 @@ use Friendica\Protocol\DFRN; use Friendica\Util\DateTimeFormat; use Friendica\Util\Network; use Friendica\Util\Security; +use Friendica\Util\Strings; require_once "include/dba.php"; @@ -664,4 +665,48 @@ class Photo extends BaseObject return true; } + + /** + * Strips known picture extensions from picture links + * + * @param string $name Picture link + * @return string stripped picture link + * @throws \Exception + */ + public static function stripExtension($name) + { + $name = str_replace([".jpg", ".png", ".gif"], ["", "", ""], $name); + foreach (Image::supportedTypes() as $m => $e) { + $name = str_replace("." . $e, "", $name); + } + return $name; + } + + /** + * Returns the GUID from picture links + * + * @param string $name Picture link + * @return string GUID + * @throws \Exception + */ + public static function getGUID($name) + { + $a = \get_app(); + $base = $a->getBaseURL(); + + $guid = str_replace([Strings::normaliseLink($base), '/photo/'], '', Strings::normaliseLink($name)); + + $guid = self::stripExtension($guid); + if (substr($guid, -2, 1) != "-") { + return ''; + } + + $scale = intval(substr($guid, -1, 1)); + if (empty($scale)) { + return ''; + } + + $guid = substr($guid, 0, -2); + return $guid; + } } diff --git a/src/Module/Photo.php b/src/Module/Photo.php index bcfe13f537..4ec4f204c3 100644 --- a/src/Module/Photo.php +++ b/src/Module/Photo.php @@ -53,15 +53,15 @@ class Photo extends BaseModule switch($a->argc) { case 4: $customsize = intval($a->argv[2]); - $uid = self::stripExtension($a->argv[3]); + $uid = MPhoto::stripExtension($a->argv[3]); $photo = self::getAvatar($uid, $a->argv[1]); break; case 3: - $uid = self::stripExtension($a->argv[2]); + $uid = MPhoto::stripExtension($a->argv[2]); $photo = self::getAvatar($uid, $a->argv[1]); break; case 2: - $photoid = self::stripExtension($a->argv[1]); + $photoid = MPhoto::stripExtension($a->argv[1]); $scale = 0; if (substr($photoid, -2, 1) == "-") { $scale = intval(substr($photoid, -1, 1)); @@ -117,15 +117,6 @@ class Photo extends BaseModule exit(); } - private static function stripExtension($name) - { - $name = str_replace([".jpg", ".png", ".gif"], ["", "", ""], $name); - foreach (Image::supportedTypes() as $m => $e) { - $name = str_replace("." . $e, "", $name); - } - return $name; - } - private static function getAvatar($uid, $type="avatar") {