Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 41 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
OlzCustomizableHome | |
0.00% |
0 / 41 |
|
0.00% |
0 / 2 |
42 | |
0.00% |
0 / 1 |
getHtml | |
0.00% |
0 / 36 |
|
0.00% |
0 / 1 |
30 | |||
getIdFromClass | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | // ============================================================================= |
4 | // Zeigt eine personalisierte Startseite an. |
5 | // ============================================================================= |
6 | |
7 | namespace Olz\Startseite\Components\OlzCustomizableHome; |
8 | |
9 | use Olz\Components\Common\OlzComponent; |
10 | use Olz\Startseite\Components\OlzCustomTile\OlzCustomTile; |
11 | use Olz\Startseite\Components\OlzForBeginnersTile\OlzForBeginnersTile; |
12 | // use Olz\Startseite\Components\OlzJomCounterTile\OlzJomCounterTile; |
13 | // use Olz\Startseite\Components\OlzNewsListsTile\OlzNewsListsTile; |
14 | use Olz\Startseite\Components\OlzNewsAktuellKaderblogTile\OlzNewsAktuellKaderblogTile; |
15 | use Olz\Startseite\Components\OlzNewsForumTile\OlzNewsForumTile; |
16 | use Olz\Startseite\Components\OlzNewsGalerieTile\OlzNewsGalerieTile; |
17 | use Olz\Startseite\Components\OlzTermineDeadlinesTile\OlzTermineDeadlinesTile; |
18 | use Olz\Startseite\Components\OlzTermineListsTile\OlzTermineListsTile; |
19 | use Olz\Startseite\Components\OlzTermineUpcomingTile\OlzTermineUpcomingTile; |
20 | // use Olz\Startseite\Components\OlzTermineUpdatesTile\OlzTermineUpdatesTile; |
21 | use Olz\Startseite\Components\OlzWeeklyPictureTile\OlzWeeklyPictureTile; |
22 | |
23 | /** @extends OlzComponent<array<string, mixed>> */ |
24 | class OlzCustomizableHome extends OlzComponent { |
25 | public function getHtml(mixed $args): string { |
26 | $user = $this->authUtils()->getCurrentUser(); |
27 | |
28 | $tile_classes = [ |
29 | OlzForBeginnersTile::class, |
30 | OlzWeeklyPictureTile::class, |
31 | OlzTermineListsTile::class, |
32 | OlzTermineUpcomingTile::class, |
33 | OlzTermineDeadlinesTile::class, |
34 | // OlzTermineUpdatesTile::class, |
35 | // OlzNewsListsTile::class, |
36 | OlzNewsAktuellKaderblogTile::class, |
37 | OlzNewsGalerieTile::class, |
38 | OlzNewsForumTile::class, |
39 | // OlzNewsRecentlyTile::class, |
40 | OlzCustomTile::class, |
41 | // OlzJomCounterTile::class, |
42 | ]; |
43 | |
44 | $out = ''; |
45 | |
46 | $out .= "<div class='olz-customizable-home'>"; |
47 | |
48 | $tiles = []; |
49 | foreach ($tile_classes as $tile_class) { |
50 | $tile = new $tile_class(); |
51 | $relevance = $tile->getRelevance($user); |
52 | if ($relevance === 0.0) { |
53 | continue; |
54 | } |
55 | $tiles[] = [ |
56 | 'id' => self::getIdFromClass($tile_class), |
57 | 'html' => $tile->getHtml([]), |
58 | 'relevance' => $relevance, |
59 | ]; |
60 | } |
61 | |
62 | usort($tiles, function ($tile_a, $tile_b) { |
63 | return $tile_a['relevance'] < $tile_b['relevance'] ? 1 : -1; |
64 | }); |
65 | |
66 | foreach ($tiles as $tile) { |
67 | $tile_id = $tile['id']; |
68 | $out .= "<div class='tile-container'><div class='tile tile-id-{$tile_id}'>"; |
69 | $out .= $tile['html']; |
70 | $out .= "</div></div>"; |
71 | } |
72 | |
73 | $out .= "</div>"; |
74 | |
75 | return $out; |
76 | } |
77 | |
78 | protected static function getIdFromClass(string $class): string { |
79 | $class_name = strval($class); |
80 | $base_class_name = substr($class_name, strrpos($class_name, '\\') + 1); |
81 | return preg_replace_callback('/[A-Z]/', function ($matches) { |
82 | return '-'.strtolower($matches[0]); |
83 | }, lcfirst($base_class_name)) ?? ''; |
84 | } |
85 | } |