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;
 | ||
|     }
 | ||
| }
 | 
