Show.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Swatches\Controller\Adminhtml\Iframe;
  7. use Magento\Framework\App\Filesystem\DirectoryList;
  8. /**
  9. * Class to show swatch image and save it on disk
  10. */
  11. class Show extends \Magento\Backend\App\Action
  12. {
  13. /**
  14. * Authorization level of a basic admin session
  15. *
  16. * @see _isAllowed()
  17. */
  18. const ADMIN_RESOURCE = 'Magento_Swatches::iframe';
  19. /**
  20. * Helper to move image from tmp to catalog
  21. *
  22. * @var \Magento\Swatches\Helper\Media
  23. */
  24. protected $swatchHelper;
  25. /**
  26. * @var \Magento\Framework\Image\AdapterFactory
  27. */
  28. protected $adapterFactory;
  29. /**
  30. * @var \Magento\Catalog\Model\Product\Media\Config
  31. */
  32. protected $config;
  33. /**
  34. * @var \Magento\Framework\Filesystem
  35. */
  36. protected $filesystem;
  37. /**
  38. * @var \Magento\MediaStorage\Model\File\UploaderFactory
  39. */
  40. protected $uploaderFactory;
  41. /**
  42. * @param \Magento\Backend\App\Action\Context $context
  43. * @param \Magento\Swatches\Helper\Media $swatchHelper
  44. * @param \Magento\Framework\Image\AdapterFactory $adapterFactory
  45. * @param \Magento\Catalog\Model\Product\Media\Config $config
  46. * @param \Magento\Framework\Filesystem $filesystem
  47. * @param \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory
  48. */
  49. public function __construct(
  50. \Magento\Backend\App\Action\Context $context,
  51. \Magento\Swatches\Helper\Media $swatchHelper,
  52. \Magento\Framework\Image\AdapterFactory $adapterFactory,
  53. \Magento\Catalog\Model\Product\Media\Config $config,
  54. \Magento\Framework\Filesystem $filesystem,
  55. \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory
  56. ) {
  57. $this->swatchHelper = $swatchHelper;
  58. $this->adapterFactory = $adapterFactory;
  59. $this->config = $config;
  60. $this->filesystem = $filesystem;
  61. $this->uploaderFactory = $uploaderFactory;
  62. parent::__construct($context);
  63. }
  64. /**
  65. * Image upload action in iframe
  66. *
  67. * @return string
  68. */
  69. public function execute()
  70. {
  71. try {
  72. $uploader = $this->uploaderFactory->create(['fileId' => 'datafile']);
  73. $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
  74. /** @var \Magento\Framework\Image\Adapter\AdapterInterface $imageAdapter */
  75. $imageAdapter = $this->adapterFactory->create();
  76. $uploader->addValidateCallback('catalog_product_image', $imageAdapter, 'validateUploadFile');
  77. $uploader->setAllowRenameFiles(true);
  78. $uploader->setFilesDispersion(true);
  79. /** @var \Magento\Framework\Filesystem\Directory\Read $mediaDirectory */
  80. $mediaDirectory = $this->filesystem->getDirectoryRead(DirectoryList::MEDIA);
  81. $config = $this->config;
  82. $result = $uploader->save($mediaDirectory->getAbsolutePath($config->getBaseTmpMediaPath()));
  83. unset($result['path']);
  84. $this->_eventManager->dispatch(
  85. 'swatch_gallery_upload_image_after',
  86. ['result' => $result, 'action' => $this]
  87. );
  88. unset($result['tmp_name']);
  89. $result['url'] = $this->config->getTmpMediaUrl($result['file']);
  90. $result['file'] = $result['file'] . '.tmp';
  91. $newFile = $this->swatchHelper->moveImageFromTmp($result['file']);
  92. $this->swatchHelper->generateSwatchVariations($newFile);
  93. $fileData = ['swatch_path' => $this->swatchHelper->getSwatchMediaUrl(), 'file_path' => $newFile];
  94. $this->getResponse()->setBody(json_encode($fileData));
  95. } catch (\Exception $e) {
  96. $result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()];
  97. $this->getResponse()->setBody(json_encode($result));
  98. }
  99. }
  100. }