8000 [Notifier] Change notifier recipient handling by jschaedl · Pull Request #35773 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

[Notifier] Change notifier recipient handling #35773

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 7, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
[Notifier] Change notifier recipient handling
  • Loading branch information
jschaedl authored and fabpot committed Aug 7, 2020
commit 588607bdd1011acdb6309d9e268d9f5aabc37f51
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
use Symfony\Component\Notifier\Bridge\Twilio\TwilioTransportFactory;
use Symfony\Component\Notifier\Bridge\Zulip\ZulipTransportFactory;
use Symfony\Component\Notifier\Notifier;
use Symfony\Component\Notifier\Recipient\AdminRecipient;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\PropertyAccess\PropertyAccessor;
use Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface;
use Symfony\Component\PropertyInfo\PropertyDescriptionExtractorInterface;
Expand Down Expand Up @@ -2096,7 +2096,7 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $
$notifier = $container->getDefinition('notifier');
foreach ($config['admin_recipients'] as $i => $recipient) {
$id = 'notifier.admin_recipient.'.$i;
$container->setDefinition($id, new Definition(AdminRecipient::class, [$recipient['email'], $recipient['phone']]));
$container->setDefinition($id, new Definition(Recipient::class, [$recipient['email'], $recipient['phone']]));
$notifier->addMethodCall('addAdminRecipient', [new Reference($id)]);
}
}
Expand Down
14 changes: 14 additions & 0 deletions src/Symfony/Component/Notifier/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,20 @@ CHANGELOG

* [BC BREAK] The `TransportInterface::send()` and `AbstractTransport::doSend()` methods changed to return a `?SentMessage` instance instead of `void`.
* Added the Zulip notifier bridge
* The `EmailRecipientInterface` and `RecipientInterface` were introduced.
* Added `email` and and `phone` properties to `Recipient`.
* [BC BREAK] Changed the type-hint of the `$recipient` argument in the `as*Message()`
of the `EmailNotificationInterface` and `SmsNotificationInterface` to `EmailRecipientInterface`
and `SmsRecipientInterface`.
* [BC BREAK] Removed the `AdminRecipient`.
* The `EmailRecipientInterface` and `SmsRecipientInterface` now extend the `RecipientInterface`.
* The `EmailRecipient` and `SmsRecipient` were introduced.
* [BC BREAK] Changed the type-hint of the `$recipient` argument in `NotifierInterface::send()`,
`Notifier::getChannels()`, `ChannelInterface::notifiy()` and `ChannelInterface::supports()` to
`RecipientInterface`.
* Changed `EmailChannel` to only support recipients which implement the `EmailRecipientInterface`.
* Changed `SmsChannel` to only support recipients which implement the `SmsRecipientInterface`.


5.1.0
-----
Expand Down
6 changes: 3 additions & 3 deletions src/Symfony/Component/Notifier/Channel/BrowserChannel.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\RecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -29,7 +29,7 @@ public function __construct(RequestStack $stack)
$this->stack = $stack;
}

public function notify(Notification $notification, Recipient $recipient, string $transportName = null): void
public function notify(Notification $notification, RecipientInterface $recipient, string $transportName = null): void
{
if (null === $request = $this->stack->getCurrentRequest()) {
return;
Expand All @@ -42,7 +42,7 @@ public function notify(Notification $notification, Recipient $recipient, string
$request->getSession()->getFlashBag()->add('notification', $message);
}

public function supports(Notification $notification, Recipient $recipient): bool
public function supports(Notification $notification, RecipientInterface $recipient): bool
{
return true;
}
Expand Down
6 changes: 3 additions & 3 deletions src/Symfony/Component/Notifier/Channel/ChannelInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
namespace Symfony\Component\Notifier\Channel;

use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\RecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -21,7 +21,7 @@
*/
interface ChannelInterface
{
public function notify(Notification $notification, Recipient $recipient, string $transportName = null): void;
public function notify(Notification $notification, RecipientInterface $recipient, string $transportName = null): void;

public function supports(Notification $notification, Recipient $recipient): bool;
public function supports(Notification $notification, RecipientInterface $recipient): bool;
}
6 changes: 3 additions & 3 deletions src/Symfony/Component/Notifier/Channel/ChatChannel.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
use Symfony\Component\Notifier\Message\ChatMessage;
use Symfony\Component\Notifier\Notification\ChatNotificationInterface;
use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\RecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -23,7 +23,7 @@
*/
class ChatChannel extends AbstractChannel
{
public function notify(Notification $notification, Recipient $recipient, string $transportName = null): void
public function notify(Notification $notification, RecipientInterface $recipient, string $transportName = null): void
{
$message = null;
if ($notification instanceof ChatNotificationInterface) {
Expand All @@ -45,7 +45,7 @@ public function notify(Notification $notification, Recipient $recipient, string
}
}

public function supports(Notification $notification, Recipient $recipient): bool
public function supports(Notification $notification, RecipientInterface $recipient): bool
{
return true;
}
Expand Down
9 changes: 5 additions & 4 deletions src/Symfony/Component/Notifier/Channel/EmailChannel.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
use Symfony\Component\Notifier\Message\EmailMessage;
use Symfony\Component\Notifier\Notification\EmailNotificationInterface;
use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\EmailRecipientInterface;
use Symfony\Component\Notifier\Recipient\RecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -46,7 +47,7 @@ public function __construct(TransportInterface $transport = null, MessageBusInte
$this->envelope = $envelope;
}

public function notify(Notification $notification, Recipient $recipient, string $transportName = null): void
public function notify(Notification $notification, RecipientInterface $recipient, string $transportName = null): void
{
$message = null;
if ($notification instanceof EmailNotificationInterface) {
Expand Down Expand Up @@ -84,8 +85,8 @@ public function notify(Notification $notification, Recipient $recipient, string
}
}

public function supports(Notification $notification, Recipient $recipient): bool
public function supports(Notification $notification, RecipientInterface $recipient): bool
{
return '' !== $recipient->getEmail();
return $recipient instanceof EmailRecipientInterface;
}
}
8 changes: 4 additions & 4 deletions src/Symfony/Component/Notifier/Channel/SmsChannel.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
use Symfony\Component\Notifier\Message\SmsMessage;
use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Notification\SmsNotificationInterface;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\RecipientInterface;
use Symfony\Component\Notifier\Recipient\SmsRecipientInterface;

/**
Expand All @@ -24,7 +24,7 @@
*/
class SmsChannel extends AbstractChannel
{
public function notify(Notification $notification, Recipient $recipient, string $transportName = null): void
public function notify(Notification $notification, RecipientInterface $recipient, string $transportName = null): void
{
$message = null;
if ($notification instanceof SmsNotificationInterface) {
Expand All @@ -46,8 +46,8 @@ public function notify(Notification $notification, Recipient $recipient, string
}
}

public function supports(Notification $notification, Recipient $recipient): bool
public function supports(Notification $notification, RecipientInterface $recipient): bool
{
return $recipient instanceof SmsRecipientInterface && '' !== $recipient->getPhone();
return $recipient instanceof SmsRecipientInterface;
}
}
9 changes: 7 additions & 2 deletions src/Symfony/Component/Notifier/Message/EmailMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
use Symfony\Component\Mailer\Envelope;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\RawMessage;
use Symfony\Component\Notifier\Exception\InvalidArgumentException;
use Symfony\Component\Notifier\Exception\LogicException;
use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\EmailRecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -35,8 +36,12 @@ public function __construct(RawMessage $message, Envelope $envelope = null)
$this->envelope = $envelope;
}

public static function fromNotification(Notification $notification, Recipient $recipient): self
public static function fromNotification(Notification $notification, EmailRecipientInterface $recipient): self
{
if ('' === $recipient->getEmail()) {
throw new InvalidArgumentException(sprintf('"%s" needs an email, it cannot be empty.', static::class));
}

if (!class_exists(NotificationEmail::class)) {
$email = (new Email())
->to($recipient->getEmail())
Expand Down
18 changes: 10 additions & 8 deletions src/Symfony/Component/Notifier/Message/SmsMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,8 @@

namespace Symfony\Component\Notifier\Message;

use Symfony\Component\Notifier\Exception\LogicException;
use Symfony\Component\Notifier\Exception\InvalidArgumentException;
use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Notification\SmsNotificationInterface;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\SmsRecipientInterface;

/**
Expand All @@ -30,16 +28,16 @@ final class SmsMessage implements MessageInterface

public function __construct(string $phone, string $subject)
{
if ('' === $phone) {
throw new InvalidArgumentException(sprintf('"%s" needs a phone number, it cannot be empty.', static::class));
}

$this->subject = $subject;
$this->phone = $phone;
}

public static function fromNotification(Notification $notification, Recipient $recipient): self
public static function fromNotification(Notification $notification, SmsRecipientInterface $recipient): self
{
if (!$recipient instanceof SmsRecipientInterface) {
throw new LogicException(sprintf('To send a SMS message, "%s" should implement "%s" or the recipient should implement "%s".', get_debug_type($notification), SmsNotificationInterface::class, SmsRecipientInterface::class));
}

return new self($recipient->getPhone(), $notification->getSubject());
}

Expand All @@ -48,6 +46,10 @@ public static function fromNotification(Notification $notification, Recipient $r
*/
public function phone(string $phone): self
{
if ('' === $phone) {
throw new InvalidArgumentException(sprintf('"%s" needs a phone number, it cannot be empty.', static::class));
}

$this->phone = $phone;

return $this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
namespace Symfony\Component\Notifier\Notification;

use Symfony\Component\Notifier\Message\ChatMessage;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\RecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -21,5 +21,5 @@
*/
interface ChatNotificationInterface
{
public function asChatMessage(Recipient $recipient, string $transport = null): ?ChatMessage;
public function asChatMessage(RecipientInterface $recipient, string $transport = null): ?ChatMessage;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
namespace Symfony\Component\Notifier\Notification;

use Symfony\Component\Notifier\Message\EmailMessage;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\EmailRecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -21,5 +21,5 @@
*/
interface EmailNotificationInterface
{
public function asEmailMessage(Recipient $recipient, string $transport = null): ?EmailMessage;
public function asEmailMessage(EmailRecipientInterface $recipient, string $transport = null): ?EmailMessage;
}
4 changes: 2 additions & 2 deletions src/Symfony/Component/Notifier/Notification/Notification.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

use Psr\Log\LogLevel;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\RecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand Down Expand Up @@ -158,7 +158,7 @@ public function channels(array $channels): self
return $this;
}

public function getChannels(Recipient $recipient): array
public function getChannels(RecipientInterface $recipient): array
{
return $this->channels;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
namespace Symfony\Component\Notifier\Notification;

use Symfony\Component\Notifier\Message\SmsMessage;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\SmsRecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -21,5 +21,5 @@
*/
interface SmsNotificationInterface
{
public function asSmsMessage(Recipient $recipient, string $transport = null): ?SmsMessage;
public function asSmsMessage(SmsRecipientInterface $recipient, string $transport = null): ?SmsMessage;
}
11 changes: 5 additions & 6 deletions src/Symfony/Component/Notifier/Notifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,8 @@
use Symfony\Component\Notifier\Channel\ChannelPolicyInterface;
use Symfony\Component\Notifier\Exception\LogicException;
use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Recipient\AdminRecipient;
use Symfony\Component\Notifier\Recipient\NoRecipient;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\RecipientInterface;

/**
* @author Fabien Potencier <fabien@symfony.com>
Expand All @@ -41,7 +40,7 @@ public function __construct($channels, ChannelPolicyInterface $policy = null)
$this->policy = $policy;
}

public function send(Notification $notification, Recipient ...$recipients): void
public function send(Notification $notification, RecipientInterface ...$recipients): void
{
if (!$recipients) {
$recipients = [new NoRecipient()];
Expand All @@ -54,20 +53,20 @@ public function send(Notification $notification, Recipient ...$recipients): void
}
}

public function addAdminRecipient(AdminRecipient $recipient): void
public function addAdminRecipient(RecipientInterface $recipient): void
{
$this->adminRecipients[] = $recipient;
}

/**
* @return AdminRecipient[]
* @return RecipientInterface[]
*/
public function getAdminRecipients(): array
{
return $this->adminRecipients;
}

private function getChannels(Notification $notification, Recipient $recipient): iterable
private function getChannels(Notification $notification, RecipientInterface $recipient): iterable
{
$channels = $notification->getChannels($recipient);
if (!$channels) {
Expand Down
4 changes: 2 additions & 2 deletions src/Symfony/Component/Notifier/NotifierInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
namespace Symfony\Component\Notifier;

use Symfony\Component\Notifier\Notification\Notification;
use Symfony\Component\Notifier\Recipient\Recipient;
use Symfony\Component\Notifier\Recipient\RecipientInterface;

/**
* Interface for the Notifier system.
Expand All @@ -23,5 +23,5 @@
*/
interface NotifierInterface
{
public function send(Notification $notification, Recipient ...$recipients): void;
public function send(Notification $notification, RecipientInterface ...$recipients): void;
}
Loading
0