Source of file ItemDiscountConstraint.php
Size: 2,076 Bytes - Last Modified: 2021-12-24T06:35:13+00:00
/var/www/docs.ssmods.com/process/src/src/Extensions/Constraints/ItemDiscountConstraint.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | <?php namespace SilverShop\Discounts\Extensions\Constraints; use SilverShop\Model\OrderItem; use SilverShop\Discounts\Model\Discount; use SilverStripe\Core\ClassInfo; use SilverStripe\Core\Injector\Injector; /** * Discount constraint that restricts to specific items. * * @package silvershop-discounts */ abstract class ItemDiscountConstraint extends DiscountConstraint { /** * Checks that an item can be discounted for configured constraints. * * If any constraint check fails, the entire function returns false; * @param OrderItem $item * @param Discount $discount * @return bool */ public static function match(OrderItem $item, Discount $discount) { $singletons = []; $itemconstraints = ClassInfo::subclassesFor(self::class); array_shift($itemconstraints); //exclude abstract base class $configuredconstraints = Injector::inst()->get(Discount::class)->getConstraints(); //get only the configured item constraints $classes = array_intersect($itemconstraints, $configuredconstraints); foreach ($classes as $constraint) { if (!singleton($constraint)->itemMatchesCriteria($item, $discount)) { return false; } } return true; } /** * Returns true if the given item sits within this constraint. * * If there is no constraint set, then it should return true. * * @param OrderItem $item * @param Discount $discount * @return boolean */ abstract public function itemMatchesCriteria(OrderItem $item, Discount $discount); /** * Check if at least one item in cart matches this criteria. * * @param Discount $discount * * @return boolean */ public function itemsInCart(Discount $discount) { $items = $this->order->Items(); foreach ($items as $item) { if ($this->itemMatchesCriteria($item, $discount)) { return true; } } return false; } } |