123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Customer\Model\Metadata\Form;
- use Magento\Customer\Api\AddressMetadataInterface;
- use Magento\Customer\Api\CustomerMetadataInterface;
- use Magento\Customer\Model\FileProcessor;
- use Magento\Framework\Api\ArrayObjectSearch;
- use Magento\Framework\Api\Data\ImageContentInterface;
- use Magento\Framework\Api\Data\ImageContentInterfaceFactory;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\File\UploaderFactory;
- use Magento\Framework\Filesystem;
- /**
- * Metadata for form image field
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class Image extends File
- {
- /**
- * @var ImageContentInterfaceFactory
- */
- private $imageContentFactory;
- /**
- * Constructor
- *
- * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
- * @param \Psr\Log\LoggerInterface $logger
- * @param \Magento\Customer\Api\Data\AttributeMetadataInterface $attribute
- * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
- * @param null|string $value
- * @param string $entityTypeCode
- * @param bool $isAjax
- * @param \Magento\Framework\Url\EncoderInterface $urlEncoder
- * @param \Magento\MediaStorage\Model\File\Validator\NotProtectedExtension $fileValidator
- * @param Filesystem $fileSystem
- * @param UploaderFactory $uploaderFactory
- * @param \Magento\Customer\Model\FileProcessorFactory|null $fileProcessorFactory
- * @param \Magento\Framework\Api\Data\ImageContentInterfaceFactory|null $imageContentInterfaceFactory
- * @SuppressWarnings(PHPMD.ExcessiveParameterList)
- */
- public function __construct(
- \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
- \Psr\Log\LoggerInterface $logger,
- \Magento\Customer\Api\Data\AttributeMetadataInterface $attribute,
- \Magento\Framework\Locale\ResolverInterface $localeResolver,
- $value,
- $entityTypeCode,
- $isAjax,
- \Magento\Framework\Url\EncoderInterface $urlEncoder,
- \Magento\MediaStorage\Model\File\Validator\NotProtectedExtension $fileValidator,
- Filesystem $fileSystem,
- UploaderFactory $uploaderFactory,
- \Magento\Customer\Model\FileProcessorFactory $fileProcessorFactory = null,
- \Magento\Framework\Api\Data\ImageContentInterfaceFactory $imageContentInterfaceFactory = null
- ) {
- parent::__construct(
- $localeDate,
- $logger,
- $attribute,
- $localeResolver,
- $value,
- $entityTypeCode,
- $isAjax,
- $urlEncoder,
- $fileValidator,
- $fileSystem,
- $uploaderFactory,
- $fileProcessorFactory
- );
- $this->imageContentFactory = $imageContentInterfaceFactory ?: ObjectManager::getInstance()
- ->get(\Magento\Framework\Api\Data\ImageContentInterfaceFactory::class);
- }
- /**
- * Validate file by attribute validate rules
- *
- * Return array of errors
- *
- * @param array $value
- * @return string[]
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- * @SuppressWarnings(PHPMD.NPathComplexity)
- */
- protected function _validateByRules($value)
- {
- $label = $value['name'];
- $rules = $this->getAttribute()->getValidationRules();
- $imageProp = @getimagesize($value['tmp_name']);
- if (!$this->_isUploadedFile($value['tmp_name']) || !$imageProp) {
- return [__('"%1" is not a valid file.', $label)];
- }
- $allowImageTypes = [1 => 'gif', 2 => 'jpg', 3 => 'png'];
- if (!isset($allowImageTypes[$imageProp[2]])) {
- return [__('"%1" is not a valid image format.', $label)];
- }
- // modify image name
- $extension = pathinfo($value['name'], PATHINFO_EXTENSION);
- if ($extension != $allowImageTypes[$imageProp[2]]) {
- $value['name'] = pathinfo($value['name'], PATHINFO_FILENAME) . '.' . $allowImageTypes[$imageProp[2]];
- }
- $maxFileSize = ArrayObjectSearch::getArrayElementByName(
- $rules,
- 'max_file_size'
- );
- $errors = [];
- if ($maxFileSize !== null) {
- $size = $value['size'];
- if ($maxFileSize < $size) {
- $errors[] = __('"%1" exceeds the allowed file size.', $label);
- }
- }
- $maxImageWidth = ArrayObjectSearch::getArrayElementByName(
- $rules,
- 'max_image_width'
- );
- if ($maxImageWidth !== null) {
- if ($maxImageWidth < $imageProp[0]) {
- $r = $maxImageWidth;
- $errors[] = __('"%1" width exceeds allowed value of %2 px.', $label, $r);
- }
- }
- $maxImageHeight = ArrayObjectSearch::getArrayElementByName(
- $rules,
- 'max_image_height'
- );
- if ($maxImageHeight !== null) {
- if ($maxImageHeight < $imageProp[1]) {
- $r = $maxImageHeight;
- $errors[] = __('"%1" height exceeds allowed value of %2 px.', $label, $r);
- }
- }
- return $errors;
- }
- /**
- * Process file uploader UI component data
- *
- * @param array $value
- * @return bool|int|ImageContentInterface|string
- */
- protected function processUiComponentValue(array $value)
- {
- if ($this->_entityTypeCode == AddressMetadataInterface::ENTITY_TYPE_ADDRESS) {
- $result = $this->processCustomerAddressValue($value);
- return $result;
- }
- if ($this->_entityTypeCode == CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER) {
- $result = $this->processCustomerValue($value);
- return $result;
- }
- return $this->_value;
- }
- /**
- * Process file uploader UI component data for customer_address entity
- *
- * @param array $value
- * @return string
- */
- protected function processCustomerAddressValue(array $value)
- {
- $result = $this->getFileProcessor()->moveTemporaryFile($value['file']);
- return $result;
- }
- /**
- * Process file uploader UI component data for customer entity
- *
- * @param array $value
- * @return bool|int|ImageContentInterface|string
- */
- protected function processCustomerValue(array $value)
- {
- $temporaryFile = FileProcessor::TMP_DIR . '/' . ltrim($value['file'], '/');
- if ($this->getFileProcessor()->isExist($temporaryFile)) {
- $base64EncodedData = $this->getFileProcessor()->getBase64EncodedData($temporaryFile);
- /** @var ImageContentInterface $imageContentDataObject */
- $imageContentDataObject = $this->imageContentFactory->create()
- ->setName($value['name'])
- ->setBase64EncodedData($base64EncodedData)
- ->setType($value['type']);
- // Remove temporary file
- $this->getFileProcessor()->removeUploadedFile($temporaryFile);
- return $imageContentDataObject;
- }
- return $this->_value;
- }
- }
|