![]() 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/Edit/Tab/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Catalog\Block\Adminhtml\Product\Edit\Tab; use Magento\Backend\Block\Widget\Grid\Column; use Magento\Backend\Block\Widget\Grid\Extended; /** * Related product edit tab * * @api * @since 100.0.2 * @deprecated 103.0.1 Not used since related products grid moved to UI components. * @see \Magento\Catalog\Ui\DataProvider\Product\Related\RelatedDataProvider */ class Related extends Extended { /** * Core registry * * @var \Magento\Framework\Registry */ protected $_coreRegistry = null; /** * @var \Magento\Catalog\Model\Product\LinkFactory */ protected $_linkFactory; /** * @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; /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Backend\Helper\Data $backendHelper * @param \Magento\Catalog\Model\Product\LinkFactory $linkFactory * @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\Registry $coreRegistry * @param array $data * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Backend\Helper\Data $backendHelper, \Magento\Catalog\Model\Product\LinkFactory $linkFactory, \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\Registry $coreRegistry, array $data = [] ) { $this->_linkFactory = $linkFactory; $this->_setsFactory = $setsFactory; $this->_productFactory = $productFactory; $this->_type = $type; $this->_status = $status; $this->_visibility = $visibility; $this->_coreRegistry = $coreRegistry; parent::__construct($context, $backendHelper, $data); } /** * Set grid params * * @return void */ protected function _construct() { parent::_construct(); $this->setId('related_product_grid'); $this->setDefaultSort('entity_id'); $this->setUseAjax(true); if ($this->getProduct() && $this->getProduct()->getId()) { $this->setDefaultFilter(['in_products' => 1]); } if ($this->isReadonly()) { $this->setFilterVisibility(false); } } /** * Retrieve currently edited product model * * @return array|null */ public function getProduct() { return $this->_coreRegistry->registry('current_product'); } /** * Add filter * * @param Column $column * @return $this */ protected function _addColumnFilterToCollection($column) { // Set custom filter for in product flag if ($column->getId() == 'in_products') { $productIds = $this->_getSelectedProducts(); if (empty($productIds)) { $productIds = 0; } if ($column->getFilter()->getValue()) { $this->getCollection()->addFieldToFilter('entity_id', ['in' => $productIds]); } else { if ($productIds) { $this->getCollection()->addFieldToFilter('entity_id', ['nin' => $productIds]); } } } else { parent::_addColumnFilterToCollection($column); } return $this; } /** * Prepare collection * * @return Extended */ protected function _prepareCollection() { $collection = $this->_linkFactory->create()->useRelatedLinks()->getProductCollection()->setProduct( $this->getProduct() )->addAttributeToSelect( '*' ); if ($this->isReadonly()) { $productIds = $this->_getSelectedProducts(); if (empty($productIds)) { $productIds = [0]; } $collection->addFieldToFilter('entity_id', ['in' => $productIds]); } $this->setCollection($collection); return parent::_prepareCollection(); } /** * Checks when this block is readonly * * @return bool */ public function isReadonly() { return $this->getProduct() && $this->getProduct()->getRelatedReadonly(); } /** * Add columns to grid * * @return $this * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ protected function _prepareColumns() { if (!$this->isReadonly()) { $this->addColumn( 'in_products', [ 'type' => 'checkbox', 'name' => 'in_products', 'values' => $this->_getSelectedProducts(), 'align' => 'center', 'index' => 'entity_id', 'header_css_class' => 'col-select', 'column_css_class' => 'col-select' ] ); } $this->addColumn( 'entity_id', [ 'header' => __('ID'), 'sortable' => true, 'index' => 'entity_id', 'header_css_class' => 'col-id', 'column_css_class' => 'col-id' ] ); $this->addColumn( 'name', [ 'header' => __('Name'), 'index' => '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(), 'header_css_class' => 'col-type', 'column_css_class' => 'col-type' ] ); $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( 'status', [ 'header' => __('Status'), 'index' => 'status', 'type' => 'options', 'options' => $this->_status->getOptionArray(), 'header_css_class' => 'col-status', 'column_css_class' => 'col-status' ] ); $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( 'sku', [ 'header' => __('SKU'), 'index' => 'sku', 'header_css_class' => 'col-sku', 'column_css_class' => 'col-sku' ] ); $this->addColumn( 'price', [ 'header' => __('Price'), 'type' => 'currency', 'currency_code' => (string)$this->_scopeConfig->getValue( \Magento\Directory\Model\Currency::XML_PATH_CURRENCY_BASE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE ), 'index' => 'price', 'header_css_class' => 'col-price', 'column_css_class' => 'col-price' ] ); $this->addColumn( 'position', [ 'header' => __('Position'), 'name' => 'position', 'type' => 'number', 'validate_class' => 'validate-number', 'index' => 'position', 'editable' => !$this->getProduct()->getRelatedReadonly(), 'edit_only' => !$this->getProduct()->getId(), 'header_css_class' => 'col-position', 'column_css_class' => 'col-position' ] ); return parent::_prepareColumns(); } /** * Retrieve grid URL * * @return string */ public function getGridUrl() { return $this->getData( 'grid_url' ) ? $this->getData( 'grid_url' ) : $this->getUrl( 'catalog/*/relatedGrid', ['_current' => true] ); } /** * Retrieve selected related products * * @return array */ protected function _getSelectedProducts() { $products = $this->getProductsRelated(); if (!is_array($products)) { $products = array_keys($this->getSelectedRelatedProducts()); } return $products; } /** * Retrieve related products * * @return array */ public function getSelectedRelatedProducts() { $products = []; foreach ($this->_coreRegistry->registry('current_product')->getRelatedProducts() as $product) { $products[$product->getId()] = ['position' => $product->getPosition()]; } return $products; } }