2022-09-20 19:59:52 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Service\Forms;
|
|
|
|
|
|
|
|
use App\Service\Forms\FormLogicConditionChecker;
|
|
|
|
|
|
|
|
class FormLogicPropertyResolver
|
|
|
|
{
|
|
|
|
|
|
|
|
private $property = [];
|
|
|
|
private $formData = [];
|
|
|
|
private $logic = false;
|
|
|
|
|
|
|
|
public function __construct(private array $prop, private array $values)
|
|
|
|
{
|
|
|
|
$this->property = $prop;
|
|
|
|
$this->formData = $values;
|
|
|
|
$this->logic = isset($this->property['logic']) ? $this->property['logic'] : false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function isRequired(array $property, array $values): bool
|
|
|
|
{
|
|
|
|
return (new self($property, $values))->shouldBeRequired();
|
|
|
|
}
|
|
|
|
|
2023-01-25 15:10:33 +00:00
|
|
|
public static function isHidden(array $property, array $values): bool
|
|
|
|
{
|
|
|
|
return (new self($property, $values))->shouldBeHidden();
|
|
|
|
}
|
|
|
|
|
2022-09-20 19:59:52 +00:00
|
|
|
public function shouldBeRequired(): bool
|
|
|
|
{
|
|
|
|
if(!isset($this->property['required'])){
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$this->logic) {
|
|
|
|
return $this->property['required'];
|
|
|
|
}
|
|
|
|
|
|
|
|
$conditionsMet = FormLogicConditionChecker::conditionsMet($this->logic['conditions'], $this->formData);
|
|
|
|
if ($conditionsMet && $this->property['required'] && count($this->logic['actions']) > 0 && in_array('make-it-optional', $this->logic['actions'])) {
|
|
|
|
return false;
|
|
|
|
} else if ($conditionsMet && !$this->property['required'] && count($this->logic['actions']) > 0 && in_array('require-answer', $this->logic['actions'])) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return $this->property['required'];
|
|
|
|
}
|
|
|
|
}
|
2023-01-25 15:10:33 +00:00
|
|
|
|
|
|
|
public function shouldBeHidden(): bool
|
|
|
|
{
|
|
|
|
if (! isset($this->property['hidden'])) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$this->logic) {
|
|
|
|
return $this->property['hidden'];
|
|
|
|
}
|
|
|
|
|
|
|
|
$conditionsMet = FormLogicConditionChecker::conditionsMet($this->logic['conditions'], $this->formData);
|
|
|
|
if ($conditionsMet && $this->property['hidden'] && count($this->logic['actions']) > 0 && in_array('show-block', $this->logic['actions'])) {
|
|
|
|
return false;
|
|
|
|
} elseif ($conditionsMet && !$this->property['hidden'] && count($this->logic['actions']) > 0 && in_array('hide-block', $this->logic['actions'])) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return $this->property['hidden'];
|
|
|
|
}
|
|
|
|
}
|
2022-09-20 19:59:52 +00:00
|
|
|
}
|