* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ declare(strict_types=1); namespace PrestaShopBundle\Form\DataTransformer; use Symfony\Component\Form\Exception\TransformationFailedException; use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer; /** * Transforms between a normalized format and a localized money string. * (Copy from Symfony/Component/Form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php to add $locale in it!) */ class MoneyToLocalizedStringTransformer extends NumberToLocalizedStringTransformer { private $divisor; public function __construct(?int $scale = 2, ?bool $grouping = true, ?int $roundingMode = self::ROUND_HALF_UP, ?int $divisor = 1, string $locale = null) { parent::__construct($scale ?? 2, $grouping ?? true, $roundingMode, $locale); $this->divisor = $divisor ?? 1; } /** * Transforms a normalized format into a localized money string. * * @param int|float|null $value Normalized number * * @return string Localized money string * * @throws TransformationFailedException if the given value is not numeric or * if the value can not be transformed */ public function transform($value) { if (null !== $value && 1 !== $this->divisor) { if (!is_numeric($value)) { throw new TransformationFailedException('Expected a numeric.'); } $value /= $this->divisor; } return parent::transform($value); } /** * Transforms a localized money string into a normalized format. * * @param string $value Localized money string * * @return int|float|null Normalized number * * @throws TransformationFailedException if the given value is not a string * or if the value can not be transformed */ public function reverseTransform($value) { $value = parent::reverseTransform($value); if (null !== $value && 1 !== $this->divisor) { $value = (float) (string) ($value * $this->divisor); } return $value; } }