Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 53
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzKartenList
0.00% covered (danger)
0.00%
0 / 53
0.00% covered (danger)
0.00%
0 / 1
132
0.00% covered (danger)
0.00%
0 / 1
 getHtml
0.00% covered (danger)
0.00%
0 / 53
0.00% covered (danger)
0.00%
0 / 1
132
1<?php
2
3namespace Olz\Karten\Components\OlzKartenList;
4
5use Olz\Components\Common\OlzComponent;
6use Olz\Entity\Karten\Karte;
7use Olz\Karten\Components\OlzKartenListItem\OlzKartenListItem;
8
9/** @extends OlzComponent<array<string, mixed>> */
10class OlzKartenList extends OlzComponent {
11    public function getHtml(mixed $args): string {
12        $out = '';
13
14        $db = $this->dbUtils()->getDb();
15        $code_href = $this->envUtils()->getCodeHref();
16
17        $kind_name_by_ident = [
18            'ol' => 'OL-Karten',
19            'stadt' => 'Dorf-Karten',
20            'scool' => 'sCOOL-Karten',
21        ];
22
23        $has_access = $this->authUtils()->hasPermission('karten');
24        if ($has_access) {
25            $out .= <<<ZZZZZZZZZZ
26                <button
27                    id='create-karte-button'
28                    class='btn btn-secondary create-karte-container'
29                    onclick='return olz.initOlzEditKarteModal()'
30                >
31                    <img src='{$code_href}assets/icns/new_white_16.svg' class='noborder' />
32                    Neue Karte
33                </button>
34                ZZZZZZZZZZ;
35        }
36
37        $sql = "SELECT * FROM karten WHERE on_off = '1' ORDER BY CASE WHEN `typ` = 'ol' THEN 1 WHEN `typ` = 'stadt' THEN 2 WHEN `typ` = 'scool' THEN 3 ELSE 4 END, ort ASC, name ASC";
38        $result = $db->query($sql);
39
40        $last_kind = null;
41
42        $out .= "<table class='boxy'>";
43        // @phpstan-ignore-next-line
44        while ($row = $result->fetch_assoc()) {
45            $karte = new Karte();
46            $karte->setOwnerUser(null);
47            $karte->setOwnerRole(null);
48            $karte->setOnOff(1);
49            $karte->setId(intval($row['id']));
50            $karte->setKartenNr($row['kartennr'] ? intval($row['kartennr']) : null);
51            // @phpstan-ignore-next-line
52            $karte->setName($row['name']);
53            $karte->setLatitude($row['latitude'] ? floatval($row['latitude']) : null);
54            $karte->setLongitude($row['longitude'] ? floatval($row['longitude']) : null);
55            // @phpstan-ignore-next-line
56            $karte->setYear($row['jahr']);
57            // @phpstan-ignore-next-line
58            $karte->setScale($row['massstab']);
59            // @phpstan-ignore-next-line
60            $karte->setPlace($row['ort']);
61            $karte->setZoom($row['zoom'] ? intval($row['zoom']) : null);
62            // @phpstan-ignore-next-line
63            $karte->setKind($row['typ']);
64            // @phpstan-ignore-next-line
65            $karte->setPreviewImageId($row['vorschau']);
66
67            $kind = $row['typ'];
68            $icon = null;
69            if ($kind == 'ol') {
70                $icon = 'orienteering_forest_16.svg';
71            } elseif ($kind == 'stadt') {
72                $icon = 'orienteering_village_16.svg';
73            } elseif ($kind == 'scool') {
74                $icon = 'orienteering_scool_16.svg';
75            }
76            if ($kind != $last_kind) {
77                $kind_name = $kind_name_by_ident[$kind];
78                $out .= <<<ZZZZZZZZZZ
79                    <tr><td colspan='3'>
80                        <h2 class='section-title'>
81                            <img src='{$code_href}assets/icns/{$icon}' class='noborder' style='margin-right:10px;vertical-align:bottom;'>
82                            {$kind_name}
83                        </h2>
84                    </td></tr>
85                    ZZZZZZZZZZ;
86                $last_kind = $kind;
87            }
88
89            $out .= OlzKartenListItem::render(['karte' => $karte]);
90        }
91        $out .= '</table>';
92
93        return $out;
94    }
95}