diff --git a/vendor/magento/module-target-rule/Model/Mview/View/StatusAttributeTriggerFilter.php b/vendor/magento/module-target-rule/Model/Mview/View/StatusAttributeTriggerFilter.php new file mode 100644 index 00000000000..f4dd12999ad --- /dev/null +++ b/vendor/magento/module-target-rule/Model/Mview/View/StatusAttributeTriggerFilter.php @@ -0,0 +1,93 @@ +resource->getTableName(self::VIEW_ID . '_cl'); + if (strpos($statement, $triggerTable) === false) { + return $statement; + } + + $statusAttributeId = $this->getStatusAttributeId(); + if ($statusAttributeId === null) { + return $statement; + } + + $condition = $event === Trigger::EVENT_DELETE + ? sprintf('OLD.attribute_id = %d', $statusAttributeId) + : sprintf('NEW.attribute_id = %d', $statusAttributeId); + + return sprintf('IF (%s) THEN %s END IF;', $condition, $statement); + } + + /** + * Retrieve status attribute ID + * + * @return int|null + */ + private function getStatusAttributeId(): ?int + { + if ($this->statusAttributeId !== null) { + return $this->statusAttributeId; + } + + $attribute = $this->eavConfig->getAttribute(Product::ENTITY, 'status'); + $attributeId = (int) $attribute->getAttributeId(); + $this->statusAttributeId = $attributeId > 0 ? $attributeId : null; + + return $this->statusAttributeId; + } +} diff --git a/vendor/magento/module-target-rule/etc/di.xml b/vendor/magento/module-target-rule/etc/di.xml index e6e283b2c17..346f2043e84 100644 --- a/vendor/magento/module-target-rule/etc/di.xml +++ b/vendor/magento/module-target-rule/etc/di.xml @@ -94,4 +94,11 @@ + + + + Magento\TargetRule\Model\Mview\View\StatusAttributeTriggerFilter + + + diff --git a/vendor/magento/module-target-rule/etc/mview.xml b/vendor/magento/module-target-rule/etc/mview.xml index b0f6428774f..d1a3e9aa7e8 100644 --- a/vendor/magento/module-target-rule/etc/mview.xml +++ b/vendor/magento/module-target-rule/etc/mview.xml @@ -9,6 +9,7 @@ +