アセットパブリッシャー

テンプレート処理中にエラーが発生しました。
The following has evaluated to null or missing:
==> FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) [in template "252001#252047#252845" at line 127, 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 127, 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 
98 title = entry.getTitle(languageId) 
99 data = { 
100 "title": title 
101
102 /> 
103 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" /> 
104 
105 <#if hasContent('untertitel', languageId, json)> 
106 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } > 
107 </#if> 
108 
109 <#if hasContent('beschreibung', languageId, json)> 
110 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } > 
111 </#if> 
112 
113 <#-- fill meta data --> 
114 <#assign meta = {} /> 
115 
116 <#-- PUBLIKATIONEN DETAIL --> 
117 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")> 
118 
119 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)> 
120 <#assign 
121 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first") 
122 /> 
123 
124 <#if coverBildString?has_content> 
125 <#assign 
126 coverBild = FrontendService.json.parseAsJson(coverBildString) 
127 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) 
128 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid ) 
129 data = data + { "media": linkToDMT, "meta" : dMTJsonObject } 
130 /> 
131 <#if dMTJsonObject.altText?? > 
132 <#assign data = data + {"alt" : dMTJsonObject.altText} /> 
133 </#if> 
134 <#if dMTJsonObject.quelle??> 
135 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } /> 
136 </#if> 
137 </#if> 
138 <#-- uncomment to display pdf cover as Intro Image 
139 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)> 
140 <#assign 
141 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first") 
142 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/> 
143 <#if fileEntry?has_content> 
144 <#assign 
145 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay) 
146 data = data + { "media": linkToThumbnail } 
147 /> 
148 </#if> 
149 --> 
150 </#if> 
151 
152 <#assign 
153 meta = meta + { "orderInfo": "true" } 
154 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!"" 
155 /> 
156 
157 
158 
159 <#if hasContent('erscheinungsdatum', languageId, json)> 
160 <#assign 
161 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
162 /> 
163 <#if erscheinungsdatum?has_content > 
164 <#assign 
165 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId ) 
166 meta = meta + { "date": erscheinungsdatumFormatted } 
167 /> 
168 </#if> 
169 </#if> 
170 
171 <#if verbundJournalArticle?has_content> 
172 <#assign 
173 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey) 
174 verbundJson = FrontendService.json.parseAsJson(verbundJsonString) 
175 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first") 
176 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first") 
177 /> 
178 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" /> 
179 <#assign meta = meta + { "laufendenummer": laufendenummer } > 
180 
181 <#if coverImg?has_content && coverImg.url?has_content > 
182 <#assign meta = meta + { "coverImg": coverImg.url } > 
183 </#if> 
184 </#if> 
185 
186 
187 <#if meta?has_content> 
188 <#assign data = data + {"meta": meta } > 
189 </#if> 
190 
191 </#if> 
192 <#-- PUBLIKATIONEN DETAIL END --> 
193 
194 
195 <#-- VERANSTALTUNGEN DETAIL --> 
196 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")> 
197 <#assign 
198 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!"" 
199 languages = entry.getAvailableLanguageIds() 
200 links = [] 
201 /> 
202 <#if languages?has_content && friendlyUrl?has_content> 
203 <#if (languages?size > 1) > 
204 <#list languages 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 <#list json["document_pdfDMTBASICDOCUMENT"]?keys as pdf_language> 
411 <#if pdf_language?has_content > 
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 </#if> 
436 </#list> 
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> 

アセットパブリッシャー

Hintergrund

Eines der Wahlversprechen von Präsident López Obrador im Jahr 2018 war, eine revocación de mandato (Widerruf des Mandats) zur Halbzeit seiner Amtszeit zu initiieren. Seinem Narrativ entsprechend solle das kluge Volk (el pueblo sabio) – wie er die mexikanischen Wähler gerne nennt – darüber abstimmen können, ob er seine komplette Amtszeit von sechs Jahren erfüllen oder frühzeitig beenden soll. Volksbefragungen als Element der direkten Demokratie hatte AMLO in seiner Amtszeit bereits mehrfach und mit äußerst niedriger Beteiligung eingesetzt -  zuletzt im August 2021 mit der Frage, ob die Expräsidenten für ihre Handlungen in der Vergangenheit rechtlich belangt werden können. Bei rund 7,5% Wahlbeteiligung hatte diese eine äußerst begrenzte Wirkung und verfehlte die erforderliche Mindestbeteiligung zur Verbindlichkeit bei Weitem.

Hinsichtlich einer Volksbefragung zur Amtsenthebung von Regierungen besteht dieses Instrument in Mexiko bereits seit vielen Jahren in einigen mexikanischen Bundesstaaten1, dort auf die Funktion des Gouverneurs bezogen, ohne dass dies jemals zu einer Amtsenthebung geführt hätte.

Was auf nationaler Ebene und auf die Person des Staatspräsidenten bezogen zunächst lediglich ein Wahlslogan war, wurde nun eine gesetzliche Bestimmung mit Gültigkeit für das höchste Amt und alle 32 Gouverneure. Bereits 2019 wurde die entsprechende Verfassungsreform im Senat und der Abgeordnetenkammer verabschiedet und am 20. Dezember desselben Jahres veröffentlicht. Um die notwendigen Stimmen der Oppositionsparteien für die Verfassungsreform zu gewinnen, wurde seinerzeit zwischen Regierung und Opposition vereinbart, dass der Widerrufsgrund der "Vertrauensverlust" des Präsidenten sein muss. Die Änderungen der erforderlichen Gesetze wurden schlussendlich am 14. September 2021, fast genau zur Mitte seiner Amtszeit, verabschiedet.


Die Volksbefragung zum Widerruf seines Mandats fand dementsprechend am 10. April 2022 statt und wurde vom Nationalen Wahlinstitut (Instituto Nacional Electoral, INE) organisiert, welches sich lange und vehement außer Stande erklärt hatte, diese zusätzliche Aufgabe nach den erfolgten drastischen Budgetkürzungen ordnungsgemäß durchführen zu können. Dieser Streit zwischen Regierung und INE eskalierte bis zum Obersten Gerichtshof, der letztlich das INE verpflichtete dieser Aufgabe nachzukommen. Es war so eine neue Stufe in der sich seit Monaten zuspitzenden Auseinandersetzung zwischen Regierung und INE erreicht, die gleichzeitig auch die Grundlage für eventuelle Schuldzuweisungen nach dem Referendum für eventuelle Kontroversen im Falle eines aus Regierungssicht negativen Ergebnisses legte.


Ein polarisierendes Ergebnis
 

Bei einer Beteiligung von rund 16 Millionen Mexikanern (17,5 % der nominellen Wählerliste) stimmten 91,1 % für den Verbleib des Präsidenten im Amt, während sich nur 7,5 % dagegen aussprachen. Präsident Andrés Manuel López Obrador versicherte dennoch bereits nach den vorläufigen Ergebnissen in der Nacht zum Montag, dass es “ohne Zweifel eine transzendente Nacht (sei), denn zum ersten Mal wird ein Verfahren zum Widerruf des Mandats durchgeführt, eine Konsultation, um die Bürger zu fragen, ob sie die Fortsetzung des Präsidenten der Republik wollen oder nicht, es ist etwas noch nie Dagewesenes und ein Schritt vorwärts, um unsere Demokratie zu behaupten“2.

Blickt man auf die regionalen Unterschiede, so waren die Bundesstaaten des mexikanischen Südostens diejenigen, die am 10. April die höchste Beteiligung verzeichneten. Die Bürgerbeteiligung in Tabasco, dem Heimatstaat des mexikanischen Präsidenten, war (wenig überraschend) mit 35,9 Prozent der Staat, mit der höchsten Beteiligung im Land. Andererseits waren die Bundesstaaten des Centro-Bajío und des Nordens des Landes diejenigen, die sich am wenigsten an dem Referendum von López Obrador beteiligten3. Ein Gefälle, das sich auch in der sozioökonomischen Realität und den politischen Präferenzen widerspiegelt.
 

Klare Haltung der Opposition

So euphorisch AMLO und die ihn unterstützenden MORENA-Gefolgsleute die 91,1% Zustimmung feierten, so deutlich kritisierten die diversen Oppositionsparteien mit Verweis auf die bescheidene Wahlbeteiligung von 17,5% das gesamte Verfahren. Die Oppositionsparteien des Bündnisses „Va por México“ von PAN, PRI und der PRD warfen AMLO vor, dass das Referendum "Versagen" und eine Übung zur "Befriedigung des Egos des Präsidenten"4 gewesen seien und forderten die Annullierung des Verfahrens. Die PAN stellte zudem den Geldbetrag in Frage, der in die Beratung und Logistik zum Widerruf des Mandats investiert wurde und hob hervor, dass wertvolle Ressourcen, die man anderweitig hätte nutzen können, zu diesem Selbstzweck verschwendet wurden5. Auch der Vorsitzende der „Movimiento Ciudadano“ (die nicht dem offiziellen Oppositionsbündnis angehört),  Dante Delgado, äußerte sich mit den Worten: „Der Widerruf des Mandats muss ein Instrument im Dienste der Bürger sein, kein Instrument im Dienste der Eitelkeit des Präsidenten“6.

Wahlkampagne und die Rolle des Nationalen Wahlinstituts


Das Argument der Illegalität und der Verfassungswidrigkeit von Entscheidungen und Handlungen mexikanischer Regierungen wird, historisch gesehen, intensiv bis exzessiv verwendet. Bei mehr als einer Gelegenheit wurde so je nach Interessenslage oder politischer Konfiguration versucht, eine Verfassungswidrigkeit in jeder einzelnen politischen Handlung zu finden. Doch selten wurde die normative Ordnung so eindeutig und offen konterkariert, wie es während dieses Wahlprozesses der Fall war.

Die Unregelmäßigkeiten begannen bereits im Prozess der Unterschriftensammlung. Nach Angaben des INE wiesen von den 3.451.843 gesammelten Unterschriften (das entspricht 3,75 % der auf der nominellen Liste eingetragenen Personen)7 1.027.822 dieser Unterschriften Irregularitäten auf, ohne dass dies zur Annullierung des gesamten Prozesses führte8. Somit war aber schon die Genese und damit die Zulassung dieser Volksbefragung fragwürdig.

Zudem kam es im Laufe der Wahlkampagne häufig zu verbalen Attacken bzw. Auseinandersetzungen zwischen dem INE und Regierungsmitgliedern bzw. Vertretern der Regierungsparteien und zu etlichen Verstößen gegen das bestehende Wahlrecht. Tatsächlich hat die Comisión de quejas y denuncias (Beschwerde- und Anzeigekommission) des INE seit Februar 2022 mehr als 180 vorsorgliche Maßnahmen wegen Verstößen gegen die Verfassung durch Beamte verschiedener Ebenen erlassen9: Abgeordnete, Gouverneure, die Regierungschefin der Stadt Mexiko, die Kommunikationsbeauftragte der Präsidentschaft und sogar den Präsidenten der Republik höchstpersönlich, ohne dass dies unmittelbare rechtliche Konsequenzen zur Folge gehabt hätte.

Diese Maßnahmen verdeutlichen das in höchstem Masse angespannte Verhältnis zwischen Bundesregierung und Regierungspartei einerseits und der Wahlbehörde andererseits. AMLO selbst hat angekündigt, dass er unmittelbar nach dem Referendum dem Kongress eine Initiative zur Wahlreform vorlegen wird, die neben dem Vorschlag, dass Wahlräte und Magistrate durch direkte Wahl gewählt werden, auch eine erhebliche Senkung des Budgets für den Betrieb des Nationalen Wahlinstituts und dessen föderalen Charakter beinhalten wird. Dies, nachdem er dem INE, das er als "teuersten Apparat zur Organisation von Wahlen, den teuersten der Welt"10 bezeichnet, wiederholt vorgeworfen hatte, für "politische Zwecke zu handeln“ und dass dessen Ermittlungen und Pochen auf die Einhaltung der Wahlgesetze als "Angriffe auf die Demokratie" zu deuten sind.

Diese Auseinandersetzungen lösten aber auch eine politische Kampagne zur Verteidigung des Nationalen Wahlinstituts INE mit dem Ziel aus, diese Institution, die in Umfragen eine ähnlich hohe Zustimmung wie der Staatspräsident selbst erfährt und damit weit über allen anderen politischen Institutionen des Landes liegt, zu verteidigen. So wies auch  Lorenzo Córdova, Vorsitzender der Wahlbehörde darauf hin, dass „derjenige, der gegen die Regeln verstößt, nicht nur schummelt, nicht nur Betrug begeht, sondern auch die Grundlagen des demokratischen Zusammenlebens untergräbt“11. Ohne den Staatspräsidenten jemals direkt zu zitieren, bekundete Córdova (in Interviews in den Medien und in offiziellen Erklärungen), dass „wir heute in einer Polarisierung leben, die Freunde und Feinde scharf, intolerant und vereinfachend voneinander trennt“12 was, historisch gesehen, der Nährboden für Autoritarismus ist.


Eine tief gespaltene mexikanische Gesellschaft


Die Ergebnisse des Widerrufs des Mandats spiegeln die tiefe Polarisierung wider, die im mexikanischen politischen System bzw. in der mexikanischen Gesellschaft vorherrscht. Die ernüchternde Wahlbeteiligung von knappen 18% und eine große Zahl an Nichtwählern einerseits sind auch Ausdruck eines Desinteresses bis hin zu einer deutlichen Absage an die Regierung (das war auch erklärtes Ziel der Opposition mit der mehrheitlichen Aufforderung dem Referendum als Protestaktion fernzubleiben). Auf der anderen Seite sind 91 % bzw. 15 Mio. Stimmen Zustimmung auch Ausdruck einer treu zu AMLO und seiner Politik stehenden Bevölkerung (auch wenn es zahlreiche Hinweise dafür gab, dass diese Stimmen in bewährter mexikanischer Manier zum Urnengang gekarrt wurden). 

Für Präsident López Obrador und seine politische Bewegung MORENA war das Ergebnis aber der erhoffte Rückenwind, zumindest lässt es sich so darstellen. "Es war ein Erfolg. Liebe wird mit Liebe zurückgezahlt“ – bekräftigte der Präsident in der Nacht des Referendums, während er - und dies nicht zum ersten Mal - betonte, dass er sich 2024 nicht wiederwählen lassen wird, eine Aussage, die allein schon deshalb auffällig ist, weil eine solche Wiederwahl zumindest in der derzeitigen Verfassung explizit ausgeschlossen ist. 
 

Ausblick

Die MORENA-Partei wird sich jetzt auf die Ergebnisse dieses Referendums stützen und geht nicht nur im Hinblick auf die Wahlen am 5. Juni 202213 gestärkt in den Wahlkampf, sondern schafft sich somit auch eine starke Position für 2024. Ob dann aber die auf die Person López Obrador konzentrierte Zustimmung auch von einem seiner potentiellen Nachfolger kapitalisiert werden kann, ist noch völlig offen, auch bei MORENA sind die Nachfolgekämpfe bereits in vollem Gange.

Für die Oppositionsparteien, insbesondere die PAN, liegt die Herausforderung darin sich eben nicht nur als Opposition gegen MORENA oder gar AMLO zu positionieren, sondern sich wieder zu einer glaubwürdigen Regierungsalternative zu entwickeln und so einen genuinen demokratischen Wettstreit zu betreiben, bei dem dann in letzter Instanz die mexikanischen Wählerinnen und Wähler das letzte Wort haben.

----

[1] Chihuahua 1997, Zacatecas 1998, Aguascalientes und Guerrero 2014, Nuevo Leon und Jalisco 2016 und Ciudad de Mexico 2018.

[2] https://notiammex.com/consulta-popular-2022/revocacion-de-mandato-2022/es-una-noche-trascendente-porque-por-primera-vez-se-realiza-una-revocacion-de-mandato-amlo/

[3] Jalisco, Aguascalientes, Durango und Guanajuato zwischen 9 und 9,5%

[4] https://twitter.com/alitomorenoc/status/1513304200058392587?s=20&t=rYZIjzzYYwDroC510zPkYg 

[5] https://twitter.com/MarkoCortes/status/1513380380400930817?s=20&t=zidvjRlQaMAX85LJSUUMQQ

[6] https://twitter.com/DanteDelgado/status/1513218945557401603?s=20

[7] Erforderlich waren 3% der Liste, also 2.758.227 Unterschriften, die Mindestzahl wurde also nicht allzu deutlich übertroffen.

[8] Zu den Unregelmäßigkeiten gehörten 17.833 Unterschriften von Toten; 1.265 Unterschriften von Inhaftierten; 132 Aufzeichnungen mit unregelmäßigen Daten, die eine fiktive Persönlichkeit schaffen; 22 Simulationen, bei denen Vorlagen des Berechtigungsnachweises zur Abstimmung verwendet wurden, und 5 Usurpationen, bei denen die Persönlichkeit eines Dritten angezeigt wird

[9] https://www.animalpolitico.com/2022/04/ine-283-quejas-relacionadas-con-revocacion-de-mandato/

[10] https://elpais.com/mexico/2021-07-23/lopez-obrador-redobla-los-ataques-al-ine-en-visperas-de-la-consulta-sobre-los-expresidentes.html

[11]https://www.reforma.com/aplicacioneslibre/preacceso/articulo/default.aspx?__rval=1&urlredirect=https://www.reforma.com/diez-anomalias-electorales-que-no-deben-repetirse-2022-04-11/op224540?referer=--7d616165662f3a3a6262623b727a7a7279703b767a783a--

[12] Idem.

[13] Gouverneurswahlen in 6 Bundesstaaten, die allesamt bis dato nicht von MORENA regiert werden (Aguascalientes, Durango, Hidalgo, Oaxaca, Quintana Roo, und Tamaulipas) und bei denen die Regierungspartei von der begründeten Hoffnung ausgeht, ihre Territorialmacht weiter auszubauen.

シェア

アセットパブリッシャー

担当者

Ing. Hans-Hartwig Blomeier

Hans Blomeier

Leiter des Auslandsbüros Mexiko

hans.blomeier@kas.de +52 55 55664599
担当者

Laura Philipps

Laura Philipps

Internationale Medienprogramme

laura.philipps@kas.de +49 30 26996-3249

comment-portlet

アセットパブリッシャー

アセットパブリッシャー

このシリーズについて

コンラート・アデナウアー財団 は世界5大陸、70カ国に事務所を開設しています。地元の国外スタッフは、活動地域における最新の出来事や長期的な動向について、直接報告することができます。コンラート・アデナウアー財団のウェブサイトのユーザーの皆様に、「カントリーレポート」という形で、特別な分析、背景情報や評価、予測を提供しています。