From c135d783dee7e2d265469c9570ed5563c70d8a28 Mon Sep 17 00:00:00 2001 From: Joshua Baker <160484+joshuabaker@users.noreply.github.com> Date: Thu, 27 May 2021 17:16:57 +0100 Subject: [PATCH 1/4] Updated normalizeValue Fixes #74 --- src/fields/OembedField.php | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/fields/OembedField.php b/src/fields/OembedField.php index 5fc468f..a34d4de 100755 --- a/src/fields/OembedField.php +++ b/src/fields/OembedField.php @@ -105,23 +105,34 @@ public function getContentGqlType() */ public function normalizeValue($value, ElementInterface $element = null) { - if (is_array($value)) { - if (isset($value['url'])) { - return new OembedModel($value['url']); - } + // If null, don’t proceed + if ($value === null) { + return null; } - - if (is_string($value) && $decValue = json_decode($value, true)) { - if (isset($decValue['url'])) { - return new OembedModel($decValue['url']); - } + + // If an instance of `OembedModel` and URL is set, return it + if ($value instanceof OembedModel && $value->url) { + return $value; } - $oembed = $value ? new OembedModel($value) : null; - - $this->oembed = $oembed; + // If JSON object string, decode it and use that as the value + if (Json::isJsonObject($value)) { + $value = Json::decode($value); // Returns an array + } - return $oembed; + // If array with `url` attribute, that’s our url so update the value + if ($url = ArrayHelper::getValue($value, 'url')) { + // Run `getValue` twice to avoid https://github.com/wrav/oembed/issues/74 + $value = ArrayHelper::getValue($value, 'url', $url); + } + + // If URL string, return an instance of `OembedModel` + if (UrlHelper::isFullUrl($value)) { + return new OembedModel($value); + } + + // If we get here, something’s gone wrong + return null; } /** From 04ec9ef72ff7c9bc865c654b73245a6a19b70d40 Mon Sep 17 00:00:00 2001 From: Joshua Baker <160484+joshuabaker@users.noreply.github.com> Date: Fri, 28 May 2021 08:42:13 +0100 Subject: [PATCH 2/4] Update OembedField.php --- src/fields/OembedField.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/fields/OembedField.php b/src/fields/OembedField.php index a34d4de..08b1747 100755 --- a/src/fields/OembedField.php +++ b/src/fields/OembedField.php @@ -18,7 +18,10 @@ use craft\gql\resolvers\elements\MatrixBlock as MatrixBlockResolver; use craft\gql\types\generators\MatrixBlockType as MatrixBlockTypeGenerator; use craft\gql\types\QueryArgument; +use craft\helpers\ArrayHelper; use craft\helpers\Gql as GqlHelper; +use craft\helpers\Json; +use craft\helpers\UrlHelper; use GraphQL\Type\Definition\Type; use wrav\oembed\gql\OembedFieldTypeGenerator; use wrav\oembed\Oembed; From 6c2666de471245468f002c35a521b64672868334 Mon Sep 17 00:00:00 2001 From: Joshua Baker <160484+joshuabaker@users.noreply.github.com> Date: Fri, 28 May 2021 08:50:07 +0100 Subject: [PATCH 3/4] Amended conditions --- src/fields/OembedField.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/fields/OembedField.php b/src/fields/OembedField.php index 08b1747..94fca01 100755 --- a/src/fields/OembedField.php +++ b/src/fields/OembedField.php @@ -124,13 +124,17 @@ public function normalizeValue($value, ElementInterface $element = null) } // If array with `url` attribute, that’s our url so update the value - if ($url = ArrayHelper::getValue($value, 'url')) { - // Run `getValue` twice to avoid https://github.com/wrav/oembed/issues/74 - $value = ArrayHelper::getValue($value, 'url', $url); + if (is_array($value)) { + $value = ArrayHelper::getValue($value, 'url'); + } + + // Run `getValue` twice to avoid https://github.com/wrav/oembed/issues/74 + if (is_array($value)) { + $value = ArrayHelper::getValue($value, 'url'); } // If URL string, return an instance of `OembedModel` - if (UrlHelper::isFullUrl($value)) { + if (is_string($value) && UrlHelper::isFullUrl($value)) { return new OembedModel($value); } From e6deb2ad278ffa5950b8ef7d0d6caae9ea65a4c4 Mon Sep 17 00:00:00 2001 From: Joshua Baker <160484+joshuabaker@users.noreply.github.com> Date: Mon, 14 Jun 2021 11:02:20 +0100 Subject: [PATCH 4/4] =?UTF-8?q?Added=20=E2=80=9Ccaching=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/fields/OembedField.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/fields/OembedField.php b/src/fields/OembedField.php index 94fca01..d21cd8b 100755 --- a/src/fields/OembedField.php +++ b/src/fields/OembedField.php @@ -49,6 +49,11 @@ class OembedField extends Field * @var array */ public $oembed = []; + + /** + * @var mixed|null + */ + protected $value; // Static Methods // ========================================================================= @@ -115,7 +120,7 @@ public function normalizeValue($value, ElementInterface $element = null) // If an instance of `OembedModel` and URL is set, return it if ($value instanceof OembedModel && $value->url) { - return $value; + return $this->value = $value; } // If JSON object string, decode it and use that as the value @@ -135,7 +140,7 @@ public function normalizeValue($value, ElementInterface $element = null) // If URL string, return an instance of `OembedModel` if (is_string($value) && UrlHelper::isFullUrl($value)) { - return new OembedModel($value); + return $this->value = new OembedModel($value); } // If we get here, something’s gone wrong