![]() 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-bundle/Model/ResourceModel/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Bundle\Model\ResourceModel; use Magento\Bundle\Model\Option\Validator; use Magento\Catalog\Api\Data\ProductInterface; use Magento\Framework\DataObject; use Magento\Framework\EntityManager\EntityManager; use Magento\Framework\EntityManager\MetadataPool; use Magento\Framework\Model\AbstractModel; use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Magento\Framework\Model\ResourceModel\Db\Context; /** * Bundle Option Resource Model */ class Option extends AbstractDb { /** * @var Validator */ private $validator; /** * @var MetadataPool */ private $metadataPool; /** * @var EntityManager */ private $entityManager; /** * @param Context $context * @param Validator $validator * @param MetadataPool $metadataPool * @param EntityManager $entityManager * @param string $connectionName */ public function __construct( Context $context, Validator $validator, MetadataPool $metadataPool, EntityManager $entityManager, $connectionName = null ) { parent::__construct($context, $connectionName); $this->validator = $validator; $this->metadataPool = $metadataPool; $this->entityManager = $entityManager; } /** * Initialize connection and define resource * * @return void */ protected function _construct() { $this->_init('catalog_product_bundle_option', 'option_id'); } /** * Remove selections by option id * * @param int $optionId * * @return int */ public function removeOptionSelections($optionId) { return $this->getConnection()->delete( $this->getTable('catalog_product_bundle_selection'), ['option_id =?' => $optionId] ); } /** * After save process * * @param AbstractModel $object * * @return $this */ protected function _afterSave(AbstractModel $object) { parent::_afterSave($object); $connection = $this->getConnection(); $data = new DataObject(); $data->setOptionId($object->getId()) ->setStoreId($object->getStoreId()) ->setParentProductId($object->getParentId()) ->setTitle($object->getTitle()); $connection->insertOnDuplicate( $this->getTable('catalog_product_bundle_option_value'), $data->getData(), ['title'] ); /** * also saving default fallback value */ if (0 !== (int)$object->getStoreId()) { $data->setStoreId(0)->setTitle($object->getDefaultTitle()); $connection->insertOnDuplicate( $this->getTable('catalog_product_bundle_option_value'), $data->getData(), ['title'] ); } return $this; } /** * After delete process * * @param AbstractModel $object * @return $this */ protected function _afterDelete(AbstractModel $object) { parent::_afterDelete($object); $this->getConnection() ->delete( $this->getTable('catalog_product_bundle_option_value'), [ 'option_id = ?' => $object->getId(), 'parent_product_id = ?' => $object->getParentId() ] ); return $this; } /** * Retrieve options searchable data * * @param int $productId * @param int $storeId * * @return array */ public function getSearchableData($productId, $storeId) { $connection = $this->getConnection(); $title = $connection->getCheckSql( 'option_title_store.title IS NOT NULL', 'option_title_store.title', 'option_title_default.title' ); $bind = ['store_id' => $storeId, 'product_id' => $productId]; $linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField(); $select = $connection->select() ->from( ['opt' => $this->getMainTable()], [] ) ->join( ['option_title_default' => $this->getTable('catalog_product_bundle_option_value')], 'option_title_default.option_id = opt.option_id AND option_title_default.store_id = 0', [] ) ->joinLeft( ['option_title_store' => $this->getTable('catalog_product_bundle_option_value')], 'option_title_store.option_id = opt.option_id AND option_title_store.store_id = :store_id', ['title' => $title] ) ->join( ['e' => $this->getTable('catalog_product_entity')], "e.$linkField = opt.parent_id", [] ) ->where( 'e.entity_id=:product_id' ); if (!($searchData = $connection->fetchCol($select, $bind))) { $searchData = []; } return $searchData; } /** * @inheritDoc */ public function getValidationRulesBeforeSave() { return $this->validator; } /** * @inheritDoc */ public function save(AbstractModel $object) { $this->entityManager->save($object); return $this; } }