Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 92
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzAngebotParams
n/a
0 / 0
n/a
0 / 0
0
n/a
0 / 0
OlzAngebot
0.00% covered (danger)
0.00%
0 / 92
0.00% covered (danger)
0.00%
0 / 5
72
0.00% covered (danger)
0.00%
0 / 1
 hasAccess
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 searchSqlWhenHasAccess
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
2
 getPageTitle
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getPageDescription
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getHtmlWhenHasAccess
0.00% covered (danger)
0.00%
0 / 64
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace Olz\Components\OtherPages\OlzAngebot;
4
5use Olz\Components\Common\OlzEditableText\OlzEditableText;
6use Olz\Components\Common\OlzRootComponent;
7use Olz\Components\Page\OlzFooter\OlzFooter;
8use Olz\Components\Page\OlzHeader\OlzHeader;
9use Olz\Repository\Snippets\PredefinedSnippet;
10use Olz\Utils\HttpParams;
11
12/** @extends HttpParams<array{}> */
13class OlzAngebotParams extends HttpParams {
14}
15
16/** @extends OlzRootComponent<array<string, mixed>> */
17class OlzAngebot extends OlzRootComponent {
18    public function hasAccess(): bool {
19        return true;
20    }
21
22    public function searchSqlWhenHasAccess(array $terms): string|array|null {
23        $code_href = $this->envUtils()->getCodeHref();
24        $snippets_where = $this->searchUtils()->getSnippetsWhereSql([
25            PredefinedSnippet::AngebotTrainings,
26            PredefinedSnippet::AngebotStarterpack,
27            PredefinedSnippet::AngebotKleider,
28            PredefinedSnippet::AngebotKarten,
29            PredefinedSnippet::AngebotMaterial,
30            PredefinedSnippet::AngebotKurse,
31        ], $terms);
32        $static_page_query = $this->searchUtils()->getStaticResultQuery([
33            'link' => "{$code_href}karten",
34            'icon' => "{$code_href}assets/icns/link_map_16.svg",
35            'title' => $this->getPageTitle(),
36            'text' => $this->getPageDescription(),
37        ], $terms);
38        return [
39            'with' => $static_page_query['with'],
40            'query' => <<<ZZZZZZZZZZ
41                    SELECT
42                        '{$code_href}angebot' AS link,
43                        '{$code_href}assets/icns/question_mark_20.svg' AS icon,
44                        NULL AS date,
45                        'Angebot' AS title,
46                        IFNULL(text, '') AS text,
47                        1.0 AS time_relevance
48                    FROM snippets
49                    WHERE {$snippets_where}
50                UNION ALL
51                    {$static_page_query['query']}
52                ZZZZZZZZZZ,
53        ];
54    }
55
56    public function getPageTitle(): string {
57        return "Angebot";
58    }
59
60    public function getPageDescription(): string {
61        return "Unser Angebot an Material und Kleidern, die die OL Zimmerberg vermietet bzw. verkauft.";
62    }
63
64    public function getHtmlWhenHasAccess(mixed $args): string {
65        $this->httpUtils()->validateGetParams(OlzAngebotParams::class);
66        $code_href = $this->envUtils()->getCodeHref();
67        $audience = $args['audience'] ?? '';
68        $filter_text_by_audience = [
69            'sportler' => 'für Sportler',
70            'schulen' => 'für Schulen',
71            'organisatoren' => 'für Organisatoren',
72            'anfaenger' => 'für Anfänger',
73            'mitglieder' => 'für Mitglieder',
74        ];
75        $default_offerings = [
76            PredefinedSnippet::AngebotTrainings,
77            PredefinedSnippet::AngebotStarterpack,
78            PredefinedSnippet::AngebotKleider,
79            PredefinedSnippet::AngebotKarten,
80            PredefinedSnippet::AngebotMaterial,
81            PredefinedSnippet::AngebotKurse,
82        ];
83        $offerings_by_audience = [
84            'sportler' => [
85                PredefinedSnippet::AngebotTrainings,
86                PredefinedSnippet::AngebotStarterpack,
87                PredefinedSnippet::AngebotKleider,
88            ],
89            'schulen' => [
90                PredefinedSnippet::AngebotKurse,
91                PredefinedSnippet::AngebotMaterial,
92                PredefinedSnippet::AngebotKarten,
93            ],
94            'organisatoren' => [
95                PredefinedSnippet::AngebotKarten,
96                PredefinedSnippet::AngebotMaterial,
97            ],
98            'anfaenger' => [
99                PredefinedSnippet::AngebotTrainings,
100                PredefinedSnippet::AngebotStarterpack,
101                PredefinedSnippet::AngebotKleider,
102            ],
103            'mitglieder' => [
104                PredefinedSnippet::AngebotTrainings,
105                PredefinedSnippet::AngebotKleider,
106            ],
107            'trainings' => [PredefinedSnippet::AngebotTrainings],
108            'starterpack' => [PredefinedSnippet::AngebotStarterpack],
109            'kleider' => [PredefinedSnippet::AngebotKleider],
110            'karten' => [PredefinedSnippet::AngebotKarten],
111            'material' => [PredefinedSnippet::AngebotMaterial],
112            'kurse' => [PredefinedSnippet::AngebotKurse],
113        ];
114        $filter_text = $filter_text_by_audience[$audience] ?? null;
115        $pretty_filter = $filter_text ? " <span class='filter'>{$filter_text}</span>" : '';
116        $offerings = $offerings_by_audience[$audience] ?? $default_offerings;
117
118        $out = OlzHeader::render([
119            'back_link' => $filter_text === null ? null : "{$code_href}",
120            'title' => $this->getPageTitle(),
121            'description' => $this->getPageDescription(),
122        ]);
123
124        $out .= "<div class='content-full olz-angebot'>";
125        $out .= "<h1>Angebot</h1>{$pretty_filter}";
126
127        foreach ($offerings as $offering) {
128            $out .= OlzEditableText::render(['snippet' => $offering]);
129        }
130
131        $out .= "</div>";
132
133        $out .= OlzFooter::render();
134
135        return $out;
136    }
137}