The following has evaluated to null or missing: ==> cardImageJson.groupId [in template "20096#20121#CONFINDUSTRIA-ARTICOLO-REDAZIONALE" at line 26, column 22] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- 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: cardImageGroupId = cardImageJson.groupId [in template "20096#20121#CONFINDUSTRIA-ARTICOLO-REDAZIONALE" at line 26, column 3] ----
1<#include "${templatesPath}/MACRO-CONFINDUSTRIA" />
2
3<#assign journalLocalService = serviceLocator.findService('com.liferay.journal.service.JournalArticleLocalService') />
4<#assign assetEntryLocalService = serviceLocator.findService('com.liferay.asset.kernel.service.AssetEntryLocalService') />
5
6<#assign
7 articleid = .vars['reserved-article-id'].data
8 journalArticle = journalLocalService.getArticle(groupId, articleid)
9 classPK = journalArticle.resourcePrimKey?number
10 assetEntry = assetEntryLocalService.getEntry('com.liferay.journal.model.JournalArticle',classPK)
11 categories = assetEntry.getCategories()
12 areeCategories = confindustria_template_tool.getAreeTematiche(categories)
13 materieCategories = confindustria_template_tool.getMaterie(categories)
14 tags = assetEntry.getTags()
15 viewCount = assetEntry.viewCount
16
17 displaydate = journalArticle.getDisplayDate()?datetime
18 displaydate = confindustria_template_tool.getDateFormattedDetailBy(displaydate?string("dd MMMMM yyyy"), "dd MMMMM yyyy", locale)
19
20 item = confindustria_template_tool.getDDMJournalArticleValuesMap(classPK, locale)
21 title=item.title.value
22 abstract=item.abstract.value
23 text=item.text.value
24 cardImageOri = item.image.value
25 cardImageJson = jsonFactoryUtil.createJSONObject(cardImageOri)
26 cardImageGroupId = cardImageJson.groupId
27 cardImageUuid = cardImageJson.uuid
28 cardImageWidth = cardImageJson.width
29 cardImageHeight = cardImageJson.height
30 coverImage = confindustria_template_tool.getDDMImageURL(cardImageUuid,cardImageGroupId?number,themeDisplay)
31 fileEntryImage = confindustria_template_tool.getFileEntry(cardImageUuid,cardImageGroupId?number,themeDisplay)
32 entryId = fileEntryImage.getFileEntryId()
33 fileName = fileEntryImage.getFileName()
34 hideDisplayDate = getterUtil.getBoolean(hideDisplayDate.getData())
35/>
36
37<#assign
38 contentVisible = false
39 publicArticle=item.public.value
40/>
41<#if publicArticle?boolean == true>
42 <#assign contentVisible = true/>
43<#elseif isLoggedIn == true>
44 <#assign contentVisible = confindustria_template_tool.canViewContent(themeDisplay.getUserId(),areeCategories, themeDisplay)/>
45</#if>
46
47<article>
48 <div class="box-page-name d-flex align-items-center">
49 <div class="container">
50 <div class="row">
51 <div class="col-12 col-md-10 col-lg-8">
52 <h1 class="box-page-name__title">${title}</h1>
53 </div>
54 </div>
55 </div>
56 </div>
57
58 <#-- Info -->
59 <div class="box-info">
60 <div class="container">
61 <div class="row">
62 <div class="col-12">
63 <div class="d-flex flex-column flex-md-row justify-content-md-between align-items-md-end">
64 <div>
65 <#if displaydate?? && displaydate != "" && !hideDisplayDate>
66 <div class="box-info__date">${displaydate}</div>
67 </#if>
68 <div class="d-flex align-items-center">
69 <#if areeCategories?size gt 0>
70 <#list areeCategories as area>
71 <div class="box-info__category">${area.getTitle(locale)}</div>
72 </#list>
73 </#if>
74 <#if materieCategories?size gt 0>
75 <div class="box-info__materia">
76 <span>${(materieCategories?size == 1)?then(languageUtil.get(locale, "confindustria.materia"), languageUtil.get(locale, "confindustria.materie"))}:</span>
77 <#list materieCategories as mat>
78 ${mat.getTitle(locale)}
79 </#list>
80 </div>
81 </#if>
82 </div>
83 </div>
84 </div>
85 </div>
86 </div>
87 </div>
88 </div>
89
90 <#-- Articolo -->
91 <div class="container">
92 <div class="row">
93 <div class="col-12 col-lg-8 ${(contentVisible == false)?then('col-reserved','')}">
94 <div class="article">
95 <#if contentVisible == false>
96 <#-- Non sono loggato: popup login contenuto riservato-->
97 <#if isLoggedIn == false>
98 <#include "${templatesPath}/CONFINDUSTRIA-PRIVATE-CONTENT-LOGIN" />
99 <#elseif contentVisible == false>
100 <#include "${templatesPath}/CONFINDUSTRIA-PRIVATE-CONTENT-CATEGORY-MESSAGE" />
101 </#if>
102 </#if>
103 <#-- Immagine -->
104 <#if coverImage?? && coverImage != "">
105 <img src="/o/adaptive-media/adapt-image/${entryId}/${fileName}?w=${cardImageWidth}&h=${cardImageHeight}&q=100&fm=webp" alt="${cardImageJson.alt}" class="article__img w-100" />
106 </#if>
107 <#-- Abstract -->
108 <#if contentVisible == true && abstract?? && abstract != "">
109 <div class="article__intro">${abstract}</div>
110 </#if>
111 <#-- Bodytext (sono loggato) -->
112 <#if contentVisible == true >
113 <#if text?? && text != "">
114 <div class="article__text">${text}</div>
115 </#if>
116 </#if>
117 </div>
118 </div>
119
120 <#-- Allegati (sono loggato) -->
121 <#if contentVisible == true >
122 <div class="col-12 col-lg-4">
123 <#if groupDocuments.getSiblings()[0].document.getData() != "">
124 <div class="article__info">
125 <div class="article__label"><@liferay.language key="confindustria.attachments" /></div>
126 <#list groupDocuments.getSiblings() as allegato>
127 <#if allegato.document.getData() != "">
128 <#assign
129 allegatoMap = allegato.document['data']?eval
130 allegatoTitle = allegatoMap['title']
131 />
132 <div class="mb-3">
133 <a href="${allegato.document.getData()}" title="${allegatoTitle}" class="article__attachments d-flex align-items-start">
134 <svg class="ico-svg add">
135 <use xlink:href="${themeIconsPath}#arrow-down-to-line-light"></use>
136 </svg>
137 <span>${allegatoTitle}</span>
138 </a>
139 </div>
140 </#if>
141 </#list>
142 </div>
143 </#if>
144 <#if groupLink.getSiblings()[0].link.getData() != "">
145 <div class="article__info">
146 <div class="article__label"><@liferay.language key="confindustria.links" /></div>
147 <#list groupLink.getSiblings() as cur_link_esterni>
148 <#if cur_link_esterni.titleLink.getData() !="" && cur_link_esterni.link.getData() !="">
149 <div class="mb-3">
150 <a href="${cur_link_esterni.link.getData()}" title="Scarica ${cur_link_esterni.titleLink.getData()}" target="cur_link_esterni.link.getData()" class="article__attachments d-flex align-items-start">
151 <svg class="ico-svg add">
152 <use xlink:href="${themeIconsPath}#arrow-down-to-line-light"/>
153 </svg>
154 <span>${cur_link_esterni.titleLink.getData()}</span>
155 </a>
156 </div>
157 </#if>
158 </#list>
159 </div>
160 </#if>
161 </div>
162 </#if>
163
164 </div>
165
166 <#if contentVisible == true && images.getSiblings()?has_content && images.getSiblings()?size gt 0 && images.getSiblings()[0].getData()?? && images.getSiblings()[0].getData()?has_content>
167 <section class="section photogallery">
168 <div class="row">
169 <div class="col-12">
170 <div class="section__wrap-title d-flex justify-content-between align-items-end">
171 <div class="section__title"><@liferay.language key="confindustria.photogallery"/></div>
172 <div class="slider-controls slider-controls-gallery d-flex align-items-center">
173 <div class="dots"/>
174 </div>
175 </div>
176 </div>
177 </div>
178 <div class="row">
179 <div class="col-12 col-lg-8">
180 <div class="slider slider-gallery">
181 <#list images.getSiblings() as image>
182 <div>
183 <div class="box-photo-lightbox text-center">
184 <a data-senna-off="true" href="${image.getData()}" title="${image.getAttribute("alt")}" id="slider-sede-${image?index}" class="box-photo-lightbox__link fresco" style="background-image: url('${image.getData()}')" data-fresco-group="photogallery_sede" data-fresco-caption="${image.getAttribute("alt")}">
185 <#if image.getAttribute("alt") ?? && image.getAttribute("alt") !="">
186 <span class="box-photo-lightbox__title">${image.getAttribute("alt")}</span>
187 </#if>
188 <span class="d-none">
189 <@liferay.language key="image"/> "${image?index}" </span>
190 </a>
191 </div>
192 </div>
193 </#list>
194 </div>
195 </div>
196 </div>
197 </section>
198 </#if>
199
200 </div>
201</article>
202
203<#-- Contatti -->
204<#assign hasContacts = contact.getSiblings()?has_content && contact.getSiblings()?size gt 0 && contact.getSiblings()[0].getData() != ''/>
205<#if contentVisible == true && hasContacts >
206 <section id="riferimenti" class="section section--dark" data-group="true">
207 <div class="container">
208 <div class="row">
209 <div class="col-12">
210 <div class="section__wrap-title d-flex justify-content-between align-items-end">
211 <div class="section__title"><@liferay.language key="confindustria.contatti.title" /></div>
212 <div class="slider-controls slider-controls-contatti d-flex align-items-center"><div class="dots"></div></div>
213 </div>
214 </div>
215 </div>
216 <div class="row">
217 <div class="col-12">
218 <div class="slider slider-contatti">
219 <#list contact.getSiblings() as cur_contact>
220 <#assign
221 webContentData = jsonFactoryUtil.createJSONObject(cur_contact.getData())
222 />
223 <#if webContentData?? && webContentData.subtype?? && webContentData.subtype == 'CONTATTO'>
224
225 <#assign
226 classPK = webContentData.classPK
227 item = confindustria_template_tool.getDDMJournalArticleValuesMap(classPK?number, locale)
228 nome = item.nome.value
229 cognome = item.cognome.value
230 ruolo = item.ruolo.value
231 telefono = item.telefono.value
232 mobile = item.mobile.value
233 email = item.email.value
234 cardImageOri = item.picture.value
235 cardImageJson = jsonFactoryUtil.createJSONObject(cardImageOri)
236 fileEntryImage = ''
237 entryId = ''
238 fileName = ''
239 />
240 <#if cardImageJson.groupId?? && cardImageJson.groupId!="">
241 <#assign
242 cardImageGroupId = cardImageJson.groupId
243 cardImageUuid = cardImageJson.uuid
244 fileEntryImage = confindustria_template_tool.getFileEntry(cardImageUuid,cardImageGroupId?number,themeDisplay)
245 entryId = fileEntryImage.getFileEntryId()
246 fileName = fileEntryImage.getFileName()
247 />
248 </#if>
249 <div>
250 <#include "${templatesPath}/CONFINDUSTRIA-CONTATTO-CARD" />
251 </div>
252
253 </#if>
254 </#list>
255 </div>
256 </div>
257 </div>
258 </div>
259 </section>
260</#if>