/vendor/magento/module-catalog/Controller/Adminhtml/Product/Save.php
https://gitlab.com/yousafsyed/easternglamor · PHP · 188 lines · 129 code · 16 blank · 43 comment · 15 complexity · 6616a2264be4823ccebf4af90534fde6 MD5 · raw file
- <?php
- /**
- *
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Catalog\Controller\Adminhtml\Product;
- use Magento\Backend\App\Action;
- use Magento\Catalog\Controller\Adminhtml\Product;
- class Save extends \Magento\Catalog\Controller\Adminhtml\Product
- {
- /**
- * @var Initialization\Helper
- */
- protected $initializationHelper;
- /**
- * @var \Magento\Catalog\Model\Product\Copier
- */
- protected $productCopier;
- /**
- * @var \Magento\Catalog\Model\Product\TypeTransitionManager
- */
- protected $productTypeManager;
- /**
- * @var \Magento\Catalog\Api\ProductRepositoryInterface
- */
- protected $productRepository;
- /**
- * @param Action\Context $context
- * @param Builder $productBuilder
- * @param Initialization\Helper $initializationHelper
- * @param \Magento\Catalog\Model\Product\Copier $productCopier
- * @param \Magento\Catalog\Model\Product\TypeTransitionManager $productTypeManager
- * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
- */
- public function __construct(
- \Magento\Backend\App\Action\Context $context,
- Product\Builder $productBuilder,
- Initialization\Helper $initializationHelper,
- \Magento\Catalog\Model\Product\Copier $productCopier,
- \Magento\Catalog\Model\Product\TypeTransitionManager $productTypeManager,
- \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
- ) {
- $this->initializationHelper = $initializationHelper;
- $this->productCopier = $productCopier;
- $this->productTypeManager = $productTypeManager;
- $this->productRepository = $productRepository;
- parent::__construct($context, $productBuilder);
- }
- /**
- * Save product action
- *
- * @return \Magento\Backend\Model\View\Result\Redirect
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- * @SuppressWarnings(PHPMD.NPathComplexity)
- */
- public function execute()
- {
- $storeId = $this->getRequest()->getParam('store');
- $redirectBack = $this->getRequest()->getParam('back', false);
- $productId = $this->getRequest()->getParam('id');
- $resultRedirect = $this->resultRedirectFactory->create();
- $data = $this->getRequest()->getPostValue();
- $productAttributeSetId = $this->getRequest()->getParam('set');
- $productTypeId = $this->getRequest()->getParam('type');
- if ($data) {
- try {
- $product = $this->initializationHelper->initialize($this->productBuilder->build($this->getRequest()));
- $this->productTypeManager->processProduct($product);
- if (isset($data['product'][$product->getIdFieldName()])) {
- throw new \Magento\Framework\Exception\LocalizedException(__('Unable to save product'));
- }
- $originalSku = $product->getSku();
- $product->save();
- $this->handleImageRemoveError($data, $product->getId());
- $productId = $product->getId();
- $productAttributeSetId = $product->getAttributeSetId();
- $productTypeId = $product->getTypeId();
- /**
- * Do copying data to stores
- */
- if (isset($data['copy_to_stores'])) {
- foreach ($data['copy_to_stores'] as $storeTo => $storeFrom) {
- $this->_objectManager->create('Magento\Catalog\Model\Product')
- ->setStoreId($storeFrom)
- ->load($productId)
- ->setStoreId($storeTo)
- ->save();
- }
- }
- $this->messageManager->addSuccess(__('You saved the product.'));
- if ($product->getSku() != $originalSku) {
- $this->messageManager->addNotice(
- __(
- 'SKU for product %1 has been changed to %2.',
- $this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($product->getName()),
- $this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($product->getSku())
- )
- );
- }
- $this->_eventManager->dispatch(
- 'controller_action_catalog_product_save_entity_after',
- ['controller' => $this]
- );
- if ($redirectBack === 'duplicate') {
- $newProduct = $this->productCopier->copy($product);
- $this->messageManager->addSuccess(__('You duplicated the product.'));
- }
- } catch (\Magento\Framework\Exception\LocalizedException $e) {
- $this->messageManager->addError($e->getMessage());
- $this->_session->setProductData($data);
- $redirectBack = $productId ? true : 'new';
- } catch (\Exception $e) {
- $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
- $this->messageManager->addError($e->getMessage());
- $this->_session->setProductData($data);
- $redirectBack = $productId ? true : 'new';
- }
- } else {
- $resultRedirect->setPath('catalog/*/', ['store' => $storeId]);
- $this->messageManager->addError('No data to save');
- return $resultRedirect;
- }
- if ($redirectBack === 'new') {
- $resultRedirect->setPath(
- 'catalog/*/new',
- ['set' => $productAttributeSetId, 'type' => $productTypeId]
- );
- } elseif ($redirectBack === 'duplicate' && isset($newProduct)) {
- $resultRedirect->setPath(
- 'catalog/*/edit',
- ['id' => $newProduct->getId(), 'back' => null, '_current' => true]
- );
- } elseif ($redirectBack) {
- $resultRedirect->setPath(
- 'catalog/*/edit',
- ['id' => $productId, '_current' => true, 'set' => $productAttributeSetId]
- );
- } else {
- $resultRedirect->setPath('catalog/*/', ['store' => $storeId]);
- }
- return $resultRedirect;
- }
- /**
- * Notify customer when image was not deleted in specific case.
- * TODO: temporary workaround must be eliminated in MAGETWO-45306
- *
- * @param array $postData
- * @param int $productId
- * @return void
- */
- private function handleImageRemoveError($postData, $productId)
- {
- if (isset($postData['product']['media_gallery']['images'])) {
- $removedImagesAmount = 0;
- foreach ($postData['product']['media_gallery']['images'] as $image) {
- if (!empty($image['removed'])) {
- $removedImagesAmount++;
- }
- }
- if ($removedImagesAmount) {
- $expectedImagesAmount = count($postData['product']['media_gallery']['images']) - $removedImagesAmount;
- $product = $this->productRepository->getById($productId);
- if ($expectedImagesAmount != count($product->getMediaGallery('images'))) {
- $this->messageManager->addNotice(
- __('The image cannot be removed as it has been assigned to the other image role')
- );
- }
- }
- }
- }
- }