From 67514f82e5a0de07625b0ec08043bc5d5b9ce3f8 Mon Sep 17 00:00:00 2001 From: Oskar Stark Date: Sat, 11 Jan 2025 13:51:13 +0100 Subject: [PATCH] [Mailer][Notifier] Add and use `Dsn::getBooleanOption()` --- .../Transport/MailjetTransportFactory.php | 2 +- .../Mailer/Bridge/Mailjet/composer.json | 2 +- src/Symfony/Component/Mailer/CHANGELOG.md | 1 + .../Mailer/Tests/Transport/DsnTest.php | 25 +++++++++++++++++++ .../Component/Mailer/Transport/Dsn.php | 5 ++++ .../Isendpro/IsendproTransportFactory.php | 4 +-- .../Notifier/Bridge/Isendpro/composer.json | 2 +- .../OvhCloud/OvhCloudTransportFactory.php | 2 +- .../Notifier/Bridge/OvhCloud/composer.json | 2 +- .../SmsBiuras/SmsBiurasTransportFactory.php | 2 +- .../Notifier/Bridge/SmsBiuras/composer.json | 2 +- .../Bridge/Smsapi/SmsapiTransportFactory.php | 4 +-- .../Notifier/Bridge/Smsapi/composer.json | 2 +- src/Symfony/Component/Notifier/CHANGELOG.md | 5 ++++ .../Notifier/Tests/Transport/DsnTest.php | 25 +++++++++++++++++++ .../Component/Notifier/Transport/Dsn.php | 5 ++++ 16 files changed, 78 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetTransportFactory.php b/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetTransportFactory.php index 938b87d74f31f..dc48ff8508ce3 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetTransportFactory.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/Transport/MailjetTransportFactory.php @@ -24,7 +24,7 @@ public function create(Dsn $dsn): TransportInterface $user = $this->getUser($dsn); $password = $this->getPassword($dsn); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); - $sandbox = filter_var($dsn->getOption('sandbox', false), \FILTER_VALIDATE_BOOL); + $sandbox = $dsn->getBooleanOption('sandbox'); if ('mailjet+api' === $scheme) { return (new MailjetApiTransport($user, $password, $this->client, $this->dispatcher, $this->logger, $sandbox))->setHost($host); diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/composer.json b/src/Symfony/Component/Mailer/Bridge/Mailjet/composer.json index 2ef1d8a5842cb..3abc7eb31c135 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/composer.json +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/composer.json @@ -17,7 +17,7 @@ ], "require": { "php": ">=8.2", - "symfony/mailer": "^7.2" + "symfony/mailer": "^7.3" }, "require-dev": { "symfony/http-client": "^6.4|^7.0", diff --git a/src/Symfony/Component/Mailer/CHANGELOG.md b/src/Symfony/Component/Mailer/CHANGELOG.md index f0efc94eaee9f..b7c02d2b73f66 100644 --- a/src/Symfony/Component/Mailer/CHANGELOG.md +++ b/src/Symfony/Component/Mailer/CHANGELOG.md @@ -5,6 +5,7 @@ CHANGELOG --- * Add DSN param `retry_period` to override default email transport retry period + * Add `Dsn::getBooleanOption()` 7.2 --- diff --git a/src/Symfony/Component/Mailer/Tests/Transport/DsnTest.php b/src/Symfony/Component/Mailer/Tests/Transport/DsnTest.php index f0c0a8ffe0fed..3949fa544120f 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/DsnTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/DsnTest.php @@ -105,4 +105,29 @@ public static function invalidDsnProvider(): iterable 'The mailer DSN must contain a host (use "default" by default).', ]; } + + /** + * @dataProvider getBooleanOptionProvider + */ + public function testGetBooleanOption(bool $expected, string $dsnString, string $option, bool $default) + { + $dsn = Dsn::fromString($dsnString); + + $this->assertSame($expected, $dsn->getBooleanOption($option, $default)); + } + + public static function getBooleanOptionProvider(): iterable + { + yield [true, 'scheme://localhost?enabled=1', 'enabled', false]; + yield [true, 'scheme://localhost?enabled=true', 'enabled', false]; + yield [true, 'scheme://localhost?enabled=on', 'enabled', false]; + yield [true, 'scheme://localhost?enabled=yes', 'enabled', false]; + yield [false, 'scheme://localhost?enabled=0', 'enabled', false]; + yield [false, 'scheme://localhost?enabled=false', 'enabled', false]; + yield [false, 'scheme://localhost?enabled=off', 'enabled', false]; + yield [false, 'scheme://localhost?enabled=no', 'enabled', false]; + + yield [false, 'scheme://localhost', 'not_existant', false]; + yield [true, 'scheme://localhost', 'not_existant', true]; + } } diff --git a/src/Symfony/Component/Mailer/Transport/Dsn.php b/src/Symfony/Component/Mailer/Transport/Dsn.php index e3cadc5802128..3bb201e1dde01 100644 --- a/src/Symfony/Component/Mailer/Transport/Dsn.php +++ b/src/Symfony/Component/Mailer/Transport/Dsn.php @@ -79,4 +79,9 @@ public function getOption(string $key, mixed $default = null): mixed { return $this->options[$key] ?? $default; } + + public function getBooleanOption(string $key, bool $default = false): bool + { + return filter_var($this->getOption($key, $default), \FILTER_VALIDATE_BOOLEAN); + } } diff --git a/src/Symfony/Component/Notifier/Bridge/Isendpro/IsendproTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/Isendpro/IsendproTransportFactory.php index c91583c17e4d5..3b2d47ae1ad55 100644 --- a/src/Symfony/Component/Notifier/Bridge/Isendpro/IsendproTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/Isendpro/IsendproTransportFactory.php @@ -25,8 +25,8 @@ public function create(Dsn $dsn): IsendproTransport $keyid = $this->getUser($dsn); $from = $dsn->getOption('from', null); - $noStop = filter_var($dsn->getOption('no_stop', false), \FILTER_VALIDATE_BOOLEAN); - $sandbox = filter_var($dsn->getOption('sandbox', false), \FILTER_VALIDATE_BOOLEAN); + $noStop = $dsn->getBooleanOption('no_stop'); + $sandbox = $dsn->getBooleanOption('sandbox'); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); $port = $dsn->getPort(); diff --git a/src/Symfony/Component/Notifier/Bridge/Isendpro/composer.json b/src/Symfony/Component/Notifier/Bridge/Isendpro/composer.json index 6f31954ada542..b7ee9fdbf95f1 100644 --- a/src/Symfony/Component/Notifier/Bridge/Isendpro/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/Isendpro/composer.json @@ -22,7 +22,7 @@ "require": { "php": ">=8.2", "symfony/http-client": "^6.4|^7.0", - "symfony/notifier": "^7.2" + "symfony/notifier": "^7.3" }, "require-dev": { "symfony/event-dispatcher": "^6.4|^7.0" diff --git a/src/Symfony/Component/Notifier/Bridge/OvhCloud/OvhCloudTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/OvhCloud/OvhCloudTransportFactory.php index a7943c4f0f2a6..25c884a9cd65c 100644 --- a/src/Symfony/Component/Notifier/Bridge/OvhCloud/OvhCloudTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/OvhCloud/OvhCloudTransportFactory.php @@ -33,7 +33,7 @@ public function create(Dsn $dsn): OvhCloudTransport $consumerKey = $dsn->getRequiredOption('consumer_key'); $serviceName = $dsn->getRequiredOption('service_name'); $sender = $dsn->getOption('sender'); - $noStopClause = filter_var($dsn->getOption('no_stop_clause', false), \FILTER_VALIDATE_BOOL); + $noStopClause = $dsn->getBooleanOption('no_stop_clause'); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); $port = $dsn->getPort(); diff --git a/src/Symfony/Component/Notifier/Bridge/OvhCloud/composer.json b/src/Symfony/Component/Notifier/Bridge/OvhCloud/composer.json index 661738b91a34d..c105fcccdf9e0 100644 --- a/src/Symfony/Component/Notifier/Bridge/OvhCloud/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/OvhCloud/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=8.2", "symfony/http-client": "^6.4|^7.0", - "symfony/notifier": "^7.2" + "symfony/notifier": "^7.3" }, "autoload": { "psr-4": { "Symfony\\Component\\Notifier\\Bridge\\OvhCloud\\": "" }, diff --git a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/SmsBiurasTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/SmsBiuras/SmsBiurasTransportFactory.php index a343216baf93c..22ce2f1166738 100644 --- a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/SmsBiurasTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/SmsBiuras/SmsBiurasTransportFactory.php @@ -31,7 +31,7 @@ public function create(Dsn $dsn): SmsBiurasTransport $uid = $this->getUser($dsn); $apiKey = $this->getPassword($dsn); $from = $dsn->getRequiredOption('from'); - $testMode = filter_var($dsn->getOption('test_mode', false), \FILTER_VALIDATE_BOOL); + $testMode = $dsn->getBooleanOption('test_mode'); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); $port = $dsn->getPort(); diff --git a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/composer.json b/src/Symfony/Component/Notifier/Bridge/SmsBiuras/composer.json index dc5c5260ec89f..cbba623e99aa4 100644 --- a/src/Symfony/Component/Notifier/Bridge/SmsBiuras/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/SmsBiuras/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=8.2", "symfony/http-client": "^6.4|^7.0", - "symfony/notifier": "^7.2" + "symfony/notifier": "^7.3" }, "autoload": { "psr-4": { "Symfony\\Component\\Notifier\\Bridge\\SmsBiuras\\": "" }, diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransportFactory.php b/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransportFactory.php index 69cfcdc657d21..13959bdca636c 100644 --- a/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransportFactory.php +++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/SmsapiTransportFactory.php @@ -31,8 +31,8 @@ public function create(Dsn $dsn): SmsapiTransport $authToken = $this->getUser($dsn); $from = $dsn->getOption('from', ''); $host = 'default' === $dsn->getHost() ? null : $dsn->getHost(); - $fast = filter_var($dsn->getOption('fast', false), \FILTER_VALIDATE_BOOL); - $test = filter_var($dsn->getOption('test', false), \FILTER_VALIDATE_BOOL); + $fast = $dsn->getBooleanOption('fast'); + $test = $dsn->getBooleanOption('test'); $port = $dsn->getPort(); return (new SmsapiTransport($authToken, $from, $this->client, $this->dispatcher))->setFast($fast)->setHost($host)->setPort($port)->setTest($test); diff --git a/src/Symfony/Component/Notifier/Bridge/Smsapi/composer.json b/src/Symfony/Component/Notifier/Bridge/Smsapi/composer.json index 656d455ac3fa8..40e2710c4dff7 100644 --- a/src/Symfony/Component/Notifier/Bridge/Smsapi/composer.json +++ b/src/Symfony/Component/Notifier/Bridge/Smsapi/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=8.2", "symfony/http-client": "^6.4|^7.0", - "symfony/notifier": "^7.2" + "symfony/notifier": "^7.3" }, "autoload": { "psr-4": { "Symfony\\Component\\Notifier\\Bridge\\Smsapi\\": "" }, diff --git a/src/Symfony/Component/Notifier/CHANGELOG.md b/src/Symfony/Component/Notifier/CHANGELOG.md index e0679c1af3867..48656422b3f05 100644 --- a/src/Symfony/Component/Notifier/CHANGELOG.md +++ b/src/Symfony/Component/Notifier/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.3 +--- + + * Add `Dsn::getBooleanOption()` + 7.2 --- diff --git a/src/Symfony/Component/Notifier/Tests/Transport/DsnTest.php b/src/Symfony/Component/Notifier/Tests/Transport/DsnTest.php index 1d4e4d9fe2479..6da5693d0338b 100644 --- a/src/Symfony/Component/Notifier/Tests/Transport/DsnTest.php +++ b/src/Symfony/Component/Notifier/Tests/Transport/DsnTest.php @@ -259,4 +259,29 @@ public static function getRequiredOptionThrowsMissingRequiredOptionExceptionProv 'with_empty_string', ]; } + + /** + * @dataProvider getBooleanOptionProvider + */ + public function testGetBooleanOption(bool $expected, string $dsnString, string $option, bool $default) + { + $dsn = new Dsn($dsnString); + + $this->assertSame($expected, $dsn->getBooleanOption($option, $default)); + } + + public static function getBooleanOptionProvider(): iterable + { + yield [true, 'scheme://localhost?enabled=1', 'enabled', false]; + yield [true, 'scheme://localhost?enabled=true', 'enabled', false]; + yield [true, 'scheme://localhost?enabled=on', 'enabled', false]; + yield [true, 'scheme://localhost?enabled=yes', 'enabled', false]; + yield [false, 'scheme://localhost?enabled=0', 'enabled', false]; + yield [false, 'scheme://localhost?enabled=false', 'enabled', false]; + yield [false, 'scheme://localhost?enabled=off', 'enabled', false]; + yield [false, 'scheme://localhost?enabled=no', 'enabled', false]; + + yield [false, 'scheme://localhost', 'not_existant', false]; + yield [true, 'scheme://localhost', 'not_existant', true]; + } } diff --git a/src/Symfony/Component/Notifier/Transport/Dsn.php b/src/Symfony/Component/Notifier/Transport/Dsn.php index 2afe28cefdac9..f6ef81f7cc146 100644 --- a/src/Symfony/Component/Notifier/Transport/Dsn.php +++ b/src/Symfony/Component/Notifier/Transport/Dsn.php @@ -93,6 +93,11 @@ public function getRequiredOption(string $key): mixed return $this->options[$key]; } + public function getBooleanOption(string $key, bool $default = false): bool + { + return filter_var($this->getOption($key, $default), \FILTER_VALIDATE_BOOLEAN); + } + public function getOptions(): array { return $this->options;