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