Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 111
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
OlzNewsEntriesTile
0.00% covered (danger)
0.00%
0 / 111
0.00% covered (danger)
0.00%
0 / 2
182
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 / 110
0.00% covered (danger)
0.00%
0 / 1
156
1<?php
2
3// =============================================================================
4// Zeigt eine Startseiten-Kachel mit kürzlich veröffentlichten News an.
5// =============================================================================
6
7namespace Olz\Startseite\Components\OlzNewsEntriesTile;
8
9use Olz\Entity\News\NewsEntry;
10use Olz\Entity\Users\User;
11use Olz\Startseite\Components\AbstractOlzTile\AbstractOlzTile;
12
13class OlzNewsEntriesTile extends AbstractOlzTile {
14    public function getRelevance(?User $user): float {
15        return 0.55;
16    }
17
18    public function getHtml(mixed $args): string {
19        $entity_manager = $this->dbUtils()->getEntityManager();
20        $code_href = $this->envUtils()->getCodeHref();
21        $news_utils = $this->newsUtils();
22
23        $year = $this->dateUtils()->getCurrentDateInFormat('Y');
24        $news_url = $news_utils->getUrl(['format' => 'alle', 'datum' => $year]);
25        $aktuell_url = $news_utils->getUrl(['format' => 'aktuell', 'datum' => $year]);
26        $galerie_url = $news_utils->getUrl(['format' => 'galerie', 'datum' => $year]);
27        $video_url = $news_utils->getUrl(['format' => 'video', 'datum' => $year]);
28        $kaderblog_url = $news_utils->getUrl(['format' => 'kaderblog', 'datum' => $year]);
29        $forum_url = $news_utils->getUrl(['format' => 'forum', 'datum' => $year]);
30        $out = <<<ZZZZZZZZZZ
31            <h3>
32                <a href='{$news_url}&von=startseite' class='header-link'>
33                    <img src='{$code_href}assets/icns/entry_type_galerie_20.svg' alt='News' class='header-link-icon'>
34                    News
35                </a>
36            </h3>
37            ZZZZZZZZZZ;
38        $out .= <<<ZZZZZZZZZZ
39            <div class='filters'>
40                <div class='filter'><a href='{$aktuell_url}&von=startseite'>
41                    <img src='{$code_href}assets/icns/entry_type_aktuell_20.svg' alt='Aktuell' class='header-link-icon'>
42                    Aktuell
43                </a></div>
44                <div class='filter'><a href='{$galerie_url}&von=startseite'>
45                    <img src='{$code_href}assets/icns/entry_type_galerie_20.svg' alt='Galerie' class='header-link-icon'>
46                    Galerie
47                </a></div>
48                <div class='filter'><a href='{$video_url}&von=startseite'>
49                    <img src='{$code_href}assets/icns/entry_type_video_20.svg' alt='Video' class='header-link-icon'>
50                    Video
51                </a></div>
52                <div class='filter'><a href='{$kaderblog_url}&von=startseite'>
53                    <img src='{$code_href}assets/icns/entry_type_kaderblog_20.svg' alt='Kaderblog' class='header-link-icon'>
54                    Kaderblog
55                </a></div>
56                <div class='filter'><a href='{$forum_url}&von=startseite'>
57                    <img src='{$code_href}assets/icns/entry_type_forum_20.svg' alt='Forum' class='header-link-icon'>
58                    Forum
59                </a></div>
60            </div>
61            ZZZZZZZZZZ;
62
63        $out .= "<ul class='links'>";
64        $news_entry_class = NewsEntry::class;
65        $query = $entity_manager->createQuery(<<<ZZZZZZZZZZ
66                SELECT n
67                FROM {$news_entry_class} n
68                WHERE n.on_off = '1'
69                ORDER BY n.published_date DESC, n.published_time DESC
70            ZZZZZZZZZZ);
71        $is_prod = $this->envUtils()->getAppEnv() === 'prod';
72        $query->setMaxResults($is_prod ? 5 : 100);
73        $index = 0;
74        foreach ($query->getResult() as $news_entry) {
75            $id = $news_entry->getId();
76            $date = $this->dateUtils()->compactDate($news_entry->getPublishedDate());
77            $title = $news_entry->getTitle();
78            $format = $news_entry->getFormat();
79            $image_ids = $news_entry->getImageIds();
80            $icon = $this->newsUtils()->getNewsFormatIcon($format);
81
82            if ($format === 'aktuell' || $format === 'kaderblog') {
83                $image = '';
84                $is_image_right = ($index % 2) === 0;
85                if (count($image_ids) > 0) {
86                    $class = $is_image_right ? 'right' : 'left';
87                    $olz_image = $this->imageUtils()->olzImage(
88                        'news',
89                        $id,
90                        $image_ids[0] ?? null,
91                        80,
92                        null,
93                        ' class="noborder"'
94                    );
95                    $image = "<div class='link-image-{$class}'>{$olz_image}</div>";
96                }
97
98                $out .= <<<ZZZZZZZZZZ
99                    <li>
100                        <a href='{$code_href}news/{$id}?von=startseite' class='flex min-two-lines aktuell-kaderblog-tile'>
101                            <img src='{$icon}' alt='{$format}' class='link-icon'>
102                            <div style='flex-grow:1;'>
103                                <span class='title'>{$title}</span>
104                                <span class='secondary'>({$date})</span>
105                            </div>
106                            {$image}
107                        </a>
108                    </li>
109                    ZZZZZZZZZZ;
110            }
111
112            if ($format === 'galerie' || $format === 'video') {
113                $icon = $this->newsUtils()->getNewsFormatIcon($format, 'white');
114                $images = "";
115                for ($i = 0; $i < min(count($image_ids), 3); $i++) {
116                    $olz_image = $this->imageUtils()->olzImage(
117                        'news',
118                        $id,
119                        $image_ids[$i],
120                        80,
121                        null,
122                        ' class="noborder"'
123                    );
124                    $images .= "{$olz_image}";
125                }
126
127                $out .= <<<ZZZZZZZZZZ
128                    <li class='flex gallery min-two-lines'>
129                        <a href='{$code_href}news/{$id}?von=startseite'>
130                            <div class='images'>
131                                <img src='{$icon}' alt='{$format}' class='link-icon'>
132                                {$images}
133                            </div>
134                            <div class='overlay'>
135                                <span>{$title}</span>
136                                <span class='secondary'>({$date})</span>
137                            </div>
138                        </a>
139                    </li>
140                    ZZZZZZZZZZ;
141            }
142
143            if ($format === 'forum') {
144                $image = '';
145                if (count($image_ids) > 0) {
146                    $olz_image = $this->imageUtils()->olzImage(
147                        'news',
148                        $id,
149                        $image_ids[0] ?? null,
150                        80,
151                        null,
152                        ' class="image"'
153                    );
154                    $image = "{$olz_image}";
155                }
156
157                $out .= <<<ZZZZZZZZZZ
158                    <li class='forum'>
159                        <img src='{$icon}' alt='{$format}' class='link-icon'>
160                        <a href='{$code_href}news/{$id}?von=startseite'>
161                            <div class='bubble'>
162                                <span class='title'>{$title}</span>
163                                <span class='date'>{$date}</span>
164                                {$image}
165                            </div>
166                        </a>
167                    </li>
168                    ZZZZZZZZZZ;
169            }
170
171            $index++;
172        }
173        $out .= "</ul>";
174
175        return $out;
176    }
177}