/** * @param Mage_SalesRule_Model_Rule $rule * @param Mage_Sales_Model_Quote_Item_Abstract[] $allItems * * @return Mage_Sales_Model_Quote_Item_Abstract[] */ public function filterForValidItems(Mage_SalesRule_Model_Rule $rule, array $allItems) { // Array of items this rule will apply to /** @var Mage_Sales_Model_Quote_Item_Abstract[] $validItems */ $validItems = []; // Loop all items checking if rule should apply foreach ($allItems as $item) { // Skip items flagged for no discount if ($item->getNoDiscount()) { continue; } // Skip non-calculated child items if ($item->getParentItemId() && !$item->isChildrenCalculated()) { continue; } // Skip non-calculated parent items if ($item->getHasChildren() && $item->isChildrenCalculated()) { continue; } // NB: validate() doesn't look like it exists because getActions() has the wrong @return type if (!$rule->getActions()->validate($item)) { continue; } // Add item to the valid item list $validItems[] = $item; } return $validItems; }