![]() 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/mageworx/module-seocrosslinks/Model/ResourceModel/ |
<?php /** * Copyright © 2016 MageWorx. All rights reserved. * See LICENSE.txt for license details. */ namespace MageWorx\SeoCrossLinks\Model\ResourceModel; /** * Cms page mysql resource */ class Crosslink extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb { /** * Store model * * @var null|\Magento\Store\Model\Store */ protected $store = null; /** * Store manager * * @var \Magento\Store\Model\StoreManagerInterface */ protected $storeManager; /** * Construct * * @param \Magento\Framework\Model\ResourceModel\Db\Context $context * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param string $connectionName */ public function __construct( \Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, $connectionName = null ) { parent::__construct($context, $connectionName); $this->storeManager = $storeManager; } /** * Initialize resource model * * @return void */ protected function _construct() { $this->_init('mageworx_seocrosslinks_crosslink', 'crosslink_id'); } /** * Process page data before deleting * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _beforeDelete(\Magento\Framework\Model\AbstractModel $object) { $condition = ['crosslink_id = ?' => (int)$object->getId()]; $this->getConnection()->delete($this->getTable('mageworx_seocrosslinks_crosslink_store'), $condition); return parent::_beforeDelete($object); } /** * Assign page to store views * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { $oldStores = $this->lookupStoreIds($object->getId()); $newStores = (array)$object->getStores(); if (empty($newStores)) { $newStores = (array)$object->getStoreId(); } $table = $this->getTable('mageworx_seocrosslinks_crosslink_store'); $insert = array_diff($newStores, $oldStores); $delete = array_diff($oldStores, $newStores); if ($delete) { $where = ['crosslink_id = ?' => (int)$object->getId(), 'store_id IN (?)' => $delete]; $this->getConnection()->delete($table, $where); } if ($insert) { $data = []; foreach ($insert as $storeId) { $data[] = ['crosslink_id' => (int)$object->getId(), 'store_id' => (int)$storeId]; } $this->getConnection()->insertMultiple($table, $data); } return parent::_afterSave($object); } /** * Perform operations after object load * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _afterLoad(\Magento\Framework\Model\AbstractModel $object) { if ($object->getId()) { $stores = $this->lookupStoreIds($object->getId()); $object->setData('store_id', $stores); } return parent::_afterLoad($object); } /** * Retrieve select object for load object data * * @param string $field * @param mixed $value * @param \Magento\Cms\Model\Page $object * @return \Magento\Framework\DB\Select */ protected function _getLoadSelect($field, $value, $object) { $select = parent::_getLoadSelect($field, $value, $object); if ($object->getStoreId()) { $storeIds = [\Magento\Store\Model\Store::DEFAULT_STORE_ID, (int)$object->getStoreId()]; $select->join( ['crosslinkstore' => $this->getTable('mageworx_seocrosslinks_crosslink_store')], $this->getMainTable() . '.crosslink_id = crosslinkstore.crosslink_id', [] )->where( 'is_active = ?', 1 )->where( 'crosslinkstore.store_id IN (?)', $storeIds )->order( 'crosslinkstore.store_id DESC' )->limit( 1 ); } return $select; } /** * Get store ids to which specified item is assigned * * @param int $pageId * @return array */ public function lookupStoreIds($pageId) { $connection = $this->getConnection(); $select = $connection->select()->from( $this->getTable('mageworx_seocrosslinks_crosslink_store'), 'store_id' )->where( 'crosslink_id = ?', (int)$pageId ); return $connection->fetchCol($select); } /** * Set store model * * @param \Magento\Store\Model\Store $store * @return $this */ public function setStore($store) { $this->store = $store; return $this; } /** * Retrieve store model * * @return \Magento\Store\Model\Store */ public function getStore() { return $this->storeManager->getStore($this->store); } }