Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 90 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
OlzJomCounterTile | |
0.00% |
0 / 90 |
|
0.00% |
0 / 2 |
72 | |
0.00% |
0 / 1 |
getRelevance | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
getHtml | |
0.00% |
0 / 89 |
|
0.00% |
0 / 1 |
56 |
1 | <?php |
2 | |
3 | namespace Olz\Startseite\Components\OlzJomCounterTile; |
4 | |
5 | use Olz\Entity\Users\User; |
6 | use Olz\Startseite\Components\AbstractOlzTile\AbstractOlzTile; |
7 | |
8 | class 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("'", "'", $row['events'])."' onclick='alert(this.getAttribute("title"))'>".$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("'", "'", $row['events'])."' onclick='alert(this.getAttribute("title"))'>".$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("'", "'", $row['events'])."' onclick='alert(this.getAttribute("title"))'>".$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("'", "'", $row['events'])."' onclick='alert(this.getAttribute("title"))'>".$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("ranking-kids-current"); return false;' style='color:".$color_kids.";'>{$starts_kids_current}</a> / "; |
160 | $out .= "<a href='javascript:' onclick='olz.olzJomCounterToggle("ranking-kids-previous"); 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&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("ranking-junds-current"); return false;' style='color:".$color_j_und_s.";'>{$starts_j_und_s_current}</a> / "; |
166 | $out .= "<a href='javascript:' onclick='olz.olzJomCounterToggle("ranking-junds-previous"); 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 | } |