public function updateRuleProductData(Mage_SalesRule_Model_Rule $rule) { // foreach ($rule->getActions()->getActions() as $action) { // break; // } $ruleId = $rule->getId(); $read = $this->_getReadAdapter(); $write = $this->_getWriteAdapter(); $write->delete($this->getTable('salesrule/rule_product'), $write->quoteInto('rule_id=?', $ruleId)); if (!$rule->getIsActive()) { return $this; } if ($rule->getUsesPerCoupon() > 0) { $usedPerCoupon = $read->fetchOne('select count(*) from ' . $this->getTable('salesrule/rule_customer') . ' where rule_id=?', $ruleId); if ($usedPerCoupon >= $rule->getUsesPerCoupon()) { return $this; } } $productIds = explode(',', $rule->getProductIds()); $websiteIds = explode(',', $rule->getWebsiteIds()); $customerGroupIds = explode(',', $rule->getCustomerGroupIds()); $fromTime = strtotime($rule->getFromDate()); $toTime = strtotime($rule->getToDate()); if ($toTime) { $toTime += 86400; } $couponCode = $rule->getCouponCode() ? "'" . $rule->getCouponCode() . "'" : 'NULL'; $sortOrder = (int) $rule->getSortOrder(); $rows = array(); $header = 'replace into ' . $this->getTable('salesrule/rule_product') . ' (rule_id, from_time, to_time, website_id, customer_group_id, product_id, coupon_code, sort_order) values '; try { $write->beginTransaction(); foreach ($productIds as $productId) { foreach ($websiteIds as $websiteId) { foreach ($customerGroupIds as $customerGroupId) { $rows[] = "('{$ruleId}', '{$fromTime}', '{$toTime}', '{$websiteId}', '{$customerGroupId}', '{$productId}', {$couponCode}, '{$sortOrder}')"; if (sizeof($rows) == 100) { $sql = $header . join(',', $rows); $write->query($sql); $rows = array(); } } } } if (!empty($rows)) { $sql = $header . join(',', $rows); $write->query($sql); } $write->commit(); } catch (Exception $e) { $write->rollback(); throw $e; } return $this; }