Data journal

Articoli e news per approfondire il mondo dei dati aperti e del lavoro del Comune di Milano, per comprendere meglio questo mondo e raccontare la città attraverso i dati.
Temi
Sort By:
An error occurred while processing the template.
Java method "com.liferay.portal.kernel.util.DateUtil_IW.parseDate(String, String, Locale)" threw an exception when invoked on com.liferay.portal.kernel.util.DateUtil_IW object "com.liferay.portal.kernel.util.DateUtil_IW@57a38f22"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign date_DateObj = dateUtil.parse...  [in template "65777792077794#20120#250010" at line 74, column 33]
----
1<#-- instanceId --> 
2<#assign instanceId = themeDisplay.getPortletDisplay().getId()?keep_after("INSTANCE_") /> 
3 
4<#-- Servizio per ricavare i ddm field di una struttura --> 
5<#assign ddmFieldLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMFieldLocalService")/> 
6<#-- Servizio utile per ricavare i documenti della DM --> 
7<#assign dlFileEntryLocalService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') /> 
8<#-- Servizio per ricavare dati del journal article --> 
9<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
10<#-- Servizio per ricavare l'oggetto layout --> 
11<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") /> 
12<#-- Servizio per ricavare le categorie e relative properties --> 
13<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
14 
15<#-- Inclusione template con macros e relativi servizi --> 
16<#include "${templatesPath}/CDM_RICERCA_COMMON_MACROS" /> 
17 
18<#-- Categorie di tipo --> 
19<#assign categorie = [] /> 
20<#assign assetCategories = ["APPROFONDIMENTO", "PROGETTO", "DATASET", "NEWS", "PAGINA"] /> 
21 
22<#-- CTA Dataset: estensioni di file che fanno scattare la dicitura "Scarica" al posto di "Link" --> 
23<#assign downloadFileExtensions = [".xlsx", ".xls", ".xlsm", ".xlsb", ".csv"] /> 
24 
25<#-- html --> 
26<div class="risultati-ricerca risultati-ricerca-servizi"> 
27    <div class="c-mb-4 c-mt-4 search-total-label"> 
28        <#if searchContainer.getTotal() == 1> 
29            ${languageUtil.format(locale, "x-result-for-x", ["<strong  class='number'>" +searchContainer.getTotal() + "</strong>" , htmlUtil.escape(searchResultsPortletDisplayContext.getKeywords()) ], false)} 
30        <#else> 
31            ${languageUtil.format(locale, "x-results-for-x", ["<strong class='number'>" +searchContainer.getTotal() + "</strong>", htmlUtil.escape(searchResultsPortletDisplayContext.getKeywords()) ], false)} 
32        </#if> 
33    </div> 
34    <#if entries?size gt 0> 
35        <div class="row"> 
36 
37            <#-- inizio a ciclare sugli elementi e faccio controlli che l'entry sia un articolo --> 
38            <#list entries as curEntry> 
39                <#if curEntry.getClassName() == "com.liferay.journal.model.JournalArticle"> 
40                    <#assign journalArticle = journalArticleLocalService.getLatestArticle(curEntry.getClassPK(), 0) /> 
41 
42                    <#if journalArticle?has_content> 
43                    <#-- valorizzo le variabili che uso in seguito --> 
44                        <#assign title = "", abstract = "", viewUrl = "#", date = "", isProgetto = false, isNews = false, fonte = "", isDownloadLink = false /> 
45 
46                        <#assign ddmStructureKey = journalArticle.getDDMStructureKey() /> 
47 
48                    <#-- primary key journal article --> 
49                        <#assign journalArticlePrimKey = journalArticle.resourcePrimKey/> 
50 
51                    <#--  categorie  --> 
52                        <#assign categorie = getListCategoryByArticlePrimKey( journalArticlePrimKey ) /> 
53 
54                    <#-- title journal article --> 
55                        <#assign journalArticleTitle = journalArticle.getTitle(locale)/> 
56 
57                    <#-- ricavo dalla struttura i dati che mi servono per creare le card --> 
58                    <#-- ARTICOLO --> 
59                        <#if ddmStructureKey == "39724"> 
60                        <#-- struttura: titolo --> 
61                            <#if getFieldValue(journalArticle, 'Titolo')??> 
62                                <#assign title = getFieldValue(journalArticle, 'Titolo') /> 
63                            </#if> 
64 
65                        <#-- struttura: descrizione --> 
66                            <#if getFieldValue(journalArticle, 'Descrizione')??> 
67                                <#assign abstract = getFieldValue(journalArticle, 'Descrizione') /> 
68                            </#if> 
69 
70 
71                        <#-- struttura: data --> 
72                            <#assign date = curEntry.getModifiedDateString() /> 
73                            <#if validator.isNotNull(date)> 
74                                <#assign date_DateObj = dateUtil.parseDate("dd MMM yy, HH:mm", date, locale) /> 
75                                <#if "it_IT" == locale> 
76                                    <#assign date = dateUtil.getDate(date_DateObj, "dd/MM/yyyy", locale) /> 
77                                <#else> 
78                                    <#assign date = dateUtil.getDate(date_DateObj, "yyyy/MM/dd", locale) /> 
79                                </#if> 
80                            </#if> 
81                            <#assign viewUrl = curEntry.getViewURL()?keep_before('?p_l_back_url') /> 
82                        </#if> 
83 
84                    <#-- DATASET --> 
85                        <#if ddmStructureKey == "45631"> 
86                        <#-- struttura: titolo --> 
87                            <#if getFieldValue(journalArticle, 'titoloField')??> 
88                                <#assign title = getFieldValue(journalArticle, 'titoloField') /> 
89                            </#if> 
90 
91                        <#-- struttura: descrizione --> 
92                            <#if getFieldValue(journalArticle, 'descrizioneField')??> 
93                                <#assign abstract = getFieldValue(journalArticle, 'descrizioneField') /> 
94                            </#if> 
95 
96                        <#-- struttura: data --> 
97                            <#if getFieldValue(journalArticle, 'DataCKANField')?? && validator.isNotNull(getFieldValue(journalArticle, 'DataCKANField')) && getFieldValue(journalArticle, 'DataCKANField')!=""> 
98                                <#assign date = getFieldValue(journalArticle, 'DataCKANField') /> 
99                                <#assign date_DateObj = dateUtil.parseDate("yyyy-MM-dd'T'HH:mm:ss.SSSZ", date, locale) /> 
100                            <#elseif getFieldValue(journalArticle, 'dataField')?? && validator.isNotNull(getFieldValue(journalArticle, 'dataField')) && getFieldValue(journalArticle, 'dataField')!=""> 
101                                <#assign date = getFieldValue(journalArticle, 'dataField') /> 
102                                <#assign date_DateObj = dateUtil.parseDate("yyyy-MM-dd", date, locale) /> 
103                            <#else> 
104                                <#assign date = curEntry.getModifiedDateString() /> 
105                                <#assign date_DateObj = dateUtil.parseDate("dd MMM yy, HH:mm", date, locale) /> 
106                            </#if> 
107                            <#if validator.isNotNull(date)> 
108                                <#if "it_IT" == locale> 
109                                    <#assign date = dateUtil.getDate(date_DateObj, "dd/MM/yyyy", locale) /> 
110                                <#else> 
111                                    <#assign date = dateUtil.getDate(date_DateObj, "yyyy/MM/dd", locale) /> 
112                                </#if> 
113                            </#if> 
114 
115 
116                        <#-- View URL--> 
117                            <#if getFieldValue(journalArticle, 'linkField')??> 
118                                <#assign viewUrl = getFieldValue(journalArticle, 'linkField') /> 
119                            </#if> 
120 
121                        <#-- CTA: riconosco se il link punta a un file scaricabile (Link -> Scarica) --> 
122                            <#assign viewUrlPath = viewUrl?keep_before("?")?keep_before("#")?lower_case /> 
123                            <#list downloadFileExtensions as downloadExt> 
124                                <#if viewUrlPath?ends_with(downloadExt)> 
125                                    <#assign isDownloadLink = true /> 
126                                </#if> 
127                            </#list> 
128                        </#if> 
129 
130 
131                    <#-- html --> 
132                        <div class="col-lg-6"> 
133                            <div class="card-wrapper pb-4 h-100"> 
134                                <div class="card card-servizio h-100 no-after"> 
135                                    <div class="card-body p-4"> 
136 
137                                        <#-- ciclo sulle categorie e visualizzo solo quelle padri --> 
138                                        <div class="category-top"> 
139                                            <#if ddmStructureKey == "39724"> 
140                                                <#if categorie?? && (categorie?size > 0)> 
141                                                    <#list categorie as curCat> 
142                                                        <#if validator.isNotNull(curCat) && curCat != ""> 
143                                                            <#attempt> 
144                                                                <#if curCat.getTitle(locale)?upper_case == "PROGETTO"> 
145                                                                    <#assign isProgetto = true /> 
146                                                                <#elseif curCat.getTitle(locale)?upper_case == "NEWS"> 
147                                                                    <#assign isNews = true /> 
148                                                                </#if> 
149                                                                <#recover> 
150                                                                <#-- in caso di problemi non visualizzo nulla --> 
151                                                            </#attempt> 
152                                                        </#if> 
153                                                    </#list> 
154                                                </#if> 
155                                                <#if isProgetto> 
156                                                    <span class="badge-cat-article" style="font-weight:600; color:hsl(350, 85.1851851852%, 35.1%);display: flex;gap: 8px;"> 
157														<img width="25" src="/documents/d/portale-del-dato/icona-progetto-speciale">PROGETTO 
158													</span> 
159                                                <#else> 
160                                                    <span class="badge-cat-article" style="font-weight:600; color:hsl(350, 85.1851851852%, 35.1%);display: flex;gap: 8px;"> 
161														<img width="25" src="/documents/d/portale-del-dato/icona-articolo"> 
162														<#if isNews> 
163                                                            NEWS 
164                                                        <#else> 
165                                                            APPROFONDIMENTO 
166                                                        </#if> 
167													</span> 
168                                                </#if> 
169                                            </#if> 
170                                            <#if ddmStructureKey == "45631"> 
171                                                <span class="badge-cat" style="font-weight:600; color:hsl(350, 85.1851851852%, 35.1%);display: flex;gap: 8px;"> 
172													<img width="25" src="/documents/d/portale-del-dato/icona-dataset">DATASET 
173												</span> 
174                                            </#if> 
175                                            <#if !isProgetto><span class="date-article">${date}</span></#if> 
176                                        </div> 
177 
178                                        <#-- titolo --> 
179                                        <#if validator.isNotNull(title)> 
180                                            <h3 class="card-title"> 
181                                                ${title} 
182                                            </h3> 
183                                        </#if> 
184 
185                                        <#-- abstract --> 
186                                        <#if validator.isNotNull(abstract)> 
187                                            <#assign abstractTooltip = htmlUtil.escape(htmlUtil.stripHtml(abstract)) /> 
188                                            <div class="abstract-tooltip-wrapper" data-tooltip="${abstractTooltip}"> 
189                                                <div class="card-text card-text-article font-sans-serif mb-6">${abstract}</div> 
190                                            </div> 
191                                        </#if> 
192                                        <div class="pills-container-article"> 
193                                            <#if categorie?? && (categorie?size > 0)> 
194                                                <#list categorie as curCat> 
195                                                    <#if validator.isNotNull(curCat) && curCat != "" && curCat.parentCategoryId == 0 && !assetCategories?seq_contains(curCat.getTitle(locale)?upper_case)> 
196                                                        <span class="badge-cat-article">${curCat.getTitle(locale)}</span> 
197                                                    </#if> 
198                                                </#list> 
199                                            </#if> 
200                                        </div> 
201                                        <div class="fonte-article"> 
202                                            <#if ddmStructureKey == "39724"> 
203                                                <#if getFieldValue(journalArticle, 'AutoreRef')??> 
204                                                    <#assign fonte = getFieldValue(journalArticle, 'AutoreRef') /> 
205                                                </#if> 
206                                            </#if> 
207                                            <#if ddmStructureKey == "45631"> 
208                                                <#if getFieldValue(journalArticle, 'fonteField')??> 
209                                                    <#assign fonte = getFieldValue(journalArticle, 'fonteField') /> 
210                                                </#if> 
211                                            </#if> 
212                                            <#if fonte?? && validator.isNotNull(fonte) && fonte!=""> 
213                                                <#if fonte?contains("Comune")> 
214                                                    Da: Open Data 
215                                                <#else> 
216                                                    Da: ${fonte} 
217                                                </#if> 
218                                            <#else> 
219                                                Da: Redazione 
220                                            </#if> 
221                                        </div> 
222                                    </div> 
223 
224                                    <div class="card-footer p-4 pt-0 bg-white border-0"> 
225                                        <div class="d-grid gap-2"> 
226                                            <#if ddmStructureKey == "39724"> 
227                                                <a href="${viewUrl}" class="btn btn-primary btn-block col-lg-12" data-senna-off="true">Esplora</a> 
228                                            </#if> 
229                                            <#if ddmStructureKey == "45631"> 
230                                                <#if isDownloadLink> 
231                                                    <a href="${viewUrl}" target="_blank" class="btn btn-primary btn-block col-lg-12 linkBtn">Scarica 
232                                                        <svg width="20px" height="20px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#ffffff"> 
233                                                            <path d="M12 3V16M12 16L7 11M12 16L17 11M5 21H19" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 
234                                                        </svg> 
235                                                    </a> 
236                                                <#else> 
237                                                    <a href="${viewUrl}" target="_blank" class="btn btn-primary btn-block col-lg-12 linkBtn">Link 
238                                                        <svg width="20px" height="20px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#ffffff"> 
239                                                            <path d="M10 4H6C4.89543 4 4 4.89543 4 6V18C4 19.1046 4.89543 20 6 20H18C19.1046 20 20 19.1046 20 18V14M11 13L20 4M20 4V9M20 4H15" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 
240                                                        </svg> 
241                                                    </a> 
242                                                </#if> 
243                                                <#if getFieldValue(journalArticle, 'linkIncorporaField')??> 
244                                                    <#assign urlIncorpora = getFieldValue(journalArticle, 'linkIncorporaField') /> 
245                                                    <#if validator.isNotNull(urlIncorpora) && urlIncorpora != ""> 
246                                                        <a href="/web/portale-del-dato/anteprima?" class="btn btn-outline-primary btn-block col-lg-12 linkBtn" onclick="localStorage.setItem('anterpimaUrl', '${urlIncorpora}');" data-senna-off="true">Anteprima</a> 
247                                                    </#if> 
248                                                </#if> 
249                                                <#if getFieldValue(journalArticle, 'linkMappaField')??> 
250                                                    <#assign urlMappa = getFieldValue(journalArticle, 'linkMappaField') /> 
251                                                    <#if validator.isNotNull(urlMappa) && urlMappa != ""> 
252                                                        <a href="/web/portale-del-dato/anteprima?" class="btn btn-outline-primary btn-block col-lg-12 linkBtn" onclick="localStorage.setItem('anterpimaUrl', '${urlMappa}');" data-senna-off="true">Mappa</a> 
253                                                    </#if> 
254                                                </#if> 
255                                            </#if> 
256                                        </div> 
257                                    </div> 
258 
259                                </div> 
260                            </div> 
261                        </div> 
262 
263                    </#if> 
264                </#if> 
265                <#if curEntry.getClassName() == "com.liferay.portal.kernel.model.Layout"> 
266                    <#assign layoutEntry = layoutLocalService.getLayout(curEntry.getClassPK()) /> 
267                    <#assign title = layoutEntry.getHTMLTitle(locale) /> 
268                    <#assign description = layoutEntry.getDescription(locale) /> 
269                    <#assign viewUrl = layoutEntry.getFriendlyURL(locale) /> 
270                <#--  categorie  --> 
271                    <#assign categorie = assetCategoryLocalService.getCategories("com.liferay.portal.kernel.model.Layout", curEntry.getClassPK()) /> 
272                    <div class="col-lg-6"> 
273                        <div class="card-wrapper pb-4 h-100"> 
274                            <div class="card card-servizio h-100 no-after"> 
275                                <div class="card-body p-4"> 
276                                    <#-- ciclo sulle categorie e visualizzo solo quelle padri --> 
277                                    <div class="category-top"> 
278					<span class="badge-cat-article" style="font-weight:600; color:hsl(350, 85.1851851852%, 35.1%);display: flex;gap: 8px;"> 
279						<img width="25" src="/documents/d/portale-del-dato/icona-pagina-standard">Pagina 
280													</span> 
281                                    </div> 
282                                    <#-- titolo --> 
283                                    <#if validator.isNotNull(title)> 
284                                        <h3 class="card-title">${title}</h3> 
285                                    </#if> 
286 
287                                    <#-- description --> 
288                                    <#if validator.isNotNull(description)> 
289                                        <#assign descriptionTooltip = htmlUtil.escape(htmlUtil.stripHtml(description)) /> 
290                                        <div class="abstract-tooltip-wrapper" data-tooltip="${descriptionTooltip}"> 
291                                            <div class="card-text card-text-article font-sans-serif mb-6">${description}</div> 
292                                        </div> 
293                                    </#if> 
294                                    <div class="pills-container-article"> 
295                                        <#if categorie?? && (categorie?size > 0)> 
296                                            <#list categorie as curCat> 
297                                                <#if validator.isNotNull(curCat) && curCat !="" && curCat.parentCategoryId==0 && !assetCategories?seq_contains(curCat.getTitle(locale)?upper_case)> 
298                                                    <span class="badge-cat-article">${curCat.getTitle(locale)}</span> 
299                                                </#if> 
300                                            </#list> 
301                                        </#if> 
302                                    </div> 
303                                    <div class="fonte-article">Da: Redazione</div> 
304                                </div> 
305                                <div class="card-footer p-4 pt-0 bg-white border-0"> 
306                                    <div class="d-grid gap-2"> 
307                                        <a href="/web/portale-del-dato${viewUrl}" class="btn btn-primary btn-block col-lg-12" data-senna-off="true">Esplora</a> 
308                                    </div> 
309                                </div> 
310                            </div> 
311                        </div> 
312                    </div> 
313                </#if> 
314            </#list> 
315 
316        </div> 
317    </#if> 
318</div> 
319<style> 
320    .number { 
321        color: #A50D26; 
322    } 
323    .search-total-label { 
324        padding-left: 12px; 
325        position: absolute; 
326        z-index: 2; 
327        margin-top:-58px; 
328        font-size: 1rem; 
329    } 
330    .pagination { 
331        justify-content:center; 
332    } 
333    .pagination-items-per-page { 
334        display:flex; 
335        flex-direction:row-reverse; 
336    } 
337    .pagination-results{ 
338        position: absolute; 
339        top: -32px; 
340        padding-left: 12px; 
341        display: flex; 
342        font-size: 16px; 
343        flex-direction: row-reverse; 
344    } 
345    @media (max-width: 600px) { 
346        .search-total-label{ 
347            margin-top:-80px !important; 
348        } 
349    } 
350    .category-top { 
351        display: flex !important; 
352        justify-content: space-between; 
353    } 
354    .card-text-article, .card-text-article p { 
355        font-size: 14px !important; 
356    } 
357    .pills-container-article { 
358        display: flex; 
359        flex-wrap: wrap; 
360        gap: 0.4rem; 
361        margin-top: 0.5rem; 
362    } 
363    .pills-container-article .badge-cat-article { 
364        background-color: white; 
365        color: hsl(350, 85.1851851852%, 35.1%); 
366        border: 1px solid hsl(350, 85.1851851852%, 35.1%); 
367        padding: 0rem 0.65rem; 
368        font-size: 0.75rem; 
369        text-transform:uppercase; 
370        border-radius: 9999px; 
371        font-weight: 600; 
372        white-space: nowrap; 
373        max-width: 100%; 
374        overflow: hidden; 
375        text-overflow: ellipsis; 
376    } 
377    .pills-container-article .badge-cat-article:hover  { 
378        background-color: hsl(350, 85.1851851852%, 35.1%); /* colore più scuro al passaggio */ 
379        color: #fff; 
380    } 
381    .fonte-article { 
382        font-style: italic; 
383        font-size: 14px; 
384        text-align: start; 
385        margin-top: 0.75rem; 
386    } 
387    .abstract-tooltip-wrapper { 
388        position: relative; 
389    } 
390    .abstract-tooltip-wrapper[data-tooltip]:hover::after { 
391        content: attr(data-tooltip); 
392        position: absolute; 
393        left: 0; 
394        top: 100%; 
395        margin-top: 4px; 
396        z-index: 10; 
397        width: max-content; 
398        max-width: 320px; 
399        white-space: pre-line; 
400        background-color: #333; 
401        color: #fff; 
402        font-style: normal; 
403        font-size: 12px; 
404        line-height: 1.4; 
405        padding: 8px 12px; 
406        border-radius: 6px; 
407        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25); 
408        pointer-events: none; 
409    } 
410</style>