. */ declare(strict_types=1); namespace FireflyIII\Transformers; use FireflyIII\Models\Rule; use FireflyIII\Models\RuleAction; use FireflyIII\Models\RuleTrigger; use League\Fractal\TransformerAbstract; use Symfony\Component\HttpFoundation\ParameterBag; /** * Class RuleTransformer */ class RuleTransformer extends TransformerAbstract { /** @var ParameterBag */ protected $parameters; /** * CurrencyTransformer constructor. * * @codeCoverageIgnore * * @param ParameterBag $parameters */ public function __construct(ParameterBag $parameters) { $this->parameters = $parameters; } /** * Transform the rule. * * @param Rule $rule * * @return array */ public function transform(Rule $rule): array { $data = [ 'id' => (int)$rule->id, 'created_at' => $rule->created_at->toAtomString(), 'updated_at' => $rule->updated_at->toAtomString(), 'rule_group_id' => (int)$rule->rule_group_id, 'title' => $rule->title, 'description' => $rule->description, 'order' => (int)$rule->order, 'active' => $rule->active, 'strict' => $rule->strict, 'stop_processing' => $rule->stop_processing, 'triggers' => $this->triggers($rule), 'actions' => $this->actions($rule), 'links' => [ [ 'rel' => 'self', 'uri' => '/rules/' . $rule->id, ], ], ]; return $data; } /** * @param Rule $rule * * @return array */ private function actions(Rule $rule): array { $result = []; $actions = $rule->ruleActions()->orderBy('order', 'ASC')->get(); /** @var RuleAction $ruleAction */ foreach ($actions as $ruleAction) { $result[] = [ 'id' => (int)$ruleAction->id, 'created_at' => $ruleAction->created_at->toAtomString(), 'updated_at' => $ruleAction->updated_at->toAtomString(), 'type' => $ruleAction->action_type, 'value' => $ruleAction->action_value, 'order' => $ruleAction->order, 'active' => $ruleAction->active, 'stop_processing' => $ruleAction->stop_processing, ]; } return $result; } /** * @param Rule $rule * * @return array */ private function triggers(Rule $rule): array { $result = []; $triggers = $rule->ruleTriggers()->orderBy('order', 'ASC')->get(); /** @var RuleTrigger $ruleTrigger */ foreach ($triggers as $ruleTrigger) { $result[] = [ 'id' => (int)$ruleTrigger->id, 'created_at' => $ruleTrigger->created_at->toAtomString(), 'updated_at' => $ruleTrigger->updated_at->toAtomString(), 'type' => $ruleTrigger->trigger_type, 'value' => $ruleTrigger->trigger_value, 'order' => $ruleTrigger->order, 'active' => $ruleTrigger->active, 'stop_processing' => $ruleTrigger->stop_processing, ]; } return $result; } }