51 lines
1.3 KiB
PHP
51 lines
1.3 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace App\Notifications\Dto;
|
|||
|
|
|
|||
|
|
use Illuminate\Support\Facades\Log;
|
|||
|
|
|
|||
|
|
class PushoverMessage
|
|||
|
|
{
|
|||
|
|
public function __construct(
|
|||
|
|
public string $title,
|
|||
|
|
public string $message,
|
|||
|
|
public array $buttons = [],
|
|||
|
|
public string $level = 'info',
|
|||
|
|
) {}
|
|||
|
|
|
|||
|
|
public function getLevelIcon(): string
|
|||
|
|
{
|
|||
|
|
return match ($this->level) {
|
|||
|
|
'info' => 'ℹ️',
|
|||
|
|
'error' => '🚨',
|
|||
|
|
'success' => '🟢',
|
|||
|
|
'warning' => '⚠️',
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function toPayload(string $token, string $user): array
|
|||
|
|
{
|
|||
|
|
$levelIcon = $this->getLevelIcon();
|
|||
|
|
$payload = [
|
|||
|
|
'token' => $token,
|
|||
|
|
'user' => $user,
|
|||
|
|
'title' => "{$levelIcon} {$this->title}",
|
|||
|
|
'message' => $this->message,
|
|||
|
|
'html' => 1,
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
foreach ($this->buttons as $button) {
|
|||
|
|
$buttonUrl = data_get($button, 'url');
|
|||
|
|
$text = data_get($button, 'text', 'Click here');
|
|||
|
|
if ($buttonUrl && str_contains($buttonUrl, 'http://localhost')) {
|
|||
|
|
$buttonUrl = str_replace('http://localhost', config('app.url'), $buttonUrl);
|
|||
|
|
}
|
|||
|
|
$payload['message'] .= " <a href='" . $buttonUrl . "'>" . $text . '</a>';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Log::info('Pushover message', $payload);
|
|||
|
|
|
|||
|
|
return $payload;
|
|||
|
|
}
|
|||
|
|
}
|