
fix(core): labels are now accepted with both compose styles refactor: remove lots of ray's
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;
|
||
}
|
||
}
|