Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzResultsParams
n/a
0 / 0
n/a
0 / 0
0
n/a
0 / 0
OlzResults
0.00% covered (danger)
0.00%
0 / 65
0.00% covered (danger)
0.00%
0 / 5
210
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 / 7
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 / 55
0.00% covered (danger)
0.00%
0 / 1
110
1<?php
2
3namespace Olz\Apps\Results\Components\OlzResults;
4
5use Olz\Apps\Results\Metadata;
6use Olz\Components\Apps\OlzNoAppAccess\OlzNoAppAccess;
7use Olz\Components\Common\OlzRootComponent;
8use Olz\Components\Page\OlzFooter\OlzFooter;
9use Olz\Components\Page\OlzHeader\OlzHeader;
10use Olz\Utils\HttpParams;
11
12/** @extends HttpParams<array{file?: ?string}> */
13class OlzResultsParams extends HttpParams {
14}
15
16/** @extends OlzRootComponent<array<string, mixed>> */
17class OlzResults extends OlzRootComponent {
18    public function hasAccess(): bool {
19        return (new Metadata())->isAccessibleToUser($this->authUtils()->getCurrentUser());
20    }
21
22    public function searchSqlWhenHasAccess(array $terms): string|array|null {
23        $metadata = new Metadata();
24        return $this->searchUtils()->getStaticResultQuery([
25            'link' => $metadata->getHref(),
26            'icon' => $metadata->getIconHref(),
27            'title' => "Apps: {$this->getPageTitle()}",
28            'text' => $this->getPageDescription(),
29        ], $terms);
30    }
31
32    public function getPageTitle(): string {
33        return "Resultate";
34    }
35
36    public function getPageDescription(): string {
37        return "Resultate und Ranglisten von OL-Anlässen der OL Zimmerberg";
38    }
39
40    public function getHtmlWhenHasAccess(mixed $args): string {
41        $this->httpUtils()->validateGetParams(OlzResultsParams::class);
42
43        $code_href = $this->envUtils()->getCodeHref();
44        $data_path = $this->envUtils()->getDataPath();
45        $filename = $this->getParams()['file'] ?? null;
46        $metadata = new Metadata();
47
48        $out = OlzHeader::render([
49            'back_link' => "{$code_href}service/",
50            'title' => $this->getPageTitle(),
51            'description' => $this->getPageDescription(),
52            'norobots' => true,
53        ]);
54
55        $out .= "<div class='content-full'>";
56        if ($filename !== null) {
57            if (is_file("{$data_path}results/{$filename}")) {
58                $edit_admin = '';
59                if ($this->authUtils()->hasPermission('any')) {
60                    $enc_data = json_encode(['file' => $filename]);
61                    $edit_admin = <<<ZZZZZZZZZZ
62                        <button
63                            id='live-results-button'
64                            class='btn btn-secondary'
65                            onclick='return olzResults.initOlzLiveResultsModal({$enc_data})'
66                        >
67                            <img src='{$code_href}assets/icns/edit_white_16.svg' class='noborder' />
68                            Live Resultate überschreiben
69                        </button>
70                        <button
71                            id='edit-result-button'
72                            class='btn btn-secondary'
73                            onclick='return olzResults.initOlzEditResultModal({$enc_data})'
74                        >
75                            <img src='{$code_href}assets/icns/edit_white_16.svg' class='noborder' />
76                            Resultate bearbeiten
77                        </button>
78                        ZZZZZZZZZZ;
79                }
80                $out .= <<<ZZZZZZZZZZ
81                    {$edit_admin}
82                    <div id='title-box'>
83                        <div id='backbutton' onclick='olzResults.popHash()'>&lt;</div>
84                        <h1 id='title'></h1>
85                    </div>
86                    <div id='results-content'>
87                        <div id='classes-box'></div>
88                        <div id='content-box'></div>
89                        <div class='inactive' id='grafik-box'><svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' style='width:100%; height:100%;' id='grafik-svg'></svg></div>
90                    </div>
91                    ZZZZZZZZZZ;
92            } elseif ($this->authUtils()->hasPermission('any')) {
93                $enc_data = json_encode(['file' => $filename]);
94                $out .= <<<ZZZZZZZZZZ
95                    <div>
96                        <button
97                            id='live-results-button'
98                            class='btn btn-secondary'
99                            onclick='return olzResults.initOlzLiveResultsModal({$enc_data})'
100                        >
101                            <img src='{$code_href}assets/icns/new_white_16.svg' class='noborder' />
102                            Live Resultate hochladen
103                        </button>
104                        <button
105                            id='create-result-button'
106                            class='btn btn-secondary'
107                            onclick='return olzResults.initOlzEditResultModal({$enc_data})'
108                        >
109                            <img src='{$code_href}assets/icns/new_white_16.svg' class='noborder' />
110                            Resultate hochladen
111                        </button>
112                    </div>
113                    ZZZZZZZZZZ;
114            } else {
115                $out .= OlzNoAppAccess::render([
116                    'app' => $metadata,
117                ]);
118            }
119        } else {
120            $out .= "<ul>";
121            $contents = scandir("{$data_path}results") ?: [];
122            foreach ($contents as $entry) {
123                if (preg_match('/\.xml$/', $entry) && !preg_match('/\.bak\./', $entry)) {
124                    $out .= "<li><a href='?file={$entry}'>{$entry}</a></li>\n";
125                }
126            }
127            $out .= "</ul>";
128            if ($this->authUtils()->hasPermission('any')) {
129                $out .= <<<ZZZZZZZZZZ
130                    <div>
131                        <button
132                            id='live-results-button'
133                            class='btn btn-secondary'
134                            onclick='return olzResults.initOlzLiveResultsModal()'
135                        >
136                            <img src='{$code_href}assets/icns/new_white_16.svg' class='noborder' />
137                            Live Resultate hochladen
138                        </button>
139                        <button
140                            id='create-result-button'
141                            class='btn btn-secondary'
142                            onclick='return olzResults.initOlzEditResultModal()'
143                        >
144                            <img src='{$code_href}assets/icns/new_white_16.svg' class='noborder' />
145                            Resultate hochladen
146                        </button>
147                    </div>
148                    ZZZZZZZZZZ;
149            }
150        }
151        $out .= "</div>";
152
153        $out .= $metadata->getJsCssImports();
154
155        $out .= OlzFooter::render();
156
157        return $out;
158    }
159}