From 34f2c6e833cafd18c244e21d3163470443fa6b99 Mon Sep 17 00:00:00 2001 From: Baptiste Foucher Date: Mon, 27 Jan 2020 10:23:27 +0100 Subject: [PATCH] add support of new facebook tags --- CHANGELOG.md | 6 ++++++ src/Helper/ValidatorTrait.php | 37 ++++++++++++++++++++++++++++++++- src/SendInterface.php | 2 ++ tests/TestCase/Api/SendTest.php | 2 +- 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a152a68..b2c4fb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ The Messenger library follows [SemVer](http://semver.org/). ## 3.x +**Changelog** (since [`3.3.0`](https://github.com/ker0x/messenger/compare/3.3.0...3.3.1)) + +- 3.3.1 (2020-01) + - Add Support of `CONFIRMED_EVENT_UPDATE` and `POST_PURCHASE_UPDATE` message tags. + - Deprecated old message tags which will be disabled on March 4th, 2020 (see: [Current Supported Tags](https://developers.facebook.com/docs/messenger-platform/send-messages/message-tags#current_supported_tags)) + **Changelog** (since [`3.2.0`](https://github.com/ker0x/messenger/compare/3.2.0...3.3.0)) - 3.3.0 (2019-11) diff --git a/src/Helper/ValidatorTrait.php b/src/Helper/ValidatorTrait.php index b6af5e8..68a49cf 100644 --- a/src/Helper/ValidatorTrait.php +++ b/src/Helper/ValidatorTrait.php @@ -196,10 +196,20 @@ protected function isValidNotificationType(string $notificationType): void protected function isValidTag(string $tag, $message = null): void { $allowedTag = $this->getAllowedTag(); + $deprecatedTag = $this->getDeprecatedTags(); if (!\in_array($tag, $allowedTag, true)) { throw new InvalidKeyException(sprintf('tag must be either "%s".', implode(', ', $allowedTag))); } + if (\in_array($tag, $deprecatedTag, true)) { + $message = sprintf('The %s tag is deprecated, use %s, %s, %s instead.', + $tag, + SendInterface::TAG_CONFIRMED_EVENT_UPDATE, + SendInterface::TAG_POST_PURCHASE_UPDATE, + SendInterface::TAG_ACCOUNT_UPDATE); + @trigger_error($message, E_USER_DEPRECATED); + } + if ($tag === SendInterface::TAG_ISSUE_RESOLUTION && $message !== null && !$message instanceof GenericTemplate) { throw new InvalidClassException(sprintf('message must be an instance of %s if tag is set to %s.', GenericTemplate::class, SendInterface::TAG_ISSUE_RESOLUTION)); } @@ -224,6 +234,32 @@ protected function getAllowedNotificationType(): array } protected function getAllowedTag(): array + { + return [ + SendInterface::TAG_CONFIRMED_EVENT_UPDATE, + SendInterface::TAG_POST_PURCHASE_UPDATE, + SendInterface::TAG_ACCOUNT_UPDATE, + //Tags supported until March 4th, 2020. + SendInterface::TAG_BUSINESS_PRODUCTIVITY, + SendInterface::TAG_COMMUNITY_ALERT, + SendInterface::TAG_CONFIRMED_EVENT_REMINDER, + SendInterface::TAG_NON_PROMOTIONAL_SUBSCRIPTION, + SendInterface::TAG_PAIRING_UPDATE, + SendInterface::TAG_APPLICATION_UPDATE, + SendInterface::TAG_PAYMENT_UPDATE, + SendInterface::TAG_PERSONAL_FINANCE_UPDATE, + SendInterface::TAG_SHIPPING_UPDATE, + SendInterface::TAG_RESERVATION_UPDATE, + SendInterface::TAG_ISSUE_RESOLUTION, + SendInterface::TAG_APPOINTMENT_UPDATE, + SendInterface::TAG_GAME_EVENT, + SendInterface::TAG_TRANSPORTATION_UPDATE, + SendInterface::TAG_FEATURE_FUNCTIONALITY_UPDATE, + SendInterface::TAG_TICKET_UPDATE, + ]; + } + + protected function getDeprecatedTags(): array { return [ SendInterface::TAG_BUSINESS_PRODUCTIVITY, @@ -232,7 +268,6 @@ protected function getAllowedTag(): array SendInterface::TAG_NON_PROMOTIONAL_SUBSCRIPTION, SendInterface::TAG_PAIRING_UPDATE, SendInterface::TAG_APPLICATION_UPDATE, - SendInterface::TAG_ACCOUNT_UPDATE, SendInterface::TAG_PAYMENT_UPDATE, SendInterface::TAG_PERSONAL_FINANCE_UPDATE, SendInterface::TAG_SHIPPING_UPDATE, diff --git a/src/SendInterface.php b/src/SendInterface.php index ef8a3c9..4dff32e 100644 --- a/src/SendInterface.php +++ b/src/SendInterface.php @@ -36,6 +36,8 @@ interface SendInterface public const TAG_TRANSPORTATION_UPDATE = 'TRANSPORTATION_UPDATE'; public const TAG_FEATURE_FUNCTIONALITY_UPDATE = 'FEATURE_FUNCTIONALITY_UPDATE'; public const TAG_TICKET_UPDATE = 'TICKET_UPDATE'; + public const TAG_CONFIRMED_EVENT_UPDATE = 'CONFIRMED_EVENT_UPDATE'; + public const TAG_POST_PURCHASE_UPDATE = 'POST_PURCHASE_UPDATE'; public const MESSAGING_TYPE_RESPONSE = 'RESPONSE'; public const MESSAGING_TYPE_UPDATE = 'UPDATE'; diff --git a/tests/TestCase/Api/SendTest.php b/tests/TestCase/Api/SendTest.php index 14b6768..660686f 100644 --- a/tests/TestCase/Api/SendTest.php +++ b/tests/TestCase/Api/SendTest.php @@ -138,7 +138,7 @@ public function testBadNotificationType(): void public function testBadTagType(): void { $this->expectException(MessengerException::class); - $this->expectExceptionMessage('tag must be either "BUSINESS_PRODUCTIVITY, COMMUNITY_ALERT, CONFIRMED_EVENT_REMINDER, NON_PROMOTIONAL_SUBSCRIPTION, PAIRING_UPDATE, APPLICATION_UPDATE, ACCOUNT_UPDATE, PAYMENT_UPDATE, PERSONAL_FINANCE_UPDATE, SHIPPING_UPDATE, RESERVATION_UPDATE, ISSUE_RESOLUTION, APPOINTMENT_UPDATE, GAME_EVENT, TRANSPORTATION_UPDATE, FEATURE_FUNCTIONALITY_UPDATE, TICKET_UPDATE".'); + $this->expectExceptionMessage('tag must be either "CONFIRMED_EVENT_UPDATE, POST_PURCHASE_UPDATE, ACCOUNT_UPDATE, BUSINESS_PRODUCTIVITY, COMMUNITY_ALERT, CONFIRMED_EVENT_REMINDER, NON_PROMOTIONAL_SUBSCRIPTION, PAIRING_UPDATE, APPLICATION_UPDATE, PAYMENT_UPDATE, PERSONAL_FINANCE_UPDATE, SHIPPING_UPDATE, RESERVATION_UPDATE, ISSUE_RESOLUTION, APPOINTMENT_UPDATE, GAME_EVENT, TRANSPORTATION_UPDATE, FEATURE_FUNCTIONALITY_UPDATE, TICKET_UPDATE".'); $this->sendApi->message('1008372609250235', 'Hello World!', [ 'notification_type' => SendInterface::NOTIFICATION_TYPE_REGULAR, 'tag' => 'INVOICE_UPDATE',