Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 48 additions & 33 deletions app/code/core/Mage/SalesRule/Model/Observer.php
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
<?php

/**
* @copyright For copyright and license information, read the COPYING.txt file.
* @link /COPYING.txt
* @license Open Software License (OSL 3.0)
* @package Mage_SalesRule
* @copyright For copyright and license information, read the COPYING.txt file.
* @link /COPYING.txt
* @license Open Software License (OSL 3.0)
* @package Mage_SalesRule
*/

/**
* SalesRule Model Observer
*
* @package Mage_SalesRule
* @package Mage_SalesRule
*/
class Mage_SalesRule_Model_Observer
{
Expand All @@ -25,8 +25,8 @@ class Mage_SalesRule_Model_Observer
* Get quote item validator/processor object
*
* @deprecated
* @param Varien_Event $event
* @return Mage_SalesRule_Model_Validator
* @param Varien_Event $event
* @return Mage_SalesRule_Model_Validator
*/
public function getValidator($event)
{
Expand All @@ -40,8 +40,8 @@ public function getValidator($event)
/**
* Process quote item (apply discount to item)
*
* @deprecated process call moved to total model
* @param Varien_Event_Observer $observer
* @deprecated process call moved to total model
* @param Varien_Event_Observer $observer
* @SuppressWarnings("PHPMD.CamelCaseMethodName")
*/
// phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
Expand All @@ -54,14 +54,16 @@ public function sales_quote_address_discount_item($observer)
/**
* Registered callback: called after an order is placed
*
* @param Varien_Event_Observer $observer
* @return $this
* @param Varien_Event_Observer $observer
* @return $this
* @SuppressWarnings("PHPMD.CamelCaseMethodName")
*/
// phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
public function sales_order_afterPlace($observer)
{
/** @var Mage_Sales_Model_Order $order */
/**
* @var Mage_Sales_Model_Order $order
*/
$order = $observer->getEvent()->getOrder();

if (!$order) {
Expand Down Expand Up @@ -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();
Expand All @@ -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()) {
Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand All @@ -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)
{
Expand All @@ -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());
Expand All @@ -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());
Expand All @@ -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;
Expand All @@ -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();

Expand Down
65 changes: 38 additions & 27 deletions app/code/core/Mage/SalesRule/Model/Resource/Rule.php
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
<?php

/**
* @copyright For copyright and license information, read the COPYING.txt file.
* @link /COPYING.txt
* @license Open Software License (OSL 3.0)
* @package Mage_SalesRule
* @copyright For copyright and license information, read the COPYING.txt file.
* @link /COPYING.txt
* @license Open Software License (OSL 3.0)
* @package Mage_SalesRule
*/

/**
* Sales Rule resource model
*
* @package Mage_SalesRule
* @package Mage_SalesRule
*/
class Mage_SalesRule_Model_Resource_Rule extends Mage_Rule_Model_Resource_Abstract
{
Expand Down Expand Up @@ -43,7 +43,6 @@ protected function _construct()
/**
* Add customer group ids and website ids to rule data after load
*
*
* @return $this
*/
protected function _afterLoad(Mage_Core_Model_Abstract $object)
Expand All @@ -58,7 +57,6 @@ protected function _afterLoad(Mage_Core_Model_Abstract $object)
/**
* Prepare sales rule's discount quantity
*
*
* @return $this
* @throws Zend_Date_Exception
*/
Expand All @@ -71,9 +69,9 @@ public function _beforeSave(Mage_Core_Model_Abstract $object)
$dateFrom = $object->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);
}
Expand All @@ -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)
Expand Down Expand Up @@ -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
*/
Expand All @@ -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
Expand Down Expand Up @@ -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) {
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down
Loading