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>
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.
Themen
Über diese Reihe
Die Konrad-Adenauer-Stiftung ist in rund 110 Ländern auf fünf Kontinenten mit einem eigenen Büro vertreten. Die Auslandsmitarbeiter vor Ort können aus erster Hand über aktuelle Ereignisse und langfristige Entwicklungen in ihrem Einsatzland berichten. In den "Länderberichten" bieten sie den Nutzern der Webseite der Konrad-Adenauer-Stiftung exklusiv Analysen, Hintergrundinformationen und Einschätzungen.