84 lines
2.8 KiB
PHP
Executable File
84 lines
2.8 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Services\Filament\Domain\Posts;
|
|
|
|
use App\Containers\Article\Models\Post;
|
|
use App\Containers\User\Models\Role;
|
|
use App\Containers\User\Models\User;
|
|
use App\Filament\Resources\PostResource;
|
|
use Filament\Notifications\Actions\Action;
|
|
use Filament\Notifications\Notification;
|
|
|
|
class PostNotificationService
|
|
{
|
|
/**
|
|
* Отправляет уведомления редакторам о новом посте.
|
|
*
|
|
* @param Post $post
|
|
* @return void
|
|
*/
|
|
public function send(Post $post): void
|
|
{
|
|
// Находим всех пользователей с ролью "editor"
|
|
$role = Role::findByName('editor');
|
|
if (!$role) {
|
|
return;
|
|
}
|
|
$editors = $role->users;
|
|
|
|
// Отправляем уведомление каждому редактору
|
|
foreach ($editors as $editor) {
|
|
Notification::make()
|
|
->title('Новость на проверку')
|
|
->body('Новость "' . $post->title . '" нуждается в проверке')
|
|
->actions([
|
|
Action::make('view')
|
|
->label('Проверить')
|
|
->button()
|
|
->markAsRead()
|
|
->url(PostResource::getUrl('edit', ['record' => $post])),
|
|
])
|
|
->sendToDatabase($editor); // Отправляем уведомление конкретному редактору
|
|
}
|
|
}
|
|
|
|
public function sendSuccessNotification(Post $post): void
|
|
{
|
|
$user = User::find($post->user_id);
|
|
|
|
Notification::make()
|
|
->title('Ваша новость опубликована')
|
|
->body('Новость "' . $post->title . '" опубликована')
|
|
->actions([
|
|
Action::make('view')
|
|
->label('Смотреть')
|
|
->button()
|
|
->markAsRead()
|
|
->url(route('client.post.show', $post->slug)),
|
|
])
|
|
->sendToDatabase($user);
|
|
}
|
|
|
|
/**
|
|
* Отправляет уведомление об отклонении.
|
|
*
|
|
* @param Post $post
|
|
* @return void
|
|
*/
|
|
public function sendDeniedNotification(Post $post): void
|
|
{
|
|
$user = User::find($post->user_id);
|
|
|
|
Notification::make()
|
|
->title('Ваша новость отклонена :(')
|
|
->body('Новость "' . $post->title . '" была отклонена')
|
|
->actions([
|
|
Action::make('view')
|
|
->label('Смотреть')
|
|
->button()
|
|
->markAsRead()
|
|
->url(PostResource::getUrl('edit', ['record' => $post])),
|
|
])
|
|
->sendToDatabase($user);
|
|
}
|
|
} |