Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 80 |
|
0.00% |
0 / 1 |
CRAP | |
0.00% |
0 / 1 |
OlzKarteDetail | |
0.00% |
0 / 80 |
|
0.00% |
0 / 1 |
132 | |
0.00% |
0 / 1 |
getHtml | |
0.00% |
0 / 80 |
|
0.00% |
0 / 1 |
132 |
1 | <?php |
2 | |
3 | namespace Olz\Karten\Components\OlzKarteDetail; |
4 | |
5 | use Olz\Components\Common\OlzComponent; |
6 | use Olz\Components\Common\OlzEditableText\OlzEditableText; |
7 | use Olz\Components\Common\OlzLocationMap\OlzLocationMap; |
8 | use Olz\Components\Page\OlzFooter\OlzFooter; |
9 | use Olz\Components\Page\OlzHeader\OlzHeader; |
10 | use Olz\Entity\Karten\Karte; |
11 | |
12 | /** @extends OlzComponent<array<string, mixed>> */ |
13 | class 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 | } |