![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-media-gallery-metadata/Model/File/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\MediaGalleryMetadata\Model\File; use Magento\MediaGalleryMetadataApi\Api\Data\MetadataInterface; use Magento\MediaGalleryMetadataApi\Api\Data\MetadataInterfaceFactory; use Magento\MediaGalleryMetadataApi\Api\ExtractMetadataInterface; use Magento\MediaGalleryMetadataApi\Model\FileInterface; use Magento\MediaGalleryMetadataApi\Model\FileInterfaceFactory; use Magento\MediaGalleryMetadataApi\Model\ReadFileInterface; use Magento\MediaGalleryMetadataApi\Model\ReadMetadataInterface; /** * Extract Metadata from asset file by given extractors */ class ExtractMetadata implements ExtractMetadataInterface { /** * @var MetadataInterfaceFactory */ private $metadataFactory; /** * @var array */ private $segmentReaders; /** * @var ReadFileInterface */ private $fileReader; /** * @var FileInterfaceFactory */ private $fileFactory; /** * @param FileInterfaceFactory $fileFactory * @param MetadataInterfaceFactory $metadataFactory * @param ReadFileInterface $fileReader * @param array $segmentReaders */ public function __construct( FileInterfaceFactory $fileFactory, MetadataInterfaceFactory $metadataFactory, ReadFileInterface $fileReader, array $segmentReaders ) { $this->fileFactory = $fileFactory; $this->metadataFactory = $metadataFactory; $this->fileReader = $fileReader; $this->segmentReaders = $segmentReaders; } /** * @inheritdoc */ public function execute(string $path): MetadataInterface { try { return $this->readSegments($this->fileReader->execute($path)); } catch (\Exception $exception) { return $this->metadataFactory->create(); } } /** * Read file segments by given segmentReader * * @param FileInterface $file */ private function readSegments(FileInterface $file): MetadataInterface { $title = null; $description = null; $keywords = []; foreach ($this->segmentReaders as $segmentReader) { if (!$segmentReader instanceof ReadMetadataInterface) { throw new \InvalidArgumentException( __(get_class($segmentReader) . ' must implement ' . ReadMetadataInterface::class) ); } try { $data = $segmentReader->execute($file); } catch (\Exception $exception) { continue; } $title = !empty($data->getTitle()) ? $data->getTitle() : $title; $description = !empty($data->getDescription()) ? $data->getDescription() : $description; if (!empty($data->getKeywords())) { foreach ($data->getKeywords() as $keyword) { $keywords[] = $keyword; } } } return $this->metadataFactory->create([ 'title' => $title, 'description' => $description, 'keywords' => empty($keywords) ? null : array_unique($keywords) ]); } }