![]() 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-catalog/Controller/Adminhtml/Product/ |
<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Catalog\Controller\Adminhtml\Product; use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface; use Magento\Catalog\Controller\Adminhtml\Product; use Magento\Framework\App\ObjectManager; use Magento\Framework\Controller\ResultFactory; use Magento\Ui\Component\MassAction\Filter; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; use Magento\Catalog\Helper\Product\Edit\Action\Attribute as AttributeHelper; /** * Updates status for a batch of products. * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product implements HttpPostActionInterface { /** * @var \Magento\Catalog\Model\Indexer\Product\Price\Processor */ protected $_productPriceIndexerProcessor; /** * MassActions filter * * @var Filter */ protected $filter; /** * @var CollectionFactory */ protected $collectionFactory; /** * @var \Magento\Catalog\Model\Product\Action */ private $productAction; /** * @var AttributeHelper */ private $attributeHelper; /** * @param \Magento\Backend\App\Action\Context $context * @param Builder $productBuilder * @param \Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor * @param Filter $filter * @param CollectionFactory $collectionFactory * @param \Magento\Catalog\Model\Product\Action $productAction * @param AttributeHelper $attributeHelper */ public function __construct( \Magento\Backend\App\Action\Context $context, Product\Builder $productBuilder, \Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor, Filter $filter, CollectionFactory $collectionFactory, \Magento\Catalog\Model\Product\Action $productAction = null, AttributeHelper $attributeHelper = null ) { $this->filter = $filter; $this->collectionFactory = $collectionFactory; $this->_productPriceIndexerProcessor = $productPriceIndexerProcessor; $this->productAction = $productAction ?: ObjectManager::getInstance() ->get(\Magento\Catalog\Model\Product\Action::class); $this->attributeHelper = $attributeHelper ?: ObjectManager::getInstance() ->get(AttributeHelper::class); parent::__construct($context, $productBuilder); } /** * Validate batch of products before theirs status will be set * * @param array $productIds * @param int $status * @return void * @throws \Magento\Framework\Exception\LocalizedException */ public function _validateMassStatus(array $productIds, $status) { if ($status == \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED) { if (!$this->_objectManager->create(\Magento\Catalog\Model\Product::class)->isProductsHasSku($productIds)) { throw new \Magento\Framework\Exception\LocalizedException( __('Please make sure to define SKU values for all processed products.') ); } } } /** * Update product(s) status action * * @return \Magento\Backend\Model\View\Result\Redirect */ public function execute() { $collection = $this->filter->getCollection($this->collectionFactory->create()); $productIds = $collection->getAllIds(); $this->attributeHelper->setProductIds($productIds); $requestStoreId = $storeId = $this->getRequest()->getParam('store', null); $filterRequest = $this->getRequest()->getParam('filters', null); $status = (int) $this->getRequest()->getParam('status'); if (null === $storeId && null !== $filterRequest) { $storeId = (isset($filterRequest['store_id'])) ? (int) $filterRequest['store_id'] : 0; } try { $this->_validateMassStatus($productIds, $status); $this->productAction->updateAttributes($productIds, ['status' => $status], (int) $storeId); $this->messageManager->addSuccessMessage( __('A total of %1 record(s) have been updated.', count($productIds)) ); $this->_productPriceIndexerProcessor->reindexList($productIds); } catch (\Magento\Framework\Exception\LocalizedException $e) { $this->messageManager->addErrorMessage($e->getMessage()); } catch (\Exception $e) { $this->messageManager->addExceptionMessage( $e, __('Something went wrong while updating the product(s) status.') ); } /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT); return $resultRedirect->setPath('catalog/*/', ['store' => $requestStoreId]); } }