Bristol SU Support Package
ActionBuilder.php
Go to the documentation of this file.
1 <?php
2 
3 
5 
7 use BristolSU\Support\Action\Contracts\ActionBuilder as ActionBuilderContract;
11 
15 class ActionBuilder implements ActionBuilderContract
16 {
22  private $app;
23 
29  public function __construct(Container $app)
30  {
31  $this->app = $app;
32  }
33 
45  public function build(ActionInstance $actionInstance, array $data = []): Action
46  {
47  $mappedFields = $this->mapFields($actionInstance->actionInstanceFields, $data);
48  $action = $this->app->make($actionInstance->action, [
49  'data' => $mappedFields
50  ]);
51 
52  if($action instanceof RecordsHistory) {
53  $action->setActionInstanceId($actionInstance->id);
54  $action->setEventFields($data);
55  $action->setSettings($mappedFields);
56  }
57 
58  return $action;
59  }
60 
69  private function mapFields($fields, array $data)
70  {
71  $actionFields = [];
72  foreach ($fields as $field) {
73  $actionValue = $field->action_value;
74  foreach($data as $key => $value) {
75  $actionValue = str_replace(sprintf('{{event:%s}}', $key), $value, $actionValue);
76  }
77  $actionFields[$field->action_field] = $actionValue;
78  }
79  return $actionFields;
80  }
81 }
build(ActionInstance $actionInstance, array $data=[])