]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/JsonLD.php
Merge remote-tracking branch 'upstream/2021.12-rc' into user-banner
[friendica.git] / src / Util / JsonLD.php
index c20d4846bfe58042f32a4779e520e5b134e00895..866fc2cdf54d532142039db2214ba55b3d8187f0 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
 
 namespace Friendica\Util;
 
-use Friendica\Core\Cache\Duration;
+use Friendica\Core\Cache\Enum\Duration;
 use Friendica\Core\Logger;
 use Exception;
-use Friendica\Core\System;
 use Friendica\DI;
-use Friendica\Protocol\ActivityPub;
 
 /**
  * This class contain methods to work with JsonLD data
@@ -43,6 +41,21 @@ class JsonLD
         */
        public static function documentLoader($url)
        {
+               switch ($url) {
+                       case 'https://w3id.org/security/v1':
+                               $url = DI::baseUrl() . '/static/security-v1.jsonld';
+                               break;
+                       case 'https://w3id.org/identity/v1':
+                               $url = DI::baseUrl() . '/static/identity-v1.jsonld';
+                               break;
+                       case 'https://www.w3.org/ns/activitystreams':
+                               $url = DI::baseUrl() . '/static/activitystreams.jsonld';
+                               break;
+                       default:
+                               Logger::info('Got url', ['url' =>$url]);
+                               break;
+               }
+
                $recursion = 0;
 
                $x = debug_backtrace();
@@ -69,19 +82,6 @@ class JsonLD
                return $data;
        }
 
-       private static function replaceSecurityLink(array $json)
-       {
-               if (!is_array($json['@context'])) {
-                       return $json;
-               }
-
-               if (($key = array_search('https://w3id.org/security/v1', $json['@context'])) !== false) {
-                       $json['@context'][$key] = DI::baseUrl() . '/static/w3id-security-v1.json';
-               }
-
-               return $json;
-       }
-
        /**
         * Normalises a given JSON array
         *
@@ -92,8 +92,6 @@ class JsonLD
         */
        public static function normalize($json)
        {
-               $json = self::replaceSecurityLink($json);
-
                jsonld_set_document_loader('Friendica\Util\JsonLD::documentLoader');
 
                $jsonobj = json_decode(json_encode($json, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
@@ -128,19 +126,6 @@ class JsonLD
         */
        public static function compact($json)
        {
-               $compacted = self::internalCompact($json, false);
-               if (empty($compacted)) {
-                       $json['@context'] = ActivityPub::CONTEXT;
-                       $compacted = self::internalCompact($json, true);
-               }
-
-               return $compacted;
-       }
-
-       private static function internalCompact($json, bool $error_log)
-       {
-               $json = self::replaceSecurityLink($json);
-
                jsonld_set_document_loader('Friendica\Util\JsonLD::documentLoader');
 
                $context = (object)['as' => 'https://www.w3.org/ns/activitystreams#',
@@ -164,7 +149,7 @@ class JsonLD
                // Workaround for servers with missing context
                // See issue https://github.com/nextcloud/social/issues/330
                if (!empty($json['@context']) && is_array($json['@context'])) {
-                       $json['@context'][] = DI::baseUrl() . '/static/w3id-security-v1.json';
+                       $json['@context'][] = 'https://w3id.org/security/v1';
                }
 
                // Trying to avoid memory problems with large content fields
@@ -180,9 +165,7 @@ class JsonLD
                }
                catch (Exception $e) {
                        $compacted = false;
-                       if ($error_log) {
-                               Logger::error('compacting error', ['line' => $e->getLine(), 'message' => $e->getMessage(),'callstack' => System::callstack(20)]);
-                       }
+                       Logger::notice('compacting error', ['line' => $e->getLine(), 'exception' => $e]);
                }
 
                $json = json_decode(json_encode($compacted, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE), true);
@@ -210,7 +193,7 @@ class JsonLD
                }
 
                // If it isn't an array yet, make it to one
-               if (!is_int(key($array[$element]))) {
+               if (!is_array($array[$element]) || !is_int(key($array[$element]))) {
                        $array[$element] = [$array[$element]];
                }