diff --git a/app/code/core/Mage/SalesRule/Model/Observer.php b/app/code/core/Mage/SalesRule/Model/Observer.php index 483f0eaa388..b72414f7e30 100644 --- a/app/code/core/Mage/SalesRule/Model/Observer.php +++ b/app/code/core/Mage/SalesRule/Model/Observer.php @@ -1,16 +1,16 @@ getEvent()->getOrder(); if (!$order) { @@ -97,9 +99,9 @@ public function sales_order_afterPlace($observer) $ruleCustomer->setTimesUsed($ruleCustomer->getTimesUsed() + 1); } else { $ruleCustomer - ->setCustomerId($customerId) - ->setRuleId($ruleId) - ->setTimesUsed(1); + ->setCustomerId($customerId) + ->setRuleId($ruleId) + ->setTimesUsed(1); } // phpcs:ignore Ecg.Performance.Loop.ModelLSD $ruleCustomer->save(); @@ -123,14 +125,16 @@ public function sales_order_afterPlace($observer) /** * Registered callback: called after an order payment is canceled * - * @param Varien_Event_Observer $observer + * @param Varien_Event_Observer $observer * @SuppressWarnings("PHPMD.CamelCaseMethodName") */ // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps public function sales_order_paymentCancel($observer) { $event = $observer->getEvent(); - /** @var Mage_Sales_Model_Order $order */ + /** + * @var Mage_Sales_Model_Order $order +*/ $order = $event->getPayment()->getOrder(); if ($order->canCancel()) { @@ -169,7 +173,7 @@ public function sales_order_paymentCancel($observer) /** * Refresh sales coupons report statistics for last day * - * @param Mage_Cron_Model_Schedule $schedule + * @param Mage_Cron_Model_Schedule $schedule * @return $this */ public function aggregateSalesReportCouponsData($schedule) @@ -186,20 +190,26 @@ public function aggregateSalesReportCouponsData($schedule) * Check rules that contains affected attribute * If rules were found they will be set to inactive and notice will be add to admin session * - * @param string $attributeCode + * @param string $attributeCode * @return $this */ protected function _checkSalesRulesAvailability($attributeCode) { - /** @var Mage_SalesRule_Model_Resource_Rule_Collection $collection */ + /** + * @var Mage_SalesRule_Model_Resource_Rule_Collection $collection +*/ $collection = Mage::getResourceModel('salesrule/rule_collection') ->addAttributeInConditionFilter($attributeCode); $disabledRulesCount = 0; foreach ($collection as $rule) { - /** @var Mage_SalesRule_Model_Rule $rule */ + /** + * @var Mage_SalesRule_Model_Rule $rule +*/ $rule->setIsActive(0); - /** @var $rule->getConditions() Mage_SalesRule_Model_Rule_Condition_Combine */ + /** + * @var $rule->getConditions() Mage_SalesRule_Model_Rule_Condition_Combine +*/ $this->_removeAttributeFromConditions($rule->getConditions(), $attributeCode); $this->_removeAttributeFromConditions($rule->getActions(), $attributeCode); // phpcs:ignore Ecg.Performance.Loop.ModelLSD @@ -221,7 +231,7 @@ protected function _checkSalesRulesAvailability($attributeCode) * Remove catalog attribute condition by attribute code from rule conditions * * @param Mage_Rule_Model_Condition_Combine $combine - * @param string $attributeCode + * @param string $attributeCode */ protected function _removeAttributeFromConditions($combine, $attributeCode) { @@ -246,7 +256,9 @@ protected function _removeAttributeFromConditions($combine, $attributeCode) */ public function catalogAttributeSaveAfter(Varien_Event_Observer $observer) { - /** @var Mage_Catalog_Model_Entity_Attribute $attribute */ + /** + * @var Mage_Catalog_Model_Entity_Attribute $attribute +*/ $attribute = $observer->getEvent()->getAttribute(); if ($attribute->dataHasChangedFor('is_used_for_promo_rules') && !$attribute->getIsUsedForPromoRules()) { $this->_checkSalesRulesAvailability($attribute->getAttributeCode()); @@ -263,7 +275,9 @@ public function catalogAttributeSaveAfter(Varien_Event_Observer $observer) */ public function catalogAttributeDeleteAfter(Varien_Event_Observer $observer) { - /** @var Mage_Catalog_Model_Entity_Attribute $attribute */ + /** + * @var Mage_Catalog_Model_Entity_Attribute $attribute +*/ $attribute = $observer->getEvent()->getAttribute(); if ($attribute->getIsUsedForPromoRules()) { $this->_checkSalesRulesAvailability($attribute->getAttributeCode()); @@ -279,17 +293,16 @@ public function catalogAttributeDeleteAfter(Varien_Event_Observer $observer) */ public function addProductAttributes(Varien_Event_Observer $observer) { - /** @var Varien_Object $attributesTransfer */ + /** + * @var Varien_Object $attributesTransfer +*/ $attributesTransfer = $observer->getEvent()->getAttributes(); $attributes = Mage::getResourceModel('salesrule/rule') - ->getActiveAttributes( - Mage::app()->getWebsite()->getId(), - Mage::getSingleton('customer/session')->getCustomer()->getGroupId(), - ); + ->getActiveAttributes(); $result = []; foreach ($attributes as $attribute) { - $result[$attribute['attribute_code']] = true; + $result[$attribute] = true; } $attributesTransfer->addData($result); return $this; @@ -298,12 +311,14 @@ public function addProductAttributes(Varien_Event_Observer $observer) /** * Add coupon's rule name to order data * - * @param Varien_Event_Observer $observer + * @param Varien_Event_Observer $observer * @return $this */ public function addSalesRuleNameToOrder($observer) { - /** @var Mage_Sales_Model_Order $order */ + /** + * @var Mage_Sales_Model_Order $order +*/ $order = $observer->getOrder(); $couponCode = $order->getCouponCode(); diff --git a/app/code/core/Mage/SalesRule/Model/Resource/Rule.php b/app/code/core/Mage/SalesRule/Model/Resource/Rule.php index 17f2ef78268..e2c7389f5c7 100644 --- a/app/code/core/Mage/SalesRule/Model/Resource/Rule.php +++ b/app/code/core/Mage/SalesRule/Model/Resource/Rule.php @@ -1,16 +1,16 @@ getFromDate(); $dateTo = $object->getToDate(); - # fix when from and to day are the same - if (($dateFrom instanceof Zend_Date && $dateTo instanceof Zend_Date) && - ($dateFrom->getTimestamp() === $dateTo->getTimestamp()) + // fix when from and to day are the same + if (($dateFrom instanceof Zend_Date && $dateTo instanceof Zend_Date) + && ($dateFrom->getTimestamp() === $dateTo->getTimestamp()) ) { $dateTo->setHour(23)->setMinute(59)->setSecond(59); } @@ -87,7 +85,7 @@ public function _beforeSave(Mage_Core_Model_Abstract $object) * Save rule's associated store labels. * Save product attributes used in rule. * - * @param Mage_SalesRule_Model_Rule $object + * @param Mage_SalesRule_Model_Rule $object * @inheritDoc */ protected function _afterSave(Mage_Core_Model_Abstract $object) @@ -132,7 +130,7 @@ protected function _afterSave(Mage_Core_Model_Abstract $object) * Retrieve coupon/rule uses for specified customer * * @param Mage_SalesRule_Model_Rule $rule - * @param int $customerId + * @param int $customerId * * @return string */ @@ -148,7 +146,7 @@ public function getCustomerUses($rule, $customerId) /** * Save rule labels for different store views * - * @param int $ruleId + * @param int $ruleId * @param array $labels * * @return $this @@ -179,10 +177,12 @@ public function saveStoreLabels($ruleId, $labels) } if (!empty($deleteByStoreIds)) { - $adapter->delete($table, [ + $adapter->delete( + $table, [ 'rule_id=?' => $ruleId, 'store_id IN (?)' => $deleteByStoreIds, - ]); + ] + ); } $adapter->commit(); } catch (Exception $e) { @@ -196,7 +196,7 @@ public function saveStoreLabels($ruleId, $labels) /** * Get all existing rule labels * - * @param int $ruleId + * @param int $ruleId * @return array */ public function getStoreLabels($ruleId) @@ -210,8 +210,8 @@ public function getStoreLabels($ruleId) /** * Get rule label by specific store id * - * @param int $ruleId - * @param int $storeId + * @param int $ruleId + * @param int $storeId * @return string */ public function getStoreLabel($ruleId, $storeId) @@ -227,27 +227,38 @@ public function getStoreLabel($ruleId, $storeId) /** * Return codes of all product attributes currently used in promo rules for specified customer group and website * - * @param int $websiteId - * @param int $customerGroupId * @return mixed */ - public function getActiveAttributes($websiteId, $customerGroupId) + public function getActiveAttributes() { $read = $this->_getReadAdapter(); + // First subselect for distinct attribute_id + $subSelect = $read->select() + ->from( + ['spa' => $this->getTable('salesrule/product_attribute')], ['attribute_id'] + ) + ->distinct(true); + + // Main select joins subselect with eav_attribute $select = $read->select() ->from( - ['a' => $this->getTable('salesrule/product_attribute')], - new Zend_Db_Expr('DISTINCT ea.attribute_code'), + ['ea' => $this->getTable('eav/attribute')], + ['attribute_code'] ) - ->joinInner(['ea' => $this->getTable('eav/attribute')], 'ea.attribute_id = a.attribute_id', []); - return $read->fetchAll($select); + ->joinInner( + ['a' => new Zend_Db_Expr('(' . $subSelect->__toString() . ')')], + 'ea.attribute_id = a.attribute_id', + [] + ); + + return $read->fetchCol($select); } /** * Save product attributes currently used in conditions and actions of rule * - * @param Mage_SalesRule_Model_Rule $rule - * @param mixed $attributes + * @param Mage_SalesRule_Model_Rule $rule + * @param mixed $attributes * @return $this */ public function setActualProductAttributes($rule, $attributes)