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 126, 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 126, 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/AMMetadata.ftl" /> 
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" /> 
19 
20 
21<#-- 
22 renders the Intro for nearly all Pages 
23 TODO: remove Share? (was in the designs, but not anymore?) 
24 TODO: check if languageSelect/filter are working (js) 
25 
26 - portletId 
27 - data = { 
28 "media": string (src from image), 
29 "category": string, 
30 "title": string, 
31 "author": string, 
32 "subheadline": string, 
33 "copy": string, 
34 "filter": { 
35 "id": string, 
36 "name": string, 
37 "entries": Array<Object> ({key:value}), 
38 }, 
39 "languageSelect": { 
40 "id": string, 
41 "name": string, 
42 "entries": Array<Object> ({key:value}), 
43 }, 
44 "meta": { 
45 "pos"; string (top/bottom) 
46 "date": string, 
47 "hash": string, 
48 "info": string, (url) 
49 }, 
50 "share" : { 
51 "login": string, 
52 "print": string, 
53 "mail": string, 
54 "multishare": string?? (tbd) 
55
56 - AMMetadata: macro 
57 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content 
58
59--> 
60 
61<#assign 
62 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
63 
64 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() 
65 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService") 
66 
67 themeDisplay = ServiceContext.getThemeDisplay() 
68 editmode = FrontendService.user.isPrivilegedUser(themeDisplay) 
69 
70 languageId = themeDisplay.getLocale() 
71 groupId = themeDisplay.getScopeGroupId() 
72 currentUrl = themeDisplay.getURLCurrent() 
73 
74 layout = themeDisplay.getLayout() 
75 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id") 
76/> 
77 
78<#setting locale="${languageId}"> 
79 
80<#-- get article from url --> 
81 
82<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! > 
83 
84 
85<#if entry?has_content> 
86 
87 <#if entry.resourcePrimKey??> 
88 <#assign primaryKey = entry.resourcePrimKey?number > 
89 <#elseif entry.classPK??> 
90 <#assign primaryKey = entry.classPK?number > 
91 </#if> 
92 
93 <#assign 
94 jsonString = FrontendService.article.getWebcontent(primaryKey) 
95 json = FrontendService.json.parseAsJson(jsonString) 
96 
97 title = entry.getTitle(languageId) 
98 data = { 
99 "title": title 
100
101 /> 
102 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" /> 
103 
104 <#if hasContent('untertitel', languageId, json)> 
105 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } > 
106 </#if> 
107 
108 <#if hasContent('beschreibung', languageId, json)> 
109 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } > 
110 </#if> 
111 
112 <#-- fill meta data --> 
113 <#assign meta = {} /> 
114 
115 <#-- PUBLIKATIONEN DETAIL --> 
116 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")> 
117 
118 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)> 
119 <#assign 
120 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first") 
121 /> 
122 
123 <#if coverBildString?has_content> 
124 <#assign 
125 coverBild = FrontendService.json.parseAsJson(coverBildString) 
126 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale ) 
127 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid ) 
128 data = data + { "media": linkToDMT, "meta" : dMTJsonObject } 
129 /> 
130 <#if dMTJsonObject.altText?? > 
131 <#assign data = data + {"alt" : dMTJsonObject.altText} /> 
132 </#if> 
133 <#if dMTJsonObject.quelle??> 
134 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } /> 
135 </#if> 
136 </#if> 
137 <#-- uncomment to display pdf cover as Intro Image 
138 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)> 
139 <#assign 
140 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first") 
141 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/> 
142 <#if fileEntry?has_content> 
143 <#assign 
144 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay) 
145 data = data + { "media": linkToThumbnail } 
146 /> 
147 </#if> 
148 --> 
149 </#if> 
150 
151 <#assign 
152 meta = meta + { "orderInfo": "true" } 
153 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!"" 
154 /> 
155 
156 
157 
158 <#if hasContent('erscheinungsdatum', languageId, json)> 
159 <#assign 
160 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
161 /> 
162 <#if erscheinungsdatum?has_content > 
163 <#assign 
164 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId ) 
165 meta = meta + { "date": erscheinungsdatumFormatted } 
166 /> 
167 </#if> 
168 </#if> 
169 
170 <#if verbundJournalArticle?has_content> 
171 <#assign 
172 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey) 
173 verbundJson = FrontendService.json.parseAsJson(verbundJsonString) 
174 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first") 
175 /> 
176 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" /> 
177 <#assign meta = meta + { "laufendenummer": laufendenummer } > 
178 </#if> 
179 
180 
181 <#if meta?has_content> 
182 <#assign data = data + {"meta": meta } > 
183 </#if> 
184 
185 </#if> 
186 <#-- PUBLIKATIONEN DETAIL END --> 
187 
188 
189 <#-- VERANSTALTUNGEN DETAIL --> 
190 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")> 
191 <#assign 
192 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!"" 
193 languages = entry.getAvailableLanguageIds() 
194 links = [] 
195 /> 
196 <#if languages?has_content && friendlyUrl?has_content> 
197 <#if (languages?size > 1) > 
198 <#list languages as language> 
199 <#assign 
200 defaultLanguage = "de_DE" 
201 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage) 
202 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale 
203 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId) 
204 
205 link = { 
206 "key": language!defaultLanguage, 
207 "value": linkLocale.getDisplayLanguage(languageId), 
208 "url": "/c/portal/update_language?p_l_id=" + 
209 layout.plid + "&redirect=" + langFriendlyUrl + 
210 "&languageId=" + language 
211
212 /> 
213 <#if language == languageId> 
214 <#assign link = link + { "selected": "true" } > 
215 </#if> 
216 <#assign links = links + [link]> 
217 </#list> 
218 <#assign 
219 data = data + { 
220 "languageSelect": { 
221 "id": "languageSelectRedirect", 
222 "name": "languageselectRedirect", 
223 "entries": links, 
224 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar") 
225
226
227 /> 
228 </#if> 
229 </#if> 
230 </#if> 
231 
232 <#if hasContent('erscheinungsdatum', languageId, json)> 
233 <#assign 
234 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first") 
235 meta = meta + { "start": startdate?date.iso, "end": "" } 
236 /> 
237 </#if> 
238 
239 <#if hasContent('startdatum', languageId, json)> 
240 <#assign 
241 startdate = getValueForLanguage('startdatum', languageId, json, "first") 
242 meta = meta + { "start": startdate?date.iso, "end": "" } 
243 /> 
244 </#if> 
245 
246 <#if hasValue('einfuehrungText', locale, json)> 
247 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } > 
248 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")> 
249 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } > 
250 </#if> 
251 
252 <#if hasContent('endedatum', languageId, json)> 
253 <#assign 
254 enddate = getValueForLanguage('endedatum', languageId, json, "first") 
255 meta = meta + { "end": enddate?date.iso } 
256 /> 
257 </#if> 
258 
259 <#if hasContent('startzeit', languageId, json)> 
260 <#assign 
261 startzeit = getValueForLanguage('startzeit', languageId, json, "first") 
262 /> 
263 <#if startzeit?has_content > 
264 <#assign meta = meta + { "startzeit": startzeit } /> 
265 </#if> 
266 </#if> 
267 
268 <#if hasContent('endezeit', languageId, json)> 
269 <#assign 
270 endezeit = getValueForLanguage('endezeit', languageId, json, "first") 
271 meta = meta + { "endezeit": endezeit } 
272 /> 
273 </#if> 
274 
275 <#if hasContent('ortWCSKASDEORT', languageId, json)> 
276 <#assign 
277 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first")) 
278 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number 
279 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!"" 
280 /> 
281 <#if ortWCSKASDEORTWebContent?has_content > 
282 <#assign 
283 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!"" 
284 /> 
285 <#if ortWCSKASDEORTTitle?has_content > 
286 <#assign 
287 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle } 
288 /> 
289 </#if> 
290 </#if> 
291 </#if> 
292 
293 
294 <#if hasContent('veranstaltungsnummer', languageId, json)> 
295 <#assign 
296 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first") 
297 meta = meta + { "verauuid": verauuid } 
298 /> 
299 </#if> 
300 
301 
302 <#if (data.meta)?has_content > 
303 <#assign meta = data.meta /> 
304 </#if> 
305 
306 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)> 
307 <#assign 
308 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first") 
309 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution") 
310 /> 
311 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} > 
312 
313 
314 <#if mediaData.meta?? && mediaData.meta.quelle??> 
315 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } /> 
316 </#if> 
317 </#if> 
318 
319 
320 <#if meta?has_content> 
321 <#assign data = data + {"meta": meta } > 
322 </#if> 
323 
324 <#-- END fill meta data --> 
325 
326 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)> 
327 <#assign 
328 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json) 
329 authors = [] 
330 /> 
331 <#list journalArticles as articleString> 
332 <#assign article = FrontendService.json.parseAsJson(articleString) /> 
333 <#if article?has_content && article?is_hash && article.classPK??> 
334 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" /> 
335 <#if articleDereferenced?has_content > 
336 <#assign 
337 author = "" 
338 articlePrimaryKey = articleDereferenced.classPK?number 
339 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey) 
340 articleJson = FrontendService.json.parseAsJson(articleJsonString) 
341 /> 
342 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" /> 
343 <#if hasValue('anredetitel', languageId, articleJson)> 
344 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " "> 
345 </#if> 
346 <#if hasValue('vorname', languageId, articleJson)> 
347 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " "> 
348 </#if> 
349 <#if hasValue('nachname', languageId, articleJson)> 
350 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " "> 
351 </#if> 
352 
353 <#attempt> 
354 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" > 
355 <#recover> 
356 <#assign href = "#" > 
357 </#attempt> 
358 <#if href?has_content && href != "#" && href != "/_404"> 
359 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'> 
360 </#if> 
361 
362 <#assign authors = authors + [author?trim]> 
363 </#if> 
364 </#if> 
365 </#list> 
366 <#if authors?has_content> 
367 <#assign data = data + { "author": authors?join(", ") } > 
368 </#if> 
369 </#if> 
370 
371 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") > 
372 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! > 
373 <#if categories?has_content && categories[0]?has_content > 
374 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
375 </#if> 
376 
377 <#if hasContent('ausgebucht', languageId, json)> 
378 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }> 
379 </#if> 
380 
381 <#if hasContent('storniert', languageId, json)> 
382 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }> 
383 </#if> 
384 
385 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") > 
386 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! > 
387 <#if categories?has_content && categories[0]?has_content > 
388 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
389 </#if> 
390 <#else> 
391 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! > 
392 <#if categories?has_content && categories[0]?has_content > 
393 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } > 
394 </#if> 
395 </#if> 
396 
397 
398 <#assign 
399 languages = [] 
400 /> 
401 
402 <#attempt> 
403 <#if json["document_pdfDMTBASICDOCUMENT"]?? > 
404 <#list json["document_pdfDMTBASICDOCUMENT"]?keys as pdf_language> 
405 <#if pdf_language?has_content > 
406 <#assign 
407 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first") 
408 docRef = FrontendService.json.parseAsJson(docRefJson) 
409 /> 
410 <#if docRef?is_hash && pdf_language != languageId > 
411 <#assign 
412 lang = FrontendService.language.getLocaleByKey(pdf_language)!"" 
413 docGroupId = docRef["groupId"]?number 
414 docUuid = docRef["uuid"] 
415 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale ) 
416 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject ) 
417 /> 
418 <#if lang?has_content> 
419 <#assign 
420 languages = languages + [ 
421
422 "key": pdf_language, 
423 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(), 
424 "url": dMTLink 
425 }] 
426 /> 
427 </#if> 
428 </#if> 
429 </#if> 
430 </#list> 
431 </#if> 
432 <#recover> 
433 </#attempt> 
434 
435 <#if (languages?size > 0)> 
436 <#attempt> 
437 <#assign 
438 data = data + { "languageSelect": { 
439 "id": "languageSelect", 
440 "name": "languageselect", 
441 "entries": languages, 
442 "documents": "", 
443 "button": "true" 
444 }} 
445 /> 
446 <#recover> 
447 </#attempt> 
448 </#if> 
449 
450 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" /> 
451 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)} 
452 
453<#elseif (editmode?? && editmode)> 
454 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl /> 
455</#if> 

Asset-Herausgeber

Am 30. Juni 2022 erließ der tunesische Präsident Kais Saied das Präsidialdekret Nr. 578 aus 2022, in dem er die Veröffentlichung des neuen Verfassungsentwurfs von Tunesien verkündete, der am heutigen Tage, dem 25. Juli 2022, einem nationalen Referendum unterzogen wird. 

Siraj Khan, Rechtsexperte für Rechtsstaatlichkeit, Verfassungs- und Schariarecht in der MENA-Region, gibt Einblicke in den Prozess der Verfassungsentstehung in Tunesien und darüber hinaus eine eingehende vergleichende Analyse der aktuellen Verfassung sowie der beiden Entwürfe für eine neue Verfassung. 

Folgen Sie Siraj auf Twitter unter @SirajKhanMENA 

 

 

Asset-Herausgeber

Kontakt

Philipp Bremer

Portrait von Philipp Bremer

Leiter des Rechtsstaatsprogramms Naher Osten und Nordafrika

philipp.bremer@kas.de +961 1 385 094 | +961 1 395 094

comment-portlet

Asset-Herausgeber

Mediathek

A Closer Look: The New Tunisian Draft Constitution
A Closer Look: The New Tunisian Draft Constitution
On the 25th July 2022 Tunisia will be voting on a new draft constitution. What can we expect? We asked the experts: Prof. Salsabil Klibi, Saïd Bernabia and Dr. Malte Gaier.
Jetzt lesen
Rule of Law Rules Podcast
#3: Eduardo Magrani über Datenschutz in Lateinamerika
Mit Eduardo Magrani sprechen wir über die DSGVO und ihren Einfluss auf die lateinamerikanische und vor allen die brasilianische Gesetzgebung.
Jetzt lesen
Rule of Law Rules Podcast
#2: Ioana Stupariu über den Einfluss der DSGVO in Südosteuropa
Ioana Stupariu berät kleine und mittelständische Start-ups in Südosteuropa bei der Implementierung von Datenschutzrichtlinien. Und sie forscht zu Datenschutz & Privacy.
Jetzt lesen
Rule of Law Rules Podcast
#1: Frederick Richter über die weltweite Wirkung der Datenschutzgrundverordnung der EU
Mit Frederick Richter sprechen wir über die Stiftung Datenschutz, die Rolle des Datenschutzes in Deutschland und über die DSGVO und ihre Ausstrahlungswirkung in die Welt.
Jetzt lesen

Asset-Herausgeber

Asset-Herausgeber