Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 68
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzHeaderWithoutRouting
0.00% covered (danger)
0.00%
0 / 68
0.00% covered (danger)
0.00%
0 / 1
110
0.00% covered (danger)
0.00%
0 / 1
 getHtml
0.00% covered (danger)
0.00%
0 / 68
0.00% covered (danger)
0.00%
0 / 1
110
1<?php
2
3namespace Olz\Components\Page\OlzHeaderWithoutRouting;
4
5use Olz\Components\Common\OlzComponent;
6use Olz\Components\Page\OlzHeaderBar\OlzHeaderBar;
7use Olz\Components\Schema\OlzOrganizationData\OlzOrganizationData;
8use Olz\Utils\Session;
9
10/** @extends OlzComponent<array<string, mixed>> */
11class OlzHeaderWithoutRouting extends OlzComponent {
12    public function getHtml(mixed $args): string {
13        global $_SESSION;
14
15        Session::session_start_if_cookie_set();
16
17        $code_href = $this->envUtils()->getCodeHref();
18        $data_href = $this->envUtils()->getDataHref();
19        $data_path = $this->envUtils()->getDataPath();
20        $css_path = "{$data_path}jsbuild/olz/main.min.css";
21        $js_path = "{$data_path}jsbuild/olz/main.min.js";
22        $css_modified = is_file($css_path) ? filemtime($css_path) : 0;
23        $js_modified = is_file($js_path) ? filemtime($js_path) : 0;
24        $css_href = "/jsbuild/olz/main.min.css?modified={$css_modified}";
25        $js_href = "/jsbuild/olz/main.min.js?modified={$js_modified}";
26        $code_href_json = json_encode($code_href);
27        $data_href_json = json_encode($data_href);
28        $user_json = json_encode([
29            'permissions' => $_SESSION['auth'] ?? null,
30            'root' => $_SESSION['root'] ?? null,
31            'username' => $_SESSION['user'] ?? null,
32            'id' => intval($_SESSION['user_id'] ?? null),
33        ]);
34        $iso_now_json = json_encode($this->dateUtils()->getIsoNow());
35        $bot_regexes_json = json_encode($this->httpUtils()->getBotRegexes());
36        $user_agent = $this->server()['HTTP_USER_AGENT'] ?? '';
37        $user_agent_classes = '';
38        if ($this->httpUtils()->isBot($user_agent)) {
39            $user_agent_classes .= ' is-bot';
40        }
41        if ($this->httpUtils()->isEInk($user_agent)) {
42            $user_agent_classes .= ' is-eink';
43        }
44
45        $html_title = "OL Zimmerberg";
46        if (isset($args['title'])) {
47            $title_arg = htmlspecialchars($args['title']);
48            $html_title = "{$title_arg} - OL Zimmerberg";
49        }
50        $html_description = "";
51        if (isset($args['description'])) {
52            $description_arg = htmlspecialchars(str_replace("\n", " ", $args['description']));
53            $html_description = "<meta name='Description' content='{$description_arg}'>";
54        }
55        $html_canonical = "";
56        if (isset($args['canonical_url'])) {
57            $host = str_replace(['www.', '/'], ['', ''], $_SERVER['HTTP_HOST']);
58            $canonical_url = "https://{$host}{$args['canonical_url']}";
59            $esc_canonical_url = htmlspecialchars($canonical_url);
60            $html_canonical = "<link rel='canonical' href='{$esc_canonical_url}'/>";
61        }
62        $no_robots = isset($_GET['archiv']) || ($args['norobots'] ?? false);
63        $robots_html = $no_robots ? "<meta name='robots' content='noindex, nofollow'>" : "";
64        $olz_organization_data = OlzOrganizationData::render([], $this);
65        $additional_headers = implode("\n", $args['additional_headers'] ?? []);
66        $header_bar = OlzHeaderBar::render([
67            'back_link' => $args['back_link'] ?? null,
68            'skip_auth_menu' => $args['skip_auth_menu'] ?? false,
69        ], $this);
70
71        return <<<ZZZZZZZZZZ
72            <!DOCTYPE html>
73            <html lang='de'>
74            <head>
75            <meta http-equiv='cache-control' content='public'>
76            <meta http-equiv='content-type' content='text/html;charset=utf-8'>
77            <meta name='Keywords' content='OL, Orientierungslauf, Sport, Laufsport, Gruppe, Klub, Verein, Zimmerberg, linkes Zürichseeufer, Sihltal, Kilchberg, Rüschlikon, Thalwil, Gattikon, Oberrieden, Horgen, Au ZH, Wädenswil, Richterswil, Schönenberg, Hirzel, Langnau am Albis, Adliswil, Stadt Zürich, Leimbach, Wollishofen, Enge, Friesenberg, Üetliberg, Entlisberg, Albis, Buchenegg, Landforst, Kopfholz, Chopfholz, Reidholz, Schweiz, OLZ, OLG'>
78            {$html_description}
79            <meta name='Content-Language' content='de'>
80            {$robots_html}
81            <meta name='viewport' content='width=device-width, initial-scale=1.0'>
82            <title>{$html_title}</title>
83            <link rel='icon' href='{$code_href}favicon.ico' type='image/x-icon' />
84            {$html_canonical}
85            {$olz_organization_data}
86            {$additional_headers}
87            <link rel='stylesheet' href='{$css_href}' />
88            <script type='text/javascript'>
89                window.olzCodeHref = {$code_href_json};
90                window.olzDataHref = {$data_href_json};
91                window.olzUser = {$user_json};
92                window.olzIsoNow = {$iso_now_json};
93                window.olzBotRegexes = {$bot_regexes_json};
94            </script>
95            <script type='text/javascript' src='{$js_href}' onload='olz.loaded()'></script>
96            </head>
97            <body class='olz-override-root{$user_agent_classes}'>
98                <a name='top'></a>
99                {$header_bar}
100                <div class='site-container'>
101                    <div class='site-background'>
102            ZZZZZZZZZZ;
103    }
104}