public function aroundDelete(\Magento\Catalog\Model\ResourceModel\Category $categoryResource, \Closure $proceed, \Magento\Framework\Model\AbstractModel $category)
 {
     $categoryResource->addCommitCallback(function () use($category) {
         if (!$this->indexer->isScheduled()) {
             Category::$affectedProductIds = (array) $category->getAffectedProductIds();
             $this->indexer->reindexRow($category->getId());
         }
     });
     return $proceed($category);
 }
 /**
  * Resource model save function plugin.
  * Append a commit callback to save the product positions.
  *
  * @param \Magento\Catalog\Model\ResourceModel\Category $categoryResource Category original resource model.
  * @param \Closure                                      $proceed          Original save method.
  * @param \Magento\Framework\Model\AbstractModel        $category         Saved category.
  *
  * @return \Magento\Catalog\Model\ResourceModel\Category
  */
 public function aroundSave(\Magento\Catalog\Model\ResourceModel\Category $categoryResource, \Closure $proceed, \Magento\Framework\Model\AbstractModel $category)
 {
     if ($category->getId() && $category->getSortedProducts()) {
         $this->unserializeProductPositions($category);
         if ($category->getIsVirtualCategory()) {
             $category->setPostedProducts([]);
         }
         $categoryResource->addCommitCallback(function () use($category) {
             $affectedProductIds = $this->getAffectedProductIds($category);
             $category->setAffectedProductIds($affectedProductIds);
             $this->saveHandler->saveProductPositions($category);
         });
     }
     return $proceed($category);
 }
Example #3
0
 /**
  * @param ResourceCategory $resourceCategory
  * @param \Closure $proceed
  * @param AbstractModel $category
  * @return ResourceCategory
  * @throws \Exception
  */
 private function addCommitCallback(ResourceCategory $resourceCategory, \Closure $proceed, AbstractModel $category)
 {
     try {
         $resourceCategory->beginTransaction();
         $result = $proceed($category);
         $resourceCategory->addCommitCallback(function () use($category) {
             $affectedProducts = $category->getAffectedProductIds();
             if (is_array($affectedProducts)) {
                 $this->reindexList($affectedProducts);
             }
         });
         $resourceCategory->commit();
     } catch (\Exception $e) {
         $resourceCategory->rollBack();
         throw $e;
     }
     return $result;
 }
 /**
  * {@inheritdoc}
  */
 public function addCommitCallback($callback)
 {
     $pluginInfo = $this->pluginList->getNext($this->subjectType, 'addCommitCallback');
     if (!$pluginInfo) {
         return parent::addCommitCallback($callback);
     } else {
         return $this->___callPlugins('addCommitCallback', func_get_args(), $pluginInfo);
     }
 }