Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 66
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzMenu
0.00% covered (danger)
0.00%
0 / 66
0.00% covered (danger)
0.00%
0 / 2
240
0.00% covered (danger)
0.00%
0 / 1
 getHtml
0.00% covered (danger)
0.00%
0 / 48
0.00% covered (danger)
0.00%
0 / 1
90
 getMenu
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
42
1<?php
2
3// =============================================================================
4// Das Navigationsmenu der Website.
5// =============================================================================
6
7namespace Olz\Components\Page\OlzMenu;
8
9use Olz\Components\Common\OlzComponent;
10
11/** @extends OlzComponent<array<string, mixed>> */
12class 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='&lt;' 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}