Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 80
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzKarteDetail
0.00% covered (danger)
0.00%
0 / 80
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 / 80
0.00% covered (danger)
0.00%
0 / 1
132
1<?php
2
3namespace Olz\Karten\Components\OlzKarteDetail;
4
5use Olz\Components\Common\OlzComponent;
6use Olz\Components\Common\OlzEditableText\OlzEditableText;
7use Olz\Components\Common\OlzLocationMap\OlzLocationMap;
8use Olz\Components\Page\OlzFooter\OlzFooter;
9use Olz\Components\Page\OlzHeader\OlzHeader;
10use Olz\Entity\Karten\Karte;
11
12/** @extends OlzComponent<array<string, mixed>> */
13class OlzKarteDetail extends OlzComponent {
14    public function getHtml(mixed $args): string {
15        $code_href = $this->envUtils()->getCodeHref();
16        $data_href = $this->envUtils()->getDataHref();
17        $karten_repo = $this->entityManager()->getRepository(Karte::class);
18        $user = $this->authUtils()->getCurrentUser();
19        $id = $args['id'] ?? null;
20
21        $karte = $karten_repo->findOneBy([
22            'id' => $id,
23            'on_off' => 1,
24        ]);
25
26        if (!$karte) {
27            $this->httpUtils()->dieWithHttpError(404);
28            throw new \Exception('should already have failed');
29        }
30
31        $name = $karte->getName();
32        $kind = $karte->getKind();
33        $scale = $karte->getScale();
34        $year = $karte->getYear();
35        $place = $karte->getPlace();
36        $kartennr = $karte->getKartenNr();
37        $latitude = $karte->getLatitude();
38        $longitude = $karte->getLongitude();
39        $preview_image_id = $karte->getPreviewImageId();
40
41        $pretty_kind = [
42            'ol' => "🌳 Wald-OL-Karte",
43            'stadt' => "🏘️ Stadt-OL-Karte",
44            'scool' => "🏫 sCOOL-Schulhaus-Karte",
45        ][$kind] ?? "Unbekannter Kartentyp";
46
47        $title = $karte->getName();
48        $back_link = "{$code_href}karten";
49        $maybe_place = $place ? "Ort: {$place}" : '';
50        $out = OlzHeader::render([
51            'back_link' => $back_link,
52            'title' => "{$title} - Karten",
53            'description' => "OL-Karte {$name} ({$pretty_kind}), Masstab: {$scale}, Stand {$year}{$maybe_place}Herausgeber: OL Zimmerberg.",
54        ]);
55
56        $out .= <<<'ZZZZZZZZZZ'
57            <div class='content-right'>
58            </div>
59            <div class='content-middle'>
60            ZZZZZZZZZZ;
61        $out .= "<div class='olz-karte-detail'>";
62
63        $out .= OlzLocationMap::render([
64            'name' => $name,
65            'latitude' => $latitude,
66            'longitude' => $longitude,
67            'zoom' => 12,
68        ]);
69
70        // Editing Tools
71        $is_owner = $user && intval($karte->getOwnerUser()?->getId() ?? 0) === intval($user->getId());
72        $has_karten_permissions = $this->authUtils()->hasPermission('karten');
73        $can_edit = $is_owner || $has_karten_permissions;
74        if ($can_edit) {
75            $json_id = json_encode($id);
76            $out .= <<<ZZZZZZZZZZ
77                <div>
78                    <button
79                        id='edit-karte-button'
80                        class='btn btn-primary'
81                        onclick='return olz.editKarte({$json_id})'
82                    >
83                        <img src='{$code_href}assets/icns/edit_white_16.svg' class='noborder' />
84                        Bearbeiten
85                    </button>
86                </div>
87                ZZZZZZZZZZ;
88        }
89
90        $maybe_place = $place ? "<div>Ort: {$place}</div>" : '';
91
92        $maybe_solv_link = '';
93        if ($kartennr) {
94            // SOLV-Kartenverzeichnis-Link zeigen
95            $maybe_solv_link .= "<div><a href='https://www.swiss-orienteering.ch/karten/kartedetail.php?kid={$kartennr}' target='_blank' class='linkol'>SOLV Karten-Nr. {$kartennr}</a></div>\n";
96        }
97
98        $maybe_omap_link = '';
99        if ($latitude !== null && $longitude !== null) {
100            // OMap-Kartenverzeichnis-Link zeigen
101            $maybe_omap_link .= "<div><a href='https://omap.ch/map.php#7/{$latitude}/{$longitude}' target='_blank' class='linkol'>Karte auf omap.ch</a></div>\n";
102        }
103
104        $out .= <<<ZZZZZZZZZZ
105            <h1>OL-Karte {$name}</h1>
106            <div><b>{$pretty_kind}</b></div>
107            <div>Masstab: {$scale}</div>
108            <div>Stand: {$year}</div>
109            {$maybe_place}
110            {$maybe_solv_link}
111            {$maybe_omap_link}
112            <div>Herausgeber: OL Zimmerberg</div>
113            ZZZZZZZZZZ;
114
115        if ($preview_image_id) {
116            $img_href = "{$data_href}img/karten/{$id}/img/{$preview_image_id}";
117
118            $out .= <<<ZZZZZZZZZZ
119                <h3>Vorschau</h3>
120                <div class='olz-karte-preview'>
121                    <img
122                        src='{$img_href}'
123                        alt='OL-Karte {$name}'
124                        class='noborder'
125                    />
126                </div>
127                ZZZZZZZZZZ;
128        }
129
130        $out .= "<h2>Kartenverkauf</h2>";
131        $out .= OlzEditableText::render(['snippet_id' => 12]);
132
133        $out .= "</div>"; // olz-karte-detail
134        $out .= "</div>"; // content-middle
135
136        $out .= OlzFooter::render();
137
138        return $out;
139    }
140}