From 909b9c7250a450e2567cb754c11a28bc04eda2d1 Mon Sep 17 00:00:00 2001 From: Anatolii Bivol Date: Sun, 4 Sep 2022 09:03:04 +0200 Subject: [PATCH 1/3] preserve substitutions from To in Personalization If there are substitutions in the To object preserve them by transfering them to the Personalization object --- lib/mail/Personalization.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/mail/Personalization.php b/lib/mail/Personalization.php index 020e8245..289ed0a4 100644 --- a/lib/mail/Personalization.php +++ b/lib/mail/Personalization.php @@ -43,11 +43,19 @@ class Personalization implements \JsonSerializable /** * Add a To object to a Personalization object + * If there are substitutions in the To object preserve them + * by transfering them to the Personalization object * * @param To $email To object */ public function addTo($email) { + if ($subs = $email->getSubstitutions()) { + foreach ($subs as $key => $value) { + $this->addSubstitution($key, $value); + } + } + $this->tos[] = $email; } From dd95642b201c01550cb2068c2fdb9d800cc9719d Mon Sep 17 00:00:00 2001 From: Anatolii Bivol Date: Sun, 4 Sep 2022 09:50:38 +0200 Subject: [PATCH 2/3] Personalization addSubstitution takes precedence; Unit test personalization addTo --- lib/mail/Personalization.php | 11 +++++++---- test/unit/PersonalizationTest.php | 27 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lib/mail/Personalization.php b/lib/mail/Personalization.php index 289ed0a4..80966417 100644 --- a/lib/mail/Personalization.php +++ b/lib/mail/Personalization.php @@ -43,19 +43,22 @@ class Personalization implements \JsonSerializable /** * Add a To object to a Personalization object - * If there are substitutions in the To object preserve them - * by transfering them to the Personalization object + * If there are substitutions in the To object preserve them + * by transferring them to the Personalization object * * @param To $email To object */ public function addTo($email) { if ($subs = $email->getSubstitutions()) { + $existing_subs = $this->getSubstitutions(); foreach ($subs as $key => $value) { - $this->addSubstitution($key, $value); + if (!array_key_exists($key, $existing_subs)) { + $this->addSubstitution($key, $value); + } } } - + $this->tos[] = $email; } diff --git a/test/unit/PersonalizationTest.php b/test/unit/PersonalizationTest.php index 9bd35ba4..f4417e95 100644 --- a/test/unit/PersonalizationTest.php +++ b/test/unit/PersonalizationTest.php @@ -16,6 +16,7 @@ use SendGrid\Mail\Subject; use SendGrid\Mail\To; use SendGrid\Mail\TypeException; +use SendGrid\Mail\Substitution; /** * This class tests Personalization. @@ -32,6 +33,32 @@ public function testAddTo() $this->assertSame('dx@sendgrid.com', $personalization->getTos()[0]->getEmail()); } + public function testAddToWithSubstitution() + { + $personalization = new Personalization(); + $personalization->addTo(new To('dx@sendgrid.com', 'Test with sub', + [ + '-name-' => 'Example User' + ] + )); + + $this->assertArrayHasKey('-name-', $personalization->getSubstitutions()); + } + + public function testAddSubstitutionHasPrecedence() + { + $personalization = new Personalization(); + $personalization->addSubstitution(new Substitution('-name-', 'Example User 2')); + $personalization->addTo(new To('dx@sendgrid.com', 'Test with sub', + [ + '-name-' => 'Example User' + ] + )); + + $this->assertArrayHasKey('-name-', $personalization->getSubstitutions()); + $this->assertSame('Example User 2', $personalization->getSubstitutions()['-name-']); + } + public function testAddFrom() { $personalization = new Personalization(); From 8a8633f98df2d762ea80c06e72d87b96bb0bc223 Mon Sep 17 00:00:00 2001 From: Anatolii Bivol Date: Sun, 4 Sep 2022 09:52:56 +0200 Subject: [PATCH 3/3] Personalization addTo inline doc --- lib/mail/Personalization.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/mail/Personalization.php b/lib/mail/Personalization.php index 80966417..7fb57e9d 100644 --- a/lib/mail/Personalization.php +++ b/lib/mail/Personalization.php @@ -44,7 +44,9 @@ class Personalization implements \JsonSerializable /** * Add a To object to a Personalization object * If there are substitutions in the To object preserve them - * by transferring them to the Personalization object + * by transferring them to the Personalization object. + * If a substitution with the same key already exists + * that takes precedence, and we don't overwrite * * @param To $email To object */