![]() 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/Block/Adminhtml/Product/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Catalog\Block\Adminhtml\Product; use Magento\Store\Model\Store; /** * Catalog product grid * * @api * @since 100.0.2 */ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended { /** * @var \Magento\Framework\Module\Manager */ protected $moduleManager; /** * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory] */ protected $_setsFactory; /** * @var \Magento\Catalog\Model\ProductFactory */ protected $_productFactory; /** * @var \Magento\Catalog\Model\Product\Type */ protected $_type; /** * @var \Magento\Catalog\Model\Product\Attribute\Source\Status */ protected $_status; /** * @var \Magento\Catalog\Model\Product\Visibility */ protected $_visibility; /** * @var \Magento\Store\Model\WebsiteFactory */ protected $_websiteFactory; /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Backend\Helper\Data $backendHelper * @param \Magento\Store\Model\WebsiteFactory $websiteFactory * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory * @param \Magento\Catalog\Model\ProductFactory $productFactory * @param \Magento\Catalog\Model\Product\Type $type * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $status * @param \Magento\Catalog\Model\Product\Visibility $visibility * @param \Magento\Framework\Module\Manager $moduleManager * @param array $data * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Backend\Helper\Data $backendHelper, \Magento\Store\Model\WebsiteFactory $websiteFactory, \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory, \Magento\Catalog\Model\ProductFactory $productFactory, \Magento\Catalog\Model\Product\Type $type, \Magento\Catalog\Model\Product\Attribute\Source\Status $status, \Magento\Catalog\Model\Product\Visibility $visibility, \Magento\Framework\Module\Manager $moduleManager, array $data = [] ) { $this->_websiteFactory = $websiteFactory; $this->_setsFactory = $setsFactory; $this->_productFactory = $productFactory; $this->_type = $type; $this->_status = $status; $this->_visibility = $visibility; $this->moduleManager = $moduleManager; parent::__construct($context, $backendHelper, $data); } /** * @inheritDoc */ protected function _construct() { parent::_construct(); $this->setId('productGrid'); $this->setDefaultSort('entity_id'); $this->setDefaultDir('DESC'); $this->setSaveParametersInSession(true); $this->setUseAjax(true); $this->setVarNameFilter('product_filter'); } /** * Get store. * * @return Store * @throws \Magento\Framework\Exception\NoSuchEntityException */ protected function _getStore() { $storeId = (int)$this->getRequest()->getParam('store', 0); return $this->_storeManager->getStore($storeId); } /** * @inheritDoc */ protected function _prepareCollection() { $store = $this->_getStore(); $collection = $this->_productFactory->create()->getCollection()->addAttributeToSelect( 'sku' )->addAttributeToSelect( 'name' )->addAttributeToSelect( 'attribute_set_id' )->addAttributeToSelect( 'type_id' )->setStore( $store ); if ($this->moduleManager->isEnabled('Magento_CatalogInventory')) { $collection->joinField( 'qty', 'cataloginventory_stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left' ); } if ($store->getId()) { $collection->addStoreFilter($store); $collection->joinAttribute( 'name', 'catalog_product/name', 'entity_id', null, 'inner', Store::DEFAULT_STORE_ID ); $collection->joinAttribute( 'custom_name', 'catalog_product/name', 'entity_id', null, 'inner', $store->getId() ); $collection->joinAttribute( 'status', 'catalog_product/status', 'entity_id', null, 'inner', $store->getId() ); $collection->joinAttribute( 'visibility', 'catalog_product/visibility', 'entity_id', null, 'inner', $store->getId() ); $collection->joinAttribute('price', 'catalog_product/price', 'entity_id', null, 'left', $store->getId()); } else { $collection->addAttributeToSelect('price'); $collection->joinAttribute('status', 'catalog_product/status', 'entity_id', null, 'inner'); $collection->joinAttribute('visibility', 'catalog_product/visibility', 'entity_id', null, 'inner'); } $this->setCollection($collection); $this->getCollection()->addWebsiteNamesToResult(); parent::_prepareCollection(); return $this; } /** * @inheritDoc */ protected function _addColumnFilterToCollection($column) { if ($this->getCollection()) { if ($column->getId() == 'websites') { $this->getCollection()->joinField( 'websites', 'catalog_product_website', 'website_id', 'product_id=entity_id', null, 'left' ); } } return parent::_addColumnFilterToCollection($column); } /** * @inheritDoc * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @throws \Exception */ protected function _prepareColumns() { $this->addColumn( 'entity_id', [ 'header' => __('ID'), 'type' => 'number', 'index' => 'entity_id', 'header_css_class' => 'col-id', 'column_css_class' => 'col-id' ] ); $this->addColumn( 'name', [ 'header' => __('Name'), 'index' => 'name', 'class' => 'xxx' ] ); $store = $this->_getStore(); if ($store->getId()) { $this->addColumn( 'custom_name', [ 'header' => __('Name in %1', $store->getName()), 'index' => 'custom_name', 'header_css_class' => 'col-name', 'column_css_class' => 'col-name' ] ); } $this->addColumn( 'type', [ 'header' => __('Type'), 'index' => 'type_id', 'type' => 'options', 'options' => $this->_type->getOptionArray() ] ); $sets = $this->_setsFactory->create()->setEntityTypeFilter( $this->_productFactory->create()->getResource()->getTypeId() )->load()->toOptionHash(); $this->addColumn( 'set_name', [ 'header' => __('Attribute Set'), 'index' => 'attribute_set_id', 'type' => 'options', 'options' => $sets, 'header_css_class' => 'col-attr-name', 'column_css_class' => 'col-attr-name' ] ); $this->addColumn( 'sku', [ 'header' => __('SKU'), 'index' => 'sku' ] ); $store = $this->_getStore(); $this->addColumn( 'price', [ 'header' => __('Price'), 'type' => 'price', 'currency_code' => $store->getBaseCurrency()->getCode(), 'index' => 'price', 'header_css_class' => 'col-price', 'column_css_class' => 'col-price' ] ); if ($this->moduleManager->isEnabled('Magento_CatalogInventory')) { $this->addColumn( 'qty', [ 'header' => __('Quantity'), 'type' => 'number', 'index' => 'qty' ] ); } $this->addColumn( 'visibility', [ 'header' => __('Visibility'), 'index' => 'visibility', 'type' => 'options', 'options' => $this->_visibility->getOptionArray(), 'header_css_class' => 'col-visibility', 'column_css_class' => 'col-visibility' ] ); $this->addColumn( 'status', [ 'header' => __('Status'), 'index' => 'status', 'type' => 'options', 'options' => $this->_status->getOptionArray() ] ); if (!$this->_storeManager->isSingleStoreMode()) { $this->addColumn( 'websites', [ 'header' => __('Websites'), 'sortable' => false, 'index' => 'websites', 'type' => 'options', 'options' => $this->_websiteFactory->create()->getCollection()->toOptionHash(), 'header_css_class' => 'col-websites', 'column_css_class' => 'col-websites' ] ); } $this->addColumn( 'edit', [ 'header' => __('Edit'), 'type' => 'action', 'getter' => 'getId', 'actions' => [ [ 'caption' => __('Edit'), 'url' => [ 'base' => '*/*/edit', 'params' => ['store' => $this->getRequest()->getParam('store')] ], 'field' => 'id' ] ], 'filter' => false, 'sortable' => false, 'index' => 'stores', 'header_css_class' => 'col-action', 'column_css_class' => 'col-action' ] ); return parent::_prepareColumns(); } /** * @inheritDoc */ protected function _prepareMassaction() { $this->setMassactionIdField('entity_id'); $this->getMassactionBlock()->setTemplate('Magento_Catalog::product/grid/massaction_extended.phtml'); $this->getMassactionBlock()->setFormFieldName('product'); $this->getMassactionBlock()->addItem( 'delete', [ 'label' => __('Delete'), 'url' => $this->getUrl('catalog/*/massDelete'), 'confirm' => __('Are you sure?') ] ); $statuses = $this->_status->getOptionArray(); array_unshift($statuses, ['label' => '', 'value' => '']); $this->getMassactionBlock()->addItem( 'status', [ 'label' => __('Change Status'), 'url' => $this->getUrl('catalog/*/massStatus', ['_current' => true]), 'additional' => [ 'visibility' => [ 'name' => 'status', 'type' => 'select', 'class' => 'required-entry', 'label' => __('Status'), 'values' => $statuses ] ] ] ); if ($this->_authorization->isAllowed('Magento_Catalog::update_attributes')) { $this->getMassactionBlock()->addItem( 'attributes', [ 'label' => __('Update Attributes'), 'url' => $this->getUrl('catalog/product_action_attribute/edit', ['_current' => true]) ] ); } $this->_eventManager->dispatch('adminhtml_catalog_product_grid_prepare_massaction', ['block' => $this]); return $this; } /** * @inheritDoc */ public function getGridUrl() { return $this->getUrl('catalog/*/grid', ['_current' => true]); } /** * @inheritDoc */ public function getRowUrl($row) { return $this->getUrl( 'catalog/*/edit', ['store' => $this->getRequest()->getParam('store'), 'id' => $row->getId()] ); } }