Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 56
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzNewsForumTile
0.00% covered (danger)
0.00%
0 / 56
0.00% covered (danger)
0.00%
0 / 2
42
0.00% covered (danger)
0.00%
0 / 1
 getRelevance
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getHtml
0.00% covered (danger)
0.00%
0 / 55
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3// =============================================================================
4// Zeigt eine Startseiten-Kachel mit kürzlich veröffentlichten News an.
5// =============================================================================
6
7namespace Olz\Startseite\Components\OlzNewsForumTile;
8
9use Olz\Entity\News\NewsEntry;
10use Olz\Entity\Users\User;
11use Olz\News\Utils\NewsFilterUtils;
12use Olz\Startseite\Components\AbstractOlzTile\AbstractOlzTile;
13
14class OlzNewsForumTile extends AbstractOlzTile {
15    /** @var array<string, string> */
16    protected static $iconBasenameByFormat = [
17        'forum' => 'entry_type_forum_20.svg',
18    ];
19
20    public function getRelevance(?User $user): float {
21        return 0.6;
22    }
23
24    public function getHtml(mixed $args): string {
25        $entity_manager = $this->dbUtils()->getEntityManager();
26        $code_href = $this->envUtils()->getCodeHref();
27        $news_filter_utils = NewsFilterUtils::fromEnv();
28
29        $forum_url = $news_filter_utils->getUrl(['format' => 'forum']);
30
31        $out = <<<ZZZZZZZZZZ
32            <h3>
33                <a href='{$forum_url}&von=startseite'>
34                    <img src='{$code_href}assets/icns/entry_type_forum_20.svg' alt='Forum' class='link-icon'>
35                    Forum
36                </a>
37            </h3>
38            ZZZZZZZZZZ;
39
40        $out .= "<ul class='links'>";
41        $news_entry_class = NewsEntry::class;
42        $query = $entity_manager->createQuery(<<<ZZZZZZZZZZ
43                SELECT n
44                FROM {$news_entry_class} n
45                WHERE n.on_off = '1' and n.format IN ('forum')
46                ORDER BY n.published_date DESC, n.published_time DESC
47            ZZZZZZZZZZ);
48        $query->setMaxResults(5);
49        $index = 0;
50        foreach ($query->getResult() as $news_entry) {
51            $id = $news_entry->getId();
52            $date = $this->dateUtils()->compactDate($news_entry->getPublishedDate());
53            $title = $news_entry->getTitle();
54            $format = $news_entry->getFormat();
55            $image_ids = $news_entry->getImageIds();
56
57            $icon_basename = self::$iconBasenameByFormat[$format];
58            $icon = "{$code_href}assets/icns/{$icon_basename}";
59            $image = '';
60            $is_image_right = ($index % 2) === 1;
61            if (count($image_ids) > 0) {
62                $olz_image = $this->imageUtils()->olzImage(
63                    'news',
64                    $id,
65                    $image_ids[0] ?? null,
66                    80,
67                    null,
68                    ' class="noborder"'
69                );
70                $image = "{$olz_image}";
71            }
72            $image_left = '';
73            $image_right = '';
74            if ($is_image_right) {
75                $image_right = "<div class='link-image-right'>{$image}</div>";
76            } else {
77                $image_left = "<div class='link-image-left'>{$image}</div>";
78            }
79
80            $class = $is_image_right ? 'right' : 'left';
81            $out .= <<<ZZZZZZZZZZ
82                <li class='{$class}'>
83                    <a href='{$code_href}news/{$id}?von=startseite'>
84                        <div class='flex bubble'>
85                            {$image_left}
86                            <img src='{$icon}' alt='{$format}' class='link-icon'>
87                            <span class='title'>{$title}</span>
88                            <span class='date'>{$date}</span>
89                            {$image_right}
90                        </div>
91                    </a>
92                </li>
93                ZZZZZZZZZZ;
94
95            $index++;
96        }
97        $out .= "</ul>";
98
99        return $out;
100    }
101}