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