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
34                        src='{$code_href}assets/icns/entry_type_galerie_20.svg'
35                        alt='News'
36                        class='header-link-icon text-icon'
37                    >
38                    News
39                </a>
40            </h3>
41            ZZZZZZZZZZ;
42        $out .= <<<ZZZZZZZZZZ
43            <div class='filters'>
44                <a href='{$aktuell_url}&von=startseite' class='filter'>
45                    <img src='{$code_href}assets/icns/entry_type_aktuell_20.svg' alt='Aktuell' class='header-link-icon'>
46                    Aktuell
47                </a>
48                <a href='{$galerie_url}&von=startseite' class='filter'>
49                    <img src='{$code_href}assets/icns/entry_type_galerie_20.svg' alt='Galerie' class='header-link-icon'>
50                    Galerie
51                </a>
52                <a href='{$video_url}&von=startseite' class='filter'>
53                    <img src='{$code_href}assets/icns/entry_type_video_20.svg' alt='Video' class='header-link-icon'>
54                    Video
55                </a>
56                <a href='{$kaderblog_url}&von=startseite' class='filter'>
57                    <img src='{$code_href}assets/icns/entry_type_kaderblog_20.svg' alt='Kaderblog' class='header-link-icon'>
58                    Kaderblog
59                </a>
60                <a href='{$forum_url}&von=startseite' class='filter'>
61                    <img src='{$code_href}assets/icns/entry_type_forum_20.svg' alt='Forum' class='header-link-icon'>
62                    Forum
63                </a>
64            </div>
65            ZZZZZZZZZZ;
66
67        $out .= "<ul class='links'>";
68        $news_entry_class = NewsEntry::class;
69        $query = $entity_manager->createQuery(<<<ZZZZZZZZZZ
70                SELECT n
71                FROM {$news_entry_class} n
72                WHERE n.on_off = '1'
73                ORDER BY n.published_date DESC, n.published_time DESC
74            ZZZZZZZZZZ);
75        $is_prod = $this->envUtils()->getAppEnv() === 'prod';
76        $query->setMaxResults($is_prod ? 5 : 100);
77        $index = 0;
78        foreach ($query->getResult() as $news_entry) {
79            $id = $news_entry->getId();
80            $date = $this->dateUtils()->compactDate($news_entry->getPublishedDate());
81            $title = $news_entry->getTitle();
82            $format = $news_entry->getFormat();
83            $image_ids = $news_entry->getImageIds();
84            $icon = $this->newsUtils()->getNewsFormatIcon($format);
85
86            if ($format === 'aktuell' || $format === 'kaderblog') {
87                $image = '';
88                $is_image_right = ($index % 2) === 0;
89                if (count($image_ids) > 0) {
90                    $class = $is_image_right ? 'right' : 'left';
91                    $olz_image = $this->imageUtils()->olzImage(
92                        'news',
93                        $id,
94                        $image_ids[0] ?? null,
95                        80,
96                        null,
97                        ' class="noborder"'
98                    );
99                    $image = "<div class='link-image-{$class}'>{$olz_image}</div>";
100                }
101
102                $out .= <<<ZZZZZZZZZZ
103                    <li>
104                        <a href='{$code_href}news/{$id}?von=startseite' class='flex min-two-lines aktuell-kaderblog-tile'>
105                            <img src='{$icon}' alt='{$format}' class='link-icon text-icon'>
106                            <div style='flex-grow:1;'>
107                                <span class='title'>{$title}</span>
108                                <span class='secondary'>({$date})</span>
109                            </div>
110                            {$image}
111                        </a>
112                    </li>
113                    ZZZZZZZZZZ;
114            }
115
116            if ($format === 'galerie' || $format === 'video') {
117                $icon = $this->newsUtils()->getNewsFormatIcon($format, 'white');
118                $images = "";
119                for ($i = 0; $i < min(count($image_ids), 3); $i++) {
120                    $olz_image = $this->imageUtils()->olzImage(
121                        'news',
122                        $id,
123                        $image_ids[$i],
124                        80,
125                        null,
126                        ' class="noborder"'
127                    );
128                    $images .= "{$olz_image}";
129                }
130
131                $out .= <<<ZZZZZZZZZZ
132                    <li class='flex gallery min-two-lines'>
133                        <a href='{$code_href}news/{$id}?von=startseite'>
134                            <div class='images'>
135                                <img src='{$icon}' alt='{$format}' class='link-icon text-icon'>
136                                {$images}
137                            </div>
138                            <div class='overlay'>
139                                <span>{$title}</span>
140                                <span class='secondary'>({$date})</span>
141                            </div>
142                        </a>
143                    </li>
144                    ZZZZZZZZZZ;
145            }
146
147            if ($format === 'forum') {
148                $image = '';
149                if (count($image_ids) > 0) {
150                    $olz_image = $this->imageUtils()->olzImage(
151                        'news',
152                        $id,
153                        $image_ids[0] ?? null,
154                        80,
155                        null,
156                        ' class="image"'
157                    );
158                    $image = "{$olz_image}";
159                }
160
161                $out .= <<<ZZZZZZZZZZ
162                    <li class='forum'>
163                        <img src='{$icon}' alt='{$format}' class='link-icon'>
164                        <a href='{$code_href}news/{$id}?von=startseite'>
165                            <div class='bubble'>
166                                <span class='title'>{$title}</span>
167                                <span class='date'>{$date}</span>
168                                {$image}
169                            </div>
170                        </a>
171                    </li>
172                    ZZZZZZZZZZ;
173            }
174
175            $index++;
176        }
177        $out .= "</ul>";
178
179        return $out;
180    }
181}