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\OlzCustomTile\OlzCustomTile;
11use Olz\Startseite\Components\OlzForBeginnersTile\OlzForBeginnersTile;
12// use Olz\Startseite\Components\OlzJomCounterTile\OlzJomCounterTile;
13// use Olz\Startseite\Components\OlzNewsListsTile\OlzNewsListsTile;
14use Olz\Startseite\Components\OlzNewsAktuellKaderblogTile\OlzNewsAktuellKaderblogTile;
15use Olz\Startseite\Components\OlzNewsForumTile\OlzNewsForumTile;
16use Olz\Startseite\Components\OlzNewsGalerieTile\OlzNewsGalerieTile;
17use Olz\Startseite\Components\OlzTermineDeadlinesTile\OlzTermineDeadlinesTile;
18use Olz\Startseite\Components\OlzTermineListsTile\OlzTermineListsTile;
19use Olz\Startseite\Components\OlzTermineUpcomingTile\OlzTermineUpcomingTile;
20// use Olz\Startseite\Components\OlzTermineUpdatesTile\OlzTermineUpdatesTile;
21use Olz\Startseite\Components\OlzWeeklyPictureTile\OlzWeeklyPictureTile;
22
23/** @extends OlzComponent<array<string, mixed>> */
24class 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}