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>
Mit dem ehemaligen Präsidenten der Traditionspartei Partido Liberación Nacional (PLN)[2], José Maria Figueres, gewann ein Politiker der alten Elite die erste Runde deutlich. Figueres warb mit seiner politischen Erfahrung und warnte vor weiteren Experimenten und Improvisation in der costa-ricanischen Regierung[3]. Der Politikneuling und Finanzexperte Rodrigo Chaves, der für die von ihm neugegründete Partido Progreso Socialdemocratico (PPSD) ins Rennen ging, zog als Überraschungskandidat in die zweite Runde ein. Er trat als Reformer und Vertreter des Anti-Establishments mit dem Versprechen an, unangenehme Entscheidungen zu treffen, um einen Wandel im Land einzuleiten.
Knapp verpasst hat die zweite Runde der evangelikale Prediger Fabricio Alvarado der Partido Nueva República (PNR), der auf dem dritten Platz landete. Er erhielt besonders in den schwächer entwickelten Küstenregionen starken Zuspruch, konnte sein Ergebnis von 2018 jedoch nicht wiederholen.[4] Als Verliererin der Wahlen gilt die Christdemokratin Lineth Saborío (Partido Unidad Social Cristiana), die bis zuletzt in Umfragen auf dem zweiten Platz hinter Figueres lag.
Die vier führenden Präsidentschaftskandidaten
José Maria Figueres – Partido Liberación Nacional (PLN), 27,26 Prozent
Figueres, der bereits von 1994-1998 Präsident des Landes war und im Laufe seiner Politikkarriere mehrere Ministerämter bekleidete, wurden von Anfang an die besten Chancen zugerechnet. Figueres verfügt über einen hohen Bekanntheitsgrad und ihm wird die notwendige Erfahrung für das Präsidentenamt zugeschrieben. Allerdings generiert er neben hohen Unterstützungswerten auch viel Abneigung. Er verkörpert die alte politische Klasse und kam nach seiner Präsidentschaft in den Fokus von Korruptionsermittlungen. Das Verfahren wurde jedoch aufgrund mangelnder Beweise eingestellt. Die jüngsten Korruptionsskandale[5], die zahlreiche Bürgermeister der PLN involvierten, erweckten bei vielen jedoch wieder die Erinnerung an die Vorwürfe, von denen sich der Kandidat nie wirklich befreien konnte. Figueres kommt aus einer der einflussreichsten Familien des
Landes. Sein Vater gilt als Gründer der modernen costa-ricanischen Demokratie und schaffte die costa-ricanische Armee ab. Mit der Partido Liberación Nacional hat er den größten Parteiapparat hinter sich und damit auch die größte Basis an Stammwählern.
Rodrigo Chaves – Partido Progreso Social Democrático (PPSD), 16,7 Prozent
Der ehemalige Finanzminister (2019-2020) und Beamte der Weltbank steht für wirtschaftliche Expertise, er präsentiert sich als Reformer, der schwierige, aber wirtschaftlich notwendige Entscheidungen treffen kann und gegen Korruption vorgeht. Seine Kandidatur wurde jedoch belastet, als bekannt wurde, dass er in seiner Zeit bei der Weltbank von der Institution für sexuelle Belästigung in mehreren Fällen sanktioniert wurde. Chaves gilt trotz seiner kurzen Zeit als Finanzminister[6] in der aktuellen Regierung als politischer Outsider. In Umfragen stand er meist an vierter Stelle. Sein gutes Abschneiden am Wahlsonntag dürfte zum einen darauf zurückzuführen sein, dass er viele Unentschlossene und Protestwähler überzeugen konnte, die sich einen starken Präsidenten wünschen, der im öffentlichen Sektor „aufräumt“. Zu seinem Erfolg dürfte auch die Unterstützung der prominenten Journalistin und Kritikerin des politischen Establishments, Pilar Cisneros, beigetragen haben. Cisneros wird für die PPSD als Abgeordnete ins Parlament einziehen. Das Übertreffen der Umfragewerte durch das Wahlergebnis dürfte aber auch damit zusammenhängen, dass viele Menschen in den Umfragen nicht angeben wollten, dass sie für einen Kandidaten stimmen werden, der der sexuellen Belästigung bezichtigt wird.
Fabricio Alvarado – Partido Nueva República (PNR), 14,82 Prozent
Der Journalist und evangelikale Prediger trat schon 2018 als Präsidentschaftskandidat für die Partido Restauración Nacional an. Im Zuge einer polarisierenden öffentlichen Debatte um die gleichgeschlechtliche Ehe, in der er sich klar gegen diese aussprach, ging er als Sieger aus der ersten Wahlrunde hervor. In der zweiten Runde unterlag er mit 39 Prozent der abgegebenen Stimmen jedoch deutlich seinem Widersacher, Carlos Alvarado (Partido Acción Ciudadana – PAC). Im aktuellen Wahlkampf wurde er in Umfragen meist auf den Plätzen drei oder vier verortet. Alvarado gilt als charismatisch und hat sich intensiv auf diesen Wahlkampf vorbereitet. Auffällig war, dass er in dieser Kampagne sein religiöses Profil geschwächt hat und sich als Staatsmann und Präsidentschaftskandidat für alle Costa-Ricaner präsentierte. Als Gegenspieler hat er den Kandidaten der linken Partei Frente Amplio identifiziert, den er in eine Reihe mit den links-diktatorischen Regimen in Nicaragua, Venezuela und Kuba stellte. Einige Beobachter werfen ihm mangelnde wirtschaftliche Expertise vor. Unterstützung findet er in der wachsenden evangelikalen Gemeinde und sozioökonomisch schwächeren Schichten.
Lineth Saborío – Partido Unidad Social Cristiana (PUSC), 12,36 Prozent
Die ehemalige Vizepräsidentin Costa Ricas[7] und Direktorin der renommierten Justizermittlungsbehörde (Organización de Investigación Judicial – OIJ) ist die erste Frau, die von der PUSC zur Präsidentschaftskandidatin nominiert wurde und die einzige Frau unter den Präsidentschaftskandidaten, die eine realistische Chance hatte, tatsächlich zur Präsidentin gewählt zu werden. Für sie sprach neben ihrem Lebenslauf und ihrer weißen Weste hinsichtlich Korruptionsvorwürfen auch ihr souveräner Sieg bei der innerparteilichen Wahl zur Präsidentschaftskandidatin. Sie generierte – insbesondere im Vergleich zu anderen Kandidaten – nur wenig Ablehnung.[8] In den Monaten des Wahlkampfes stand sie in Umfragen stets an zweiter Stelle hinter Figueres, folglich ist das Ergebnis für sie enttäuschend. Zum ersten Mal seit 2006 verlor die PUSC Stimmanteile im Vergleich zu den vorhergehenden Präsidentschaftswahlen.[9] Dies dürfte teils auch damit zusammenhängen, dass Saborío in politischen Debatten als eher positionsarm und schwach galt und Beobachter stets die Nennung klarer Maßnahmen als Teil ihres politischen Programms vermissten.
Bemerkenswert ist das schlechte Abschneiden des Kandidaten der Regierungspartei Partido Acción Ciudadana (PAC), die während der letzten beiden Legislaturperioden den Präsidenten stellte. Ihr Kandidat Welmer Ramos erhielt lediglich 0,66 Prozent der Stimmen, die Partei konnte kein einziges Abgeordnetenmandat erringen. Das schlechte Ergebnis zeigt die Unzufriedenheit der Bevölkerung mit der aktuellen Regierung, ist aber auch auf parteiinterne Verwerfungen zurückzuführen.
Themen, die den Wahlkampf bestimmten
Der Wahlkampf wurde klar von Wirtschaftsthemen dominiert, das Interesse der Öffentlichkeit lag dabei insbesondere auf Strategien zur Ankurbelung der pandemiegeschwächten Wirtschaft, Minderung der sozialen Ungleichheit, Reduzierung der Arbeitslosigkeit, vor allem der wesentlich höheren Arbeitslosigkeit von Frauen und Korruptionsbekämpfung. Nahezu alle Kandidaten hatten sich dem Motto „keine weiteren Steuererhöhungen“ (no más impuestos) verschrieben. Unterschiedlich sind die Wege, die die einzelnen Kandidaten vorschlagen, um die oben genannten Ziele zu erreichen, besonders was die Rolle des Staates betrifft. Während sich einige für die Modernisierung und Umstrukturierung der zahlreichen staatlichen Institutionen aussprechen, setzen sich andere für eine höhere Besteuerung höherer Einkommen ein. Auch die Position der Kandidaten zu Gas- und Erdölerkundung und –abbau spielte eine Rolle im Wahlkampf. Costa Rica gilt weltweit als Vorreiter im Kampf gegen den Klimawandel. Kaum eine Bedeutung hatten hingegen außenpolitische Themen.
Ergebnis der Abgeordnetenwahl
Noch steht die finale Auszählung der Stimmen aus, diese wird in einigen Wochen erwartet. Laut dem vorläufigen Ergebnis gehen die 57 Sitze der Asamblea Legislativa (AL) an sechs verschiedene Parteien. Damit kam es nicht zur befürchteten Zunahme der Parteienzersplitterung im Parlament.[10] Die beiden Traditionsparteien, die das Land jahrzehntelang in einem Zweiparteiensystem dominierten, PLN und PUSC, stellen die größten Fraktionen. Die PLN konnte ihre Präsenz in der Asamblea Legislativa um ein Mandat erweitern und wird mit 18 Sitzen klar stärkste Kraft. Im Falle eines Wahlsiegs von José Maria Figueres wäre diese Dominanz ein wichtiger Faktor für die Regierungsfähigkeit des Landes.[11] Die PUSC konnte nach derzeitigem Stand zwei Mandate hinzugewinnen und stellt mit elf Sitzen die größte Oppositionspartei. Mit der Partido Progreso Social Democrático von Rodrigo Chaves (9 Mandate) und Partido Liberal Progresista um den jugendnahen Wirtschaftsexperten Eliecer Feinzaig (6 Mandate) ziehen zwei neugegründete Parteien ins Parlament ein, die sich in ihrer Organisation erst noch konsolidieren müssen und bislang über keine parlamentarische Vorerfahrung verfügen. Die PRN um Fabricio Alvarado erhielt sieben Sitze. Die Regierungspartei PAC hat kein einziges Mandat errungen. Damit ist die Frente Amplio, die nun sechs Abgeordnete stellt, die einzige Partei mit einer linken Agenda, die im Parlament vertreten ist. Zwei Mandate sind noch umstritten: eines zwischen PUSC und PLN in Cartago, wo die Kandidatin der PUSC derzeit mit 126 Stimmen vorne liegt. Noch knapper ist der Abstand in Guanacaste, wo ein Kandidat der PUSC mit 58 Stimmen vor dem Kandidaten der PPSD liegt. Theoretisch besteht also die Möglichkeit, dass die PUSC diese beiden Sitze noch verliert.
Die Wahlen 2022 –Besonderheiten und Herausforderungen
Die solide Demokratie ist zurecht Teil des costa-ricanischen Nationalstolzes und der Wahltag ein Ereignis, das landesweit zelebriert wird. Auch bei diesen Wahlen hat Costa Rica sein starkes demokratisches System unter Beweis gestellt. Trotzdem unterschieden sich diese Wahlen in einigen Aspekten von vorangegangenen Wahlprozessen.
Besonders hervorzuheben und für viele Beobachter überraschend kam die mit 59,71 Prozent niedrigste Wahlbeteiligung in der Geschichte der 2. Republik. Mitveranwortlich dafür dürfte das aktuell starke Infektionsgeschehen sein, niemals zuvor gab es mehr aktive Covid-Fälle als in diesem Moment. Zwar erklärten die zuständigen Behörden, dass auch Personen mit Quarantäneverordnung ihr Wahlrecht ausüben dürften. Trotzdem könnten die hohen Corona-Fallzahlen eine Rolle für die niedrige Teilnahme an der Wahl gespielt haben. Die Möglichkeit der Briefwahl existiert in Costa Rica nicht. Nachfolgend werden weitere Besonderheiten dieser Wahl aufgeführt, die zur enttäuschenden Wahlbeteiligung beigetragen haben dürften.
Seit der Gründung der 2. Republik standen noch nie so viele Präsidentschaftskandidatinnen und Kandidaten zur Wahl, wie in diesem Wahlprozess. Mit 25 Anwärterinnen und Anwärtern hat sich das Bewerberfeld im Vergleich zu den letzten Wahlen 2018 nahezu verdoppelt, damals traten 13 Kandidatinnen und Kandidaten an. Die hohe Anzahl an Kandidaten und Kandidatinnen steht sinnbildlich für die wachsende Zersplitterung des costa-ricanischen Parteienspektrums, das zunehmend von Volatilität und Personenorientierung geprägt ist. Zum Ausdruck kam auch die wachsende Verdrossenheit mit den etablierten politischen Parteien, ein Phänomen, das Experten auch mit einer „Krise der politischen Repräsentation“ beschreiben. Das Vertrauen der Costa-Ricaner in politische Parteien befindet sich auf einem historischen Tiefstand. Im April 2021 konnten sich bspw. nur 13 Prozent der Befragten einer Umfrage des renommierten Centro de Investigación y Estudios Políticos (CIEP) der Universidad de Costa Rica mit einer politischen Partei identifizieren.[12] Das ist der niedrigste gemessene Wert in den letzten drei Jahrzehnten. Diese Tendenz wird zusätzlich durch Korruptionsskandale in der Politik genährt. Auffällig war in diesem Wahlkampf auch die konstant hohe Zahl an Unentschlossenen. Rund zwei Wochen vor dem Wahltermin wusste noch nahezu die Hälfte der Wahlberechtigten nicht, welchem Präsidentschaftskandidaten oder welcher Kandidatin sie ihre Stimme geben würde.[13] Fünf Tage vor den Wahlen lag diese Zahl noch immer bei 32 Prozent. Für die Parlamentswahlen lag der Prozentsatz der Unentschlossenen zu diesem Zeitpunkt sogar bei 47 Prozent.[14]
Außerdem spielte der digitale Wahlkampf aufgrund der Pandemiebedingungen bei diesen Wahlen eine besonders wichtige Rolle. Zwar konnten weiterhin Präsenzveranstaltungen und Wahlkreisbesuche stattfinden, allerdings gewann der virtuelle Raum mit den rasant ansteigenden Inzidenzen durch das Aufkommen der Omikron-Variante massiv an Bedeutung. Die oben genannten Faktoren führten dazu, dass dieser Wahlprozess von einem hohen Maß an Ungewissheit geprägt war. Zwar sahen nahezu alle Umfragen José Maria Figueres (PLN) als stärksten Kandidaten, gefolgt von Lineth Saborío (PUSC) und Fabricio Alvarado (PRN). Der Prozentsatz der Unentschlossenen lag jedoch meist höher als der Stimmanteil der ersten drei Kandidaten zusammen. Dass der Abstand zwischen den verschiedenen Kandidaten oft geringer war, als die für die Umfragen errechneten Fehlergrenzen, brachte ein zusätzliches Element der Ungewissheit. Bis zum Ende schienen also nahezu alle Optionen offen und so kämpften die Bewerber bis zum Wahltag um den Pool der Unentschlossenen.
Costa Rica hat gewählt – was nun?
Anders als in 2018 könnte Costa Rica in diesem Wahlkampf die Polarisierung erspart bleiben. Beide Präsidentschaftskandidaten der zweiten Runde unterscheiden sich zwar deutlich im Stil, nicht aber grundlegend in Ideologie und Programmatik. Nach acht Jahren PAC-Regierung, war es der Wunsch nach Wandel, der Figueres und Chaves in die zweite Runde verholfen hat. Offensichtlich entscheidend waren die Faktoren Erfahrung und Wirtschaftskompetenz. Beide Kandidaten versprechen Maßnahmen für Wirtschaftswachstum und die Reduzierung der Arbeitslosigkeit. Figueres konnte als Staatsmann überzeugen, der sich auf internationalem Parkett bewegen kann. Für Chaves haben die Menschen gestimmt, die einen radikalen Wandel für das Land ohne das politische Establishment wünschen.
Zu bedenken gilt, dass sowohl Figueres als auch Chaves in bestimmten Bevölkerungsgruppen auf starke Ablehnung stoßen[15]. Der Umgang Chaves‘ mit den Vorwürfen der sexuellen Belästigung hat einen großen Teil der weiblichen Bevölkerung gegen ihn aufgebracht. An Figueres wiederum haftet der Schatten der Korruptionsvorwürfe. Es liegt also nahe, dass es zu einer Negativkampagne kommen könnte, die sich darauf konzentriert, den jeweils anderen Bewerber zu verhindern. Im weiteren Wahlkampf ist zu erwarten, dass Figueres sich als Kandidat präsentiert, der sich neben der Wirtschaftsförderung auch das Thema Nachhaltigkeit und die Unterstützung der Frauen auf die Agenda geschrieben hat. Bei der Anzahl der erhaltenen Wählerstimmen liegt Figueres bislang deutlich im Vorteil. Allerdings deutet einiges darauf hin, dass es Figueres im Laufe der Kampagne kaum gelungen ist, über die PLN-Stammwähler hinaus viele zusätzliche Gruppen für sich zu mobilisieren. Dies könnte ihm mit Negativstimmen gegen Chaves gelingen. Die Vorwürfe der sexuellen Belästigung gegen Rodrigo Chaves dürften in diesem Rahmen weiterhin eine Rolle spielen.
Chaves muss sich auch künftig um den Teil der Bevölkerung bemühen, der in diesen Wahlen seinen Verdruss über die etablierten Parteien zum Ausdruck gebracht hat. Er dürfte den Fokus auf Misswirtschaft in der öffentlichen Verwaltung und Korruptionsskandale legen, in die aktuell auch zahlreiche Vertreter von Figueres‘ PLN verwickelt sind. Im Gegensatz zu Figueres kann er nicht für die Probleme und Misswirtschaft im Land mit verantwortlich gemacht werden. Während seiner kurzen Zeit als Finanzminister vertrat er unpopuläre Positionen, aufgrund derer er das Ministerium bald wieder verlassen musste. In den Jahrzehnten zuvor war er außer Landes. Um seinerseits zum Präsidenten gewählt zu werden, müsste Chaves Unterstützung aus anderen Parteien gewinnen. Auch für den Fall, dass Chaves siegreich aus den Wahlen hervorgehen wird, wird er aufgrund der vergleichsweise kleinen Fraktion von neun Abgeordneten auf Allianzen mit anderen Parteien angewiesen sein und nach Kompromissen mit 48 Abgeordneten suchen müssen. Es gilt also genau zu beobachten, wie sich die Vertreter der unterlegenen Parteien in den nächsten Wochen positionieren.
Information zur Autorin Evelyn Gaiser
Evelyn Gaiser ist Leiterin, Sergio Araya Projektkoordinator des KAS-Auslandsbüros Costa Rica.
Quellen
[1] In Costa Rica können weder das Staatsoberhaupt noch die Abgeordneten direkt wiedergewählt werden, weshalb es alle vier Jahre zur Neubestimmung aller politischen Entscheidungsträger kommt.
[2] Ursprünglich eine sozialdemokratische Partei, die links im politischen Spektrum einzuordnen war, wird die PLN heute von Experten eher als Mitte-rechts Partei kategorisiert.
[3] Bezugnehmend auf die zwei aufeinanderfolgenden Regierungen unter der Partido Acción Ciudanana (PAC), die zuletzt höchst unpopulär war.
[4] 537.992 Stimmen 2018 vs. 270.800 Stimmen 2022
[5] https://www.kas.de/de/web/costa-rica/laenderberichte/detail/-/content/von-diamanten-azteken-und-schildlaeusen
[6] November 2019 bis Mai 2020
[7] Regierung Abel Pacheco, 2002-2006
[8] https://www.larepublica.net/noticia/lineth-saborio-es-la-candidata-con-menor-nivel-de-rechazo-para-una-segunda-ronda
[9] 2018 gewann der Präsidentschaftskandidat der PUSC, Rodolfo Piza, 15,99 Prozent der abgegebenen Stimmen.
[10] 2018 wurden sieben Fraktionen in die Asmablea Legislativa gewählt, die sich jedoch durch zahlreiche Parteiaustritte zunehmend fragmentierte.
[11] Die aktuelle Regierungspartei PAC, die nur über zehn Abgeordnetenmandate verfügte, hatte vor allem in den letzten beiden Jahren Schwierigkeiten, Gesetzesinitiativen umzusetzen.
[12] https://ciep.ucr.ac.cr/estudio-de-opinion-publica-abril-2021/
[13] Vgl. z.B. die Umfrage des CIEP, die am 19. Januar 2022 veröffentlicht wurde. Demnach wussten zum Zeitpunkt der Befragung 43 Prozent der Wahlberechtigten noch nicht, wem sie ihre Stimme geben würden: Informe-de-resultados-CIEP-SEMANARIO-RADIOS-UCR-Enero-2022.utf8
[14] https://ciep.ucr.ac.cr/wp-content/uploads/2022/02/INFORME-DE-RESULTADOS-DE-LA-ENCUESTA-CIEP-UCR-ENERO-3-2022.html
[15] https://www.larepublica.net/noticia/lineth-saborio-es-la-candidata-con-menor-nivel-de-rechazo-para-una-segunda-ronda