Asset Publisher

An error occurred while processing the template.
For "...[...]" left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar):
==> mediumData [in template "252001#252047#WCD_DEBATTENBLOG_ARTIKELDETAIL_INTRO" at line 67, column 93]
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign linkToDMT = FrontendService.m... [in template "252001#252047#WCD_DEBATTENBLOG_ARTIKELDETAIL_INTRO" at line 67, column 3]
----
1<#-- bezieht sich auf WCS Publikation --> 
2<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
3<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
4<#assign version = .vars['reserved-article-version'].data?number /> 
5<#assign articleId = .vars['reserved-article-id'].data /> 
6<#assign article = JournalArticleLocalService.fetchArticle( articleGroupId, articleId , version ) /> 
7<#assign articleTitle = .vars['reserved-article-title'].data/> 
8 
9<#if requestMap??>  
10 <#assign 
11 renderUrl = requestMap['render-url'] 
12 control_panel = renderUrl?contains('control_panel')  
13
14</#if> 
15  
16<#if control_panel?? && control_panel> 
17 <#if FrontendService.user.isPrivilegedUser(permissionChecker.getUser())> 
18 <pre> 
19 articleId = ${.vars['reserved-article-id'].data} 
20 version = ${.vars['reserved-article-version'].data} 
21 groupId = ${articleGroupId} 
22 structurekey = ${article.getDDMStructureKey()} 
23 </pre> 
24 <pre> 
25 ${FrontendService.json.transformToJson( article, true )} 
26 </pre> 
27 </#if> 
28<#else>  
29 <#include "${fullTemplatesPath}/macros/page-modules/PMShare.ftl" /> 
30  
31 <#-- Function for related Content for PERSON --> 
32 <#function getSaxReaderDocument dataObj > 
33 <#local document = "" > 
34  
35 <#attempt> 
36 <#local data = dataObj.getData()?eval > 
37 <#local classPK = data.classPK > 
38 <#local className = data.className > 
39 <#local entry = AssetEntryLocalService.getEntry(className, classPK?number)! > 
40  
41 <#if entry??> 
42 <#local assetRenderer = entry.getAssetRenderer() /> 
43 <#local journalArticle = (assetRenderer.getArticle())! /> 
44 <#local document = (saxReaderUtil.read(journalArticle.getContentByLocale(locale.toString())))!"" /> 
45 </#if> 
46 <#recover> 
47 <#-- catch block --> 
48 </#attempt> 
49  
50 <#return document > 
51  
52 </#function> 
53  
54<#macro mediaReference groupId uuid > 
55 <#local mediaObj = FrontendService.media.getDMTJsonObject(groupId, uuid, locale)!"" > 
56 
57 <#if mediaObj?has_content && (mediaObj.quelle)?has_content > 
58 <#local source = mediaObj.quelle?substring(1, (mediaObj.quelle?length - 1))> 
59 <#if source?has_content> 
60 <span>${source}</span> 
61 </#if> 
62 </#if> 
63</#macro> 
64 
65<#assign mediumData = coverDMTKASDEMEDIUM.data!""?eval /> 
66<#if mediumData?has_content> 
67 <#assign linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution', mediumData["groupId"]?number, mediumData["uuid"]) /> 
68</#if> 
69 
70<#if !isDPMColorSchemeNEW()> 
71 <div class="c-page-intro c-page-intro--article"> 
72 <div class="o-page-module"> 
73 <div class="c-page-intro__wrapper"> 
74  
75 <#if coverDMTKASDEMEDIUM.getData()?has_content> 
76 <#if linkToDMT?has_content> 
77 <div class="c-page-intro__image" style="background-image:url('${linkToDMT}');"> 
78 <span class="o-imagesource"><@mediaReference mediumData["groupId"]?number mediumData["uuid"] /></span> 
79 </div> 
80 </#if> 
81 </#if> 
82  
83 <div class="c-page-intro__meta"> 
84  
85 <#-- Erscheinungsdatum --> 
86 <#assign erscheinungsdatum_Data = getterUtil.getString(erscheinungsdatum.getData())> 
87  
88 <#if validator.isNotNull(erscheinungsdatum_Data)> 
89 <#assign erscheinungsdatum_DateObj = dateUtil.parseDate("yyyy-MM-dd", erscheinungsdatum_Data, locale)> 
90 <span class="o-metadata o-metadata--date"> 
91 ${dateUtil.getDate(erscheinungsdatum_DateObj, "dd. MMMM yyyy", locale)} 
92 </span> 
93 </#if> 
94  
95 <#-- laufende nummer --> 
96 <#assign article = JournalArticleLocalService.getArticle(groupId, articleId) /> 
97 <#assign verbundJournalArticle = FrontendService.publication.getVerbundToPublikation(article)!"" > 
98  
99 <#if verbundJournalArticle?has_content> 
100 <#assign document = (saxReaderUtil.read(verbundJournalArticle.getContentByLocale(locale.toString())))!"" /> 
101 <#if document?has_content> 
102  
103 <#if document.selectSingleNode("/root/dynamic-element[@name='laufendenummer']/dynamic-content")??> 
104 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='laufendenummer']/dynamic-content") /> 
105 <#assign laufendenummer = node.getText() /> 
106 <#if laufendenummer?has_content > 
107 <span class="o-metadata o-metadata--hash"><@liferay.language key="ausgabe" /> ${laufendenummer}</span> 
108 </#if> 
109 </#if> 
110 </#if> 
111 </#if> 
112  
113 </div> 
114  
115 <#-- Titel --> 
116 <div class="o-page-headline__wrapper"> 
117  
118 <div class="c-share"> 
119 <div class="c-share__wrapper--aside"> 
120 <div class="c-share c-share--aside c-share--aside-new"> 
121 <ul class="c-share__list"> 
122 <@ShareLink "print" /> 
123 <@ShareLink "mail" /> 
124 <@ShareLink "share" /> 
125 </ul> 
126 </div> 
127 </div> 
128 <@ShareOverlay /> 
129 </div> 
130  
131 <h2 class="o-page-headline"> 
132 ${articleTitle} 
133 </h2> 
134 </div> 
135  
136 <#-- Autoren --> 
137 <#if autorenWCSKASDEPERSON.getSiblings()?has_content> 
138 <#list autorenWCSKASDEPERSON.getSiblings() as cur_autorenWCSKASDEPERSON> 
139 <#assign document = getSaxReaderDocument(cur_autorenWCSKASDEPERSON) > 
140  
141 <#if document?has_content> 
142  
143 <div class="c-page-intro__author"> 
144 <@liferay.language key="von" /> 
145  
146 <#if document.selectSingleNode("/root/dynamic-element[@name='vorname']/dynamic-content")??> 
147 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='vorname']/dynamic-content") /> 
148 <#assign vorname = node.getText() /> 
149 <#if vorname?has_content > 
150 ${vorname} 
151 </#if> 
152 </#if> 
153  
154 <#if document.selectSingleNode("/root/dynamic-element[@name='nachname']/dynamic-content")??> 
155 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='nachname']/dynamic-content") /> 
156 <#assign nachname = node.getText() /> 
157 <#if nachname?has_content > 
158 ${nachname} 
159 </#if> 
160 </#if> 
161 </div> 
162 </#if> 
163  
164 </#list> 
165 </#if> 
166  
167 <#-- Untertitel --> 
168 <h2 class="c-page-intro__subheadline"> 
169 ${untertitel.getData()} 
170 </h2> 
171  
172 <#-- Kurzbeschreibung --> 
173 <p class="c-page-intro__copy"> 
174 ${beschreibung.getData()} 
175 </p> 
176  
177 </div> 
178  
179 </div> 
180  
181 </div> 
182<#elseif isDPMColorSchemeNEW()> 
183 <div class="c-page-intro c-page-intro--article"> 
184 <div class="o-page-module"> 
185 <div class="c-page-intro__wrapper"> 
186 
187 <#-- Titel --> 
188 <div class="o-page-headline__wrapper"> 
189  
190 <div class="c-share"> 
191 <div class="c-share__wrapper--aside"> 
192 <div class="c-share c-share--aside c-share--aside-new"> 
193 <ul class="c-share__list"> 
194 <@ShareLink "print" /> 
195 <@ShareLink "mail" /> 
196 <@ShareLink "share" /> 
197 </ul> 
198 </div> 
199 </div> 
200 <@ShareOverlay /> 
201 </div> 
202  
203 <h1 class="o-page-headline"> 
204 ${articleTitle} 
205 </h1> 
206 </div> 
207  
208 <div class="c-page-subheadline__wrapper"> 
209 <div class="c-page-intro__meta"> 
210 
211 <#-- Autoren --> 
212 <#if autorenWCSKASDEPERSON.getSiblings()?has_content> 
213 <#list autorenWCSKASDEPERSON.getSiblings() as cur_autorenWCSKASDEPERSON> 
214 <#assign document = getSaxReaderDocument(cur_autorenWCSKASDEPERSON) > 
215  
216 <#if document?has_content> 
217  
218 <div class="o-metadata o-metadata--author"> 
219  
220 <#if document.selectSingleNode("/root/dynamic-element[@name='vorname']/dynamic-content")??> 
221 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='vorname']/dynamic-content") /> 
222 <#assign vorname = node.getText() /> 
223 <#if vorname?has_content > 
224 ${vorname} 
225 </#if> 
226 </#if> 
227  
228 <#if document.selectSingleNode("/root/dynamic-element[@name='nachname']/dynamic-content")??> 
229 <#assign node = document.selectSingleNode("/root/dynamic-element[@name='nachname']/dynamic-content") /> 
230 <#assign nachname = node.getText() /> 
231 <#if nachname?has_content > 
232 ${nachname} 
233 </#if> 
234 </#if> 
235 </div> 
236 </#if> 
237  
238 </#list> 
239 </#if> 
240  
241 <#-- Erscheinungsdatum --> 
242 <#assign erscheinungsdatum_Data = getterUtil.getString(erscheinungsdatum.getData())> 
243  
244 <#if validator.isNotNull(erscheinungsdatum_Data)> 
245 <#assign erscheinungsdatum_DateObj = dateUtil.parseDate("yyyy-MM-dd", erscheinungsdatum_Data, locale)> 
246 <span class="o-metadata o-metadata--date"> 
247 ${dateUtil.getDate(erscheinungsdatum_DateObj, "dd. MMMM yyyy", locale)} 
248 </span> 
249 </#if> 
250  
251 </div> 
252 <#-- Untertitel --> 
253 <h2 class="c-page-intro__subheadline"> 
254 ${untertitel.getData()} 
255 </h2> 
256 </div> 
257  
258 <#-- Kurzbeschreibung --> 
259 <p class="c-page-intro__copy"> 
260 ${beschreibung.getData()} 
261 </p> 
262  
263 </div> 
264  
265 </div> 
266  
267 </div> 
268 </#if> 
269</#if> 

Asset Publisher

Im Englischen gibt es eine Bezeichnung für eine maximale Katastrophe: perfect storm. Ein solcher scheint sich für viele Menschen in Subsahara-Afrika zusammenzubrauen: zuerst wegbrechende Einkommen während der Corona-Pandemie, dann im Schlepptau der weltwirtschaftlichen Erholung steigende Preise auf breiter Front, die nun durch die Folgen des russischen Angriffskrieges in der Ukraine weiter befeuert werden. Als ob das nicht schon genug wäre, zeichnet sich am Horizont bereits die nächste Unwetterfront für die Volkswirtschaften auf unserem Nachbarkontinent ab: Die Zinswende, die in den USA bereits eingeleitet wurde und in der Eurozone längst überfällig ist, lenkt Investitionsströme um und macht Subsahara-Afrika weniger attraktiv für Anleger.

Insbesondere die steigenden Preise für Energie und Lebensmittel machen es einer wachsenden Zahl von Menschen schwierig bis unmöglich, ihre grundlegendsten Bedürfnisse zu erfüllen. So liegen überall in Afrika die Benzinpreise auf Rekordniveau. Bereits im vergangenen Jahr hatten sie sich beispielsweise in Südafrika um knapp vierzig Prozent erhöht. Nach dem Einmarsch der russischen Armee in die Ukraine stieg der Weltmarktpreis für Rohöl erstmals seit 2014 wieder auf über 100 US-Dollar je Barrel, was die Preisentwicklung weiter hochtrieb. Noch stärkere Preissprünge sind beim Gas zu verzeichnen. Das trifft besonders die vielen Haushalte, die Gas zum Kochen benötigen. In Kenia etwa haben sich die Kosten für die Befüllung eines typischen Sechs-Kilogramm-Gaszylinders innerhalb weniger Monate verdoppelt, was aber auch an Steuererhöhungen liegt, mit denen der Staat seine notorisch klammen Kassen aufbessern wollte.

Die gestiegenen Energiepreise treiben die Kosten für Verbraucher bei Lebensmitteln in die Höhe. Dies trifft auf ein Marktumfeld, das aufgrund der Dürre in Ostafrika, wo die Regensaison bereits im vierten Jahr in Folge praktisch ausfällt, und des kriegsbedingten Wegfalls der Weizenimporte aus Russland und der Ukraine von erheblichen Angebotsrückgängen geprägt ist. Die Angaben über die konkreten Inflationsraten für Nahrungsmittel in Afrika schwanken stark und reichen von einer zwanzigprozentigen Steigerung binnen Jahresfrist in Kenia bis zu einer Verdoppelung der Preise in Togo und in Côte d’Ivoire.

Es ist grundsätzlich festzuhalten, dass fehlende Daten nicht nur die Erfassung der Inflation erschweren, sondern auch zielgerichtete Lösungen verhindern. Die knappen Ressourcen – seien es staatliche oder von privaten Hilfsorganisationen – müssen jedoch möglichst effizient eingesetzt werden, um die Not lindern zu können. Allzu oft erscheint Afrika allerdings auf den Datenkarten als „grauer Fleck“ – „keine Angaben vorhanden“. Es ist zu befürchten, dass gerade dort, wo Daten fehlen, die Lage noch prekärer ist, als es die kumulierten Zahlen für den gesamten Kontinent erahnen lassen.

Die Preissteigerungen treffen die Menschen in Subsahara-Afrika stärker als anderswo, weil südlich der Sahara der Anteil armer Haushalte besonders hoch ist. Das monatliche Pro-Kopf-Einkommen lag 2020 in den meisten Ländern Subsahara-Afrikas im Durchschnitt bei deutlich unter 200 US-Dollar, so etwa in Nigeria (166 US-Dollar), dem bevölkerungsreichsten Land des Kontinents. Selbst das vergleichsweise stark industrialisierte Südafrika kommt auf lediglich 450 US-Dollar. Dies ist kein Vergleich zu dem Wohlstand in Deutschland, der sich in einem monatlichen Durchschnittseinkommen von 3.915 US-Dollar pro Kopf niederschlägt. Hinzu kommt, dass arme Haushalte einen deutlich höheren Anteil ihres Einkommens für Lebensmittel ausgeben müssen. Während ein durchschnittlicher Haushalt in Deutschland etwa fünfzehn Prozent seines Einkommens für Nahrungsmittel verwendet, sind es unter den ärmsten Haushalten in einkommensschwachen Ländern über sechzig Prozent.

Bereits vor Ausbruch der Corona-Pandemie waren die Kosten für eine gesunde Ernährung in keiner anderen Weltregion so hoch wie in Afrika. Und in keiner anderen Weltregion können sich so viele Menschen diese hohen Kosten nicht leisten. Nach Angaben der Vereinten Nationen betrifft dies in Afrika knapp achtzig Prozent der Bevölkerung, wohingegen es in Europa und Nordamerika gerade einmal 1,6 Prozent sind.

Mehr als 280 Millionen Menschen leiden auf dem afrikanischen Kontinent Hunger. Unabhängig von der Frage, ob Putin mit seinem Angriffskrieg Hungersnöte ganz bewusst herbeiführt oder einfach „nur“ billigend in Kauf nimmt, ist bereits abzusehen, dass die Zahl der Hungernden in Subsahara-Afrika weiter ansteigen wird. So fehlen dem Welternährungsprogramm der Vereinten Nationen bereits jetzt große Mengen an Getreide, die es zuvor aus der Ukraine bezog.

Diese Entwicklung wird weitere Konflikte mit sich bringen und birgt das Potenzial, massive Migrationsströme auszulösen. Das Internationale Komitee vom Roten Kreuz hat daher bereits angekündigt, seine Aktivitäten in zehn afrikanischen Ländern auszuweiten, insbesondere in Somalia, Kenia, Nigeria und Burkina Faso.

Die äußerst prekäre Situation vieler Menschen in Subsahara-Afrika erfordert ein schnelles Eingreifen; auch weil sich die Lage angesichts zunehmender Klimarisiken und steigender Preise für Dünger nicht von selbst bessern wird. Gleichzeitig sind die Möglichkeiten vieler Staaten auf dem Kontinent äußerst begrenzt. Geringe Staatseinnahmen und ausgeprägte Governance-Defizite stehen effektivem Handeln allzu oft im Wege. Die Versuche einiger Länder, die Situation mit verordneten Preisobergrenzen zu entspannen, eignen sich nicht zur Lösung des Problems. Vielmehr überfordern sie den Staat und verschlechtern die Angebotssituation weiter. Was kann angesichts dieser Situation getan werden? Klar ist, dass es im Sinne einer Soforthilfe in der Verantwortung Deutschlands und anderer westlicher Geber liegen muss, die finanzielle Ausstattung multilateraler Programme wie des Welternährungsprogramms zu verbessern. Daneben gilt es, aufkeimendem Protektionismus wie dem jüngst von Indien verhängten Exportstopp für Weizen entgegenzutreten. Deutschland sollte im Rahmen der G20 an die Plädoyers der Vergangenheit erinnern und eine Verschärfung der Versorgungslage durch Handelsbeschränkungen verhindern. Mittel- und langfristig müssen die Staaten Subsahara-Afrikas ihre landwirtschaftliche Produktivität nachhaltig steigern und die bestehenden Governance-Defizite abbauen. Auch dabei kann Deutschland durch gezielte Zusammenarbeit einen positiven Beitrag leisten.

 

Gunter Rieck Moncayo, geboren 1985 in Bremen, Altstipendiat der Konrad-Adenauer-Stiftung, Referent Wirtschaft und Handel in Subsahara Afrika, Hauptabteilung Europäische und Internationale Zusammenarbeit, Konrad-Adenauer-Stiftung.

comment-portlet