Skip to content
stevewest edited this page Oct 3, 2014 · 3 revisions
<?php

use Ve\LogicProcessor\AbstractResult;
use Ve\LogicProcessor\AbstractRule;
use Ve\LogicProcessor\Modifier\Equal;
use Ve\LogicProcessor\Modifier\Percent;
use Ve\LogicProcessor\Processor;
use Ve\LogicProcessor\RuleSet;

require __DIR__.'/vendor/autoload.php';

class HasProductRule extends AbstractRule
{
	public function run($context)
	{
		$find = null;
		foreach ($context as $id => $product)
		{
			if ($this->getModifier()->run($product['id']))
			{
				$find = $product;
				break;
			}
		}

		return $find !== null;
	}
}

class ProductDiscountResult extends AbstractResult
{
	public function mutate(&$target)
	{
		$id = null;
		foreach ($target as $id => $product)
		{
			if ($product['id'] == $this->getValue())
			{
				break;
			}
		}

		if ($id !== null)
		{
			$target[$id]['price'] = $this->getModifier()
				->run($target[$id]['price']);
		}
	}
}

$context = [
	['id' => 1, 'name' => 'foobar', 'qty' => 12, 'price' => 10],
	['id' => 2, 'name' => 'bazbat', 'qty' => 9, 'price' => 25],
];

$modifier = new Equal();
$modifier->setTargetValue(1);

$rule = new HasProductRule();
$rule->setModifier($modifier);

$result = new ProductDiscountResult();
$resultMod = new Percent();
$resultMod->setTargetValue(50);
$result->setModifier($resultMod);
$result->setValue(1);

$ruleSet = new RuleSet();
$ruleSet->setRule($rule);
$ruleSet->addResult($result);

$pro = new Processor;
$pro->addRuleSet($ruleSet);
$pro->run($context, $context);

var_dump($context);

Clone this wiki locally