Asset Publisher

An error occurred while processing the template.
The following has evaluated to null or missing:
==> FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) [in template "252001#252047#252845" at line 128, column 37]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: dMTJsonObject = FrontendService.media... [in template "252001#252047#252845" at line 128, column 21]
----
1<#-- used @ Veranstaltung-Detailseite Intro 
2 used @ Publikation-Detailseite Intro 
3--> 
4 
5<#-- 
6Web content templates to display teaser on thema detail page 
7 
8Generic template for detail pages Intro / Teaser element 
9--> 
10<#-- 
11Display the current page title 
12--> 
13<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" /> 
14<#include "${fullTemplatesPath}/macros/debugging.ftl" /> 
15 
16<#include "${fullTemplatesPath}/macros/page-modules/PMIntro.ftl" /> 
17<#include "${fullTemplatesPath}/macros/atomic-modules/AMPublicationCarousel.ftl" /> 
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMMetadata.ftl" /> 
19<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" /> 
20 
21 
22<#-- 
23 renders the Intro for nearly all Pages 
24 TODO: remove Share? (was in the designs, but not anymore?) 
25 TODO: check if languageSelect/filter are working (js) 
26 
27 - portletId 
28 - data = { 
29 "media": string (src from image), 
30 "category": string, 
31 "title": string, 
32 "author": string, 
33 "subheadline": string, 
34 "copy": string, 
35 "filter": { 
36 "id": string, 
37 "name": string, 
38 "entries": Array<Object> ({key:value}), 
39 }, 
40 "languageSelect": { 
41 "id": string, 
42 "name": string, 
43 "entries": Array<Object> ({key:value}), 
44 }, 
45 "meta": { 
46 "pos"; string (top/bottom) 
47 "date": string, 
48 "hash": string, 
49 "info": string, (url) 
50 }, 
51 "share" : { 
52 "login": string, 
53 "print": string, 
54 "mail": string, 
55 "multishare": string?? (tbd) 
56
57 - AMMetadata: macro 
58 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content 
59
60--> 
61 
62<#assign 
63 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
64 
65 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
66 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService") 
67 
68 themeDisplay = ServiceContext.getThemeDisplay() 
69 editmode = FrontendService.user.isPrivilegedUser(themeDisplay) 
70 
71 languageId = themeDisplay.getLocale() 
72 groupId = themeDisplay.getScopeGroupId() 
73 currentUrl = themeDisplay.getURLCurrent() 
74 
75 layout = themeDisplay.getLayout() 
76 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id") 
77/> 
78 
79<#setting locale="${languageId}"> 
80 
81<#-- get article from url --> 
82 
83<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! > 
84 
85 
86<#if entry?has_content> 
87 
88 <#if entry.resourcePrimKey??> 
89 <#assign primaryKey = entry.resourcePrimKey?number > 
90 <#elseif entry.classPK??> 
91 <#assign primaryKey = entry.classPK?number > 
92 </#if> 
93 
94 <#assign 
95 jsonString = FrontendService.article.getWebcontent(primaryKey) 
96 json = FrontendService.json.parseAsJson(jsonString) 
97 availablelanguages = FrontendService.article.getAssetEntryToUrl(primaryKey).getAvailableLanguageIds() 
98 
99 title = entry.getTitle(languageId) 
100 data = { 
101 "title": title 
102
103 /> 
104 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" /> 
105 
106 <#if hasContent('untertitel', languageId, json)> 
107 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } > 
108 </#if> 
109 
110 <#if hasContent('beschreibung', languageId, json)> 
111 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } > 
112 </#if> 
113 
114 <#-- fill meta data --> 
115 <#assign meta = {} /> 
116 
117 <#-- PUBLIKATIONEN DETAIL --> 
118 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")> 
119 
120 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)> 
121 <#assign 
122 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first") 
123 /> 
124 
125 <#if coverBildString?has_content> 
126 <#assign 
127 coverBild = FrontendService.json.parseAsJson(coverBildString) 
128 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) 
129 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid ) 
130 data = data + { "media": linkToDMT, "meta" : dMTJsonObject } 
131 /> 
132 <#if dMTJsonObject.altText?? > 
133 <#assign data = data + {"alt" : dMTJsonObject.altText} /> 
134 </#if> 
135 <#if dMTJsonObject.quelle??> 
136 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } /> 
137 </#if> 
138 </#if> 
139 <#-- uncomment to display pdf cover as Intro Image 
140 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)> 
141 <#assign 
142 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first") 
143 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/> 
144 <#if fileEntry?has_content> 
145 <#assign 
146 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay) 
147 data = data + { "media": linkToThumbnail } 
148 /> 
149 </#if> 
150 --> 
151 </#if> 
152 
153 <#assign 
154 meta = meta + { "orderInfo": "true" } 
155 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!"" 
156 /> 
157 
158 
159 
160 <#if hasContent('erscheinungsdatum', languageId, json)> 
161 <#assign 
162 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
163 /> 
164 <#if erscheinungsdatum?has_content > 
165 <#assign 
166 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId ) 
167 meta = meta + { "date": erscheinungsdatumFormatted } 
168 /> 
169 </#if> 
170 </#if> 
171 
172 <#if verbundJournalArticle?has_content> 
173 <#assign 
174 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey) 
175 verbundJson = FrontendService.json.parseAsJson(verbundJsonString) 
176 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first") 
177 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first") 
178 /> 
179 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" /> 
180 <#assign meta = meta + { "laufendenummer": laufendenummer } > 
181 
182 <#if coverImg?has_content && coverImg.url?has_content > 
183 <#assign meta = meta + { "coverImg": coverImg.url } > 
184 </#if> 
185 </#if> 
186 
187 
188 <#if meta?has_content> 
189 <#assign data = data + {"meta": meta } > 
190 </#if> 
191 
192 </#if> 
193 <#-- PUBLIKATIONEN DETAIL END --> 
194 
195 
196 <#-- VERANSTALTUNGEN DETAIL --> 
197 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")> 
198 <#assign 
199 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!"" 
200 links = [] 
201 /> 
202 <#if availablelanguages?has_content && friendlyUrl?has_content> 
203 <#if (availablelanguages?size > 1) > 
204 <#list availablelanguages as language> 
205 <#assign 
206 defaultLanguage = "de_DE" 
207 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage) 
208 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale 
209 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId) 
210 
211 link = { 
212 "key": language!defaultLanguage, 
213 "value": linkLocale.getDisplayLanguage(languageId), 
214 "url": "/c/portal/update_language?p_l_id=" + 
215 layout.plid + "&redirect=" + langFriendlyUrl + 
216 "&languageId=" + language 
217
218 /> 
219 <#if language == languageId> 
220 <#assign link = link + { "selected": "true" } > 
221 </#if> 
222 <#assign links = links + [link]> 
223 </#list> 
224 <#assign 
225 data = data + { 
226 "languageSelect": { 
227 "id": "languageSelectRedirect", 
228 "name": "languageselectRedirect", 
229 "entries": links, 
230 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar") 
231
232
233 /> 
234 </#if> 
235 </#if> 
236 </#if> 
237 
238 <#if hasContent('erscheinungsdatum', languageId, json)> 
239 <#assign 
240 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
241 meta = meta + { "start": startdate?date.iso, "end": "" } 
242 /> 
243 </#if> 
244 
245 <#if hasContent('startdatum', languageId, json)> 
246 <#assign 
247 startdate = getValueForLanguage('startdatum', languageId, json, "first") 
248 meta = meta + { "start": startdate?date.iso, "end": "" } 
249 /> 
250 </#if> 
251 
252 <#if hasValue('einfuehrungText', locale, json)> 
253 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } > 
254 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")> 
255 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } > 
256 </#if> 
257 
258 <#if hasContent('endedatum', languageId, json)> 
259 <#assign 
260 enddate = getValueForLanguage('endedatum', languageId, json, "first") 
261 meta = meta + { "end": enddate?date.iso } 
262 /> 
263 </#if> 
264 
265 <#if hasContent('startzeit', languageId, json)> 
266 <#assign 
267 startzeit = getValueForLanguage('startzeit', languageId, json, "first") 
268 /> 
269 <#if startzeit?has_content > 
270 <#assign meta = meta + { "startzeit": startzeit } /> 
271 </#if> 
272 </#if> 
273 
274 <#if hasContent('endezeit', languageId, json)> 
275 <#assign 
276 endezeit = getValueForLanguage('endezeit', languageId, json, "first") 
277 meta = meta + { "endezeit": endezeit } 
278 /> 
279 </#if> 
280 
281 <#if hasContent('ortWCSKASDEORT', languageId, json)> 
282 <#assign 
283 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first")) 
284 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number 
285 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!"" 
286 /> 
287 <#if ortWCSKASDEORTWebContent?has_content > 
288 <#assign 
289 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!"" 
290 /> 
291 <#if ortWCSKASDEORTTitle?has_content > 
292 <#assign 
293 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle } 
294 /> 
295 </#if> 
296 </#if> 
297 </#if> 
298 
299 
300 <#if hasContent('veranstaltungsnummer', languageId, json)> 
301 <#assign 
302 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first") 
303 meta = meta + { "verauuid": verauuid } 
304 /> 
305 </#if> 
306 
307 
308 <#if (data.meta)?has_content > 
309 <#assign meta = data.meta /> 
310 </#if> 
311 
312 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)> 
313 <#assign 
314 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first") 
315 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution") 
316 /> 
317 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} > 
318 
319 
320 <#if mediaData.meta?? && mediaData.meta.quelle??> 
321 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } /> 
322 </#if> 
323 </#if> 
324 
325 
326 <#if meta?has_content> 
327 <#assign data = data + {"meta": meta } > 
328 </#if> 
329 
330 <#-- END fill meta data --> 
331 
332 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)> 
333 <#assign 
334 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json) 
335 authors = [] 
336 /> 
337 <#list journalArticles as articleString> 
338 <#assign article = FrontendService.json.parseAsJson(articleString) /> 
339 <#if article?has_content && article?is_hash && article.classPK??> 
340 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" /> 
341 <#if articleDereferenced?has_content > 
342 <#assign 
343 author = "" 
344 articlePrimaryKey = articleDereferenced.classPK?number 
345 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey) 
346 articleJson = FrontendService.json.parseAsJson(articleJsonString) 
347 /> 
348 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" /> 
349 <#if hasValue('anredetitel', languageId, articleJson)> 
350 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " "> 
351 </#if> 
352 <#if hasValue('vorname', languageId, articleJson)> 
353 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " "> 
354 </#if> 
355 <#if hasValue('nachname', languageId, articleJson)> 
356 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " "> 
357 </#if> 
358 
359 <#attempt> 
360 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" > 
361 <#recover> 
362 <#assign href = "#" > 
363 </#attempt> 
364 <#if href?has_content && href != "#" && href != "/_404"> 
365 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'> 
366 </#if> 
367 
368 <#assign authors = authors + [author?trim]> 
369 </#if> 
370 </#if> 
371 </#list> 
372 <#if authors?has_content> 
373 <#assign data = data + { "author": authors?join(", ") } > 
374 </#if> 
375 </#if> 
376 
377 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") > 
378 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! > 
379 <#if categories?has_content && categories[0]?has_content > 
380 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
381 </#if> 
382 
383 <#if hasContent('ausgebucht', languageId, json)> 
384 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }> 
385 </#if> 
386 
387 <#if hasContent('storniert', languageId, json)> 
388 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }> 
389 </#if> 
390 
391 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") > 
392 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! > 
393 <#if categories?has_content && categories[0]?has_content > 
394 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
395 </#if> 
396 <#else> 
397 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! > 
398 <#if categories?has_content && categories[0]?has_content > 
399 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
400 </#if> 
401 </#if> 
402 
403 
404 <#assign 
405 languages = [] 
406 /> 
407 
408 <#attempt> 
409 <#if json["document_pdfDMTBASICDOCUMENT"]?? > 
410 <#if availablelanguages?has_content> 
411 <#list availablelanguages as pdf_language> 
412 <#assign 
413 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first") 
414 docRef = FrontendService.json.parseAsJson(docRefJson) 
415 /> 
416 <#if docRef?is_hash && pdf_language != languageId > 
417 <#assign 
418 lang = FrontendService.language.getLocaleByKey(pdf_language)!"" 
419 docGroupId = docRef["groupId"]?number 
420 docUuid = docRef["uuid"] 
421 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale ) 
422 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject ) 
423 /> 
424 <#if lang?has_content> 
425 <#assign 
426 languages = languages + [ 
427
428 "key": pdf_language, 
429 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(), 
430 "url": dMTLink 
431 }] 
432 /> 
433 </#if> 
434 </#if> 
435 </#list> 
436 </#if> 
437 </#if> 
438 <#recover> 
439 </#attempt> 
440 
441 <#if (languages?size > 0)> 
442 <#attempt> 
443 <#assign 
444 data = data + { "languageSelect": { 
445 "id": "languageSelect", 
446 "name": "languageselect", 
447 "entries": languages, 
448 "documents": "", 
449 "button": "true" 
450 }} 
451 /> 
452 <#recover> 
453 </#attempt> 
454 </#if> 
455 
456 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" /> 
457 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)} 
458 
459 <#if data.meta?has_content> 
460 <#if data.meta.laufendenummer?has_content !isACColorScheme() && !isVLCColorScheme() && !isDPMColorScheme()> 
461 <div>  
462 <div id="publicationVerbundPagination"> 
463 <@AMPublicationCarousel data.meta.laufendenummer data.meta.date data.meta.coverImg /> 
464 </div> 
465 </div> 
466 </#if> 
467 </#if> 
468 
469<#elseif (editmode?? && editmode)> 
470 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl /> 
471</#if> 

Asset Publisher

Am Sonntag, den 30. Januar, fanden in Portugal die Wahl zur Assembleia da República statt, dem aus nur einer Kammer bestehenden nationalen Parlament. Die Sozialistische Partei (Partido Socialista, PS) des bisherigen Ministerpräsidenten António Costa gewann eine deutliche Mehrheit der Mandate. Staatspräsident Marcelo Rebelo de Sousa hat deshalb António Costa wiederum mit der Bildung und Führung der Regierung betraut. In Portugal wird der Premierminister nicht vom Parlament gewählt, sondern vom Staatspräsidenten ernannt. Seit der Einführung der Demokratie infolge der „Nelkenrevolution von 1974 und der Verabschiedung der aktuellen Verfassung von 1976 wird stets der Vorsitzende der Partei mit dem höchsten Anteil an Stimmen und Mandaten mit der Regierungsbildung beauftragt. Costa ist nun nicht mehr auf die Unterstützung einer oder mehrerer anderer Parteien angewiesen und wird voraussichtlich über die volle Wahlperiode von vier Jahren im Amt bleiben.

Die Wahl war Folge einer politischen Krise, die sich im Oktober 2021 ereignete, als der von der Regierung vorgelegte Staatshaushalt für das Jahr 2022 keine Mehrheit im Parlament fand. Nicht nur die Oppositionsparteien aus der Mitte und der Rechten des politischen Spektrums lehnten den Haushaltsentwurf ab. Entscheidend war, dass auch die linken Parteien - die Kommunistische Partei (die unter dem Namen Coligação Democrática Unitária, CDU, agiert) und der Linksblock (Bloco de Esquerda, BE) - dem Ministerpräsidenten die Zustimmung zu seinem Haushaltsentwurf verweigerten. Seit 2015 hatten sie Costa trotz mancher Meinungsverschiedenheiten gestützt, ohne dass es eine formale Koalition gab. Doch dieses Mal wollte Costa die Forderungen der Linksparteien u.a. im Hinblick auf die Ausgaben für das Gesundheitswesen und die Ausweitung von Arbeitnehmerrechten nicht erfüllen – nicht zuletzt, um die Bereitstellung der EU-Mittel aus dem Aufbauplan NextGenerationEU zur Eindämmung der Folgen der Corona-Pandemie nicht zu gefährden. Bei der entscheidenden Abstimmung im Parlament fehlten Costa dann die Stimmen zur Verabschiedung seines Haushaltsplans. Weil für Staatspräsident Rebelo de Sousa ein vom Parlament gebilligter Staatshaushalt die Voraussetzung für die wirtschaftliche Erholung des Landes nach der Pandemie ist, löste er am 4. November das Parlament auf und setzte Neuwahlen für den 30. Januar 2022 an. Damit wurde in Portugal eine Situation wie in Spanien vermieden, wo Ministerpräsident Sánchez zwei Jahre lang, 2018 und 2019, ohne einen vom Parlament verabschiedeten Haushalt regierte

Innerhalb von nur zwei Monaten mussten sich die Parteien auf die Wahl vorbereiten. Die PS führte zu Beginn des Wahlkampfs in den Meinungsumfragen mit einem Vorsprung von fast zehn Punkten. Die wichtigste Oppositionsparte Partido Social Democrata (PSD), die zwar Sozialdemokratische Partei heißt, aber ein wirtschaftsliberales Programm vertritt, war in ihrer Vorbereitung auf die Wahl dadurch gehandicapt, dass sie zunächst noch die reguläre Wahl ihres Vorsitzenden durchzuführen hatte, die Ende November 2021 stattfand. Da es zwei Kandidaten für dieses Amt gab, den bisherigen Vorsitzenden Rui Rio und den Europaparlamentarier Paulo Rangel, konnte die Partei erst als Riu als Vorsitzender bestätigt war mit der Vorbereitung der Parlamentswahlen beginnen.

Trotz der günstigeren Ausgangslage für die PS schienen sich während des Wahlkampfs die Atmosphäre und die allgemeine Stimmung zu ändern und die PSD in der Wählergunst an Bedeutung zu gewinnen. In der Woche vor der Wahl erwarteten Meinungsforscher und andere Beobachter sogar einen technischen Gleichstand zwischen PS und PSD.

Am Wahlabend aber hätte das Ergebnis nicht deutlicher sein können. Die Sozialistische Partei erreichte einen eindeutigen Sieg, der ihre Position nicht nur im Parlament, sondern im gesamten politischen System deutlich stärkte. Mit 41,7% der Stimmen gewann die PS eine Mehrheit von 117 der 230 Mandate der Assembleia da República. Die meisten portugiesischen Wähler wollten António Costa weiterhin als Premierminister haben. Am Ende der neuen Legislaturperiode im Jahr 2026 wird die Sozialistische Partei dann zehn Jahre ununterbrochen an der Regierung gewesen sein und mit Blick auf die letzten drei Jahrzehnte fast 80% der Zeit in verschiedenen Konstellationen regiert haben.

 

Sitzverteilung in der portugiesischen Assembleia da República ab 2022

Parlamentswahlen Brasilien

Die Gesamtzahl der Abgeordneten beträgt 230. In dieser Infografik fehlen noch die vier Abgeordneten, die von den portugiesischen Wählern im Ausland gewählt wurden und die noch zu bestimmen sind. Quelle: Sic Notícias (https://sicnoticias.pt/eleicoes-legislativas/o-novo-parlamento-quem-ganha-e-quem-perde-assentos/)

Für die PSD endete die Wahl mit einer großen Enttäuschung. Anstatt der erhofften Regierungsführung verlor die Partei drei Mandate. Deutliche Zugewinne dagegen verzeichneten die rechtspopulistische Partei Chega! (CH) und die liberale Partei Iniciativa Liberal (IL), die beide erst vor wenigen Jahren gegründet worden waren. Sie sind nun die dritt- bzw. viertstärkste politische Kraft in Portugal.

Bevor wir die Ergebnisse der einzelnen Parteien etwas aufmerksamer betrachten, hier noch einige Punkte, die im Hinblick auf das Wahlergebnis erwähnenswert sind:

  • Im Gegensatz zu den meisten anderen europäischen Ländern wird die portugiesische Politik immer noch von den beiden großen traditionellen Parteien dominiert. PS und PSD erhielten zusammen 71% der Stimmen, was einen Anstieg von 7 Prozentpunkten im Vergleich zu den letzten Parlamentswahlen von 2019 bedeutet. Die im Vorfeld der Wahl befürchtete größere Fragmentierung des Parteiensystems ist nicht eingetreten, weil einige Kleinparteien keine Mandate im Parlament gewannen.
  • Linke Parteien verloren insgesamt rund 100.000 Stimmen, während rechte Parteien rund 550.000 Stimmen hinzugewannen. Diese Stimmenverschiebung ist Folge einer Stimmenverschiebung zwischen den linken Parteien (von den Extremen zur PS) und einem Zuwachs der rechten Parteien, die Stimmen aus der Linken, aber auch von vielen bisherigen Nicht-Wählern erhielten. Paradoxerweise ist Portugal mit einer Mehrheit der Sozialistischen Partei heute ein „rechteres“ Land als zuvor. Eine liberale und eine rechtsradikale Partei haben hinzugewonnen, während der Einfluss der marxistischen Parteien kleiner wurde.
  • Das Parteiensystem, das sich nach der Revolution ab 1975 etablierte und bisher bestand, existiert damit nun nicht mehr. Die konservative Christlich-Demokratischen Partei CDS erhielt keinen Sitz mehr im Parlament und auch die von der Kommunistischen Partei geführten Gruppe von Linksparteien (CDU) erlitt deutliche Einbußen; die dieser Koalition angehörende Grünen Partei erhielt ebenfalls kein Mandat mehr. Demgegenüber erzielten nun die beiden neuen Parteien Chega! und Iniciativa Liberal ein beachtliches Ergebnis.

 

Zum Abschneiden einzelner Parteien

Parlamentswahlen in Portugal 2022 - Bild 2

PS - Sozialistische Partei

Die Strategie der Sozialisten war erfolgreich. Die wichtigste Botschaft von António Costa, um linke Wähler zu mobilisieren, war die die Angst vor der rechtsradikalen Partei Chega! und vor der Rolle, die sie in einer von der PSD geführten Regierung spielen könnte. Dies wird bei einem Blick auf die Stimmenverschiebung von den Extremen zur Mitte deutlich. Die PS verzeichnete einen Zuwachs von 346.000 Stimmen, während BE und CDU zusammen rund 356.000 Stimmen verloren, d.h. der Zugewinn der PS ist im Wesentlichen auf die Verluste der Linksparteien BE und CDU zurückzuführen. Ein bisher beispielloser Erfolg für die Sozialistische Partei ist es, dass sie alle nationalen Bezirke (mit Ausnahme von Madeira) gewann, was seit 1975 noch nie der Fall gewesen war.

 

PSD - Sozialdemokraten

Der Wahlabend wurde zu einer dunklen Nacht für die PSD. Trotz eines Zuwachses von insgesamt etwa 150.000 Stimmen in den meisten Gemeinden verloren die Sozialdemokraten mit einem Stimmenanteil von 27,8% aufgrund der Besonderheiten des portugiesischen Wahlsystems drei Sitze im Parlament, wo sie nur noch mit 76 statt bisher 79 Abgeordneten vertreten sind. Die Weigerung, vor den Wahlen eine Koalitionsvereinbarung mit der christdemokratischen CDS zu treffen, wurde im Nachhinein von Wahlkommentatoren als falsch bezeichnet, denn in mindestens fünf Bezirken hätten die "verschwendeten" Stimmen für die CDS zusammen mit den verbleibenden Stimmen für die PSD ausgereicht, um der PS einen Abgeordneten zu entziehen und so die sozialistische Mehrheit im Parlament zu verhindern.

Das Verhalten des PSD-Vorsitzenden Rui Rio in der Wahlnacht wurde ebenfalls von vielen Kommentatoren stark kritisiert. Mitten in der Pressekonferenz begann er auf Deutsch zu sprechen und ärgerte sich über die Journalisten, weil sie immer wieder dieselbe Frage nach seinem Verbleib als Parteivorsitzender stellten – diese Medienvertreter wurden dabei von anwesenden Parteimitgliedern auch laufend ausgebuht. Rio gestand ein, dass er sich für die Partei nicht mehr nützlich fühle und öffnete damit die Tür für einen erneuten innerparteilichen Kampf um den Parteivorsitz. Seitdem er im Januar 2018 erstmals zum Vorsitzenden der PSD gewählt worden war, musste er sich permanenter Kritik eines wichtigen Teils der Partei erwehren, die einen Mangel an Strategie und Konsistenz in der Parteiführung und Opposition kritisierten. Bei seiner Wiederwahl im Dezember erhielt er nur 52% der Stimmen. Das reichte nicht aus, um nach der nun verlorenen Wahl weiter den Anspruch zu verteidigen, die Partei in die Zukunft zu führen.

 

Chega!

Die rechtsradikale Partei Chega! (wörtlich "Es reicht!") ist einer der Wahlsieger. Mit 7,15% der Stimmen wurde sie die drittstärkste politische Kraft und erhielt 12 Abgeordnete in der Assembleia. Dies ist deshalb ein beeindruckendes Ergebnis, weil die Partei erst vor zwei Jahren gegründet wurde und bisher nur ein Mandat im Parlament hatte. Chega! ist die einzige kleine Partei, die Abgeordnetenmandate in sehr unterschiedlichen Bezirken gewann, und zwar nicht nur in den größten, sondern auch in kleineren Bezirken, in denen es für kleine Parteien normalerweise schwierig ist, die Schwelle der mindestens notwendigen Stimmen zu überwinden. Im Süden Portugals hat Chega! die besten Ergebnisse erzielt (mit besonderem Schwerpunkt in den Gebieten, in denen die Gemeinschaften der Sinti und Roma stärker vertreten sind - eine Gruppe, die der Parteivorsitzende André Ventura immer wieder zum Ziel seiner Tiraden machte. In jenen südlichen Wahlbezirken gelang es Chega! auch, die jahrzehntelangen Hochburgen der Kommunistischen Partei zu schleifen.

Mit einer Gruppe von Abgeordneten, die wenig Erfahrung in der Politik hat und mit einem Wahlprogramm, das eher eine Reihe von systemfeindlichen Ideen als einen verbindlichen ideologischen Vorschlag darstellt, bleibt abzuwarten, wie sich Chega! in den nächsten vier Jahren verhält. Für den populistischen Parteiführer André Ventura können die vier Jahre mit einer sozialistischen Mehrheit eine Chance sein, Chega! noch stärker als Protestpartei zu profilieren.

 

Iniciativa Liberal

Die liberale Partei Iniciativa Liberal (IL) ist ein weiterer Gewinner der Wahl. Nachdem sie 2019 zum ersten Mal bei einer Wahl angetreten war, erreichte sie nun 5% der Stimmen und ist künftig mit acht Abgeordneten die viertstärkste politische Kraft im Parlament. Die Stimmen für IL konzentrierten sich stark auf die städtischen und entwickelten Gebiete des Landes (Lissabon, Porto, Braga, Setúbal). Der Vorsitzende der Partei, João Cotrim de Figueiredo, hat erfolgreich gegen die Vorstellung angekämpft, dass eine liberale Partei in Portugal nie mehr als ein Hobby der Eliten sein würde. IL hat nun nach dem faktischen Verschwinden der CDS die Chance, sich als einzige nicht radikale politische Kraft auf der rechten Seite des Parlaments zu etablieren.

 

Bloco de Esquerda

Für die linksextreme Partei Bloco de Esquerda (BE, „Linksblock“) begann am Wahlabend eine dunkle Nacht, die lange andauern kann. Mit einem Verlust von ca. 250.000 Stimmen verkleinerte sich die Fraktion der Partei von 19 auf nur noch 5 Abgeordnete. Selbst in den größten Städten war ihr Ergebnis katastrophal. Die wichtigste Ursache dafür ist der Wechsel vieler ihrer traditionellen Wähler zur Sozialistischen Partei, um dadurch eine rechtsgerichtete Regierung zu vermeiden, auf die Chega! Einfluss nehmen könnte. Die Parteivorsitzende des BE, Catarina Martins, versicherte, dass die Wahlergebnisse nie die Richtung der Partei bestimmt hätten und dass sie nicht aufgeben werde.

 

CDU/Kommunistische Partei

Auch für die CDU, die Koalition der Kommunistischen mit der Grünen Partei, war es ein enttäuschender Wahlabend. Sie wurde ebenfalls Opfer der Absicht vieler ihrer traditionellen Wähler, eine rechte Regierung zu verhindern. Die CDU verlor nicht nur 90.000 Stimmen, was die Reduzierung ihrer Fraktion von 12 auf 6 Mitglieder bedeutet, sondern es wurde auch kein einziges Mitglied der Grünen Partei (PEV) gewählt. Das kann weitreichende Folgen haben. Jahrzehntelang nutzte die Kommunistische Partei die Grüne Partei als Mittel, um ihre Präsenz im Parlament zu verdoppeln und Zugang zu Entscheidungspositionen in der parlamentarischen Arbeit zu erhalten. Der Stimmenverlust der CDU war in einigen Regionen, in denen die Kommunisten seit 1975 einen starken Einfluss hatten, besonders groß: Das weist darauf hin, dass die Partei landesweit deutlich an Boden verliert. Jerónimo de Sousa, der Generalsekretär der Kommunistischen Partei, war wegen einer Herzoperation die meiste Zeit des Wahlkampfes abwesend, erschien aber in den letzten Tagen vor dem Urnengang und versicherte in der Wahlnacht, dass er als Generalsekretär weitermachen werde, weil die Partei ihn "brauche".

 

CDS

Die konservative CDS (Partido do Centro Democrático Social) ist eindeutig der Hauptverlierer der Wahl. Seit dem Verlust der Regierungsbeteiligung 2015 und dem Rücktritt ihres langjährigen Vorsitzenden Paulo Portas erlebte die CDS zahlreiche innerparteilichen Konflikte. Bei den letzten Parlamentswahlen im Jahr 2019 hatte sie bereits viele Stimmen verloren und war auf eine Fraktion mit fünf Mitgliedern geschrumpft. Nun ist die CDS, die 1974-75 ein Gründungsmitglied der portugiesischen Demokratie und an vielen Regierungen beteiligt war (auch solchen unter Führung der Sozialisten) aus dem Parlament verschwunden, obwohl sie insgesamt mehr Stimmen erhielt als andere Parteien, die aufgrund der Methodik des Wahlsystems einen Abgeordneten stellen. Es überrascht nicht, dass der Parteivorsitzende, Francisco Rodrigues dos Santos, in der Wahlnacht seinen Rücktritt bekannt gab.

 

PAN

Nachdem die Tierschutzpartei „Pessoas-Animais-Natureza“ ("Menschen-Tiere-Natur") 2019 vier Abgeordnetenmandate erhielt, verlor sie fast 50% der Stimmen und erhielt nunmehr einen Abgeordneten, was ihrem Ergebnis von 2015 entspricht. Die meisten ihrer Wähler kommen aus eher städtischen Bezirken.

 

Livre

Livre ("Freie") erhielt erstmals 2019 ein Abgeordnetenmandat, das sie bereits nach vier Monaten wieder verlor, als die einzige Abgeordnete die Partei verließ und als Unabhängige im Parlament verblieb. Nun gewann der Vorsitzende von Livre, Rui Tavares, ein Mandat. In den Debatten des Wahlkampfes erhielt er viel Aufmerksamkeit. Livre war die einzige linke Partei, die keine Wähler an die PS verlor, um eine rechtsgerichtete Regierung zu verhindern. Ihr Vorsitzender Rui Tavares stimmte am Wahlabend "Die Internationale" an, die Hymne der bolschewistischen Partei der UdSSR in der ersten Hälfte des 20. Jahrhunderts.

 

Stimmenthaltung

Trotz der Befürchtungen aufgrund der Pandemie sank die Zahl der Wahlbeteiligung im Vergleich zu den Parlamentswahlen 2019 nur um 3 Prozentpunkte. Unter den insgesamt 10.820.337 Wählern lag die Wahlbeteiligung bei 58%. Die Region mit der niedrigsten Wahlbeteiligung war Madeira mit 46%, die höchste Wahlbeteiligung verzeichnete Braga mit 64%. In den städtischen Zentren lag die Wahlbeteiligung über dem nationalen Durchschnitt, sowohl in Lissabon als auch in Porto betrug sie 62%.

 

Perspektiven für die Zukunft

  • Ministerpräsident António Costa hat nun die Möglichkeit, seine politische Strategie ohne Druck und Forderungen linksextremer Parteien zu verfolgen. Er hat aber nun auch keine Ausreden mehr, um bei Problemen auf Blockaden der Linksparteien zu verweisen. Schwerpunkt seiner Regierungsarbeit in den nächsten vier Jahren soll die Ankurbelung eines starken Wirtschaftswachstums sein. Mit Hilfe der Aufbau- und Resilienz-Fazilität, des NextGenerationEU-Fonds und anderer Gemeinschaftsprogramme für Portugal soll ein Wachstum erzielt werden, das deutlich über dem europäischen Durchschnitt liegt.
  • Die nächste Regierung wird voraussichtlich kleiner ausfallen. Obwohl ihre Zusammensetzung erst Ende Februar bekannt gegeben werden soll, gibt es bereits einige Gerüchte darüber. Augusto Santos Silva (bisher Außenminister) wird als nächster Parlamentspräsident gehandelt; Francisca Van Dunam (bisher Justizministerin) soll bereits um ihren Rücktritt gebeten haben; Marta Temido (bisher Gesundheitsministerin) und Ana Mendes Godinho (bisher Ministerin für Arbeit, Solidarität und soziale Sicherheit) hatten sich hingegen bereiterklärt, weiterhin in Costas Regierung zu arbeiten. Medienberichten zufolge werden Fernando Medina (ehemaliger Bürgermeister von Lissabon) und Duarte Carneiro (Costas Wahlkampfleiter für diese Wahlen) die neue Regierung wahrscheinlich ergänzen.
  • Sowohl in der PSD als auch in der CDS wurden bereits die Namen derjenigen bekannt, die für die Nachfolge der unterlegenen Parteiführer kandidieren könnten. Bei den Sozialdemokraten gelten Luís Montenegro, Miguel Pinto Luz und Paulo Rangel als die wahrscheinlichsten Kandidaten. Bei der CDS scheint Nuno Melo, derzeit Abgeordneter des Europäischen Parlaments, der Einzige zu sein, der die Voraussetzungen für einen Wiederbelebungsversuch der Partei erfüllt.
  • Die allgemeine Atmosphäre des sozialen Friedens, die Portugal in den letzten sechs Jahren erlebte, wird ebenfalls zu Ende sein – Streiks und Demonstrationen werden höchstwahrscheinlich zurückkehren. Ohne Einfluss und Einbindung in die Regierung und mit einer geschwächten Position im Parlament hat der Vorsitzende der Kommunistischen Partei, Jerónimo de Sousa, bereits die Gewerkschaften mobilisiert, um für die Rechte der Arbeitnehmer einzutreten und zum "Massenkampf" aufgerufen.
  • Der Präsident der Republik, Marcelo Rebelo de Sousa, kann nun stärker als zuvor in das politische Tagesgeschäft eingreifen, denn er muss mit der neuen Parlamentsmehrheit keine destabilisierende Wirkung möglicherweise kritischer Erklärungen seinerseits befürchten, was er es während seiner vorangegangenen Mandate oft gesagt hatte. Obwohl seine Befugnisse erheblich eingeschränkt sind, da sein Vetorecht im Parlament leicht überwunden werden kann, gehen einige politische Kommentatoren davon aus, dass der Präsident auch die Opposition gegen die Regierung anführen wird, zumindest bis die PSD einen neuen Vorsitzenden gefunden hat.

Asset Publisher

Contact

Dr. Wilhelm Hofmeister

Wilhelm.Hofmeister@kas.de
Contact

Inês Gregório

comment-portlet

Asset Publisher

About this series

The Konrad-Adenauer-Stiftung is a political foundation. Our offices abroad are in charge of over 200 projects in more than 120 countries. The country reports offer current analyses, exclusive evaluations, background information and forecasts - provided by our international staff.