]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #9530 from annando/fatal
authorHypolite Petovan <hypolite@mrpetovan.com>
Thu, 12 Nov 2020 12:57:53 +0000 (07:57 -0500)
committerGitHub <noreply@github.com>
Thu, 12 Nov 2020 12:57:53 +0000 (07:57 -0500)
Fix fatal errors

src/Protocol/ActivityPub/Processor.php
src/Protocol/ActivityPub/Receiver.php
src/Util/JsonLD.php
tests/src/Util/JsonLDTest.php

index ebaa72db5feb9df3621df92d8039b642a2d4d83a..8f89b17f809fffa0ee44ec3c6636a3df2a304242 100644 (file)
@@ -75,10 +75,15 @@ class Processor
         */
        private static function replaceEmojis($body, array $emojis)
        {
-               foreach ($emojis as $emoji) {
-                       $replace = '[class=emoji mastodon][img=' . $emoji['href'] . ']' . $emoji['name'] . '[/img][/class]';
-                       $body = str_replace($emoji['name'], $replace, $body);
-               }
+               $body = strtr($body,
+                       array_combine(
+                               array_column($emojis, 'name'),
+                               array_map(function ($emoji) {
+                                       return '[class=emoji mastodon][img=' . $emoji['href'] . ']' . $emoji['name'] . '[/img][/class]';
+                               }, $emojis)
+                       )
+               );
+
                return $body;
        }
 
index 31a2dcb0b8dee0859cb05cd6f8a9e8ff3cc4528e..3c0f4862e6d212475771012f3a4d62ce23b30847 100644 (file)
@@ -1345,7 +1345,7 @@ class Receiver
                $object_data['longitude'] = JsonLD::fetchElement($object_data, 'longitude', '@value');
                $object_data['attachments'] = self::processAttachments(JsonLD::fetchElementArray($object, 'as:attachment') ?? []);
                $object_data['tags'] = self::processTags(JsonLD::fetchElementArray($object, 'as:tag') ?? []);
-               $object_data['emojis'] = self::processEmojis(JsonLD::fetchElementArray($object, 'as:tag', 'toot:Emoji') ?? []);
+               $object_data['emojis'] = self::processEmojis(JsonLD::fetchElementArray($object, 'as:tag', null, '@type', 'toot:Emoji') ?? []);
                $object_data['generator'] = JsonLD::fetchElement($object, 'as:generator', 'as:name', '@type', 'as:Application');
                $object_data['generator'] = JsonLD::fetchElement($object_data, 'generator', '@value');
                $object_data['alternate-url'] = JsonLD::fetchElement($object, 'as:url', '@id');
index 2649e9073788147ef6e7117d1982892b501fbf53..c211ebc2a00067591703f0bbcd3955b11d29ca5d 100644 (file)
@@ -173,7 +173,7 @@ class JsonLD
         *
         * @return array fetched element
         */
-       public static function fetchElementArray($array, $element, $key = null)
+       public static function fetchElementArray($array, $element, $key = null, $type = null, $type_value = null)
        {
                if (!isset($array[$element])) {
                        return null;
@@ -187,10 +187,14 @@ class JsonLD
                $elements = [];
 
                foreach ($array[$element] as $entry) {
-                       if (!is_array($entry) || (is_null($key) && is_array($entry))) {
-                               $elements[] = $entry;
-                       } elseif (!is_null($key) && isset($entry[$key])) {
-                               $elements[] = $entry[$key];
+                       if (!is_array($entry) || is_null($key)) {
+                               $item = $entry;
+                       } elseif (isset($entry[$key])) {
+                               $item = $entry[$key];
+                       }
+
+                       if (isset($item) && (is_null($type) || is_null($type_value) || isset($item[$type]) && $item[$type] == $type_value)) {
+                               $elements[] = $item;
                        }
                }
 
index 2c922d38446398b89e47f3b1fef9656a9291d5fb..126073ed9fceaf165196234c2765fc0aebf5c144 100644 (file)
@@ -62,6 +62,7 @@ class JsonLDTest extends TestCase
                $data = JsonLD::fetchElementArray($object, 'field', '@id');
                self::assertSame(['value3', 'value4'], $data);
        }
+
        public function testFetchElementArrayFoundArrays()
        {
                $object = ['field' => [['subfield11' => 'value11', 'subfield12' => 'value12'],
@@ -74,6 +75,17 @@ class JsonLDTest extends TestCase
                self::assertSame($expect, $data);
        }
 
+       public function testFetchElementArrayTypeValue()
+       {
+               $object = ['field' => [['subfield11' => 'value11', 'subfield12' => 'value12'],
+                       ['subfield21' => 'value21', 'subfield22' => 'value22']]];
+
+               $expect = [['subfield11' => 'value11', 'subfield12' => 'value12']];
+
+               $data = JsonLD::fetchElementArray($object, 'field', null, 'subfield11', 'value11');
+               self::assertSame($expect, $data);
+       }
+
        public function testFetchElementNotFound()
        {
                $object = [];