![]() 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/cartforge.co/app/code/Magefan/Blog/Model/ResourceModel/Tag/ |
<?php /** * Copyright © Magefan ([email protected]). All rights reserved. * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement). * * Glory to Ukraine! Glory to the heroes! */ namespace Magefan\Blog\Model\ResourceModel\Tag; /** * Blog tag collection */ class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection { /** * @inheritDoc */ protected $_idFieldName = 'tag_id'; /** * @var int */ protected $_storeId; /** * Constructor * Configures collection * * @return void */ protected function _construct() { parent::_construct(); $this->_init(\Magefan\Blog\Model\Tag::class, \Magefan\Blog\Model\ResourceModel\Tag::class); $this->_map['fields']['tag_id'] = 'main_table.tag_id'; $this->_map['fields']['store'] = 'store_table.store_id'; } /** * Add field filter to collection * * @param string|array $field * @param null|string|array $condition * @return $this */ public function addFieldToFilter($field, $condition = null) { if (is_array($field)) { if (count($field) > 1) { return parent::addFieldToFilter($field, $condition); } elseif (count($field) === 1) { $field = $field[0]; $condition = isset($condition[0]) ? $condition[0] : $condition; } } if ($field === 'store_id' || $field === 'store_ids') { return $this->addStoreFilter($condition); } return parent::addFieldToFilter($field, $condition); } /** * Add store filter to collection * @param array|int|\Magento\Store\Model\Store $store * @param boolean $withAdmin * @return $this */ public function addStoreFilter($store, $withAdmin = true) { if ($store === null) { return $this; } if (!$this->getFlag('store_filter_added')) { if ($store instanceof \Magento\Store\Model\Store) { $this->_storeId = $store->getId(); $store = [$store->getId()]; } if (!is_array($store)) { $this->_storeId = $store; $store = [$store]; } if (in_array(\Magento\Store\Model\Store::DEFAULT_STORE_ID, $store)) { return $this; } if ($withAdmin) { $store[] = \Magento\Store\Model\Store::DEFAULT_STORE_ID; } $this->addFilter('store', ['in' => $store], 'public'); $this->setFlag('store_filter_added', 1); } return $this; } /** * Get SQL for get record count * * Extra GROUP BY strip added. * * @return \Magento\Framework\DB\Select */ public function getSelectCountSql() { $countSelect = parent::getSelectCountSql(); $countSelect->reset(\Magento\Framework\DB\Select::GROUP); return $countSelect; } /** * Add active filter to collection * @return self */ public function addActiveFilter() { return $this ->addFieldToFilter('main_table.is_active', \Magefan\Blog\Model\Tag::STATUS_ENABLED); } /** * Perform operations after collection load * * @return $this */ protected function _afterLoad() { $items = $this->getColumnValues('tag_id'); if (count($items)) { $connection = $this->getConnection(); $tableName = $this->getTable('magefan_blog_tag_store'); $select = $connection->select() ->from(['cps' => $tableName]) ->where('cps.tag_id IN (?)', $items); $result = []; foreach ($connection->fetchAll($select) as $item) { if (!isset($result[$item['tag_id']])) { $result[$item['tag_id']] = []; } $result[$item['tag_id']][] = $item['store_id']; } if ($result) { foreach ($this as $item) { $tagId = $item->getData('tag_id'); if (!isset($result[$tagId])) { continue; } if ($result[$tagId] == 0) { $stores = $this->_storeManager->getStores(false, true); $storeId = current($stores)->getId(); } else { $storeId = $result[$item->getData('tag_id')]; } $item->setData('_first_store_id', $storeId); $item->setData('store_ids', $result[$tagId]); } } if ($this->_storeId) { foreach ($this as $item) { $item->setStoreId($this->_storeId); } } } return parent::_afterLoad(); } /** * Join store relation table if there is store filter * * @return void */ protected function _renderFiltersBefore() { if ($this->getFilter('store')) { $this->getSelect()->join( ['store_table' => $this->getTable('magefan_blog_tag_store')], 'main_table.tag_id = store_table.tag_id', [] )->group( 'main_table.tag_id' ); } parent::_renderFiltersBefore(); } }