Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 47 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 1 |
| OlzAnniversaryTile | |
0.00% |
0 / 47 |
|
0.00% |
0 / 4 |
110 | |
0.00% |
0 / 1 |
| getRelevance | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
6 | |||
| getHtml | |
0.00% |
0 / 15 |
|
0.00% |
0 / 1 |
2 | |||
| getElevationHtml | |
0.00% |
0 / 15 |
|
0.00% |
0 / 1 |
12 | |||
| getZielsprintHtml | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
20 | |||
| 1 | <?php |
| 2 | |
| 3 | // ============================================================================= |
| 4 | // Zeigt eine Startseiten-Kachel mit manuell eingegebenem Inhalt an. |
| 5 | // ============================================================================= |
| 6 | |
| 7 | namespace Olz\Startseite\Components\OlzAnniversaryTile; |
| 8 | |
| 9 | use Olz\Anniversary\Components\OlzAnniversaryRocket\OlzAnniversaryRocket; |
| 10 | use Olz\Anniversary\Utils\AnniversaryUtils; |
| 11 | use Olz\Components\OlzZielsprint\OlzZielsprint; |
| 12 | use Olz\Entity\Users\User; |
| 13 | use Olz\Startseite\Components\AbstractOlzTile\AbstractOlzTile; |
| 14 | |
| 15 | /** |
| 16 | * @phpstan-import-type OlzElevationStats from AnniversaryUtils |
| 17 | */ |
| 18 | class OlzAnniversaryTile extends AbstractOlzTile { |
| 19 | public function getRelevance(?User $user): float { |
| 20 | return ((bool) $user) ? 0.91 : 0.01; |
| 21 | } |
| 22 | |
| 23 | public function getHtml(mixed $args): string { |
| 24 | $is_before_2026 = intval($this->dateUtils()->getCurrentDateInFormat('Y')) < 2026; |
| 25 | $code_href = $this->envUtils()->getCodeHref(); |
| 26 | |
| 27 | $stats = $this->anniversaryUtils()->getElevationStats(); |
| 28 | |
| 29 | $diff_hei = log10(abs($stats['diffDays']) + 1) * 40; |
| 30 | $done_hei = \intval($stats['completion'] * 160); |
| 31 | $rocket_hei = \intval($stats['completion'] * 160) - 30; |
| 32 | $rocket = OlzAnniversaryRocket::render(); |
| 33 | return <<<ZZZZZZZZZZ |
| 34 | <a href='{$code_href}2026' class='anniversary-container'> |
| 35 | <h3 class='anniversary-h3'>🥳 20 Jahre OL Zimmerberg</h3> |
| 36 | <div class='done-range'></div> |
| 37 | <div class='done-bar' style='height: {$done_hei}px;'></div> |
| 38 | <div class='rocket test-flaky' style='bottom: {$rocket_hei}px;'>{$rocket}</div> |
| 39 | <div class='diff-range'></div> |
| 40 | <div class='diff-bar {$stats['diffKind']}' style='height: {$diff_hei}px;'></div> |
| 41 | <div class='diff-marker'></div> |
| 42 | <div class='elevation'>{$this->getElevationHtml($stats)}</div> |
| 43 | <div class='zielsprint'>{$this->getZielsprintHtml($is_before_2026)}</div> |
| 44 | </a> |
| 45 | ZZZZZZZZZZ; |
| 46 | } |
| 47 | |
| 48 | /** |
| 49 | * @param OlzElevationStats $stats |
| 50 | */ |
| 51 | public function getElevationHtml(array $stats): string { |
| 52 | $pretty_done = number_format($stats['completion'] * 100, 1, ".", "'")."%"; |
| 53 | $diff_verb = $stats['diffMeters'] >= 0 ? 'sind' : 'liegen'; |
| 54 | $diff_particle = $stats['diffMeters'] >= 0 ? 'voraus' : 'zurück'; |
| 55 | $pretty_diff_meters = number_format(abs($stats['diffMeters']), 0, ".", "'")."m"; |
| 56 | $pretty_diff_days = number_format(abs($stats['diffDays']), 1, ".", "'")." Tage"; |
| 57 | return <<<ZZZZZZZZZZ |
| 58 | <div class='title'>🏃 Höhenmeter-Challenge ⛰️</div> |
| 59 | <div> |
| 60 | Ziel zu <span class='done-text'>{$pretty_done}</span> erreicht. |
| 61 | |
| 62 | Wir {$diff_verb} |
| 63 | <span class='diff-meters {$stats['diffKind']}'> |
| 64 | {$pretty_diff_meters} |
| 65 | </span> |
| 66 | bzw. |
| 67 | <span class='diff-days {$stats['diffKind']}'> |
| 68 | {$pretty_diff_days} |
| 69 | </span> |
| 70 | {$diff_particle}. |
| 71 | </div> |
| 72 | ZZZZZZZZZZ; |
| 73 | } |
| 74 | |
| 75 | public function getZielsprintHtml(bool $is_before_2026): string { |
| 76 | $component = new OlzZielsprint(); |
| 77 | $ranking = $component->getRanking(); |
| 78 | $out = "<div class='title'>🏁 Zielsprint-Challenge 🏃</div><table>"; |
| 79 | $medals = [1 => '🥇', 2 => '🥈', 3 => '🥉']; |
| 80 | for ($rang = 1; $rang <= 3; $rang++) { |
| 81 | $entry = $ranking[$rang - 1] ?? []; |
| 82 | $person_name = $is_before_2026 ? '?' : $entry['person_name'] ?? '?'; |
| 83 | $points = $is_before_2026 ? '0' : $entry['points'] ?? '0'; |
| 84 | $out .= <<<ZZZZZZZZZZ |
| 85 | <tr> |
| 86 | <td>{$medals[$rang]}</td> |
| 87 | <td>{$person_name}</td> |
| 88 | <td>{$points}</td> |
| 89 | </tr> |
| 90 | ZZZZZZZZZZ; |
| 91 | } |
| 92 | $out .= "</table>"; |
| 93 | return $out; |
| 94 | } |
| 95 | } |