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