]> git.mxchange.org Git - friendica.git/commitdiff
Fix image links with descriptions in API and AP transmission
authorMichael <heluecht@pirati.ca>
Mon, 11 Nov 2019 22:37:50 +0000 (22:37 +0000)
committerMichael <heluecht@pirati.ca>
Mon, 11 Nov 2019 22:37:50 +0000 (22:37 +0000)
include/api.php
src/Model/Photo.php
src/Protocol/ActivityPub/Transmitter.php

index d5eb9c54186d12089d719963f78ca92888b9b1c8..8325e39b71442f6518054ac1293ea3657ae666ab 100644 (file)
@@ -2554,6 +2554,7 @@ function api_get_attachments(&$body)
 {
        $text = $body;
        $text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $text);
+       $text = preg_replace("/\[img\=(.*?)\](.*?)\[\/img\]/ism", '[img]$1[/img]', $text);
 
        $URLSearchString = "^\[\]";
        $ret = preg_match_all("/\[img\]([$URLSearchString]*)\[\/img\]/ism", $text, $images);
index 10e80a4fb5bc8daad21d8abbab828ea1137600fc..bf0acf53ebc937b94151145fc35c0d7ce19fc1ea 100644 (file)
@@ -715,4 +715,25 @@ class Photo extends BaseObject
 
                return DBA::exists('photo', ['resource-id' => $guid]);
        }
+
+       /**
+        * Tests if the link points to a locally stored picture page
+        *
+        * @param string $name Page link
+        * @return boolean
+        * @throws \Exception
+        */
+       public static function isLocalLink($name)
+       {
+               $a = \get_app();
+               $base = $a->getBaseURL();
+
+               $guid = str_replace(Strings::normaliseLink($base), '', Strings::normaliseLink($name));
+               $guid = preg_replace("=/photos/.*/image/(.*)=ism", '$1', $guid);
+               if (empty($guid)) {
+                       return false;
+               }
+
+               return DBA::exists('photo', ['resource-id' => $guid]);
+       }
 }
index c5f3bae4700dc90d62e6a09e171c3764c987da13..3f962b8cf95ca25a3680c850dceaf12b806678c1 100644 (file)
@@ -19,6 +19,7 @@ use Friendica\Model\Contact;
 use Friendica\Model\Conversation;
 use Friendica\Model\Item;
 use Friendica\Model\Profile;
+use Friendica\Model\Photo;
 use Friendica\Model\Term;
 use Friendica\Model\User;
 use Friendica\Protocol\Activity;
@@ -1097,19 +1098,34 @@ class Transmitter
        }
 
        /**
-        * Remove image elements and replaces them with links to the image
+        * Remove image elements since they are added as attachment
         *
         * @param string $body
         *
-        * @return string with replaced elements
+        * @return string with removed images
         */
        private static function removePictures($body)
        {
                // Simplify image codes
                $body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $body);
-
-               $body = preg_replace("/\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]/Usi", '[url]$1[/url]', $body);
-               $body = preg_replace("/\[img\]([^\[\]]*)\[\/img\]/Usi", '[url]$1[/url]', $body);
+               $body = preg_replace("/\[img\=(.*?)\](.*?)\[\/img\]/ism", '[img]$1[/img]', $body);
+
+               // Now remove local links
+               $body = preg_replace_callback(
+                       '/\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]/Usi',
+                       function ($match) {
+                               // We remove the link when it is a link to a local photo page
+                               if (Photo::isLocalLink($match[1])) {
+                                       return '';
+                               }
+                               // otherwise we just return the link
+                               return '[url]' . $match[1] . '[/url]';
+                       },
+                       $body
+               );
+
+               // Remove all pictures
+               $body = preg_replace("/\[img\]([^\[\]]*)\[\/img\]/Usi", '', $body);
 
                return $body;
        }