diff --git a/include/api.php b/include/api.php index 2c9ae9b38..543c01827 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 as $image) { + $start = iconv_strpos($text, $image[1], 0, "UTF-8"); + if (!($start === false)) { + $ordered_images[$start] = ['url' => $image[1], 'alt' => $image[2]]; + } + } + + preg_match_all("/\[img](.*?)\[\/img\]/ism", $bbcode, $images); foreach ($images[1] as $image) { - //$start = strpos($text, $url, $offset); $start = iconv_strpos($text, $image, 0, "UTF-8"); if (!($start === false)) { - $ordered_images[$start] = $image; + $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); @@ -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/mod/photos.php b/mod/photos.php index fa4d5b281..fb43619b6 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1567,7 +1567,7 @@ function photos_content(App $a) $a->page['htmlhead'] .= "\n" . '' . "\n"; $a->page['htmlhead'] .= '' . "\n"; - $a->page['htmlhead'] .= '' . "\n"; + $a->page['htmlhead'] .= '' . "\n"; $a->page['htmlhead'] .= '' . "\n"; $a->page['htmlhead'] .= '' . "\n"; diff --git a/src/Content/Text/BBCode.php b/src/Content/Text/BBCode.php index e2a4fa603..b2d4ebb5d 100644 --- a/src/Content/Text/BBCode.php +++ b/src/Content/Text/BBCode.php @@ -1102,7 +1102,11 @@ class BBCode extends BaseObject if (substr($curl_info["content_type"], 0, 6) == "image/") { $text = "[img]" . $match[1] . "[/img]"; } else { - $text = "[img]" . $match[2] . "[/img]"; + if (!empty($match[3])) { + $text = "[img=" . $match[2] . "]" . $match[3] . "[/img]"; + } else { + $text = "[img]" . $match[2] . "[/img]"; + } // if its not a picture then look if its a page that contains a picture link $body = Network::fetchUrl($match[1]); @@ -1120,7 +1124,11 @@ class BBCode extends BaseObject } if (strtolower($attr["name"]) == "twitter:image") { - $text = "[img]" . $attr["content"] . "[/img]"; + if (!empty($match[3])) { + $text = "[img=" . $attr["content"] . "]" . $match[3] . "[/img]"; + } else { + $text = "[img]" . $attr["content"] . "[/img]"; + } } } } @@ -1132,7 +1140,8 @@ class BBCode extends BaseObject public static function cleanPictureLinks($text) { - $return = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'self::cleanPictureLinksCallback', $text); + $return = preg_replace_callback("&\[url=([^\[\]]*)\]\[img=(.*)\](.*)\[\/img\]\[\/url\]&Usi", 'self::cleanPictureLinksCallback', $text); + $return = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'self::cleanPictureLinksCallback', $return); return $return; } diff --git a/src/Model/Photo.php b/src/Model/Photo.php index f2a77b01f..c983fdc05 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 bcfe13f53..4ec4f204c 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") {