/** * Removes all applicable rules to the item's rule hash. * Returns false if no changes were made. * * @param Mage_Sales_Model_Quote_Item $item * @param array $rule_id_list * @param integer $inst_id redemption instance id (this comes out of the item redemptions hash) * @return boolean */ public function removeCatalogRedemptionsFromItem(&$item, $rule_id_list, $inst_id = 0) { //Check to make sure we can load the redeem points hash alright if (!$item->getRedeemedPointsHash()) { throw new Exception($this->__("Unable to load the redeem points hash")); } $catalog_redemptions = Mage::helper('rewards')->unhashIt($item->getRedeemedPointsHash()); foreach ($catalog_redemptions as $key => $redemption) { $catalog_redemptions[$key] = (array) $redemption; } $doSave = false; foreach ($rule_id_list as $rule_id) { $rule = Mage::getModel('rewards/catalogrule_rule')->load($rule_id); $foundRuleIdIndex = false; foreach ($catalog_redemptions as $index => $redemption) { $rule_id_is_same = $redemption[TBT_Rewards_Model_Catalogrule_Rule::POINTS_RULE_ID] == $rule_id; $inst_id_is_same = $inst_id == 0 ? true : $redemption[TBT_Rewards_Model_Catalogrule_Rule::POINTS_INST_ID] == $inst_id; if ($rule_id_is_same && $inst_id_is_same) { $foundRuleIdIndex = $index; } } if ($foundRuleIdIndex === false) { throw new Exception("The rule entitled '" . $rule->getName() . "' is not applied to this product."); } else { unset($catalog_redemptions[$foundRuleIdIndex]); $item->setRedeemedPointsHash(Mage::helper('rewards')->hashIt($catalog_redemptions)); $doSave = true; } } if ($doSave) { $item->save(); return true; } else { return false; } }