Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 90
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzJomCounterTile
0.00% covered (danger)
0.00%
0 / 90
0.00% covered (danger)
0.00%
0 / 2
72
0.00% covered (danger)
0.00%
0 / 1
 getRelevance
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getHtml
0.00% covered (danger)
0.00%
0 / 89
0.00% covered (danger)
0.00%
0 / 1
56
1<?php
2
3namespace Olz\Startseite\Components\OlzJomCounterTile;
4
5use Olz\Entity\Users\User;
6use Olz\Startseite\Components\AbstractOlzTile\AbstractOlzTile;
7
8class OlzJomCounterTile extends AbstractOlzTile {
9    public function getRelevance(?User $user): float {
10        return 0.5;
11    }
12
13    public function getHtml(mixed $args): string {
14        // OLZ JOM-Counter 2020
15        // --------------------
16        // Chris Seitz - 15
17        // Daniel Rohr - 12
18        // Dominik Badertscher - 16
19        // Giulia Borner - 45
20        // Jan Hug - 17
21        // Jonas Junker - 22
22        // Julia Jakob - 489
23        // Liliane Suter - 239
24        // Lilly Gross - 42
25        // Marc Bitterli - 9
26        // Marc Breitenmoser - 8
27        // Anik Bachmann - 68
28        // Michael Laager - 64
29        // Miriam Isenring - 69
30        // Moritz Oetiker - 275
31        // Philipp Tschannen - 249
32        // Priska Badertscher - 51
33        // Roger Fluri - 23
34        // Simon Hatt - 20
35        // Tiziana Rigamonti - 650
36
37        $db = $this->dbUtils()->getDb();
38
39        $out = "<h3>JOM-Counter</h3>";
40
41        $jom_solv_uids = [
42            2019 => [9610, 9543, 9781, 9636, 9542, 9541, 9380, 9390, 9950, 9815, 9821],
43            2020 => [10086, 10228, 9901, 10049, 10197, 10201, 10239, 10253, 9915, 10247, 10317],
44            2022 => [10805, 11383, 10988, 11281, 11279, 11280, 11405, 11380, 11426, 11012, 11557],
45            2023 => [11763, 11805, 11455, 11456, 11799, 11797, 11803, 11462, 11804, 11824, 11801],
46        ];
47
48        $previous_year = 2022;
49        $current_year = 2023;
50
51        $sql_kids = "
52        SELECT
53            sp1.name AS name,
54            COUNT(*) AS cnt,
55            GROUP_CONCAT(se.name SEPARATOR '\n') AS events
56        FROM solv_results sr
57            LEFT JOIN solv_people sp ON (sr.person=sp.id)
58            LEFT JOIN solv_people sp1 ON (sp.same_as=sp1.id OR (sp.same_as IS NULL AND sp.id=sp1.id))
59            LEFT JOIN solv_events se ON (sr.event=se.solv_uid)
60        WHERE
61            sr.event IN ('%%PLACEHOLDER_FOR_SOLV_UIDS%%')
62            AND sr.class IN ('H10', 'H12', 'H14', 'H16', 'H18', 'D10', 'D12', 'D14', 'D16', 'D18')
63        GROUP BY sp1.id
64        ORDER BY cnt DESC"; // cnt DESC, se.date ASC
65        $sql_j_und_s = "
66        SELECT
67            sp1.name AS name,
68            COUNT(*) AS cnt,
69            GROUP_CONCAT(se.name SEPARATOR '\n') AS events
70        FROM solv_results sr
71            LEFT JOIN solv_people sp ON (sr.person=sp.id)
72            LEFT JOIN solv_people sp1 ON (sp.same_as=sp1.id OR (sp.same_as IS NULL AND sp.id=sp1.id))
73            LEFT JOIN solv_events se ON (sr.event=se.solv_uid)
74        WHERE
75            sr.event IN ('%%PLACEHOLDER_FOR_SOLV_UIDS%%')
76            AND sp1.id IN ('15', '12', '16', '45', '17', '22', '489', '239', '42', '9', '8', '68', '64', '69', '275', '249', '51', '23', '20', '650')
77        GROUP BY sp1.id
78        ORDER BY cnt DESC"; // cnt DESC, se.date ASC
79
80        $htmlout_before = "<div style='position:absolute; top:-200px; width:300px; height:200px; z-index:1000; display:none; border:1px solid #000; background:#fefefe; overflow-y:scroll;' id='%%PLACEHOLDER_FOR_ID%%'><div style='padding:5px;'><table>";
81        $htmlout_before .= "<tr><th>Name</th><th style='text-align:right;'>Starts</th></tr>";
82        $htmlout_after = "</table></div></div>";
83
84        $sql_kids_previous = str_replace(
85            '%%PLACEHOLDER_FOR_SOLV_UIDS%%',
86            implode("', '", $jom_solv_uids[$previous_year]),
87            $sql_kids,
88        );
89        $result_kids_previous = $db->query($sql_kids_previous);
90        $starts_kids_previous = 0;
91        $htmlout_kids_previous = str_replace('%%PLACEHOLDER_FOR_ID%%', 'ranking-kids-previous', $htmlout_before);
92        // @phpstan-ignore-next-line
93        while ($row = $result_kids_previous->fetch_assoc()) {
94            $starts_kids_previous += intval($row['cnt']);
95            // @phpstan-ignore-next-line
96            $htmlout_kids_previous .= "<tr><td style='white-space:nowrap; overflow-x:hidden;'>".$row['name']."</td><td style='text-align:right; cursor:pointer;' title='".str_replace("'", "&#39;", $row['events'])."' onclick='alert(this.getAttribute(&quot;title&quot;))'>".$row['cnt']."</td></tr>";
97        }
98        $htmlout_kids_previous .= $htmlout_after;
99
100        $sql_j_und_s_previous = str_replace(
101            '%%PLACEHOLDER_FOR_SOLV_UIDS%%',
102            implode("', '", $jom_solv_uids[$previous_year]),
103            $sql_j_und_s,
104        );
105        $result_j_und_s_previous = $db->query($sql_j_und_s_previous);
106        $starts_j_und_s_previous = 0;
107        $htmlout_j_und_s_previous = str_replace('%%PLACEHOLDER_FOR_ID%%', 'ranking-junds-previous', $htmlout_before);
108        // @phpstan-ignore-next-line
109        while ($row = $result_j_und_s_previous->fetch_assoc()) {
110            $starts_j_und_s_previous += intval($row['cnt']);
111            // @phpstan-ignore-next-line
112            $htmlout_j_und_s_previous .= "<tr><td style='white-space:nowrap; overflow-x:hidden;'>".$row['name']."</td><td style='text-align:right; cursor:pointer;' title='".str_replace("'", "&#39;", $row['events'])."' onclick='alert(this.getAttribute(&quot;title&quot;))'>".$row['cnt']."</td></tr>";
113        }
114        $htmlout_j_und_s_previous .= $htmlout_after;
115
116        $sql_kids_current = str_replace(
117            '%%PLACEHOLDER_FOR_SOLV_UIDS%%',
118            implode("', '", $jom_solv_uids[$current_year]),
119            $sql_kids,
120        );
121        $result_kids_current = $db->query($sql_kids_current);
122        $starts_kids_current = 0;
123        $htmlout_kids_current = str_replace('%%PLACEHOLDER_FOR_ID%%', 'ranking-kids-current', $htmlout_before);
124        // @phpstan-ignore-next-line
125        while ($row = $result_kids_current->fetch_assoc()) {
126            $starts_kids_current += intval($row['cnt']);
127            // @phpstan-ignore-next-line
128            $htmlout_kids_current .= "<tr><td style='white-space:nowrap; overflow-x:hidden;'>".$row['name']."</td><td style='text-align:right; cursor:pointer;' title='".str_replace("'", "&#39;", $row['events'])."' onclick='alert(this.getAttribute(&quot;title&quot;))'>".$row['cnt']."</td></tr>";
129        }
130        $htmlout_kids_current .= $htmlout_after;
131
132        $sql_j_und_s_current = str_replace(
133            '%%PLACEHOLDER_FOR_SOLV_UIDS%%',
134            implode("', '", $jom_solv_uids[$current_year]),
135            $sql_j_und_s,
136        );
137        $result_j_und_s_current = $db->query($sql_j_und_s_current);
138        $starts_j_und_s_current = 0;
139        $htmlout_j_und_s_current = str_replace('%%PLACEHOLDER_FOR_ID%%', 'ranking-junds-current', $htmlout_before);
140        // @phpstan-ignore-next-line
141        while ($row = $result_j_und_s_current->fetch_assoc()) {
142            $starts_j_und_s_current += intval($row['cnt']);
143            // @phpstan-ignore-next-line
144            $htmlout_j_und_s_current .= "<tr><td style='white-space:nowrap; overflow-x:hidden;'>".$row['name']."</td><td style='text-align:right; cursor:pointer;' title='".str_replace("'", "&#39;", $row['events'])."' onclick='alert(this.getAttribute(&quot;title&quot;))'>".$row['cnt']."</td></tr>";
145        }
146        $htmlout_j_und_s_current .= $htmlout_after;
147
148        $percent_j_und_s = $starts_j_und_s_current * 100 / ($starts_j_und_s_previous + 0.00000001);
149        $percent_kids = $starts_kids_current * 100 / ($starts_kids_previous + 0.00000001);
150        $are_kids_winners = ($percent_kids > $percent_j_und_s);
151
152        $color_kids = $are_kids_winners ? 'rgb(0,100,0)' : 'rgb(180,0,0)';
153        $color_j_und_s = $are_kids_winners ? 'rgb(180,0,0)' : 'rgb(0,100,0)';
154
155        $out .= "<div style='position:relative;'>";
156        $out .= "<h3 style='font-size:12px; border: 0; padding-left: 0; text-align:center; margin-top: 0;'>JOM-Jugend</h3>";
157        $out .= "<div style='margin-top:-4px; font-size:18px; text-align:center; color:".$color_kids.";' title='Wie viele Jugndliche im Vergleich zu {$previous_year}'>".round($percent_kids, 2)."%</div>";
158        $out .= "<div style='margin-top:-2px; font-size:12px; text-align:center;' title='Anzahl Starts von Jugndlichen {$current_year} / {$previous_year}'>";
159        $out .= "<a href='javascript:' onclick='olz.olzJomCounterToggle(&quot;ranking-kids-current&quot;); return false;' style='color:".$color_kids.";'>{$starts_kids_current}</a> / ";
160        $out .= "<a href='javascript:' onclick='olz.olzJomCounterToggle(&quot;ranking-kids-previous&quot;); return false;' style='color:".$color_kids.";'>{$starts_kids_previous}</a>";
161        $out .= "</div>";
162        $out .= "<h3 style='margin-top:2px; font-size:12px; border:0px; padding-left: 0; text-align:center;'>J&amp;S-Leiter</h3>";
163        $out .= "<div style='margin-top:-4px; font-size:18px; text-align:center; color:".$color_j_und_s.";' title='Wie viele J&S-Leiter im Vergleich zu {$previous_year}'>".round($percent_j_und_s, 2)."%</div>";
164        $out .= "<div style='margin-top:-2px; font-size:12px; text-align:center;' title='Anzahl Starts von OLZ-J&S-Leitern {$current_year} / {$previous_year}'>";
165        $out .= "<a href='javascript:' onclick='olz.olzJomCounterToggle(&quot;ranking-junds-current&quot;); return false;' style='color:".$color_j_und_s.";'>{$starts_j_und_s_current}</a> / ";
166        $out .= "<a href='javascript:' onclick='olz.olzJomCounterToggle(&quot;ranking-junds-previous&quot;); return false;' style='color:".$color_j_und_s.";'>{$starts_j_und_s_previous}</a>";
167        $out .= "</div>";
168        $out .= $htmlout_kids_previous;
169        $out .= $htmlout_kids_current;
170        $out .= $htmlout_j_und_s_previous;
171        $out .= $htmlout_j_und_s_current;
172        $out .= "</div>";
173        return $out;
174    }
175}