]> git.mxchange.org Git - friendica.git/commitdiff
Issue 11488: Don't search for mentions in shared posts
authorMichael <heluecht@pirati.ca>
Sun, 29 May 2022 16:07:53 +0000 (16:07 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 29 May 2022 16:07:53 +0000 (16:07 +0000)
src/Model/Tag.php

index b1c9822191b82777f6de794078b81ed477b1f855..002501aa45f91084a80015cd0315070d6ed8c87f 100644 (file)
@@ -276,7 +276,7 @@ class Tag
        public static function getFromBody(string $body, string $tags = null)
        {
                if (is_null($tags)) {
-                       $tags =  self::TAG_CHARACTER[self::HASHTAG] . self::TAG_CHARACTER[self::MENTION] . self::TAG_CHARACTER[self::EXCLUSIVE_MENTION];
+                       $tags = self::TAG_CHARACTER[self::HASHTAG] . self::TAG_CHARACTER[self::MENTION] . self::TAG_CHARACTER[self::EXCLUSIVE_MENTION];
                }
 
                if (!preg_match_all("/([" . $tags . "])\[url\=([^\[\]]*)\]([^\[\]]*)\[\/url\]/ism", $body, $result, PREG_SET_ORDER)) {
@@ -298,16 +298,29 @@ class Tag
        {
                Logger::info('Check for tags', ['uri-id' => $uriid, 'hash' => $tags, 'callstack' => System::callstack()]);
 
-               $result = self::getFromBody($body, $tags);
-               if (empty($result)) {
-                       return;
+               if (is_null($tags)) {
+                       $tags = self::TAG_CHARACTER[self::HASHTAG] . self::TAG_CHARACTER[self::MENTION] . self::TAG_CHARACTER[self::EXCLUSIVE_MENTION];
                }
 
-               Logger::info('Found tags', ['uri-id' => $uriid, 'hash' => $tags, 'result' => $result]);
+               // Only remove the shared data from "real" reshares
+               $shared = BBCode::fetchShareAttributes($body);
+               if (!empty($shared['guid'])) {
+                       if (preg_match("/\s*\[share .*?\](.*?)\[\/share\]\s*/ism",  $body, $matches)) {
+                               $share_body = $matches[1];
+                       }
+                       $body = preg_replace("/\s*\[share .*?\].*?\[\/share\]\s*/ism", '', $body);
+               }
 
-               foreach ($result as $tag) {
+               foreach (self::getFromBody($body, $tags) as $tag) {
                        self::storeByHash($uriid, $tag[1], $tag[3], $tag[2], $probing);
                }
+
+               // Search for hashtags in the shared body (but only if hashtags are wanted)
+               if (!empty($share_body) && (strpos($tags, self::TAG_CHARACTER[self::HASHTAG]) !== false)) {
+                       foreach (self::getFromBody($share_body, self::TAG_CHARACTER[self::HASHTAG]) as $tag) {
+                               self::storeByHash($uriid, $tag[1], $tag[3], $tag[2], $probing);
+                       }
+               }
        }
 
        /**