Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 66 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
OlzMenu | |
0.00% |
0 / 66 |
|
0.00% |
0 / 2 |
240 | |
0.00% |
0 / 1 |
getHtml | |
0.00% |
0 / 48 |
|
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 | <form name='Suche' method='get' action='{$code_href}suche'> |
77 | <input |
78 | type='text' |
79 | name='anfrage' |
80 | id='site-search' |
81 | title='Suche auf olzimmerberg.ch' |
82 | placeholder='Suchen...' |
83 | value='' |
84 | /> |
85 | </form> |
86 | <div class='feedback-mail'> |
87 | <script type='text/javascript'> |
88 | olz.MailTo("website", "olzimmerberg.ch", "Feedback geben", "Homepage%20OL%20Zimmerberg"); |
89 | </script> |
90 | </div> |
91 | <div class='platform-links'> |
92 | <a |
93 | href='https://github.com/olzimmerberg/olz-website' |
94 | target='_blank' |
95 | rel='noreferrer noopener' |
96 | title='OL Zimmerberg auf GitHub' |
97 | class='platform-link' |
98 | > |
99 | <img src='{$code_href}assets/icns/github_16.svg' alt='g' class='noborder' /> |
100 | </a> |
101 | <a |
102 | href='https://www.youtube.com/channel/UCMhMdPRJOqdXHlmB9kEpmXQ' |
103 | target='_blank' |
104 | rel='noreferrer noopener' |
105 | title='OL Zimmerberg auf YouTube' |
106 | class='platform-link' |
107 | > |
108 | <img src='{$code_href}assets/icns/youtube_16.svg' alt='Y' class='noborder' /> |
109 | </a> |
110 | <a |
111 | href='https://www.strava.com/clubs/olzimmerberg' |
112 | target='_blank' |
113 | rel='noreferrer noopener' |
114 | title='OL Zimmerberg auf Strava' |
115 | class='platform-link' |
116 | > |
117 | <img src='{$code_href}assets/icns/strava_16.svg' alt='s' class='noborder' /> |
118 | </a> |
119 | </div> |
120 | </div> |
121 | ZZZZZZZZZZ; |
122 | |
123 | return $out; |
124 | } |
125 | |
126 | /** @param array<array<string>> $menu */ |
127 | protected static function getMenu(array $menu, string $code_href): string { |
128 | $out = ''; |
129 | for ($i = 0; $i < count($menu); $i++) { |
130 | $menupunkt = $menu[$i]; |
131 | $name = $menupunkt[0]; |
132 | $href = $menupunkt[1]; |
133 | $request_uri = $_SERVER['REQUEST_URI'] ?? ''; |
134 | $is_active = ( |
135 | preg_match("/^\\/{$menupunkt[1]}(\\/|\\?|#|$)/", $request_uri) |
136 | || ($menupunkt[1] === '' && $request_uri === '') |
137 | ); |
138 | $active_class = $is_active ? ' active' : ''; |
139 | if ($name != '') { |
140 | $out .= <<<ZZZZZZZZZZ |
141 | <a href='{$code_href}{$href}' id='menu_a_page_{$href}' class='menu-link'> |
142 | <div class='menutag{$active_class}'> |
143 | {$name} |
144 | </div> |
145 | </a> |
146 | ZZZZZZZZZZ; |
147 | } else { |
148 | $out .= <<<'ZZZZZZZZZZ' |
149 | <div class='separator'></div> |
150 | ZZZZZZZZZZ; |
151 | } |
152 | } |
153 | return $out; |
154 | } |
155 | } |