Files
cachet-docker/app/Notifications/Component/ComponentStatusChangedNotification.php
A 2d4d823959 Adds a line in the notification email to manage its subscriptions.
Untill now a subscriber wasn't able to manage its subscription because
there was no link anywhere, so it was forced to unsubscribe and then
subscribe again.

Now the link is in the notification email, after 'Unsubscribe at'.

Related to #2887
2018-03-27 10:44:13 +02:00

154 lines
5.0 KiB
PHP

<?php
/*
* This file is part of Cachet.
*
* (c) Alt Three Services Limited
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CachetHQ\Cachet\Notifications\Component;
use CachetHQ\Cachet\Models\Component;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\NexmoMessage;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Notification;
use McCool\LaravelAutoPresenter\Facades\AutoPresenter;
/**
* This is the component status changed notification class.
*
* @author James Brooks <james@alt-three.com>
*/
class ComponentStatusChangedNotification extends Notification
{
use Queueable;
/**
* The component that changed.
*
* @var \CachetHQ\Cachet\Models\Component
*/
protected $component;
/**
* The component status we're now at.
*
* @var int
*/
protected $status;
/**
* Create a new notification instance.
*
* @param \CachetHQ\Cachet\Models\Component $component
* @param int $status
*
* @return void
*/
public function __construct(Component $component, $status)
{
$this->component = AutoPresenter::decorate($component);
$this->status = $status;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
*
* @return string[]
*/
public function via($notifiable)
{
return ['mail', 'nexmo', 'slack'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
*
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$content = trans('notifications.component.status_update.mail.content', [
'name' => $this->component->name,
'old_status' => $this->component->human_status,
'new_status' => trans("cachet.components.status.{$this->status}"),
]);
return (new MailMessage())
->subject(trans('notifications.component.status_update.mail.subject'))
->greeting(trans('notifications.component.status_update.mail.subject'))
->line($content)
->action(trans('notifications.component.status_update.mail.action'), cachet_route('status-page'))
->line(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]))
//TODO: Translate the text below
->line('Manage your subscriptions at ' . cachet_route('subscribe.manage', $notifiable->verify_code));
}
/**
* Get the Nexmo / SMS representation of the notification.
*
* @param mixed $notifiable
*
* @return \Illuminate\Notifications\Messages\NexmoMessage
*/
public function toNexmo($notifiable)
{
$content = trans('notifications.component.status_update.sms.content', [
'name' => $this->component->name,
'old_status' => $this->component->human_status,
'new_status' => trans("cachet.components.status.{$this->status}"),
]);
return (new NexmoMessage())->content($content);
}
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
*
* @return \Illuminate\Notifications\Messages\SlackMessage
*/
public function toSlack($notifiable)
{
$content = trans('notifications.component.status_update.slack.content', [
'name' => $this->component->name,
'old_status' => $this->component->human_status,
'new_status' => trans("cachet.components.status.{$this->status}"),
]);
$status = 'info';
if ($this->status <= 1) {
$status = 'success';
} elseif ($this->status === 2) {
$status = 'warning';
} elseif ($this->status >= 3) {
$status = 'error';
}
return (new SlackMessage())
->$status()
->content(trans('notifications.component.status_update.slack.subject'))
->attachment(function ($attachment) use ($content, $notifiable) {
$attachment->title($content, cachet_route('status-page'))
->fields(array_filter([
'Component' => $this->component->name,
'Old Status' => $this->component->human_status,
'New Status' => trans("cachet.components.status.{$this->status}"),
'Link' => $this->component->link,
]))
->footer(trans('cachet.subscriber.unsubscribe', ['link' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code)]));
});
}
}