123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Store\Model\ResourceModel;
- /**
- * Store Resource Model
- *
- * @api
- * @since 100.0.2
- */
- class Store extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
- {
- /**
- * @var \Magento\Framework\App\Cache\Type\Config
- */
- protected $configCache;
- /**
- * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
- * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
- */
- public function __construct(
- \Magento\Framework\Model\ResourceModel\Db\Context $context,
- \Magento\Framework\App\Cache\Type\Config $configCacheType
- ) {
- $this->configCache = $configCacheType;
- parent::__construct($context);
- }
- /**
- * Define main table and primary key
- *
- * @return void
- */
- protected function _construct()
- {
- $this->_init('store', 'store_id');
- }
- /**
- * Count number of all entities in the system
- *
- * By default won't count admin store
- *
- * @param bool $countAdmin
- * @return int
- */
- public function countAll($countAdmin = false)
- {
- $connection = $this->getConnection();
- $select = $connection->select()->from($this->getMainTable(), 'COUNT(*)');
- if (!$countAdmin) {
- $select->where(sprintf('%s <> %s', $connection->quoteIdentifier('code'), $connection->quote('admin')));
- }
- return (int)$connection->fetchOne($select);
- }
- /**
- * Initialize unique fields
- *
- * @return $this
- */
- protected function _initUniqueFields()
- {
- $this->_uniqueFields = [['field' => 'code', 'title' => __('Store with the same code')]];
- return $this;
- }
- /**
- * Update Store Group data after save store
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return $this
- */
- protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
- {
- parent::_afterSave($object);
- $this->_updateGroupDefaultStore($object->getGroupId(), $object->getId());
- $this->_changeGroup($object);
- return $this;
- }
- /**
- * Remove configuration data after delete store
- *
- * @param \Magento\Framework\Model\AbstractModel $model
- * @return $this
- */
- protected function _afterDelete(\Magento\Framework\Model\AbstractModel $model)
- {
- $where = [
- 'scope = ?' => \Magento\Store\Model\ScopeInterface::SCOPE_STORES,
- 'scope_id = ?' => $model->getStoreId(),
- ];
- $this->getConnection()->delete($this->getTable('core_config_data'), $where);
- $this->configCache->clean();
- return $this;
- }
- /**
- * Update Default store for Store Group
- *
- * @param int $groupId
- * @param int $storeId
- * @return $this
- */
- protected function _updateGroupDefaultStore($groupId, $storeId)
- {
- $connection = $this->getConnection();
- $bindValues = ['group_id' => (int)$groupId];
- $select = $connection->select()->from(
- $this->getMainTable(),
- ['count' => 'COUNT(*)']
- )->where(
- 'group_id = :group_id'
- );
- $count = $connection->fetchOne($select, $bindValues);
- if ($count == 1) {
- $bind = ['default_store_id' => (int)$storeId];
- $where = ['group_id = ?' => (int)$groupId];
- $connection->update($this->getTable('store_group'), $bind, $where);
- }
- return $this;
- }
- /**
- * Change store group for store
- *
- * @param \Magento\Framework\Model\AbstractModel $model
- * @return $this
- */
- protected function _changeGroup(\Magento\Framework\Model\AbstractModel $model)
- {
- if ($model->getOriginalGroupId() && $model->getGroupId() != $model->getOriginalGroupId()) {
- $connection = $this->getConnection();
- $select = $connection->select()->from(
- $this->getTable('store_group'),
- 'default_store_id'
- )->where(
- $connection->quoteInto('group_id=?', $model->getOriginalGroupId())
- );
- $storeId = $connection->fetchOne($select, 'default_store_id');
- if ($storeId == $model->getId()) {
- $bind = ['default_store_id' => \Magento\Store\Model\Store::DEFAULT_STORE_ID];
- $where = ['group_id = ?' => $model->getOriginalGroupId()];
- $this->getConnection()->update($this->getTable('store_group'), $bind, $where);
- }
- }
- return $this;
- }
- /**
- * Read information about all stores
- *
- * @return array
- * @since 100.1.3
- */
- public function readAllStores()
- {
- $select = $this->getConnection()
- ->select()
- ->from($this->getTable('store'));
- return $this->getConnection()->fetchAll($select);
- }
- /**
- * Retrieve select object for load object data
- *
- * @param string $field
- * @param mixed $value
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return \Magento\Framework\DB\Select
- */
- protected function _getLoadSelect($field, $value, $object)
- {
- $select = parent::_getLoadSelect($field, $value, $object);
- $select->order('sort_order');
- return $select;
- }
- }
|