Bootstrap5FlashMessage   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
eloc 30
c 1
b 0
f 0
dl 0
loc 49
ccs 28
cts 28
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A displayMessages() 0 16 5
A addMessage() 0 15 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PerfectApp;
6
7
use PerfectApp\Session\SessionInterface;
8
9
final class Bootstrap5FlashMessage
10
{
11
    private string $closeButtonHtml = <<<EOT
12
    <button type="button"
13
            class="btn-close"
14
            data-bs-dismiss="alert"
15
            aria-label="Close">
16
    </button>
17
EOT;
18
19 4
    public function __construct(
20
        private readonly SessionInterface $session,
21
        private readonly array            $messages
22
    ) {
23 4
    }
24
25 3
    public function addMessage(string $type, string $key, ?string $icon = null, bool $dismissible = false): void
26
    {
27 3
        $message = $this->messages[$type][$key] ?? '';
28 3
        if ($message === '') {
29 1
            return;
30
        }
31
32 2
        $flashMessages = $this->session->get('flash_messages') ?? [];
33 2
        $flashMessages[] = [
34 2
            'type' => $type,
35 2
            'message' => $message,
36 2
            'dismissible' => $dismissible,
37 2
            'icon' => $icon,
38 2
        ];
39 2
        $this->session->set('flash_messages', $flashMessages);
40
    }
41
42 1
    public function displayMessages(): void
43
    {
44 1
        $flashMessages = $this->session->get('flash_messages') ?? [];
45 1
        foreach ($flashMessages as $flashMessage) {
46 1
            $dismissibleClass = $flashMessage['dismissible'] ? 'alert-dismissible fade show' : '';
47 1
            $closeButton = $flashMessage['dismissible'] ? $this->closeButtonHtml : '';
48 1
            echo sprintf(
49 1
                '<div class="alert alert-%s %s" role="alert">%s%s%s</div>',
50 1
                $flashMessage['type'],
51 1
                $dismissibleClass,
52 1
                $flashMessage['icon'] ? "<i class='{$flashMessage['icon']}'></i> " : '',
53 1
                $flashMessage['message'],
54 1
                $closeButton
55 1
            );
56
        }
57 1
        $this->session->delete('flash_messages');
58
    }
59
}
60