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 | } |