Beispiel #1
0
 /**
  * @param \Magento\Store\Model\ResourceModel\Group $object
  * @param callable $proceed
  * @param AbstractModel $group
  * @return \Magento\Store\Model\ResourceModel\Group
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  */
 public function aroundSave(\Magento\Store\Model\ResourceModel\Group $object, \Closure $proceed, AbstractModel $group)
 {
     $originGroup = $group;
     $result = $proceed($originGroup);
     if (!$group->isObjectNew() && ($group->dataHasChangedFor('website_id') || $group->dataHasChangedFor('root_category_id'))) {
         $this->storeManager->reinitStores();
         foreach ($group->getStoreIds() as $storeId) {
             $this->urlPersist->deleteByData([UrlRewrite::STORE_ID => $storeId]);
         }
         $this->urlPersist->replace($this->generateCategoryUrls($group->getRootCategoryId(), $group->getStoreIds()));
         $this->urlPersist->replace($this->generateProductUrls($group->getWebsiteId(), $group->getOrigData('website_id')));
     }
     return $result;
 }
Beispiel #2
0
 /**
  * Saves relation between thesaurus and store
  *
  * @param \Magento\Framework\Model\AbstractModel $object Thesaurus to save
  *
  * @return void
  */
 private function saveStoreRelation(\Magento\Framework\Model\AbstractModel $object)
 {
     $storeIds = $object->getStoreIds();
     if (is_array($storeIds) && count($storeIds) > 0) {
         if (in_array(0, $storeIds)) {
             $storeIds = [0];
         }
         $storeLinks = [];
         $deleteCondition = [ThesaurusInterface::THESAURUS_ID . " = ?" => $object->getThesaurusId()];
         foreach ($storeIds as $key => $storeId) {
             $storeLinks[] = [ThesaurusInterface::THESAURUS_ID => (int) $object->getThesaurusId(), ThesaurusInterface::STORE_ID => (int) $storeId];
             $storeIds[$key] = (int) $storeId;
         }
         $deleteCondition[ThesaurusInterface::STORE_ID . " NOT IN (?)"] = array_keys($storeIds);
         $this->getConnection()->delete($this->getTable(ThesaurusInterface::STORE_TABLE_NAME), $deleteCondition);
         $this->getConnection()->insertOnDuplicate($this->getTable(ThesaurusInterface::STORE_TABLE_NAME), $storeLinks, array_keys(current($storeLinks)));
     }
 }
Beispiel #3
0
 /**
  * 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->getStoreIds();
     if (!$newIds) {
         $newIds = [0];
     }
     $this->_updateLinks($object, $newIds, $oldIds, 'magefan_blog_post_store', 'store_id');
     /* Save category & tag links */
     foreach (['category' => 'categories', 'tag' => 'tags'] as $linkType => $dataKey) {
         $newIds = (array) $object->getData($dataKey);
         foreach ($newIds as $key => $id) {
             if (!$id) {
                 // e.g.: zero
                 unset($newIds[$key]);
             }
         }
         if (is_array($newIds)) {
             $lookup = 'lookup' . ucfirst($linkType) . 'Ids';
             $oldIds = $this->{$lookup}($object->getId());
             $this->_updateLinks($object, $newIds, $oldIds, 'magefan_blog_post_' . $linkType, $linkType . '_id');
         }
     }
     /* Save tags links */
     $newIds = (array) $object->getTags();
     foreach ($newIds as $key => $id) {
         if (!$id) {
             // e.g.: zero
             unset($newIds[$key]);
         }
     }
     if (is_array($newIds)) {
         $oldIds = $this->lookupTagIds($object->getId());
         $this->_updateLinks($object, $newIds, $oldIds, 'magefan_blog_post_tag', 'tag_id');
     }
     /* Save related post & product links */
     if ($links = $object->getData('links')) {
         if (is_array($links)) {
             foreach (['post', 'product'] as $linkType) {
                 if (!empty($links[$linkType]) && is_array($links[$linkType])) {
                     $linksData = $links[$linkType];
                     $lookup = 'lookupRelated' . ucfirst($linkType) . 'Ids';
                     $oldIds = $this->{$lookup}($object->getId());
                     $this->_updateLinks($object, array_keys($linksData), $oldIds, 'magefan_blog_post_related' . $linkType, 'related_id', $linksData);
                 }
             }
         }
     }
     return parent::_afterSave($object);
 }
Beispiel #4
0
 /**
  * Assign category to store views
  *
  * @param \Magento\Framework\Model\AbstractModel $object
  * @return $this
  */
 protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
 {
     $oldStoreIds = $this->lookupStoreIds($object->getId());
     $newStoreIds = (array) $object->getStoreIds();
     if (!$newStoreIds) {
         $newStoreIds = [0];
     }
     $table = $this->getTable('magefan_blog_category_store');
     $insert = array_diff($newStoreIds, $oldStoreIds);
     $delete = array_diff($oldStoreIds, $newStoreIds);
     if ($delete) {
         $where = ['category_id = ?' => (int) $object->getId(), 'store_id IN (?)' => $delete];
         $this->getConnection()->delete($table, $where);
     }
     if ($insert) {
         $data = [];
         foreach ($insert as $storeId) {
             $data[] = ['category_id' => (int) $object->getId(), 'store_id' => (int) $storeId];
         }
         $this->getConnection()->insertMultiple($table, $data);
     }
     return parent::_afterSave($object);
 }