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