# Notyfikacje

Moduł został zbudowany na bazie domyślnych powiadomień Laravela (opens new window).

Pozwala na stworzenie powiadomień, których treści można edytować w panelu administracyjnym.

Powiadomienie może zostać wyłączone w panelu administracyjnym.

Uwaga

Jeśli powiadomienie jest nieaktywne lub nie zostało skonfigurowane w panelu administracyjnym - powiadomienie nie zostanie wysłane.

# Definiowanie kanałów

W pierwszej kolejności należy wygenerować plik konfiguracyjny. Można to zrobić korzystając z komendy php artisan module:publish-config Notification.

Dostępne kanały powiadomień znajdują się w pliku konfiguracyjnym pod kluczem channels.

// config/notification.php

'channels' => [
    'mail',
    'database',
],

# Generowanie powiadomienia

Korzystając z komendy artisana php artisan mb:make-notification <Module> <NotificationName> można wygenerować plik powiadomienia dla konkretnego modułu.

# Manualne tworzenie powiadomienia

Należy stworzyć klasę, która będzie rozszerzeniem abstrakcyjnej klasy \Modules\Notification\Notifications\BaseNotification.

Następnie należy dodać metody wymagane przez interfejs \Modules\Notification\Contracts\NotificationInterface:

// \Modules\Notification\Contracts\NotificationInterface.php

public static function label(): string;
public static function variables(): array;
public function replacements(): array;
public static function channels(): void;

# Nazwa powiadomienia

Służy do wyświetlenia nazwy powiadomienia w panelu administracyjnym.

public static function label(): string
{
    return __('subscriber confirmation');
}

# Metoda variables

Służy do opisania pól, które można wykorzystać w treści powiadomienia.

public static function variables(): array
{
    return [
        'subscriber' => [
            'confirm_url' => __('confirm url'),
            'delete_url'  => __('delete url'),
        ],
    ];
}

# Metoda replacements

Służy do stworzenia struktury zawierającej dynamiczne dane, które będą podstawione w treści powiadomienia.

public function replacements(): array
{
    return [
        'subscriber' => [
            'confirm_url' => $this->subscriber->frontConfirmUrl(),
            'delete_url'  => $this->subscriber->frontDeleteUrl(),
        ],
    ];
}

# Metoda channels

Służy do zdefiniowania kanałów powiadomienia.

use Modules\Notification\Models\ChannelField;

public static function channels(): void
{
    static::addChannel('mail', __('mail'), [
        ChannelField::text('subject',   __('subject'),  ['required', 'string']),
        ChannelField::text('title',     __('title'),    ['required', 'string']),
        ChannelField::editor('body',    __('body'),     ['required', 'string']),
    ]);
}

TIP

Walidowane są tylko pola aktywnych kanałów

# Treść powiadomienia

Treści powiadomień definiowane są osobno dla każdego kanału w odpowiednich metodach.

W przypadku kanału mail jest to metoda toMail.

W pierwszej kolejności należy skorzystać z metody prepareChannelContentFor, aby przygotować treści (podstawia wartości zmiennych w treści) dla danego kanału.

Następnie należy skorzystać z metody getContent, której pierwszym parametrem jest nazwa pola, a drugim (opcjonalnym) domyślna wartość.

use Illuminate\Support\HtmlString;
use Illuminate\Notifications\Messages\MailMessage;

public function toMail($notifiable): MailMessage
{
    $this->prepareChannelContentFor($notifiable, 'mail');

    return (new MailMessage)
        ->subject($this->getContent('subject', __('Confirm Your subscription!')))
        ->greeting($this->getContent('title', __('Hello')))
        ->line(new HtmlString($this->getContent('body')));
}

# Konfiguracja powiadomienia

Wysyłanie powiadomienia jest możliwe po odpowiedniej konfiguracji.

# Krok 1

Zdefiniowanie w pliku konfiguracyjnym dostępnego powiadomienia:

// config/notification.php

'notifications' => [
    'reset-password' => ResetPasswordNotification::class,
],

# Krok 2

Utworzenie aktywnego powiadomienia w panelu administracyjnym.

# Podgląd powiadomienia

Podgląd powiadomienia dostępny jest pod linkiem: /notification/notifications/{notificationType}/preview, gdzie notificationType to klucz powiadomienia zdefiniowanego w pliku konfiguracyjnym, np. reset-password.

TIP

Domyślnie zwracany jest widok powiadomienia email. Korzystając z parametru channel, można wyświetlić dane z innego kanału.

/notification/notifications/{notificationType}/preview?channel={channel}

Jeśli powiadomienie przyjmuje jakieś parametry w konstruktorze to należy dodać statyczną metodę previewData(), która zwróci tablicę z parametrami potrzebnymi do stworzenia nowej instancji powiadomienia.

protected static function previewData(): mixed
{
    return [
        User::factory()->make(),
    ];
}