Primo Committ
This commit is contained in:
75
vendor/laravel/framework/src/Illuminate/Notifications/Channels/BroadcastChannel.php
vendored
Normal file
75
vendor/laravel/framework/src/Illuminate/Notifications/Channels/BroadcastChannel.php
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Notifications\Channels;
|
||||
|
||||
use Illuminate\Contracts\Events\Dispatcher;
|
||||
use Illuminate\Notifications\Events\BroadcastNotificationCreated;
|
||||
use Illuminate\Notifications\Messages\BroadcastMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use RuntimeException;
|
||||
|
||||
class BroadcastChannel
|
||||
{
|
||||
/**
|
||||
* The event dispatcher.
|
||||
*
|
||||
* @var \Illuminate\Contracts\Events\Dispatcher
|
||||
*/
|
||||
protected $events;
|
||||
|
||||
/**
|
||||
* Create a new database channel.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Events\Dispatcher $events
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Dispatcher $events)
|
||||
{
|
||||
$this->events = $events;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the given notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @return array|null
|
||||
*/
|
||||
public function send($notifiable, Notification $notification)
|
||||
{
|
||||
$message = $this->getData($notifiable, $notification);
|
||||
|
||||
$event = new BroadcastNotificationCreated(
|
||||
$notifiable, $notification, is_array($message) ? $message : $message->data
|
||||
);
|
||||
|
||||
if ($message instanceof BroadcastMessage) {
|
||||
$event->onConnection($message->connection)
|
||||
->onQueue($message->queue);
|
||||
}
|
||||
|
||||
return $this->events->dispatch($event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data for the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
protected function getData($notifiable, Notification $notification)
|
||||
{
|
||||
if (method_exists($notification, 'toBroadcast')) {
|
||||
return $notification->toBroadcast($notifiable);
|
||||
}
|
||||
|
||||
if (method_exists($notification, 'toArray')) {
|
||||
return $notification->toArray($notifiable);
|
||||
}
|
||||
|
||||
throw new RuntimeException('Notification is missing toArray method.');
|
||||
}
|
||||
}
|
||||
63
vendor/laravel/framework/src/Illuminate/Notifications/Channels/DatabaseChannel.php
vendored
Normal file
63
vendor/laravel/framework/src/Illuminate/Notifications/Channels/DatabaseChannel.php
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Notifications\Channels;
|
||||
|
||||
use Illuminate\Notifications\Notification;
|
||||
use RuntimeException;
|
||||
|
||||
class DatabaseChannel
|
||||
{
|
||||
/**
|
||||
* Send the given notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @return \Illuminate\Database\Eloquent\Model
|
||||
*/
|
||||
public function send($notifiable, Notification $notification)
|
||||
{
|
||||
return $notifiable->routeNotificationFor('database', $notification)->create(
|
||||
$this->buildPayload($notifiable, $notification)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data for the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @return array
|
||||
*
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
protected function getData($notifiable, Notification $notification)
|
||||
{
|
||||
if (method_exists($notification, 'toDatabase')) {
|
||||
return is_array($data = $notification->toDatabase($notifiable))
|
||||
? $data : $data->data;
|
||||
}
|
||||
|
||||
if (method_exists($notification, 'toArray')) {
|
||||
return $notification->toArray($notifiable);
|
||||
}
|
||||
|
||||
throw new RuntimeException('Notification is missing toDatabase / toArray method.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Build an array payload for the DatabaseNotification Model.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @return array
|
||||
*/
|
||||
protected function buildPayload($notifiable, Notification $notification)
|
||||
{
|
||||
return [
|
||||
'id' => $notification->id,
|
||||
'type' => get_class($notification),
|
||||
'data' => $this->getData($notifiable, $notification),
|
||||
'read_at' => null,
|
||||
];
|
||||
}
|
||||
}
|
||||
252
vendor/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php
vendored
Normal file
252
vendor/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php
vendored
Normal file
@@ -0,0 +1,252 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\Notifications\Channels;
|
||||
|
||||
use Illuminate\Contracts\Mail\Factory as MailFactory;
|
||||
use Illuminate\Contracts\Mail\Mailable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Markdown;
|
||||
use Illuminate\Notifications\Notification;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class MailChannel
|
||||
{
|
||||
/**
|
||||
* The mailer implementation.
|
||||
*
|
||||
* @var \Illuminate\Contracts\Mail\Factory
|
||||
*/
|
||||
protected $mailer;
|
||||
|
||||
/**
|
||||
* The markdown implementation.
|
||||
*
|
||||
* @var \Illuminate\Mail\Markdown
|
||||
*/
|
||||
protected $markdown;
|
||||
|
||||
/**
|
||||
* Create a new mail channel instance.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Mail\Factory $mailer
|
||||
* @param \Illuminate\Mail\Markdown $markdown
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(MailFactory $mailer, Markdown $markdown)
|
||||
{
|
||||
$this->mailer = $mailer;
|
||||
$this->markdown = $markdown;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the given notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @return void
|
||||
*/
|
||||
public function send($notifiable, Notification $notification)
|
||||
{
|
||||
$message = $notification->toMail($notifiable);
|
||||
|
||||
if (! $notifiable->routeNotificationFor('mail', $notification) &&
|
||||
! $message instanceof Mailable) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($message instanceof Mailable) {
|
||||
return $message->send($this->mailer);
|
||||
}
|
||||
|
||||
$this->mailer->mailer($message->mailer ?? null)->send(
|
||||
$this->buildView($message),
|
||||
array_merge($message->data(), $this->additionalMessageData($notification)),
|
||||
$this->messageBuilder($notifiable, $notification, $message)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mailer Closure for the message.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return \Closure
|
||||
*/
|
||||
protected function messageBuilder($notifiable, $notification, $message)
|
||||
{
|
||||
return function ($mailMessage) use ($notifiable, $notification, $message) {
|
||||
$this->buildMessage($mailMessage, $notifiable, $notification, $message);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the notification's view.
|
||||
*
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return string|array
|
||||
*/
|
||||
protected function buildView($message)
|
||||
{
|
||||
if ($message->view) {
|
||||
return $message->view;
|
||||
}
|
||||
|
||||
if (property_exists($message, 'theme') && ! is_null($message->theme)) {
|
||||
$this->markdown->theme($message->theme);
|
||||
}
|
||||
|
||||
return [
|
||||
'html' => $this->markdown->render($message->markdown, $message->data()),
|
||||
'text' => $this->markdown->renderText($message->markdown, $message->data()),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get additional meta-data to pass along with the view data.
|
||||
*
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @return array
|
||||
*/
|
||||
protected function additionalMessageData($notification)
|
||||
{
|
||||
return [
|
||||
'__laravel_notification_id' => $notification->id,
|
||||
'__laravel_notification' => get_class($notification),
|
||||
'__laravel_notification_queued' => in_array(
|
||||
ShouldQueue::class,
|
||||
class_implements($notification)
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the mail message.
|
||||
*
|
||||
* @param \Illuminate\Mail\Message $mailMessage
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return void
|
||||
*/
|
||||
protected function buildMessage($mailMessage, $notifiable, $notification, $message)
|
||||
{
|
||||
$this->addressMessage($mailMessage, $notifiable, $notification, $message);
|
||||
|
||||
$mailMessage->subject($message->subject ?: Str::title(
|
||||
Str::snake(class_basename($notification), ' ')
|
||||
));
|
||||
|
||||
$this->addAttachments($mailMessage, $message);
|
||||
|
||||
if (! is_null($message->priority)) {
|
||||
$mailMessage->setPriority($message->priority);
|
||||
}
|
||||
|
||||
$this->runCallbacks($mailMessage, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Address the mail message.
|
||||
*
|
||||
* @param \Illuminate\Mail\Message $mailMessage
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return void
|
||||
*/
|
||||
protected function addressMessage($mailMessage, $notifiable, $notification, $message)
|
||||
{
|
||||
$this->addSender($mailMessage, $message);
|
||||
|
||||
$mailMessage->to($this->getRecipients($notifiable, $notification, $message));
|
||||
|
||||
if (! empty($message->cc)) {
|
||||
foreach ($message->cc as $cc) {
|
||||
$mailMessage->cc($cc[0], Arr::get($cc, 1));
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($message->bcc)) {
|
||||
foreach ($message->bcc as $bcc) {
|
||||
$mailMessage->bcc($bcc[0], Arr::get($bcc, 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the "from" and "reply to" addresses to the message.
|
||||
*
|
||||
* @param \Illuminate\Mail\Message $mailMessage
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return void
|
||||
*/
|
||||
protected function addSender($mailMessage, $message)
|
||||
{
|
||||
if (! empty($message->from)) {
|
||||
$mailMessage->from($message->from[0], Arr::get($message->from, 1));
|
||||
}
|
||||
|
||||
if (! empty($message->replyTo)) {
|
||||
foreach ($message->replyTo as $replyTo) {
|
||||
$mailMessage->replyTo($replyTo[0], Arr::get($replyTo, 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the recipients of the given message.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @param \Illuminate\Notifications\Notification $notification
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return mixed
|
||||
*/
|
||||
protected function getRecipients($notifiable, $notification, $message)
|
||||
{
|
||||
if (is_string($recipients = $notifiable->routeNotificationFor('mail', $notification))) {
|
||||
$recipients = [$recipients];
|
||||
}
|
||||
|
||||
return collect($recipients)->mapWithKeys(function ($recipient, $email) {
|
||||
return is_numeric($email)
|
||||
? [$email => (is_string($recipient) ? $recipient : $recipient->email)]
|
||||
: [$email => $recipient];
|
||||
})->all();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the attachments to the message.
|
||||
*
|
||||
* @param \Illuminate\Mail\Message $mailMessage
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return void
|
||||
*/
|
||||
protected function addAttachments($mailMessage, $message)
|
||||
{
|
||||
foreach ($message->attachments as $attachment) {
|
||||
$mailMessage->attach($attachment['file'], $attachment['options']);
|
||||
}
|
||||
|
||||
foreach ($message->rawAttachments as $attachment) {
|
||||
$mailMessage->attachData($attachment['data'], $attachment['name'], $attachment['options']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the callbacks for the message.
|
||||
*
|
||||
* @param \Illuminate\Mail\Message $mailMessage
|
||||
* @param \Illuminate\Notifications\Messages\MailMessage $message
|
||||
* @return $this
|
||||
*/
|
||||
protected function runCallbacks($mailMessage, $message)
|
||||
{
|
||||
foreach ($message->callbacks as $callback) {
|
||||
$callback($mailMessage->getSwiftMessage());
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user