/** * Perform operations after object save * * @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(); $table = $this->getTable('cms_block_store'); $insert = array_diff($newStores, $oldStores); $delete = array_diff($oldStores, $newStores); if ($delete) { $where = ['block_id = ?' => (int) $object->getId(), 'store_id IN (?)' => $delete]; $this->_getWriteAdapter()->delete($table, $where); } if ($insert) { $data = []; foreach ($insert as $storeId) { $data[] = ['block_id' => (int) $object->getId(), 'store_id' => (int) $storeId]; } $this->_getWriteAdapter()->insertMultiple($table, $data); } return parent::_afterSave($object); }
/** * Perform actions after object save * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _afterSave(AbstractModel $object) { $adapter = $this->_getWriteAdapter(); /** * save detail */ $detail = ['title' => $object->getTitle(), 'detail' => $object->getDetail(), 'nickname' => $object->getNickname()]; $select = $adapter->select()->from($this->_reviewDetailTable, 'detail_id')->where('review_id = :review_id'); $detailId = $adapter->fetchOne($select, [':review_id' => $object->getId()]); if ($detailId) { $condition = ["detail_id = ?" => $detailId]; $adapter->update($this->_reviewDetailTable, $detail, $condition); } else { $detail['store_id'] = $object->getStoreId(); $detail['customer_id'] = $object->getCustomerId(); $detail['review_id'] = $object->getId(); $adapter->insert($this->_reviewDetailTable, $detail); } /** * save stores */ $stores = $object->getStores(); if (!empty($stores)) { $condition = ['review_id = ?' => $object->getId()]; $adapter->delete($this->_reviewStoreTable, $condition); $insertedStoreIds = []; foreach ($stores as $storeId) { if (in_array($storeId, $insertedStoreIds)) { continue; } $insertedStoreIds[] = $storeId; $storeInsert = ['store_id' => $storeId, 'review_id' => $object->getId()]; $adapter->insert($this->_reviewStoreTable, $storeInsert); } } // reaggregate ratings, that depend on this review $this->_aggregateRatings($this->_loadVotedRatingIds($object->getId()), $object->getEntityPkValue()); return $this; }
/** * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function processRatingStores(\Magento\Framework\Model\AbstractModel $object) { $adapter = $this->_getWriteAdapter(); $ratingId = (int) $object->getId(); $table = $this->getTable('rating_store'); $select = $adapter->select()->from($table, ['store_id'])->where('rating_id = :rating_id'); $old = $adapter->fetchCol($select, [':rating_id' => $ratingId]); $new = $object->getStores(); $this->deleteRatingData($ratingId, $table, array_diff_assoc($old, $new)); $insert = []; foreach (array_keys(array_diff_assoc($new, $old)) as $storeId) { $insert[] = ['rating_id' => $ratingId, 'store_id' => (int) $storeId]; } $this->insertRatingData($table, $insert); return $this; }
/** * Assign post to store views, categories, related posts, etc. * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { $oldIds = $this->lookupStoreIds($object->getId()); $newIds = (array) $object->getStores(); if (empty($newIds)) { $newIds = (array) $object->getStoreId(); } $this->_updateLinks($object, $newIds, $oldIds, 'magefan_blog_post_store', 'store_id'); $newIds = (array) $object->getCategories(); if (is_array($newIds)) { $oldIds = $this->lookupCategoryIds($object->getId()); $this->_updateLinks($object, $newIds, $oldIds, 'magefan_blog_post_category', 'category_id'); } $newIds = $object->getRelatedPostIds(); if (is_array($newIds)) { $oldIds = $this->lookupRelatedPostIds($object->getId()); $this->_updateLinks($object, $newIds, $oldIds, 'magefan_blog_post_relatedpost', 'related_id'); } $newIds = $object->getRelatedProductIds(); if (is_array($newIds)) { $oldIds = $this->lookupRelatedProductIds($object->getId()); $this->_updateLinks($object, $newIds, $oldIds, 'magefan_blog_post_relatedproduct', 'related_id'); } return parent::_afterSave($object); }
/** * Assign page to store views * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { /** @var \AddictedToMagento\DynamicForms\Model\Form $object */ $oldStores = $this->lookupStoreIds($object->getId()); $newStores = (array) $object->getStores(); if (empty($newStores)) { $newStores = (array) $object->getStoreId(); } $table = $this->getTable(self::STORE_TABLE_NAME); $insert = array_diff($newStores, $oldStores); $delete = array_diff($oldStores, $newStores); if ($delete) { $where = ['form_id = ?' => (int) $object->getId(), 'store_id IN (?)' => $delete]; $this->getConnection()->delete($table, $where); } if ($insert) { $data = []; foreach ($insert as $storeId) { $data[] = ['form_id' => (int) $object->getId(), 'store_id' => (int) $storeId]; } $this->getConnection()->insertMultiple($table, $data); } return parent::_afterSave($object); }
public function checkUrlExits(\Magento\Framework\Model\AbstractModel $object) { $stores = $object->getStores(); $connection = $this->getConnection(); $select = $connection->select()->from($this->getTable('ves_brand'), 'brand_id')->where('url_key = ?', $object->getUrlKey())->where('brand_id != ?', $object->getId()); $brandIds = $connection->fetchCol($select); if (count($brandIds) > 0 && is_array($stores)) { if (in_array('0', $stores)) { throw new \Magento\Framework\Exception\LocalizedException(__('URL key for specified store already exists.')); } $stores[] = '0'; $select = $connection->select()->from($this->getTable('ves_brand_store'), 'brand_id')->where('brand_id IN (?)', $brandIds)->where('store_id IN (?)', $stores); $result = $connection->fetchCol($select); if (count($result) > 0) { throw new \Magento\Framework\Exception\LocalizedException(__('URL key for specified store already exists.')); } } return $this; }