]> git.mxchange.org Git - friendica.git/commitdiff
Store tags for Diaspora - shorten tags when needed
authorMichael <heluecht@pirati.ca>
Tue, 14 Apr 2020 07:56:53 +0000 (07:56 +0000)
committerMichael <heluecht@pirati.ca>
Tue, 14 Apr 2020 07:56:53 +0000 (07:56 +0000)
src/Protocol/ActivityPub/Processor.php
src/Protocol/Diaspora.php

index cf1fd114c7df49d6cefb3569faeb9bed88053407..b75c11e3866ca11a7daf83dc559783d50add2037 100644 (file)
@@ -609,6 +609,8 @@ class Processor
 
                        if (empty($fields['name'])) {
                                continue;
+                       } else {
+                               $fields['name'] = substr($fields['name'], 0, 64);
                        }
                        
                        if (!empty($tag['href'] && ($tag['href'] != $tag['name']))) {
index 96c7c7fe18ab476833f602421bf96d7817f4c73c..7c8fd81f7c9c73621ddf5acb5df3fcf652045b09 100644 (file)
@@ -1833,7 +1833,7 @@ class Diaspora
                                continue;
                        }
 
-                       $fields = ['uri-id' => $uriid, 'name' => $person['addr'], 'url' => $person['url']];
+                       $fields = ['uri-id' => $uriid, 'name' => substr($person['addr'], 0, 64), 'url' => $person['url']];
 
                        if ($match[1] == Term::TAG_CHARACTER[Term::MENTION]) {
                                $fields['type'] = Term::MENTION;
@@ -1850,6 +1850,25 @@ class Diaspora
                }
        }
 
+       private static function storeTags(int $uriid, string $body)
+       {
+               $tags = BBCode::getTags($body);
+               if (empty($tags)) {
+                       return;
+               }
+
+               foreach ($tags as $tag) {
+                       if ((substr($tag, 0, 1) != Term::TAG_CHARACTER[Term::HASHTAG]) || (strlen($tag) <= 1)) {
+                               Logger::info('Skip tag', ['uriid' => $uriid, 'tag' => $tag]);
+                               continue;
+                       }
+
+                       $fields = ['uri-id' => $uriid, 'name' => substr($tag, 1, 64), 'type' => Term::HASHTAG];
+                       DBA::insert('tag', $fields, true);
+                       Logger::info('Stored tag', ['uriid' => $uriid, 'tag' => $tag, 'fields' => $fields]);
+               }
+       }
+
        /**
         * Processes an incoming comment
         *
@@ -1939,13 +1958,14 @@ class Diaspora
                $datarray["changed"] = $datarray["created"] = $datarray["edited"] = $created_at;
 
                $datarray["plink"] = self::plink($author, $guid, $parent_item['guid']);
-
-               self::storeMentions($datarray['uri-id'], $text);
-
+       
                $body = Markdown::toBBCode($text);
 
                $datarray["body"] = self::replacePeopleGuid($body, $person["url"]);
 
+               self::storeMentions($datarray['uri-id'], $text);
+               self::storeTags($datarray['uri-id'], $datarray["body"]);
+
                self::fetchGuid($datarray);
 
                // If we are the origin of the parent we store the original data.
@@ -3017,10 +3037,11 @@ class Diaspora
                $datarray["protocol"] = Conversation::PARCEL_DIASPORA;
                $datarray["source"] = $xml;
 
-               self::storeMentions($datarray['uri-id'], $text);
-
                $datarray["body"] = self::replacePeopleGuid($body, $contact["url"]);
 
+               self::storeMentions($datarray['uri-id'], $text);
+               self::storeTags($datarray['uri-id'], $datarray["body"]);
+
                if ($provider_display_name != "") {
                        $datarray["app"] = $provider_display_name;
                }