Asset-Herausgeber

Fehler bei der Verarbeitung der Vorlage.
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-Herausgeber

Obwohl terroristische Gruppierungen in Westafrika bereits seit zwei Jahrzehnten aktiv sind, hat sich die Sicherheitssituation in der Region in den letzten Monaten nochmal massiv verschlechtert und bedroht mittlerweile in einigen Ländern die staatliche Integrität. Statt effektiv eingedämmt zu werden, dringt der Terror in Westafrika immer weiter in Richtung des Golfs von Guinea vor. In vielen der betroffenen Gebiete scheint der Staatsapparat wie gelähmt und hat den islamistischen Extremisten nicht viel entgegenzusetzen. Dies gilt insbesondere auch im Bereich der Strafverfolgung. Dabei sind vor allem Mali und Niger bereits seit vielen Jahren betroffen. Den Regierungen gelingt es trotz großer Militäreinsätze nicht, die Lage unter Kontrolle zu bekommen.  Anfang Dezember 2021 kamen zuletzt etwa 140 Menschen ums Leben, als bewaffnete islamistische Rebellen einen Stützpunkt der G5 Sahel in der Region Tillabéri im Niger stürmten. Auch die zunächst weitgehend verschonte Côte d‘Ivoire wurde im letzten Jahr trotz erhöhter Sicherheitsmaßnahmen wieder zum Angriffsziel islamistischen Terrors. Laut dem Global Terrorism Index von April 2022, ist die Côte d’Ivoire inzwischen auf dem vierten Platz der vom Terror betroffenen Länder der westafrikanischen Wirtschafts- und Währungsunion UEOMA (Union économique et monétaire ouest-africaine).

Im Tschad steigt die Zahl der Anschläge seit Jahren kontinuierlich – trotz der damaligen Einschätzung der Regierung, der Terror betreffe nur die Nachbarländer. Auch Burkina Faso erlebte jüngst eine Serie von Terroranschlägen durch Extremisten mit Verbindungen zur al-Quaida und dem Islamischen Staat, was aufgrund der zunehmenden Unzufriedenheit des Militärs über seine mangelnde Ausrüstung im Kampf gegen den Terrorismus letztlich im Militärputsch Ende Januar 2022 resultierte. So ist inzwischen ein großer Teil des Gebiets entlang der südlichen Grenze Burkina Fasos nicht mehr unter staatlicher, sondern unter dschihadistischer Kontrolle. Jetzt weitet sich der Terror auch nach Benin aus, auf dessen Boden bis dahin keine Anschläge verübt worden waren. In den letzten Monaten gab es mehrere terroristische Anschläge nahe des populären Pendjari Nationalparks, der im Norden an Burkina Faso grenzt, zuletzt im April 2022. Auch der Nationalpark Westbenin im Grenzgebiet zu Niger war bereits dieses Jahr wiederholt Ziel dschihadistischer Angriffe.

Üblicherweise sind die Reaktionen auf die sich in Westafrika immer weiter ausbreitenden Terroranschläge militärischer Natur. Diese sind zum Teil durchaus erfolgreich: die von der ivorischen und der burkinischen Armee geleitete "Operation Comoé" führte beispielsweise zur Zerschlagung eines dschihadistischen Stützpunkts in Burkina Faso. Dass allein militärische Interventionen jedoch nicht ausreichen, um der besorgniserregenden Entwicklung entgegenzuwirken, zeigt sich am Beispiel Mali. Zum einen können militärische Interventionen nicht die sozialpolitischen Probleme in der Region lösen - das rasante Bevölkerungswachstum und die damit einhergehende prekäre Arbeitsmarktsituation führen oft zu einer Perspektivlosigkeit der jungen Generation, welche die Dschihadisten für sich zu nutzen wissen. Zudem wird ein ausschließlich militärischer Ansatz den Anforderungen der Rechtsstaatlichkeit nicht gerecht. Vielmehr müssten auch die nationalen und inter -nationalen Gerichtsbarkeiten und Justizbehörden ihre Aufgaben wahrnehmen, um zum einen die Täter zur Verantwortung zu ziehen und zum anderen ihre Kontrollfunktion im Hinblick auf die Einhaltung der Grundrechte und den Grundsätzen eines fairen Verfahrens auszuüben. Doch inwiefern tragen die Justizbehörden überhaupt zur Terrorismusbekämpfung bei?

 

Juristische Instrumente zur Terrorismusbekämpfung in Westafrika

Die Staaten der Subregion haben schon vor geraumer Zeit damit begonnen, rechtliche Instrumentarien zur Verhinderung und Bestrafung terroristischer Straftaten zu implementieren. So wurden in den betroffenen Staaten spezialisierte Gerichtsbarkeiten geschaffen; darunter der Gerichtshof zur Verfolgung von Wirtschaftsdelikten und Terrorismus (Cour de Répression des Infractions Economiques et du Terrorisme, CRIET) in Benin, die Koordinationsstelle zur Terrorismusbekämpfung in Tschad und die Anti-Terrorismus-Justizabteilungen innerhalb der Landgerichte der Hauptstädte (Tribunals de Grande Instance) Malis, Burkina Fasos und Nigers. Am 2. März 2018 verabschiedeten die Präsidenten der obersten Gerichtshöfe der Sahelstaaten einstimmig Empfehlungen zur Terrorismusbekämpfung – ein Dokument, das einen entscheidenden und einheitlichen Schritt im Engagement der Justiz im Kampf gegen den Terrorismus in der Region darstellen soll. Auch unterhält die Afrikanische Union unter anderem seit 2018 eine Partnerschaft mit der Exekutivdirektion des UN-Ausschusses zur Bekämpfung des Terrorismus und der Kommission für das Tschadseebecken. Die Regionalorganisation westafrikanischer Staaten (ECOWAS) haben darüber hinaus 2019 einen Aktionsplan für den Zeitraum 2020-2024 mit einem Budget von 2,3 Milliarden US-Dollar zur Umsetzung ihrer Strategie zur Terrorismusbekämpfung aufgestellt, der unter anderem die „wirksame Umsetzung von regionalen Rechtsinstrumenten und Maßnahmen“ vorsieht.

 

Herausforderungen für die Justiz im Konfliktkontext

Es liegt mithin nicht an einem Mangel rechtlicher Instrumente im Kampf gegen den Terrorismus. Die Akteure der Justizsysteme sind oft entschlossen, mutmaßliche Terroristen zu ermitteln und vor Gericht zu stellen. Trotz intensiver Bemühungen gelingt ihnen eine effiziente Bekämpfung und Prävention des Terrorismus jedoch nicht. Der Grund für die geringe Anzahl erfolgreicher Ermittlungs- oder Gerichtsverfahren liegt zum einen schlicht in einem Mangel finanzieller und personeller Mittel. Es fehlt an Richtern und Staatsanwälten, an Kapazitäten der Kriminaltechnik und der Ermittlungsbehörden.

Auch die begrenzte Präsenz der Behörden in abgelegenen Gebieten trägt zu einer ineffizienten Strafverfolgung bei. Durch die teils großen Entfernungen zwischen dem Ort des Anschlags und der jeweiligen Hauptstadt, in der die Ermittlungen durch zentrale Dienststellen geführt werden, kommt es häufig zu erheblichen zeitlichen Verzögerungen. Die mangelnde Präsenz lokaler Ermittlungsbehörden führt nicht nur dazu, dass die Voraussetzungen für eine breitere Einflussnahme terroristischer Vereinigungen geschaffen werden, sondern auch dazu, dass das Militär die Aufgaben der Polizeibehörden übernimmt, Verdächtige anhört und Gegenstände beschlagnahmt. Ob hierbei rechtsstaatliche Grundsätze eingehalten werden, kann zumindest bezweifelt werden. Laut unabhängigen Berichten haben beispielsweise Malis nationale Streitkräfte im Rahmen ihrer Anti-Terror Operationen zwischen 2018 und 2020 mehrere unrechtmäßige Tötungen und außergerichtliche Hinrichtungen durchgeführt. Weiterhin korrespondiert mit dem Mangel an Präsenz von lokalen Justiz- und Polizeibehörden ein Mangel an Schutz für die Zivilbevölkerung. In abgelegenen Gegenden, in denen jeder jeden kennt, ist schnell klar, wer mit der Justiz gesprochen hat. Zeugen und Opfer scheuen daher das Risiko einer offiziellen Aussage, da die Täter häufig in derselben Gegend leben.

Zudem wartet aufgrund der Vielzahl der Anschläge eine schier unübersichtliche Anzahl mutmaßlicher Terroristen auf ein Gerichtsverfahren. Einige der teils willkürlichen Festnahmen resultieren aus Anzeigen, die durch persönliche Streitigkeiten oder religiöse Intoleranz motiviert sind. Auch alternative Formen der Justiz, die unter anderem in Niger und Mali getestet wurden – dort die sogenannte Wahrheits-, Gerechtigkeits- und Versöhnungskommission (la Commission Verité, Justice et Réconciliation) – konnten die Effizienz der Justiz nicht erhöhen. Die nigrische Regierung tat sich beispielsweise schwer damit zu entscheiden, welche Boko-Haram-Aussteiger vor Gericht gestellt und welche in einem Straflager deradikalisiert werden sollten. Bedeutsame Prozesse gegen Urheber extremistischer Anschläge sind in Westafrika die Ausnahme. Der beninische Gerichtshof „Cour de Répression des Infractions Économiques et du Terrorisme“ ist beispielsweise eher für die Verurteilung oppositioneller Politiker und regierungskritischer Journalisten als für Gerichtsverfahren gegen islamistische Extremisten bekannt. Im Dezember 2021 erfolgte zuletzt die Verurteilung der Oppositionspolitikerin und ehemaligen Justizministerin Reckya Madougou, die der Terrorismusfinanzierung bezichtigt wurde. Frau Madougou wurde nach einem Prozess, der weniger als einen Tag dauerte und in dem keine Beweise vorgelegt wurden, zu 20 Jahren Haft verurteilt.

Auch die internationalen Gerichtsbarkeiten haben bisher in der Praxis kaum eine Rolle bei der strafrechtlichen Verfolgung der für den Terror in Westafrika Verantwortlichen gespielt. Zwar kann insbesondere die Zuständigkeit des Internationalen Strafgerichtshof (IStGH) begründet werden, wenn ein Staat selbst nicht willens oder in der Lage ist, Ermittlungen oder die Strafverfolgung durchzuführen. Der IStGH ist im Zusammenhang mit den terroristischen Anschlägen in der westafrikanischen Region jedoch bisher nur einmal durch Mali eingeschaltet worden.

 

Ein starker Rechtsstaat gegen den Terror

Die Zahl der rechtlichen Instrumente, die in der westafrikanischen Subregion zur Bekämpfung des Terrorismus theoretisch zur Verfügung stehen, ist beachtlich. Jedoch bleibt es in der Praxis aufgrund der Koordinationsschwierigkeiten, Ressourcenknappheit und der massiven Zunahme von Terrorismusfällen in vielen Ländern bei den erheblichen Schwierigkeiten und Hindernissen für das unterfinanzierte Justizsystem.

Vor diesem Hintergrund müssen nicht nur die Staaten der Region weitaus umfassender in ein funktionierendes Justizsystem investieren, auch die internationale Entwicklungszusammenarbeit sollte dieses Thema endlich stärker in den Fokus nehmen. Die militärische Komponente muss dringend durch einen umfassenden rechtsstaatlichen Ansatz ergänzt werden, bei dem die Verfolgung und die Verurteilung extremistischer Gewalttäter in erster Linie durch die zuständigen Behörden und Gerichte erfolgt. Nur so gibt es eine Chance, die sich immer schneller drehende Gewaltspirale in der Region zu beenden und das Vertrauen der Bürger in einen Staat, der auf Grundlage des Prinzips der Gewaltenteilung und Gesetzen agiert, wiederherzustellen. Denn es ist oft genau dieser Mangel an Vertrauen gegenüber dem Staat, der die Menschen der Region häufig in die Arme dschihadistischer Gruppen treibt.

Asset-Herausgeber

Kontakt

Ingo F.J. Badoreck

Ingo Badoreck KAS

Referent für Wirtschaft und das frankophone Subsahara Afrika

ingo.badoreck@kas.de

comment-portlet

Asset-Herausgeber