Asset Publisher

An error occurred while processing the template.
Failed to "?eval" string with this error:
---begin-message---
Syntax error in ?eval-ed string in line 1, column 2:
Encountered ")", but was expecting one of these patterns:
<STRING_LITERAL>
<RAW_STRING>
"false"
"true"
<INTEGER>
<DECIMAL>
"."
"+"
"-"
"!"
"["
"("
"{"
<ID>
---end-message---
The failing expression:
==> coverDMTKASDEMEDIUM.data?eval [in template "252001#252047#WCD_DEBATTENBLOG_ARTIKELDETAIL_INTRO" at line 65, column 23]
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign mediumData = coverDMTKASDEMED... [in template "252001#252047#WCD_DEBATTENBLOG_ARTIKELDETAIL_INTRO" at line 65, column 1]
----
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

„Ein Schlampen von einer Reporterin“: Diese Worte standen im April 2018 unter einem Facebook-live-Video. Der Autor dieser Worte meinte damit mich.

Ich hatte zuvor für die „Aktuelle Stunde“, das Informationsmagazin des Westdeutschen Rundfunks, auf Facebook live von einer Demonstration in Dortmund berichtet: Am 14. April 2018 marschierten rund 600 Neonazis durch die Dortmunder Innenstadt. Sie demonstrierten unter dem Motto „Europa erwache“. Zeitgleich verteilten sich Tausende Gegendemonstranten in der ganzen Stadt – für die Polizei war es ein Großeinsatztag.

Über genau diese Gemengelage habe ich auf Facebook rund fünfzehn Minuten live für den WDR berichtet. Nach einem langen Demo-Tag bin ich zurück ins Rheinland gefahren und habe die sozialen Netzwerke abends nicht mehr durchforstet. Erst am nächsten Morgen habe ich diese Kommentare gelesen:

„Man braucht sich diese HOHLE KUH nur anschauen und sieht WOHER sie kommt! Nix Deutsches!!!“

„Wenn ich diese dumme Reporter Muschi höre, dann wünsche ich der einfach nur, dass die abends im Park von fünf Facharbeitern genommen wird.“

„GEZ Hure halte dein Maul“

„Drecksau lass dich vergewaltigen von den Asylanten.“

Ich war fassungslos und habe die Kommentare einer Freundin gezeigt. Meinen die Verfasser wirklich mich? Daran bestand kein Zweifel. Trotzdem ging mir dieser Gedanke durch den Kopf. Denn obwohl ich die sozialen Netzwerke gut kenne und dort nicht gerade wenig Zeit verbringe, habe ich selbst nicht mit solch einem Shitstorm gerechnet. Auf eine gewisse, möglicherweise auch naive Weise habe ich immer gehofft, der Hass im Netz würde sich so schnell nicht gegen mich richten.

Meine Redaktion hat sich sofort um die Situation gekümmert und mich aus der Schusslinie genommen. Für die schnelle Reaktion meiner Kollegen und für die große Unterstützung bin ich besonders im Nachhinein sehr dankbar, denn im ersten Moment war ich wie gelähmt. Gern würde ich sagen, dass die Kommentare an mir abgeprallt wären und ich sie nicht persönlich genommen hätte; das stimmt aber nicht. Ich musste sehr schwer schlucken und bin zu meiner Familie gefahren.

Dass die Kommentare mich überhaupt berührt haben, hat mich geärgert, denn eigentlich wollte ich stärker sein als der Hass. Auf eine perfide Art und Weise machen diese Hasskommentare und Drohungen allerdings etwas mit einem: Sie rütteln an dem eigenen Grundvertrauen in die Gesellschaft. Die Drohungen, die Sie am Anfang des Beitrags gelesen haben, wurden alle mit Klarnamen veröffentlicht. So etwas hätten sich viele User vor ein paar Jahren im Netz wohl noch nicht getraut.

Diese Kommentare verdeutlichten mir, dass ich für einige Social Media-Nutzer offenbar in eine Art Feindbild passe. Dass einige der Kommentare aus dem rechten Umfeld der Dortmunder Neonazi-Szene stammten, war sehr naheliegend. Die Kommentare stehen für mich beispielhaft für eine Situation, mit der sich Journalisten weltweit auseinandersetzen müssen: Journalisten werden insbesondere von rechten und linken Extremisten oft nicht mehr als neutrale Berichterstatter wahrgenommen, sondern als Feinde. Ihre Berichterstattung gilt als unglaubwürdig oder politisch gefärbt.

Never feed the trolls

Aber was tun, um dieses Feindbild zu durchbrechen? In den Tagen nach dem Shitstorm habe ich vor allem eine „Jetzt erst recht“-Haltung entwickelt. Ich hatte das Gefühl, dass ich demokratische Werte verteidigen sollte und für diese Werte einstehen muss. Eine Art Gegenwehr.

Diese Gegenwehr bedeutet für mich, noch häufiger unangenehme, aber zugleich relevante Themen anzugehen, noch unbequemere Fragen zu stellen, noch gründlicher und tiefer zu recherchieren und unsere journalistische Arbeit noch transparenter zu machen. Diese Gegenwehr bedeutet für mich nicht, dass ich den Verfassern der Hasskommentare konfrontativ antworte, denn dann liefere ich genau die Antworten, die Extremisten neuen Stoff liefern – und die Hassspirale dreht sich weiter. Deshalb gilt im Netz auch ein ungeschriebenes Gesetz, welches lautet: Never feed the trolls. Kurzum, nicht auf Hasskommentare eingehen!

Gibt es allerdings inhaltliche Kritik zwischen all den Hasskommentaren, ist es meiner Meinung nach wichtig, diese ernst zu nehmen und darauf zu antworten. Denn vielleicht gibt es doch den ein oder anderen User, der sich auf eine inhaltliche Diskussion einlässt.

Bei meiner Facebook-live-Berichterstattung gab es beispielsweise einige Kommentatoren, die auf eine sehr unverschämte Weise kritisiert haben, dass ich das Wort „Neonazis“ mehrfach in meiner Live-Schalte verwendet habe. Mit dieser Kritik habe ich mich anschließend auseinandergesetzt und erneut mit einigen Politikwissenschaftlern über die Verwendung des Begriffs gesprochen. Sie bestätigten mir, dass in diesem Zusammenhang die Verwendung des Begriffs zulässig gewesen sei.

Ich glaube jedoch, dass es besonders wichtig ist, inhaltliche Kritik ernst zu nehmen, um den Populisten nicht zusätzliche Angriffsfläche zu bieten und eventuell zumindest bei dem einen oder anderen User zu verhindern, dass sich die gesellschaftlichen Gräben in seinem Kopf vertiefen. Die inhaltliche Kritik bei einem Shitstorm betrifft in den meisten Fällen allerdings nur eine geringe Anzahl von Kommentaren.

Häufig führt das Beantworten kritischer Anmerkungen leider nicht zu einer inhaltlichen Diskussion, sondern zu mehr Hass und Hetze im Netz. Das zeigt etwa der Shitstorm gegen eine ZDF-Kollegin. Sie hat im Januar 2019 auf Twitter versucht, mit Ironie auf Hasskommentare zu antworten. Einige rechte Nutzer haben ihre sarkastischen Antworten weiterverbreitet und behauptet, diese seien ernst gemeint gewesen. Für einige Tage hält der Shitstorm auf Twitter an.

Nicht Shitstorm, sondern Shit-Tsunami

Der Journalist Richard Gutjahr spricht in seinem Fall sogar nicht nur von einem Shitstorm, sondern von einem Shit-Tsunami. Gutjahr wurde zweimal binnen kurzer Zeit Zeuge von Anschlägen. 2016 berichtete er vom Terroranschlag in Nizza und kurz danach über den Amoklauf in München. Durch diese beiden Live-Berichterstattungen, die zeitlich nah beieinanderlagen, wurde er Projektionsfläche für Verschwörungstheorien und von Reichsbürgern sowie Neonazis im Netz angegriffen. Selbst seine eigene Familie wurde monatelang zur Zielscheibe.

Richard Gutjahr hat eine Form gefunden, mit dem Shitstorm umzugehen. Im Deutschlandfunk sagte er 2018: „Man muss die Wortführer identifizieren und man muss sie tatsächlich zur Rechenschaft ziehen.“ Er hat selbst rechtliche Schritte gegen Wortführer eingeleitet, denn oftmals reagieren Plattformen wie YouTube oder Facebook nicht ausreichend, wenn Hasskommentare oder Drohungen gemeldet werden. Ein Problem ist, dass Schimpfwörter oder Drohungen vom Algorithmus der sozialen Netzwerke häufig nicht als solche erkannt werden und somit weiterhin online bleiben.

Bei meinem Shitstorm hat meine Redaktion geprüft, ob rechtliche Schritte gegen Nutzer eingeleitet werden können. Diese Bewertung ist im Rahmen des Projekts „Verfolgen statt nur löschen“ erfolgt. An diesem Projekt beteiligen sich unter anderem die nordrhein-westfälische Landesanstalt für Medien, das Landeskriminalamt NRW, das Polizeipräsidium Köln und die Medienunternehmen WDR, Rheinische Post und die Mediengruppe RTL Deutschland. Konkret geht es darum, dass Hasskommentare nicht einfach nur gelöscht, sondern auf ihre strafrechtliche Relevanz geprüft und im Falle einer Rechtsverletzung verfolgt werden.

Dieser Dialog zwischen Staatsanwaltschaft und Redaktionen ist sicherlich eine wichtige Maßnahme, um Verfassern von Hasskommentaren aufzuzeigen, dass das Netz kein rechtsfreier Raum ist. Verfolgt werden können beispielsweise Androhungen einer Straftat, Volksverhetzung oder die Verbreitung von Kennzeichen verfassungswidriger Organisationen.

Viele Hasskommentare, die sich gezielt gegen Journalisten richten, passen allerdings nicht in diese juristischen Kategorien. Richard Gutjahr hat sich beispielsweise mehr Rückhalt von seinem Arbeitgeber gewünscht. In den öffentlich-rechtlichen Medien arbeiten sehr viele Journalisten als freie Mitarbeiter. Für sie wäre ein garantierter juristischer Beistand in solchen Fällen sehr wichtig. Ich habe beim WDR neben sehr viel menschlicher Unterstützung auch sofort juristische Hilfe erhalten. Prinzipiell würde ich mir wünschen, dass dies für alle Kollegen deutschlandweit gilt und einheitlich geregelt ist.

Mehrheit im Netz schweigt noch

Meiner Meinung nach sollten sich Journalisten „jetzt erst recht“ mit Personen und gesellschaftlichen Phänomenen auseinandersetzen, die Journalisten gern als „Feinde“ betrachten. Darauf kann dann – in nicht seltenen Fällen – ein Shitstorm folgen. Kommt es dazu, ist für mich zusammengefasst besonders wichtig, dass wir versuchen, zwischen den Hasskommentaren immer noch die inhaltliche Kritik zu finden und uns mit diesen Anmerkungen auseinanderzusetzen. Außerdem sollte sowohl die menschliche als auch juristische Unterstützung, insbesondere für freie Mitarbeiter, von allen Redaktionen gesichert sein. Es hilft in dem Moment, zu wissen, dass man nicht allein mit der Situation umgehen muss.

Was wir jedoch alle tun können, ist, nicht nur passiv im Netz mitzulesen. Wenn wir auf einen Shitstorm aufmerksam werden, sollten wir inhaltlich mitkommentieren. Denn die Mehrheit verbreitet keinen Hass im Netz, sondern schweigt. Und das können wir alle ändern!

Cosima Gill, geboren 1989 in Bonn, Altstipendiatin der Journalistischen Nachwuchsförderung der Konrad-Adenauer-Stiftung, Absolventin der RTL-Journalistenschule, Reporterin unter anderem für den Westdeutschen Rundfunk („Aktuelle Stunde“).

comment-portlet