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>
Bei einer Großveranstaltung am 7. Mai 2022 in São Paulo gab der ehemalige Präsident Luiz Inácio „Lula“ da Silva (2003-2011) von der Arbeiterpartei PT (Partido dos Trabalhadores) jetzt offiziell seine Kandidatur für das brasilianische Präsidentenamt bekannt.
Die Parteien müssen in Brasilien bis zum 15. August ihre Kandidaten beim Obersten Wahlgericht TSE eintragen,[1] doch einige Entscheidungen sorgten im ersten Quartal des Superwahljahrs 2022 schon jetzt für Überraschungen. So hatte Lula vor Kurzem bekannt gegeben, in einer Allianz mit seinem ehemaligen Erzrivalen Geraldo Alckmin antreten zu wollen. Alckmin trat zu diesem Zweck nach 33 Jahren aus seiner Partei PSDB (Partido da Social Democracia Brasileira) aus und schloss sich der PSB (Partido Socialista Brasileiro) an. Die Kandidatur Alckmins, dem Ex-Gouverneur des wirtschaftsstärksten Bundesstaates São Paulo, für das Amt des Vizepräsidenten wird als Schachzug interpretiert, Wählerstimmen der politischen Mitte, und vor allem auch des Wirtschaftssektors, für die PT zu gewinnen und somit den Präsidentschaftskandidaten Lula auch für die Wählerschaft des bürgerlichen Lagers interessant zu machen. Die Strategie sorgte in konservativen Kreisen für Kopfschütteln und unter den Parteimitgliedern des eher linken Spektrums der Arbeiterbewegung ist sie ebenso umstritten.[2]
Präsident Jair Bolsonaro (Partido Liberal – PL) beabsichtigt ebenfalls für ein zweites Mandat anzutreten. An seiner Seite soll der ehemalige Verteidigungsminister General Walter Souza Braga Netto für das Amt des Vizepräsidenten kandidieren und nicht der aktuelle Amtsinhaber Hamilton Mourão, mit dem es immer wieder zu Spannungen gekommen war. Mourão bewirbt sich stattdessen für das Senatorenamt im Bundesstaat Rio Grande do Sul.[3]
Präsident Bolsonaro gewann 2018 als Kandidat der PSL (Partido Social Liberal) die Wahl gegen den PT-Kandidaten Fernando Haddad. Lula durfte zu diesem Zeitpunkt nicht zur Wahl antreten, da er im Rahmen der 2014 aufgedeckten Lava Jato-Korruptionsaffäre inhaftiert war. Daraus schlug Bolsonaro politisches Kapital. Mit seinem Anti-Korruptions- und Anti-Establishment-Diskurs sowie mit seinen angekündigten Reformvorhaben im Bereich der Fiskalpolitik und des Sozialversicherungssystems gelang es ihm unter anderem, Stimmen aus dem bürgerlichen Lager für sich zu gewinnen. Damit brach er auch mit dem traditionellen Zweikampf zwischen der PSDB und PT. Zudem profitierte Bolsonaro von der Wut und Enttäuschung vieler PT-Wähler über das Ausmaß der Korruption in den eigenen Reihen. Zusätzlich mobilisierte Bolsonaro mit seinem konservativen Narrativ Evangelikale und Angehörige des Militärs. Er erfuhr auch Unterstützung seitens der Agrarlobby. Sein rechtspopulistisches Auftreten und die gezielte Streuung von Fake News überzeugte zudem desinformierte und radikale Wähler sowie Verschwörungstheoretiker.
Im Laufe seiner Amtszeit büßte Bolsonaro Glaubwürdigkeit und Rückhalt seitens der Liberalen und Hardliner ein. Dies liegt in der Annäherung Bolsonaros an die traditionellen Parteien im Kongress, dem sogenannten „Centrão“, zum eigenen Machterhalt begründet. Dadurch beugte er sich nicht nur dem System, das er im Wahlkampf scharf kritisiert hatte, sondern machte vor allem auch Abstriche bei seinen Reformvorhaben. Hinzu kommt, dass er seiner Verantwortung als Staatsoberhaupt zur Eindämmung der Ausbreitung des Coronavirus unzureichend nachkam und sich beispielsweise im Rahmen des Impfstofferwerbs Korruptionsvorwürfen stellen musste. Dadurch verlor er mehr als zwanzig Punkte der 55,13 Prozent der Wählerstimmen, die ihn 2018 ins Präsidentenamt katapultiert hatten. Auch die wirtschaftliche Lage begünstigt seine Wiederwahl im Moment nicht. Daher konzentriert sich Bolsonaro bei seinem diesjährigen Wahlkampf vor allem auf Polemik und Angriffe auf die demokratischen Institutionen.
Der ehemalige Justizminister Sérgio Moro, der noch vor kurzem durch Europa reiste und für sich als Kandidat für das Präsidentschaftsamt der Partei PODEMOS warb, gab sein Vorhaben bis auf Weiteres auf und wechselte zur neugegründeten União Brasil. Letztere ist aus der Fusion der ehemaligen Bolsonaro-Partei PSL und der Partei Demócratas (DEM) hervorgegangen. Dies führte zu heftigen Unstimmigkeiten zwischen Moro und der Partei PODEMOS, da diese bisher die Finanzierung der Kampagne getragen hatte.[4] Darüber hinaus litt Moros Image auch durch das abschließende Urteil des Menschenrechtsausschusses der Vereinten Nationen. Dieser befand, dass Moro während seiner Ermittlungen in der Lava Jato-Korruptionsaffäre, deren Höhepunkt die Verurteilung des ehemaligen Präsidenten Lula darstellte, in seiner Funktion als Richter gegen das Unparteilichkeitsprinzip verstoßen habe.[5]
Auch die Sondierungsgespräche der konservativ-liberalen und sozialdemokratischen Parteien PSDB, União Brasil, Cidadania und Movimento Democrático Brasileiro (MDB) sorgten zu Beginn des Jahres für Aufmerksamkeit in der Medienberichterstattung. Mitte März hatten die Vertreter der Parteien bekannt gegeben, sich auf einen einzigen Präsidentschaftskandidaten als Gegenpol zu Lula (PT) und dem amtierenden Präsidenten Jair Bolsonaro der liberalen Partei PL einigen zu wollen.[6] Dabei waren insbesondere der Name der Senatorin Simone Tebet der MDB, die eine federführende Rolle im Untersuchungsausschuss über das Pandemiemanagement der Bolsonaro-Regierung innehatte sowie des ehemaligen Gouverneurs des Bundestaates São Paulo, João Doria (PSDB), im Gespräch gewesen. Der Kandidat der demokratischen Arbeiterpartei PDT, Ciro Gomes, begrüßte die Initiative, schloss sich ihr jedoch nicht an.[7] Die öffentlich ausgetragenen Streitigkeiten zwischen den Vertretern der einzelnen Parteien, wer als Spitzenkandidat antreten soll, schadeten allerdings dem gemeinsamen Projekt eines „dritten Weges“. Darüber hinaus kamen bei den Diskussionen vor allem die programmatischen Schwerpunkte der Alternative zu kurz, was schon vor der heißen Phase des Wahlkampfs zu einem Glaubwürdigkeitsverlust bei der potentiellen Wählerschaft führte. Am 4. Mai zog sich schließlich die União Brasil in Form einer Videobotschaft des Parteivorsitzenden Luciano Bivar von dem gemeinsamen Vorhaben zurück. Noch ist unklar, wer für seine Partei kandidieren wird. Im Gespräch sind der Parteivorsitzende selbst, sowie Sérgio Moro.[8] Die Streitigkeiten verdeutlichen, dass ein möglicher alternativer „dritter Weg“ immer unwahrscheinlicher wird.
Bilanz des Zeitfensters für Parteienwechsel
Für Spannung sorgten auch die Parteienwechsel, die bis Anfang April möglich waren. Zwischen sechs und sieben Monaten vor den Parlamentswahlen, also von März bis April 2022, war es Stadträten und Abgeordneten möglich, einer anderen Partei beizutreten, ohne ihr laufendes Mandat zu verlieren. Im März machten insgesamt 132 Abgeordnete davon Gebrauch. Als eindeutiger Gewinner der Umverteilung des Kräftegleichgewichts ging die liberale Partei PL von Präsident Jair Bolsonaro hervor, die 33 neue Abgeordnete – vor allem aus der der União Brasil - gewann und nun mit 75 Abgeordneten die stärkste Kraft im Parlament darstellt. Die Arbeiterpartei PT stellt nun die zweitgrößte Fraktion mit 56 Vertretern dar, gefolgt von den Progressistas (50 Abgeordnete) und den Republikanern (45 Abgeordnete). Die sozialistische Partei PSD und die PSDB zählen zu den Verlierern des diesjährigen Wechselfensters.[9] Unklar ist derzeit noch, wie sich das Kräfteverhältnis nach den diesjährigen Parlamentswahlen konstituieren wird.
Der Wahlkampf
Das dominierende Thema im aktuellen Wahljahr ist Umfragen zufolge die Wirtschaft. So machen den Brasilianern vor allem die Arbeitslosigkeit, Inflation, die mit 11,3 Prozent zwischen März 2021 und 2022 einen Rekordwert seit der Einführung der Landeswährung Real 1994 erreicht,[10] und die steigenden Lebenshaltungskosten, insbesondere im Bereich der Lebensmittel-, Energie- und Spritpreise extrem zu schaffen. War 2018 Korruption ein zentraler Aspekt für die Wahlentscheidung, so haben vor allem die sozioökonomischen Folgen der Covid-19-Pandemie nachhaltige Spuren hinterlassen. Die amtierende Regierung versucht daher durch Sozialhilfemaßnahmen wie dem Auxilío Brasil[11] in der ärmeren Bevölkerungsschicht zu punkten, die tendenziell eher die PT wählt.[12] Lula hingegen versucht unter anderem, mit linkspopulistischen Wirtschaftsrezepten wie der Anhebung des Mindestlohns und der Verstaatlichung von Unternehmen zu überzeugen.[13] Auch die Einführung eines Medienkontrollgesetzes ist im Gespräch.[14] Neben den unschlüssigen Wählern im Allgemeinen versuchen sowohl Bolsonaro als auch Lula vor allem die einflussreichen Evangelikalen sowie Jugendliche und junge Erwachsene für sich zu gewinnen.
Die Altersgruppe zwischen 16 und 24 Jahren umfasst 29 Millionen Personen, also 19 Prozent der wahlberechtigten Bevölkerung Brasiliens. Die Stimmen dieser Wähler für sich zu gewinnen, könnte den Ausgang der Wahlen entscheidend verändern. Zum Erreichen des jüngeren Publikums setzen die Kampagnenteams vor allem auf soziale Netzwerke, treffen dabei aber nicht unbedingt den richtigen Ton.[15] Angesichts des mangelnden Interesses an Politik und der vorherrschenden Polarisierung der Gesellschaft zwischen den Anhängern der PT und der Bolsonaro-Partei PL bringen sich auch immer mehr Künstler und Influencer ins Wahlgeschehen ein. So rief beispielsweise die populäre Sängerin Anitta ihre Fans - darunter vor allem die Erstwähler zwischen 16 und 17 Jahren - dazu auf, sich im Wahlregister einzutragen. Die zuletzt genannte Altersgruppe umfasst rund sechs Millionen Wahlberechtigte, die von der Wahlpflicht befreit sind. Das Engagement der Künstler sowie die Bemühungen des Obersten Wahlgerichts TSE führten dazu, dass nun insgesamt zwei Millionen dieser Erstwähler mitwählen können. Dies sind 47,2 Prozent mehr als in einem vergleichbaren Zeitraum im Wahljahr 2018.[16]
Abkommen des Wahlgerichtshofs mit Onlinedienstleistern
Soziale Medien spielen im brasilianischen Wahlkampf eine zentrale Rolle. Zwar stehen den Parteien auch öffentliche Mittel und Sendezeiten in den traditionellen Medien (Fernsehen, Radio) zu, die Messengerdienste und Onlineplattformen ermöglich jedoch eine breitere Streuung von Informationen und eine dezidiertere Segmentierung der Zielgruppen. Dies stellt die Aufsichtsbehörden vor die zentrale Herausforderung, Desinformation und Fake News vorzubeugen bzw. zu unterbinden. Der Oberste Wahlgerichtshof TSE traf daher Vereinbarungen mit den führenden Anbietern wie Facebook, YouTube, WhatsApp, TikTok und - nach einer juristischen Auseinandersetzung - schließlich auch mit Telegram, um die Verbreitung von Falschinformationen und Hetze zu unterbinden. Während der Wahlkampagne werden daher Einschränkungen beim Hochladen und Bewerben von Posts, bei der Größenordnung von Gruppen und bei den Möglichkeiten, Nachrichten weiterzuleiten, geben.[17] Einem Bericht der Zeitung O Globo zufolge hapert es jedoch bei Telegram an der Umsetzung des Beschlusses.[18]
Anfechtungen des Wahlsystems
Nach Trumps Wahlniederlage in den USA hatten Politikwissenschaftler bereits davor gewarnt, dass der brasilianische Präsident bei den nächsten Wahlen in Brasilien die gleiche Strategie anwenden würde. Damals wiederholte Bolsonaro das Trump'sche Narrativ des Wahlbetrugs und war einer der letzten lateinamerikanischen Präsidenten, die Bidens Sieg anerkannten. Seitdem sind die Angriffe auf das brasilianische Wahlsystem zu einem zentralen Anliegen Bolsonaros geworden, das im August 2021 in der vorgeschlagenen Verfassungsänderung (PEC) 135 gipfelte, die elektronische Wahlurne in Brasilien abzuschaffen und zu physischen Stimmzetteln zurückzukehren.
Der Vorschlag wurde im Kongress abgelehnt, weil es sich um einen Versuch handelte, die Verfassung zu ändern, wofür drei Fünftel der Mitglieder des Kongresses erforderlich sind (308).
Im Wahljahr ist zu beobachten, dass Präsident Bolsonaro den Diskurs der angeblichen Unzuverlässigkeit der elektronischen Wahlurnen fortsetzt, um im Falle einer Niederlage diese womöglich nicht anzuerkennen.
Die Ablehnung des elektronischen Wahlsystems durch die Bolsonaro-Regierung führte ebenso zu einem Konflikt zwischen dem Obersten Wahlgerichtshof TSE und dem Verteidigungsministerium. Nach Bolsonaros Vorstellungen soll dem Militär eine aktivere Rolle bei der Wahlbeobachtung zukommen. Außerdem bestand er darauf, dass die Einladung des TSE an die Europäische Union, die Wahlen zu beobachten, zurückgezogen werde.[19] Der Bolsonaro-nahe Verteidigungsminister Paulo Sérgio Nogueira forderte zudem ein, an den Sitzungen der Kommission für Wahltransparenz CTE teilnehmen zu dürfen.[20]
Tendenzen und Ausblick
Brasilien erlebt ein Wahljahr mit zwei möglichen Hauptkandidaten an entgegengesetzten Polen des politischen Spektrums. Neu ist, dass beide die Präsidentschaft bereits innehatten, was die Ungewissheit darüber, was von einer zukünftigen Regierung zu erwarten ist, auf beiden Seiten verringert.
Laut aktueller Umfragen führt Lula zwar immer noch und die Forschungsinstitute gehen aktuell von einer Stichwahl zwischen Präsident Bolsonaro und Lula am 30. Oktober aus, doch verringerte sich der Abstand zwischen den beiden Spitzenkandidaten auf neun Prozentpunkte.[21] Sicherlich ist davon auszugehen, dass die hohen Zustimmungswerte für Lula sich nicht aus dessen absoluter Beliebtheit erklären, sondern eher aus der Sorge vor einer zweiten Amtszeit Bolsonaros. Dessen Zustimmung wiederum setzt sich aus einem Großteil derer zusammen, die eine linke Regierung entschieden ablehnen. So ist es auch zu erklären, dass der Rückzug der Kandidatur Moros eher Bolsonaro begünstigt. Der Präsident selbst scheint sich in jüngster Zeit ein wenig zurückzunehmen und lässt eher andere für sich sprechen. Ironische Kommentare wie die des Präsidenten des Obersten Militärgerichts STM, General Luís Carlos Gomes Mattos, über die Folter während der Militärdiktatur („[Die Bekanntmachung der Audios über die Folter von Schwangeren] hat niemandem das Osterfest verdorben“)[22] und die Begnadigung des Abgeordneten Daniel Silveira, der wegen Demokratiefeindlichkeit und Anstiftung zu Unruhen vom Obersten Verfassungsgericht STF zu einer Gefängnisstrafe verurteilt worden ist,[23] sorgten für eine Welle der Empörung.
Angesichts der Dominanz der ökonomischen Variablen bei den Wahlentscheidungen bleibt dennoch abzuwarten, inwieweit die aktuellen Vorkommnisse den Wahlausgang tatsächlich beeinträchtigen werden. Hinsichtlich der Annahme einer etwaigen Niederlage Bolsonaros werden Aussagen wie „Die Wahlurne ist nicht fälschungssicher, sie ist durchlässig, ja. Aber ich werde nicht darüber sprechen, die Streitkräfte kümmern sich darum“[24] mit großer Besorgnis verfolgt. Ob solchen Androhungen in populistischer Manier tatsächlich Taten folgen werden, bleibt abzuwarten. Auf jeden Fall ist der Wahlausgang in Brasilien keinesfalls sicher und es wird entscheidend sein, welche Parteien letztendlich welchen Kandidaten unterstützen.
[1] https://www.tse.jus.br/eleicoes/processo-eleitoral-brasileiro/candidaturas
[2] https://www.dw.com/es/lula-perfila-su-candidatura-junto-a-su-antiguo-rival-alckmin/a-61415739
[3] https://g1.globo.com/politica/eleicoes/2022/noticia/2022/04/11/eleicoes-2022-bolsonaro-diz-que-ha-90percent-de-chance-de-braga-netto-compor-chapa-como-candidato-a-vice.ghtml
[4] https://www.lanacion.com.ar/el-mundo/con-movimientos-erraticos-la-tercera-via-brasilena-se-debilita-y-consolida-la-polarizacion-entre-nid01042022/
[5] https://www.france24.com/es/minuto-a-minuto/20220428-comit%C3%A9-de-onu-concluye-que-la-operaci%C3%B3n-lava-jato-viol%C3%B3-derechos-de-lula
[6] https://www.cnnbrasil.com.br/politica/uniao-mdb-e-psdb-decidem-anunciar-candidatura-unica-em-1o-de-junho/
[7] https://g1.globo.com/politica/eleicoes/2022/noticia/2022/04/20/em-conversas-com-a-3a-via-ciro-aposta-que-grupo-vai-adiar-anuncio-de-pre-candidato-unico.ghtml
[8] https://g1.globo.com/politica/eleicoes/2022/noticia/2022/05/04/uniao-brasil-anuncia-que-nao-se-juntara-a-partidos-da-terceira-via-e-lancara-chapa-pura.ghtml
[9] https://cultura.uol.com.br/noticias/47997_janela-partidaria-veja-as-mudancas-das-bancadas-para-as-eleicoes-de-2022.html
[10] https://www.ibge.gov.br/explica/inflacao.php
[11] Hierbei handelt es sich um ein Hilfsprogramm, das bar direkt vom Staat an Bedürftige ausgezahlt wird, s. https://www.gov.br/cidadania/pt-br/auxilio-brasil.
[12] https://g1.globo.com/politica/blog/valdo-cruz/post/2022/04/19/pacote-de-bondades-de-bolsonaro-por-reeleicao-obriga-quem-estiver-no-poder-em-2023-a-fazer-ajuste-fiscal.ghtml
[13] https://www.bbc.com/portuguese/brasil-61350824
[14] https://www.cnnbrasil.com.br/politica/interesse-de-lula-em-regular-midia-levanta-temor-de-controle-e-censura-segundo-especialistas/
[15] Casado, Letícia e Moraes Moura, Rafael (20.04.2022): „O rolê dos candidatos”. In: Veja, Ausgabe 2785, Jahr 55, Nr. 15, S. 24-29.
[16] https://valor.globo.com/politica/noticia/2022/05/05/brasil-ganha-mais-de-2-milhoes-de-jovens-eleitores-de-janeiro-a-abril-informa-tse.ghtml
[17] https://www.bbc.com/portuguese/brasil-60896482
[18] https://blogs.oglobo.globo.com/sonar-a-escuta-das-redes/post/telegram-ignora-acordo-para-reverter-bloqueio-e-nao-inibe-fake-news-em-canais-mais-populares.html
[19] https://congressoemfoco.uol.com.br/area/pais/tse-recua-e-uniao-europeia-nao-sera-observadora-nas-eleicoes-do-brasil/
[20] https://www.cnnbrasil.com.br/politica/ministro-da-defesa-pede-ao-tse-para-participar-diretamente-de-grupo-sobre-transparencia-das-urnas/
[21] https://www.band.uol.com.br/eleicoes/noticias/eleicoes-2022-lula-lidera-com-41-bolsonaro-tem-32-e-ciro-9-diz-pesquisa-16507920
[22] https://www.brasildefato.com.br/2022/04/19/presidente-do-tribunal-militar-ironiza-audios-sobre-tortura-nao-estragou-a-pascoa-de-ninguem
[23] https://blogs.oglobo.globo.com/malu-gaspar/post/bolsonaro-daniel-silveira-e-democracia-por-um-fio-de-novo.html
[24] https://www.cnnbrasil.com.br/politica/bolsonaro-volta-a-questionar-seguranca-da-urna-eletronica-nao-e-inviolavel-e-penetravel-sim/