MOSCARDO

Tecnologie ICT per il MOnitoraggio Strutturale di Costruzioni Antiche basato su Reti di sensori wireless e DrOni

Si è verificato un errore nell'elaborarazione del modello.
Failed to get value for key "com.liferay.document.library.kernel.util.PDFProcessorUtil"; see cause exception.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign pdfUtil = staticUtil["com.lif...  [in template "10155#10195#29852944" at line 12, column 1]
----
1<#setting time_zone=timeZone.ID> 
2<#assign defaultLocale="it_IT"> 
3<#assign imagePath = themeDisplay.getPathThemeImages() /> 
4 
5<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
6<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
7<#assign AssetVocabularyService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyService") /> 
8<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") /> 
9<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") /> 
10<#assign DLAppLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService") /> 
11<#assign dlUtil = staticUtil["com.liferay.document.library.kernel.util.DLUtil"] /> 
12<#assign pdfUtil = staticUtil["com.liferay.document.library.kernel.util.PDFProcessorUtil"] /> 
13 
14<#assign article = JournalArticleLocalService.getLatestArticle(groupId, .vars['reserved-article-id'].data) /> 
15<#assign entry = AssetEntryLocalService.fetchEntry("com.liferay.journal.model.JournalArticle", article.resourcePrimKey) /> 
16<#assign assetRenderer = entry.getAssetRenderer() /> 
17<#assign totalPages = 0 /> 
18 
19<#assign hasCookie > 
20    <@tor.checkCookieAcceptance siteId=themeDisplay.getScopeGroupId() cookieToCheck="third-party" /> 
21</#assign> 
22 
23<style> 
24    .asset-full-content p.component-title.h4 { 
25        display: none; 
26
27 
28    div.asset-full-content > div.align-items-center:first-of-type { 
29        display: none !important; 
30
31 
32    .header-back-to { 
33        display: none; 
34
35 
36    .hide-content { 
37        visibility: hidden; 
38        height: 0; 
39        padding: 0px !important; 
40        overflow: hidden; 
41        position: absolute; 
42        height: 1px; 
43
44 
45</style> 
46 
47<div class="rtds-space-y-5 md:rtds-space-y-8 rtds-background-01"> 
48    <div class="rtds-container-sm first:rtds-pt-6 first:md:rtds-pt-12 rtds-pb-6 md:rtds-pb-12 "> 
49        <div class="rtds-grid md:rtds-grid-cols-12 rtds-gap-6"> 
50            <div class="md:rtds-col-span-8"> 
51                <div class="rtds-article-body"> 
52                    <#if (abstract.getData())??> 
53                        ${abstract.getData()} 
54                    </#if> 
55 
56                    <#if attachment.getData()??  && (attachment.getData())?has_content > 
57 
58                        <#assign attachment = attachment.getData() /> 
59                        <#assign attachmentArray =  attachment?split("/") /> 
60                        <#if (attachmentArray?size >= 5)> 
61                            <#assign uuid = "${attachmentArray[5]}"?split("?")[0] /> 
62 
63                            <#if uuid?has_content > 
64                                <#assign dlFileEntry = DLFileEntryLocalService.fetchFileEntry(uuid, themeDisplay.getScopeGroupId())!"" /> 
65 
66                                <#assign fileEntry = "" /> 
67                                <#if dlFileEntry?has_content > 
68                                    <#assign fileEntry = DLAppLocalService.getFileEntry(dlFileEntry.getFileEntryId()) /> 
69                                </#if> 
70 
71                                <#if fileEntry?has_content> 
72                                    <#assign previewURL = dlUtil.getPreviewURL(fileEntry, fileEntry.getLatestFileVersion(false), themeDisplay, "") + "&previewFileIndex=1" /> 
73                                    <#assign img = { 
74                                    "path": "${previewURL}", 
75                                    "alt": "${fileEntry.fileName}" 
76                                    } > 
77 
78                                    <#assign fileVersion = fileEntry.getFileVersion() /> 
79                                    <#assign totalPages = pdfUtil.getPreviewFileCount(fileVersion) /> 
80                                    <section class="rtds-space-y-4 md:rtds-space-y-6"> 
81                                        <div> 
82                                            <div class="rtds-section-header"> 
83                                                <div class="rtds-flex rtds-items-center rtds-gap-4 md:rtds-gap-6 rtds-content-01"> 
84                                                    <div class="rtds-flex rtds-flex-wrap rtds-items-center rtds-gap-2 md:rtds-gap-4"> 
85                                                        <div class="rtds-flex rtds-flex-col rtds-gap-6 rtds-w-full"> 
86                                                            <div class="rtds-flex rtds-flex-wrap rtds-items-center rtds-gap-2 md:rtds-gap-4"> 
87                                                                <div class="rtds-vertical-divider rtds-w-4 md:rtds-w-6 lg:rtds-w-8"> 
88                                                                    <img class="rtds-w-full rtds-h-auto" 
89                                                                         src="${imagePath}/vertical-divider.svg" alt=""> 
90                                                                </div> 
91                                                                <h2 class="rtds-heading-3 md:rtds-heading-2 "> 
92                                                                    Allegato 
93                                                                </h2> 
94                                                            </div> 
95                                                        </div> 
96                                                    </div> 
97                                                </div> 
98                                            </div> 
99                                        </div> 
100                                        <div class="" style="margin-top: 0"> 
101                                            <a href="${attachment}" class="rtds-text-link rtds-leading-snug"> 
102 
103                                                <svg class="rtds-icon rtds-fill-current rtds-w-4 rtds-h-4 rtds-flex-shrink-0 rtds-flex-grow-0" 
104                                                     aria-hidden="true" focusable="false" role="img"> 
105                                                    <use href="${imagePath}/icons.svg#outline--document-arrow-down"/> 
106                                                </svg> 
107 
108                                                ${languageUtil.get(request, "download")} 
109                                            </a> 
110                                        </div> 
111                                        <div class="rtds-carousel rtds-carousel-tor splide" aria-label="Titolo sezione" style="margin-top: 0"> 
112                                            <div class="rtds-carousel__arrows splide__arrows"> 
113                                                <button class="rtds-carousel__arrow rtds-carousel__arrow--prev splide__arrow splide__arrow--prev" 
114                                                        aria-label="Slide precedente"> 
115                                                    <svg class="rtds-icon rtds-fill-current rtds-carousel__arrow-svg" 
116                                                         aria-hidden="true" 
117                                                         focusable="false" role="img"> 
118                                                        <use href="${imagePath}/icons.svg#solid--chevron-right"/> 
119                                                    </svg> 
120                                                    <span class="rtds-sr-only">Slide precedente</span> 
121                                                </button> 
122                                                <button class="rtds-carousel__arrow rtds-carousel__arrow--next splide__arrow splide__arrow--next" 
123                                                        aria-label="Slide successivo"> 
124                                                    <svg class="rtds-icon rtds-fill-current rtds-carousel__arrow-svg" 
125                                                         aria-hidden="true" 
126                                                         focusable="false" role="img"> 
127                                                        <use href="${imagePath}/icons.svg#solid--chevron-right"/> 
128                                                    </svg> 
129                                                    <span class="rtds-sr-only">Slide successivo</span> 
130                                                </button> 
131                                            </div> 
132                                            <div class="rtds-carousel-wrapper splide__track"> 
133                                                <ul class="rtds-carousel__list splide__list rtds-space-y-6 md:rtds-space-y-0"> 
134 
135                                                    <figure class="rtds-mt-5"> 
136                                                        <img id="attachment" class="rtds-rounded-2xl" alt="${img.alt}" 
137                                                             src="${img.path}"/> 
138                                                    </figure> 
139 
140                                                </ul> 
141                                            </div> 
142                                        </div> 
143                                    </section> 
144                                </#if> 
145 
146                                <#if (video.getSiblings()?has_content) && (video.getSiblings()?size >0) 
147                                && video.getSiblings()[0].ytCode.getData()?has_content> 
148                                    <section class="rtds-space-y-4 md:rtds-space-y-6"> 
149                                        <div> 
150                                            <div class="rtds-section-header"> 
151                                                <div class="rtds-flex rtds-items-center rtds-gap-4 md:rtds-gap-6 rtds-content-01"> 
152                                                    <div class="rtds-flex rtds-flex-wrap rtds-items-center rtds-gap-2 md:rtds-gap-4"> 
153                                                        <div class="rtds-flex rtds-flex-col rtds-gap-6 rtds-w-full"> 
154                                                            <div class="rtds-flex rtds-flex-wrap rtds-items-center rtds-gap-2 md:rtds-gap-4"> 
155                                                                <div class="rtds-vertical-divider rtds-w-4 md:rtds-w-6 lg:rtds-w-8"> 
156                                                                    <img class="rtds-w-full rtds-h-auto" 
157                                                                         src="${imagePath}/vertical-divider.svg" alt=""> 
158                                                                </div> 
159                                                                <h2 class="rtds-heading-3 md:rtds-heading-2 "> 
160                                                                    Video 
161                                                                </h2> 
162                                                            </div> 
163                                                        </div> 
164                                                    </div> 
165                                                </div> 
166                                            </div> 
167                                        </div> 
168                                        <div class="rtds-container-sm rtds-grid rtds-grid-cols-1 md:rtds-grid-cols-2 rtds-gap-5" style="margin-top: 0"> 
169                                            <#list video.getSiblings() as cur_video> 
170                                                <#if (cur_video.getData())??> 
171 
172                                                    <#assign title = "" /> 
173                                                    <#assign ytCode = "" /> 
174                                                    <#assign isPlaylist = "false" /> 
175 
176                                                    <#if (cur_video.videoTitle.getData())??> 
177                                                        <#assign title = cur_video.videoTitle.getData() /> 
178                                                    </#if> 
179 
180                                                    <#if (cur_video.ytCode.getData())??> 
181                                                        <#assign ytCode = cur_video.ytCode.getData() /> 
182                                                    </#if> 
183 
184                                                    <#if getterUtil.getBoolean(cur_video.playlist.getData())> 
185                                                        <#assign isPlaylist = cur_video.playlist.getData() /> 
186                                                    </#if> 
187 
188 
189                                                    <div class="rtds-card rtds-card--video rtds-gap-0"> 
190                                                        <div class="rtds-video-item rtds-border rtds-border-gray-01 rtds-card__video"> 
191                                                            <div class="rtds-aspect-video"> 
192                                                                <#if getterUtil.getBoolean(hasCookie)> 
193                                                                    <iframe title="Video youtube: ${title}" width="1167" 
194                                                                            height="656" 
195                                                                            src="https://www.youtube.com/embed/${getterUtil.getBoolean(isPlaylist)?then('videoseries?list=','')}${ytCode}" 
196                                                                            frameborder="0" 
197                                                                            allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" 
198                                                                            allowfullscreen=""></iframe> 
199                                                                <#else> 
200                                                                    <#assign videoAnchor = '<a class="rtds-link rtds-font-bold rtds-content-primary" href="https://www.youtube.com/watch?v='+ytCode+'" rel="noopener noreferrer" target="_blank">link</a>' /> 
201                                                                    <#assign youHaveNotAcceptedCookieMsg = languageUtil.format(locale, "you-have-not-accepted-third-party-cookie-x", videoAnchor, false) /> 
202 
203                                                                    <span class="rtds-card__title rtds-content-01 rtds-font-normal"> 
204                                                                    ${youHaveNotAcceptedCookieMsg} 
205                                                                        </span> 
206                                                                </#if> 
207                                                            </div> 
208                                                        </div> 
209                                                        <#if title?has_content> 
210                                                            <div class="rtds-card__content"> 
211                                                                <div class="rtds-card__heading"> 
212                                                                    <h3 class="rtds-card__title rtds-content-01 rtds-text-xl rtds-font-semibold"> 
213                                                                        ${title} 
214                                                                    </h3> 
215                                                                </div> 
216                                                            </div> 
217                                                        </#if> 
218                                                    </div> 
219                                                </#if> 
220                                            </#list> 
221                                        </div> 
222                                    </section> 
223                                </#if> 
224                            </#if> 
225                        </#if> 
226                    </#if> 
227                </div> 
228            </div> 
229        </div> 
230    </div> 
231</div> 
232<div class="rtds-background-01"> 
233    <@tor.getArticleUpdateInformation entry=entry article="" sharebutton=true /> 
234</div> 
235 
236<script> 
237    document.addEventListener("DOMContentLoaded", function () { 
238        const totalPages = ${totalPages}; 
239 
240        if (totalPages > 0) { 
241 
242            const img = document.getElementById("attachment"); 
243            const prevBtn = document.querySelector(".splide__arrow--prev"); 
244            const nextBtn = document.querySelector(".splide__arrow--next"); 
245 
246            function updatePreviewIndex(delta) { 
247                if (!img) return; 
248 
249                const currentUrl = new URL(img.src); 
250                let currentIndex = parseInt(currentUrl.searchParams.get("previewFileIndex")) || 1; 
251 
252                // Calcolo nuovo indice 
253                let newIndex = currentIndex + delta; 
254 
255                if (newIndex < 1) { 
256                    newIndex = totalPages; 
257                } else if (newIndex > totalPages) { 
258                    newIndex = 1; 
259
260 
261                currentUrl.searchParams.set("previewFileIndex", newIndex); 
262 
263                // Aggiorno src 
264                img.src = currentUrl.toString(); 
265
266 
267            if (prevBtn) { 
268                prevBtn.addEventListener("click", function () { 
269                    updatePreviewIndex(-1); 
270                }); 
271
272 
273            if (nextBtn) { 
274                nextBtn.addEventListener("click", function () { 
275                    updatePreviewIndex(1); 
276                }); 
277
278
279 
280    }); 
281</script>