Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 65 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
OlzMenu | |
0.00% |
0 / 65 |
|
0.00% |
0 / 2 |
240 | |
0.00% |
0 / 1 |
getHtml | |
0.00% |
0 / 47 |
|
0.00% |
0 / 1 |
90 | |||
getMenu | |
0.00% |
0 / 18 |
|
0.00% |
0 / 1 |
42 |
1 | <?php |
2 | |
3 | // ============================================================================= |
4 | // Das Navigationsmenu der Website. |
5 | // ============================================================================= |
6 | |
7 | namespace Olz\Components\Page\OlzMenu; |
8 | |
9 | use Olz\Components\Common\OlzComponent; |
10 | |
11 | /** @extends OlzComponent<array<string, mixed>> */ |
12 | class OlzMenu extends OlzComponent { |
13 | public function getHtml(mixed $args): string { |
14 | $out = ''; |
15 | |
16 | $code_href = $this->envUtils()->getCodeHref(); |
17 | $data_path = $this->envUtils()->getDataPath(); |
18 | |
19 | $main_menu = [ |
20 | ["Startseite", ""], // Menüpunkt ('Name','Link') |
21 | ["", "", ''], |
22 | ["News", "news"], |
23 | ["Termine", "termine"], |
24 | ["", "", ''], |
25 | ["Karten", "karten"], |
26 | ["Material & Kleider", "material"], |
27 | ["", "", ''], |
28 | ["Service", "service"], |
29 | ["Verein", "verein"], |
30 | ]; |
31 | |
32 | // BACK-BUTTON |
33 | $back_menu_out = ''; |
34 | $back_link = $args['back_link'] ?? null; |
35 | if ($back_link !== null) { |
36 | $back_menu_out = <<<ZZZZZZZZZZ |
37 | <a href='{$back_link}' class='menu-link' id='back-link'> |
38 | <div class='menutag'> |
39 | <img src='{$code_href}assets/icns/back_16.svg' alt='<' class='back-icon'> |
40 | Zurück |
41 | </div> |
42 | </a> |
43 | ZZZZZZZZZZ; |
44 | } |
45 | |
46 | // LIVE-RESULTATE |
47 | $live_menu_out = ''; |
48 | $live_json_path = "{$data_path}results/_live.json"; |
49 | if (is_file($live_json_path)) { |
50 | $content = file_get_contents($live_json_path); |
51 | if ($content) { |
52 | $live = json_decode($content, true); |
53 | $last_updated_at = strtotime($live['last_updated_at']) ?: 0; |
54 | $now = strtotime($this->dateUtils()->getIsoNow()) ?: 0; |
55 | if ($live && $last_updated_at > $now - 3600) { |
56 | $live_file = $live['file']; |
57 | $style = preg_match('/test/', $live_file) ? " style='display:none;'" : ""; |
58 | $live_menu_out = <<<ZZZZZZZZZZ |
59 | <a href='{$code_href}apps/resultate/?file={$live_file}'{$style} class='menu-link' id='live-results-link'> |
60 | <div class='menutag'> |
61 | Live-Resultate |
62 | </div> |
63 | </a> |
64 | ZZZZZZZZZZ; |
65 | } |
66 | } |
67 | } |
68 | |
69 | $main_menu_out = self::getMenu($main_menu, $code_href); |
70 | |
71 | $out .= <<<ZZZZZZZZZZ |
72 | <div id='menu' class='menu'> |
73 | <div class='back-menu'>{$back_menu_out}</div> |
74 | <div class='live-menu'>{$live_menu_out}</div> |
75 | <div class='main-menu'>{$main_menu_out}</div> |
76 | <div class='feedback-mail'> |
77 | <script type='text/javascript'> |
78 | olz.MailTo("website", "olzimmerberg.ch", "Feedback geben", "Homepage%20OL%20Zimmerberg"); |
79 | </script> |
80 | </div> |
81 | <div class='platform-links'> |
82 | <a |
83 | href='https://github.com/olzimmerberg/olz-website' |
84 | target='_blank' |
85 | rel='noreferrer noopener' |
86 | title='OL Zimmerberg auf GitHub' |
87 | class='platform-link' |
88 | > |
89 | <img src='{$code_href}assets/icns/github_16.svg' alt='g' class='noborder' /> |
90 | </a> |
91 | <a |
92 | href='https://www.youtube.com/channel/UCMhMdPRJOqdXHlmB9kEpmXQ' |
93 | target='_blank' |
94 | rel='noreferrer noopener' |
95 | title='OL Zimmerberg auf YouTube' |
96 | class='platform-link' |
97 | > |
98 | <img src='{$code_href}assets/icns/youtube_16.svg' alt='Y' class='noborder' /> |
99 | </a> |
100 | <a |
101 | href='https://www.strava.com/clubs/olzimmerberg' |
102 | target='_blank' |
103 | rel='noreferrer noopener' |
104 | title='OL Zimmerberg auf Strava' |
105 | class='platform-link' |
106 | > |
107 | <img src='{$code_href}assets/icns/strava_16.svg' alt='s' class='noborder' /> |
108 | </a> |
109 | </div> |
110 | </div> |
111 | ZZZZZZZZZZ; |
112 | |
113 | return $out; |
114 | } |
115 | |
116 | /** @param array<array<string>> $menu */ |
117 | protected static function getMenu(array $menu, string $code_href): string { |
118 | $out = ''; |
119 | for ($i = 0; $i < count($menu); $i++) { |
120 | $menupunkt = $menu[$i]; |
121 | $name = $menupunkt[0]; |
122 | $href = $menupunkt[1]; |
123 | $request_uri = $_SERVER['REQUEST_URI'] ?? ''; |
124 | $is_active = ( |
125 | preg_match("/^\\/{$menupunkt[1]}(\\/|\\?|#|$)/", $request_uri) |
126 | || ($menupunkt[1] === '' && $request_uri === '') |
127 | ); |
128 | $active_class = $is_active ? ' active' : ''; |
129 | if ($name != '') { |
130 | $out .= <<<ZZZZZZZZZZ |
131 | <a href='{$code_href}{$href}' id='menu_a_page_{$href}' class='menu-link'> |
132 | <div class='menutag{$active_class}'> |
133 | {$name} |
134 | </div> |
135 | </a> |
136 | ZZZZZZZZZZ; |
137 | } else { |
138 | $out .= <<<'ZZZZZZZZZZ' |
139 | <div class='separator'></div> |
140 | ZZZZZZZZZZ; |
141 | } |
142 | } |
143 | return $out; |
144 | } |
145 | } |