Spaces:
No application file
No application file
File size: 2,901 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
<?php
declare(strict_types=1);
namespace Mautic\IntegrationsBundle\Sync\SyncProcess\Direction\Helper;
use Mautic\IntegrationsBundle\Exception\InvalidValueException;
use Mautic\IntegrationsBundle\Sync\DAO\Mapping\ObjectMappingDAO;
use Mautic\IntegrationsBundle\Sync\DAO\Sync\Report\FieldDAO;
use Mautic\IntegrationsBundle\Sync\DAO\Value\NormalizedValueDAO;
class ValueHelper
{
private ?NormalizedValueDAO $normalizedValueDAO = null;
private ?string $fieldState = null;
private ?string $syncDirection = null;
/**
* @throws InvalidValueException
*/
public function getValueForIntegration(NormalizedValueDAO $normalizedValueDAO, string $fieldState, string $syncDirection): NormalizedValueDAO
{
$this->normalizedValueDAO = $normalizedValueDAO;
$this->fieldState = $fieldState;
$this->syncDirection = $syncDirection;
$newValue = $this->getValue(ObjectMappingDAO::SYNC_TO_MAUTIC);
return new NormalizedValueDAO($normalizedValueDAO->getType(), $normalizedValueDAO->getNormalizedValue(), $newValue);
}
/**
* @throws InvalidValueException
*/
public function getValueForMautic(NormalizedValueDAO $normalizedValueDAO, string $fieldState, string $syncDirection): NormalizedValueDAO
{
$this->normalizedValueDAO = $normalizedValueDAO;
$this->fieldState = $fieldState;
$this->syncDirection = $syncDirection;
$newValue = $this->getValue(ObjectMappingDAO::SYNC_TO_INTEGRATION);
return new NormalizedValueDAO($normalizedValueDAO->getType(), $normalizedValueDAO->getNormalizedValue(), $newValue);
}
/**
* @return float|int|mixed|string
*
* @throws InvalidValueException
*/
private function getValue(string $directionToIgnore)
{
$value = $this->normalizedValueDAO->getNormalizedValue();
// If the field is not required, do not force a value
if (FieldDAO::FIELD_REQUIRED !== $this->fieldState) {
return $value;
}
// If the field is not configured to update the Integration, do not force a value
if ($directionToIgnore === $this->syncDirection) {
return $value;
}
// If the value is not empty (including 0 or false), do not force a value
if (null !== $value && '' !== $value) {
return $value;
}
return match ($this->normalizedValueDAO->getType()) {
NormalizedValueDAO::EMAIL_TYPE, NormalizedValueDAO::DATE_TYPE, NormalizedValueDAO::DATETIME_TYPE, NormalizedValueDAO::BOOLEAN_TYPE => $this->normalizedValueDAO->getOriginalValue(),
NormalizedValueDAO::INT_TYPE => 0,
NormalizedValueDAO::DOUBLE_TYPE, NormalizedValueDAO::FLOAT_TYPE => 1.0,
default => throw new InvalidValueException("Required field can't be empty"),
};
}
}
|