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

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/

Asset Publisher

Contact

Anja Czymmeck

Anja Czymmeck

Head of the France Office

anja.czymmeck@kas.de +33 156 69 15 00
Contact

Carmen Leimann-López

Portrait Carmen Leimann-López

Team Latin America

carmen.leimann@kas.de +55 21 22205441

comment-portlet

Asset Publisher