You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.4 KiB
168 lines
4.4 KiB
<?php |
|
|
|
namespace Illuminate\Notifications; |
|
|
|
use Illuminate\Bus\Queueable; |
|
use Illuminate\Contracts\Queue\ShouldBeEncrypted; |
|
use Illuminate\Contracts\Queue\ShouldQueue; |
|
use Illuminate\Database\Eloquent\Collection as EloquentCollection; |
|
use Illuminate\Database\Eloquent\Model; |
|
use Illuminate\Queue\InteractsWithQueue; |
|
use Illuminate\Queue\SerializesModels; |
|
use Illuminate\Support\Collection; |
|
|
|
class SendQueuedNotifications implements ShouldQueue |
|
{ |
|
use InteractsWithQueue, Queueable, SerializesModels; |
|
|
|
/** |
|
* The notifiable entities that should receive the notification. |
|
* |
|
* @var \Illuminate\Support\Collection |
|
*/ |
|
public $notifiables; |
|
|
|
/** |
|
* The notification to be sent. |
|
* |
|
* @var \Illuminate\Notifications\Notification |
|
*/ |
|
public $notification; |
|
|
|
/** |
|
* All of the channels to send the notification to. |
|
* |
|
* @var array |
|
*/ |
|
public $channels; |
|
|
|
/** |
|
* The number of times the job may be attempted. |
|
* |
|
* @var int |
|
*/ |
|
public $tries; |
|
|
|
/** |
|
* The number of seconds the job can run before timing out. |
|
* |
|
* @var int |
|
*/ |
|
public $timeout; |
|
|
|
/** |
|
* Indicates if the job should be encrypted. |
|
* |
|
* @var bool |
|
*/ |
|
public $shouldBeEncrypted = false; |
|
|
|
/** |
|
* Create a new job instance. |
|
* |
|
* @param \Illuminate\Notifications\Notifiable|\Illuminate\Support\Collection $notifiables |
|
* @param \Illuminate\Notifications\Notification $notification |
|
* @param array|null $channels |
|
* @return void |
|
*/ |
|
public function __construct($notifiables, $notification, array $channels = null) |
|
{ |
|
$this->channels = $channels; |
|
$this->notification = $notification; |
|
$this->notifiables = $this->wrapNotifiables($notifiables); |
|
$this->tries = property_exists($notification, 'tries') ? $notification->tries : null; |
|
$this->timeout = property_exists($notification, 'timeout') ? $notification->timeout : null; |
|
$this->afterCommit = property_exists($notification, 'afterCommit') ? $notification->afterCommit : null; |
|
$this->shouldBeEncrypted = $notification instanceof ShouldBeEncrypted; |
|
} |
|
|
|
/** |
|
* Wrap the notifiable(s) in a collection. |
|
* |
|
* @param \Illuminate\Notifications\Notifiable|\Illuminate\Support\Collection $notifiables |
|
* @return \Illuminate\Support\Collection |
|
*/ |
|
protected function wrapNotifiables($notifiables) |
|
{ |
|
if ($notifiables instanceof Collection) { |
|
return $notifiables; |
|
} elseif ($notifiables instanceof Model) { |
|
return EloquentCollection::wrap($notifiables); |
|
} |
|
|
|
return Collection::wrap($notifiables); |
|
} |
|
|
|
/** |
|
* Send the notifications. |
|
* |
|
* @param \Illuminate\Notifications\ChannelManager $manager |
|
* @return void |
|
*/ |
|
public function handle(ChannelManager $manager) |
|
{ |
|
$manager->sendNow($this->notifiables, $this->notification, $this->channels); |
|
} |
|
|
|
/** |
|
* Get the display name for the queued job. |
|
* |
|
* @return string |
|
*/ |
|
public function displayName() |
|
{ |
|
return get_class($this->notification); |
|
} |
|
|
|
/** |
|
* Call the failed method on the notification instance. |
|
* |
|
* @param \Throwable $e |
|
* @return void |
|
*/ |
|
public function failed($e) |
|
{ |
|
if (method_exists($this->notification, 'failed')) { |
|
$this->notification->failed($e); |
|
} |
|
} |
|
|
|
/** |
|
* Get the number of seconds before a released notification will be available. |
|
* |
|
* @return mixed |
|
*/ |
|
public function backoff() |
|
{ |
|
if (! method_exists($this->notification, 'backoff') && ! isset($this->notification->backoff)) { |
|
return; |
|
} |
|
|
|
return $this->notification->backoff ?? $this->notification->backoff(); |
|
} |
|
|
|
/** |
|
* Get the expiration for the notification. |
|
* |
|
* @return mixed |
|
*/ |
|
public function retryUntil() |
|
{ |
|
if (! method_exists($this->notification, 'retryUntil') && ! isset($this->notification->retryUntil)) { |
|
return; |
|
} |
|
|
|
return $this->notification->retryUntil ?? $this->notification->retryUntil(); |
|
} |
|
|
|
/** |
|
* Prepare the instance for cloning. |
|
* |
|
* @return void |
|
*/ |
|
public function __clone() |
|
{ |
|
$this->notifiables = clone $this->notifiables; |
|
$this->notification = clone $this->notification; |
|
} |
|
}
|
|
|