From cd0f3d29515e9b0594117f2e5a9af65fa21b230e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20LIMOUZIN?= Date: Mon, 24 Jan 2022 16:02:20 +0100 Subject: [PATCH 1/5] add try catch --- bundle/Core/MetaNameSchema.php | 28 +++++++++------- bundle/Twig/NovaeZSEOExtension.php | 54 ++++++++++++++++-------------- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/bundle/Core/MetaNameSchema.php b/bundle/Core/MetaNameSchema.php index 141f35c..8e55434 100644 --- a/bundle/Core/MetaNameSchema.php +++ b/bundle/Core/MetaNameSchema.php @@ -124,19 +124,23 @@ public function resolveMeta(Meta $meta, Content $content, ContentType $contentTy ); } - $resolveMultilingue = $this->resolve( - $meta->getContent(), - $contentType, - $content->fields, - $content->versionInfo->languageCodes - ); - // we don't fallback on the other languages... it would be very bad for SEO to mix the languages - if ((\array_key_exists($this->languages[0], $resolveMultilingue)) && - ('' !== $resolveMultilingue[$this->languages[0]]) - ) { - $meta->setContent($resolveMultilingue[$this->languages[0]]); + try { + $resolveMultilingue = $this->resolve( + $meta->getContent(), + $contentType, + $content->fields, + $content->versionInfo->languageCodes + ); + // we don't fallback on the other languages... it would be very bad for SEO to mix the languages + if ((\array_key_exists($this->languages[0], $resolveMultilingue)) && + ('' !== $resolveMultilingue[$this->languages[0]]) + ) { + $meta->setContent($resolveMultilingue[$this->languages[0]]); - return true; + return true; + } + } catch(\Exception $exception) { + // TODO log } $meta->setContent(''); diff --git a/bundle/Twig/NovaeZSEOExtension.php b/bundle/Twig/NovaeZSEOExtension.php index dd10721..e8ec827 100644 --- a/bundle/Twig/NovaeZSEOExtension.php +++ b/bundle/Twig/NovaeZSEOExtension.php @@ -108,34 +108,38 @@ public function getFallbackedMetaContent(ContentInfo $contentInfo, string $metaN */ public function computeMetas(Field $field, ContentInfo $contentInfo): string { - $fallback = false; - $languages = $this->configResolver->getParameter('languages'); - $contentType = $this->eZRepository->getContentTypeService()->loadContentType( - $contentInfo->contentTypeId - ); - $content = $this->eZRepository->getContentService()->loadContentByContentInfo($contentInfo, $languages); - $contentMetas = $this->innerComputeMetas($content, $field, $contentType, $fallback); - if ($fallback && !$this->customFallBackService) { - $rootNode = $this->eZRepository->getLocationService()->loadLocation( - $this->configResolver->getParameter('content.tree_root.location_id') + try { + $fallback = false; + $languages = $this->configResolver->getParameter('languages'); + $contentType = $this->eZRepository->getContentTypeService()->loadContentType( + $contentInfo->contentTypeId ); - $rootContent = $this->eZRepository->getContentService()->loadContentByContentInfo( - $rootNode->contentInfo, - $languages - ); - $rootContentType = $this->eZRepository->getContentTypeService()->loadContentType( - $rootContent->contentInfo->contentTypeId - ); - // We need to load the good field too - $metasIdentifier = $this->configResolver->getParameter('fieldtype_metas_identifier', 'nova_ezseo'); - $rootMetas = $this->innerComputeMetas($rootContent, $metasIdentifier, $rootContentType, $fallback); - foreach ($contentMetas as $key => $metaContent) { - if (\array_key_exists($key, $rootMetas)) { - $metaContent->setContent( - $metaContent->isEmpty() ? $rootMetas[$key]->getContent() : $metaContent->getContent() - ); + $content = $this->eZRepository->getContentService()->loadContentByContentInfo($contentInfo, $languages); + $contentMetas = $this->innerComputeMetas($content, $field, $contentType, $fallback); + if ($fallback && !$this->customFallBackService) { + $rootNode = $this->eZRepository->getLocationService()->loadLocation( + $this->configResolver->getParameter('content.tree_root.location_id') + ); + $rootContent = $this->eZRepository->getContentService()->loadContentByContentInfo( + $rootNode->contentInfo, + $languages + ); + $rootContentType = $this->eZRepository->getContentTypeService()->loadContentType( + $rootContent->contentInfo->contentTypeId + ); + // We need to load the good field too + $metasIdentifier = $this->configResolver->getParameter('fieldtype_metas_identifier', 'nova_ezseo'); + $rootMetas = $this->innerComputeMetas($rootContent, $metasIdentifier, $rootContentType, $fallback); + foreach ($contentMetas as $key => $metaContent) { + if (\array_key_exists($key, $rootMetas)) { + $metaContent->setContent( + $metaContent->isEmpty() ? $rootMetas[$key]->getContent() : $metaContent->getContent() + ); + } } } + } catch (\Exception $exception) { + // TODO log } return ''; From 65541e4f44259158d2db9de8c29fe6376b7e7e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20LIMOUZIN?= Date: Mon, 24 Jan 2022 16:17:59 +0100 Subject: [PATCH 2/5] add log --- bundle/Core/MetaNameSchema.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/bundle/Core/MetaNameSchema.php b/bundle/Core/MetaNameSchema.php index 8e55434..5d50d06 100644 --- a/bundle/Core/MetaNameSchema.php +++ b/bundle/Core/MetaNameSchema.php @@ -34,6 +34,7 @@ use eZ\Publish\SPI\Persistence\Content\Type as SPIContentType; use eZ\Publish\SPI\Persistence\Content\Type\Handler as ContentTypeHandler; use eZ\Publish\SPI\Variation\VariationHandler; +use Psr\Log\LoggerInterface; class MetaNameSchema extends NameSchemaService { @@ -77,6 +78,11 @@ class MetaNameSchema extends NameSchemaService */ protected $relationListNameableField; + /** + * @var LoggerInterface|null + */ + protected $logger; + public function __construct( ContentTypeHandler $contentTypeHandler, FieldTypeCollectionFactory $collectionFactory, @@ -101,6 +107,14 @@ public function __construct( $this->relationListNameableField = $relationListNameableField; } + /** + * @required + */ + public function setLogger(LoggerInterface $logger): void + { + $this->logger = $logger; + } + public function setLanguages(array $languages = null): void { $this->languages = $languages; @@ -140,7 +154,12 @@ public function resolveMeta(Meta $meta, Content $content, ContentType $contentTy return true; } } catch(\Exception $exception) { - // TODO log + if ($this->logger) { + $this->logger->error('[Nova eZ SEO] Error when resolving meta', [ + 'message' => $exception->getMessage(), + 'contentId' => $content->id, + ]); + } } $meta->setContent(''); From 4400d41a145540b9fff4222caa540a5d09bb70aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20LIMOUZIN?= Date: Mon, 24 Jan 2022 17:55:45 +0100 Subject: [PATCH 3/5] change try catch location --- bundle/Core/MetaNameSchema.php | 46 ++++++++---------------------- bundle/Twig/NovaeZSEOExtension.php | 29 +++++++++++++++++-- 2 files changed, 39 insertions(+), 36 deletions(-) diff --git a/bundle/Core/MetaNameSchema.php b/bundle/Core/MetaNameSchema.php index 5d50d06..58793ee 100644 --- a/bundle/Core/MetaNameSchema.php +++ b/bundle/Core/MetaNameSchema.php @@ -78,11 +78,6 @@ class MetaNameSchema extends NameSchemaService */ protected $relationListNameableField; - /** - * @var LoggerInterface|null - */ - protected $logger; - public function __construct( ContentTypeHandler $contentTypeHandler, FieldTypeCollectionFactory $collectionFactory, @@ -107,14 +102,6 @@ public function __construct( $this->relationListNameableField = $relationListNameableField; } - /** - * @required - */ - public function setLogger(LoggerInterface $logger): void - { - $this->logger = $logger; - } - public function setLanguages(array $languages = null): void { $this->languages = $languages; @@ -138,28 +125,19 @@ public function resolveMeta(Meta $meta, Content $content, ContentType $contentTy ); } - try { - $resolveMultilingue = $this->resolve( - $meta->getContent(), - $contentType, - $content->fields, - $content->versionInfo->languageCodes - ); - // we don't fallback on the other languages... it would be very bad for SEO to mix the languages - if ((\array_key_exists($this->languages[0], $resolveMultilingue)) && - ('' !== $resolveMultilingue[$this->languages[0]]) - ) { - $meta->setContent($resolveMultilingue[$this->languages[0]]); + $resolveMultilingue = $this->resolve( + $meta->getContent(), + $contentType, + $content->fields, + $content->versionInfo->languageCodes + ); + // we don't fallback on the other languages... it would be very bad for SEO to mix the languages + if ((\array_key_exists($this->languages[0], $resolveMultilingue)) && + ('' !== $resolveMultilingue[$this->languages[0]]) + ) { + $meta->setContent($resolveMultilingue[$this->languages[0]]); - return true; - } - } catch(\Exception $exception) { - if ($this->logger) { - $this->logger->error('[Nova eZ SEO] Error when resolving meta', [ - 'message' => $exception->getMessage(), - 'contentId' => $content->id, - ]); - } + return true; } $meta->setContent(''); diff --git a/bundle/Twig/NovaeZSEOExtension.php b/bundle/Twig/NovaeZSEOExtension.php index e8ec827..dbbdb5d 100644 --- a/bundle/Twig/NovaeZSEOExtension.php +++ b/bundle/Twig/NovaeZSEOExtension.php @@ -11,6 +11,8 @@ namespace Novactive\Bundle\eZSEOBundle\Twig; +use eZ\Publish\API\Repository\Exceptions\NotFoundException; +use eZ\Publish\API\Repository\Exceptions\UnauthorizedException; use eZ\Publish\API\Repository\Repository; use eZ\Publish\API\Repository\Values\Content\Content; use eZ\Publish\API\Repository\Values\Content\ContentInfo; @@ -63,6 +65,11 @@ class NovaeZSEOExtension extends AbstractExtension implements GlobalsInterface */ protected $customFallBackService; + /** + * @var LoggerInterface|null + */ + protected $logger; + public function __construct( Repository $repository, MetaNameSchema $nameSchema, @@ -75,6 +82,14 @@ public function __construct( $this->localeConverter = $localeConverter; } + /** + * @required + */ + public function setLogger(LoggerInterface $logger): void + { + $this->logger = $logger; + } + public function setCustomFallbackService(CustomFallbackInterface $service) { $this->customFallBackService = $service; @@ -182,8 +197,18 @@ protected function innerComputeMetas( $meta->setContent($configuration[$meta->getName()]); } } - if (!$this->metaNameSchema->resolveMeta($meta, $content, $contentType)) { - $needFallback = true; + try { + if (!$this->metaNameSchema->resolveMeta($meta, $content, $contentType)) { + $needFallback = true; + } + } catch (\eZ\Publish\Core\Base\Exceptions\NotFoundException| + \eZ\Publish\Core\Base\Exceptions\UnauthorizedException $exception) { + if ($this->logger) { + $this->logger->error('[Nova eZ SEO] Error when resolving meta', [ + 'message' => $exception->getMessage(), + 'contentId' => $content->id, + ]); + } } } From 874658bf968f19c293236d5d3222cec88e95031d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20LIMOUZIN?= Date: Mon, 24 Jan 2022 17:58:10 +0100 Subject: [PATCH 4/5] clean PR --- bundle/Core/MetaNameSchema.php | 1 - bundle/Twig/NovaeZSEOExtension.php | 54 ++++++++++++++---------------- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/bundle/Core/MetaNameSchema.php b/bundle/Core/MetaNameSchema.php index 58793ee..141f35c 100644 --- a/bundle/Core/MetaNameSchema.php +++ b/bundle/Core/MetaNameSchema.php @@ -34,7 +34,6 @@ use eZ\Publish\SPI\Persistence\Content\Type as SPIContentType; use eZ\Publish\SPI\Persistence\Content\Type\Handler as ContentTypeHandler; use eZ\Publish\SPI\Variation\VariationHandler; -use Psr\Log\LoggerInterface; class MetaNameSchema extends NameSchemaService { diff --git a/bundle/Twig/NovaeZSEOExtension.php b/bundle/Twig/NovaeZSEOExtension.php index dbbdb5d..73e892d 100644 --- a/bundle/Twig/NovaeZSEOExtension.php +++ b/bundle/Twig/NovaeZSEOExtension.php @@ -123,38 +123,34 @@ public function getFallbackedMetaContent(ContentInfo $contentInfo, string $metaN */ public function computeMetas(Field $field, ContentInfo $contentInfo): string { - try { - $fallback = false; - $languages = $this->configResolver->getParameter('languages'); - $contentType = $this->eZRepository->getContentTypeService()->loadContentType( - $contentInfo->contentTypeId + $fallback = false; + $languages = $this->configResolver->getParameter('languages'); + $contentType = $this->eZRepository->getContentTypeService()->loadContentType( + $contentInfo->contentTypeId + ); + $content = $this->eZRepository->getContentService()->loadContentByContentInfo($contentInfo, $languages); + $contentMetas = $this->innerComputeMetas($content, $field, $contentType, $fallback); + if ($fallback && !$this->customFallBackService) { + $rootNode = $this->eZRepository->getLocationService()->loadLocation( + $this->configResolver->getParameter('content.tree_root.location_id') ); - $content = $this->eZRepository->getContentService()->loadContentByContentInfo($contentInfo, $languages); - $contentMetas = $this->innerComputeMetas($content, $field, $contentType, $fallback); - if ($fallback && !$this->customFallBackService) { - $rootNode = $this->eZRepository->getLocationService()->loadLocation( - $this->configResolver->getParameter('content.tree_root.location_id') - ); - $rootContent = $this->eZRepository->getContentService()->loadContentByContentInfo( - $rootNode->contentInfo, - $languages - ); - $rootContentType = $this->eZRepository->getContentTypeService()->loadContentType( - $rootContent->contentInfo->contentTypeId - ); - // We need to load the good field too - $metasIdentifier = $this->configResolver->getParameter('fieldtype_metas_identifier', 'nova_ezseo'); - $rootMetas = $this->innerComputeMetas($rootContent, $metasIdentifier, $rootContentType, $fallback); - foreach ($contentMetas as $key => $metaContent) { - if (\array_key_exists($key, $rootMetas)) { - $metaContent->setContent( - $metaContent->isEmpty() ? $rootMetas[$key]->getContent() : $metaContent->getContent() - ); - } + $rootContent = $this->eZRepository->getContentService()->loadContentByContentInfo( + $rootNode->contentInfo, + $languages + ); + $rootContentType = $this->eZRepository->getContentTypeService()->loadContentType( + $rootContent->contentInfo->contentTypeId + ); + // We need to load the good field too + $metasIdentifier = $this->configResolver->getParameter('fieldtype_metas_identifier', 'nova_ezseo'); + $rootMetas = $this->innerComputeMetas($rootContent, $metasIdentifier, $rootContentType, $fallback); + foreach ($contentMetas as $key => $metaContent) { + if (\array_key_exists($key, $rootMetas)) { + $metaContent->setContent( + $metaContent->isEmpty() ? $rootMetas[$key]->getContent() : $metaContent->getContent() + ); } } - } catch (\Exception $exception) { - // TODO log } return ''; From ceb4948d37bdbeef8e7fd55199462ca25d2d3667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20LIMOUZIN?= Date: Mon, 24 Jan 2022 17:59:43 +0100 Subject: [PATCH 5/5] Symplify CQN --- bundle/Twig/NovaeZSEOExtension.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bundle/Twig/NovaeZSEOExtension.php b/bundle/Twig/NovaeZSEOExtension.php index 73e892d..c24e895 100644 --- a/bundle/Twig/NovaeZSEOExtension.php +++ b/bundle/Twig/NovaeZSEOExtension.php @@ -11,13 +11,13 @@ namespace Novactive\Bundle\eZSEOBundle\Twig; -use eZ\Publish\API\Repository\Exceptions\NotFoundException; -use eZ\Publish\API\Repository\Exceptions\UnauthorizedException; use eZ\Publish\API\Repository\Repository; use eZ\Publish\API\Repository\Values\Content\Content; use eZ\Publish\API\Repository\Values\Content\ContentInfo; use eZ\Publish\API\Repository\Values\Content\Field; use eZ\Publish\API\Repository\Values\ContentType\ContentType; +use eZ\Publish\Core\Base\Exceptions\NotFoundException; +use eZ\Publish\Core\Base\Exceptions\UnauthorizedException; use eZ\Publish\Core\MVC\ConfigResolverInterface; use eZ\Publish\Core\MVC\Symfony\Locale\LocaleConverter; use Novactive\Bundle\eZSEOBundle\Core\CustomFallbackInterface; @@ -197,8 +197,7 @@ protected function innerComputeMetas( if (!$this->metaNameSchema->resolveMeta($meta, $content, $contentType)) { $needFallback = true; } - } catch (\eZ\Publish\Core\Base\Exceptions\NotFoundException| - \eZ\Publish\Core\Base\Exceptions\UnauthorizedException $exception) { + } catch (NotFoundException|UnauthorizedException $exception) { if ($this->logger) { $this->logger->error('[Nova eZ SEO] Error when resolving meta', [ 'message' => $exception->getMessage(),