vendor/dachcom-digital/seo/src/SeoBundle/MetaData/Extractor/IntegratorExtractor.php line 45

Open in your IDE?
  1. <?php
  2. namespace SeoBundle\MetaData\Extractor;
  3. use Pimcore\Model\DataObject\Concrete;
  4. use Pimcore\Model\Document;
  5. use Pimcore\Model\Document\Page;
  6. use SeoBundle\Manager\ElementMetaDataManagerInterface;
  7. use SeoBundle\Model\SeoMetaDataInterface;
  8. use SeoBundle\Registry\MetaDataIntegratorRegistryInterface;
  9. class IntegratorExtractor implements ExtractorInterface
  10. {
  11.     protected array $integratorConfiguration;
  12.     protected ElementMetaDataManagerInterface $elementMetaDataManager;
  13.     protected MetaDataIntegratorRegistryInterface $metaDataIntegratorRegistry;
  14.     public function __construct(
  15.         array $integratorConfiguration,
  16.         ElementMetaDataManagerInterface $elementMetaDataManager,
  17.         MetaDataIntegratorRegistryInterface $metaDataIntegratorRegistry
  18.     ) {
  19.         $this->integratorConfiguration $integratorConfiguration;
  20.         $this->elementMetaDataManager $elementMetaDataManager;
  21.         $this->metaDataIntegratorRegistry $metaDataIntegratorRegistry;
  22.     }
  23.     public function supports(mixed $element): bool
  24.     {
  25.         if ($element instanceof Concrete) {
  26.             if ($this->integratorConfiguration['objects']['enabled'] === false) {
  27.                 return false;
  28.             }
  29.             return in_array($element->getClassName(), $this->integratorConfiguration['objects']['data_classes'], true);
  30.         }
  31.         if ($element instanceof Page) {
  32.             return $this->integratorConfiguration['documents']['enabled'] === true;
  33.         }
  34.         return false;
  35.     }
  36.     public function updateMetaData(mixed $element, ?string $localeSeoMetaDataInterface $seoMetadata): void
  37.     {
  38.         $elementId null;
  39.         $elementType null;
  40.         if ($element instanceof Concrete) {
  41.             $elementId $element->getId();
  42.             $elementType 'object';
  43.         } elseif ($element instanceof Document) {
  44.             $elementId $element->getId();
  45.             $elementType 'document';
  46.         }
  47.         if ($elementType === null) {
  48.             return;
  49.         }
  50.         $elementMetaData $this->elementMetaDataManager->getElementData($elementType$elementId);
  51.         foreach ($elementMetaData as $elementMeta) {
  52.             try {
  53.                 $metaDataIntegrator $this->metaDataIntegratorRegistry->get($elementMeta->getIntegrator());
  54.             } catch (\Exception $e) {
  55.                 // fail silently
  56.                 continue;
  57.             }
  58.             $metaDataIntegrator->updateMetaData($element$elementMeta->getData(), $locale$seoMetadata);
  59.         }
  60.     }
  61. }