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@3a1d31c0"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign displayDateObject = dateUtil...  [in template "57149678738875#20119#36588" at line 17, column 1]
----
1<#function getDateString date> 
2    <#assign pattern = "dd/MM/yyyy HH:mm:ss" /> 
3    <#assign timeZone = staticUtil["java.util.TimeZone"].getTimeZone("GMT-3") /> 
4    <#return dateUtil.getDate(date, "dd/MM/yyyy ' às ' HH'h'mm", locale, timeZone) /> 
5</#function> 
6 
7<#-- SERVIÇOS --> 
8<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
9<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
10 
11<#-- VARIÁVEIS --> 
12<#assign groupId = themeDisplay.getCompanyGroupId()  /> 
13<#assign articleId = .vars['reserved-article-id'].data /> 
14<#assign currentArticle = JournalArticleLocalService.getArticle(articleGroupId, articleId) /> 
15<#assign classPK = currentArticle.getResourcePrimKey() /> 
16<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", classPK) /> 
17<#assign displayDateObject = dateUtil.parseDate("EEE, d MMM yyyy HH:mm:ss Z", .vars['reserved-article-create-date'].data, locale) /> 
18<#assign modifiedDateObject = dateUtil.parseDate("EEE, d MMM yyyy HH:mm:ss Z", .vars['reserved-article-modified-date'].data, locale) /> 
19<#assign displayDate = getDateString(displayDateObject) /> 
20<#assign modifiedDate = getDateString(modifiedDateObject) /> 
21<#assign images = news_images.getSiblings()?filter(imagem -> (imagem.getData())?? && imagem.getData() != "") /> 
22<#assign viewFullURL = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
23 
24<#-- Verifique se a categoria "Arquivados" está presente --> 
25<#assign hasArquivados = false> 
26<#list categories as category> 
27    <#if category.getName()?lower_case == "arquivados"> 
28        <#assign hasArquivados = true /> 
29    </#if> 
30</#list> 
31 
32<div class="noticia-gdf row"> 
33    <#assign fromCategoryPage = .vars['fromCategoryPage']?default('false') == 'true' /> 
34 
35    <#if hasArquivados> 
36        <span data-category-url="/web/guest/category/arquivados" id="journalCategory" data-category-name="Arquivados"></span> 
37    <#else> 
38        <#list categories as category> 
39            <#assign vocabulary = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService").getVocabulary(category.getVocabularyId()) /> 
40            <#assign categoryUrlMapping = { 
41                "noticia": "noticias", 
42                "destaque": "modulo-carrossel-de-destaques-principais", 
43                "Serviços para o beneficiário": "servicos-para-o-beneficiario-2", 
44                "Perfil dos Diretores": "/o-iprev/perfil-dos-diretores", 
45                "MODULO-15-BOTOES": "servicos-mais-procurados" 
46            } /> 
47            <#assign urlPrefix = "/web/guest/category/" /> 
48            <#assign categoryUrl = urlPrefix + (categoryUrlMapping[category.getName()?lower_case]!category.getName()?lower_case?replace(' ', '-')) /> 
49             
50            <span data-category-url="${categoryUrl}" id="journalCategory" data-category-id="${category.getCategoryId()}" data-category-name="${category.getName()}"></span> 
51        </#list> 
52    </#if> 
53 
54    <div class="container"> 
55        <div class="col-md-9 col-md-offset-1"> 
56            <span class="time-text">${displayDate} - Atualizado em ${modifiedDate}</span> 
57            <h3>${.vars['reserved-article-title'].data}</h3> 
58 
59            <#if !getterUtil.getBoolean(networks_share.getData())> 
60                <p class="compartilhar">COMPARTILHAR</p> 
61                <@share /> 
62            </#if> 
63 
64            <#if call.getData()?has_content> 
65                <p class="sutia chamada-text"><em>${call.getData()}</em></p> 
66            </#if> 
67 
68            <#if author.getData()?has_content> 
69                <p class="autor-text">${author.getData()}</p> 
70            </#if> 
71 
72            <#if images?has_content> 
73                <#if images?size == 1> 
74                    <#list images as cur_news_image> 
75                        <#if cur_news_image.getData()?? && cur_news_image.getData() != ""> 
76                            <img class="d-block w-100" src="${cur_news_image.getData()}" /> 
77                            <#if cur_news_image.attributes.alt??> 
78                                <p class="text-center mt-2 mb-5"><em>${cur_news_image.attributes.alt}</em></p>     
79                            </#if> 
80                        </#if> 
81                    </#list> 
82                <#else> 
83                    <div id="carousel-${randomNamespace}" class="carousel slide mb-4" data-ride="carousel" data-interval="false"> 
84                        <div class="carousel-inner"> 
85                            <#list images as cur_news_image> 
86                                <div class="carousel-item ${cur_news_image?is_first?then('active', '')}"> 
87                                    <img class="d-block w-100" src="${cur_news_image.getData()}" /> 
88                                    <#if cur_news_image.attributes.alt??> 
89                                        <p class="text-center mt-2 mb-5"><em>${cur_news_image.attributes.alt}</em></p>     
90                                    </#if> 
91                                </div> 
92                            </#list> 
93                        </div> 
94                        <a class="carousel-control-prev" href="#carousel-${randomNamespace}" role="button" data-slide="prev"> 
95                            <span class="carousel-control-prev-icon" aria-hidden="true"></span> 
96                            <span class="sr-only">Previous</span> 
97                        </a> 
98                        <a class="carousel-control-next" href="#carousel-${randomNamespace}" role="button" data-slide="next"> 
99                            <span class="carousel-control-next-icon" aria-hidden="true"></span> 
100                            <span class="sr-only">Next</span> 
101                        </a> 
102                    </div> 
103                </#if> 
104            </#if> 
105 
106            <div class="materia">${content.getData()}</div> 
107 
108            <#if news_documents.getSiblings()?has_content && news_documents.getSiblings()?first.getData() != ""> 
109                <h4 class="mt-4">Anexos</h4> 
110                <ul class="list-unstyled"> 
111                    <#list news_documents.getSiblings() as cur_news_document> 
112                        <#assign title = cur_news_document.getData()?keep_before_last("?")?split('/')[4] /> 
113                        <a href="${cur_news_document.getData()?keep_before_last('/')}" target="_blank" class="d-block news-document"> 
114                            ${title} 
115                        </a> 
116                    </#list> 
117                </ul> 
118                <script> 
119                    document.querySelectorAll(".news-document").forEach(function(element) { 
120                        element.textContent = decodeURI(element.textContent); 
121                    }); 
122                </script> 
123            </#if> 
124        </div> 
125    </div> 
126</div> 
127 
128<#-- MACRO: COMPARTILHAR --> 
129<#macro share> 
130    <div class="share"> 
131        <a class="facebook" href="https://www.facebook.com/sharer.php?u=${viewFullURL}" target="_blank">Facebook</a> 
132        <a class="twitter" href="http://twitter.com/intent/tweet?text=${.vars['reserved-article-title'].data}%0AVeja%20mais%20em:&url=${viewFullURL}" target="_blank">Twitter</a> 
133    </div> 
134</#macro> 
135 
136<script> 
137    Liferay.on('allPortletsReady', function() { 
138        function getPreviousPageUrl() { 
139            return document.referrer || ''; 
140
141 
142        function checkPreviousPage() { 
143            var previousPageUrl = getPreviousPageUrl(); 
144            var fromCategoryPage = previousPageUrl.includes('/category/') ? 'true' : 'false'; 
145             
146            // Defina a variável de contexto para o FreeMarker 
147            var meta = document.createElement('meta'); 
148            meta.name = 'fromCategoryPage'; 
149            meta.content = fromCategoryPage; 
150            document.head.appendChild(meta); 
151
152 
153        checkPreviousPage(); 
154         
155        // Atualiza o breadcrumb se necessário 
156        var breadcrumbList = document.querySelector(".breadcrumb"); 
157        if (breadcrumbList) { 
158            // Check if "Arquivados" exists in breadcrumb 
159            var hasArquivadosBreadcrumb = false; 
160            var breadcrumbItems = breadcrumbList.querySelectorAll(".breadcrumb-item"); 
161            for (var i = 0; i < breadcrumbItems.length; i++) { 
162                if (breadcrumbItems[i].textContent.includes("Arquivados")) { 
163                    hasArquivadosBreadcrumb = true; 
164                    break; 
165
166
167 
168            // Only proceed if "Arquivados" is not already in breadcrumb 
169            if (!hasArquivadosBreadcrumb) { 
170                var categorySpan = document.getElementById("journalCategory"); 
171                if (categorySpan) { 
172                    var categoryName = categorySpan.getAttribute("data-category-name"); 
173                    var categoryUrl = categorySpan.getAttribute("data-category-url"); 
174 
175                    var newBreadcrumbItem = document.createElement("li"); 
176                    newBreadcrumbItem.className = "breadcrumb-item"; 
177                    newBreadcrumbItem.style.fontSize = "13px"; 
178 
179                    if (categoryUrl) { 
180                        var categoryLink = document.createElement("a"); 
181                        categoryLink.href = categoryUrl; 
182                        categoryLink.textContent = categoryName; 
183                        categoryLink.style.paddingLeft = "8px"; 
184                        categoryLink.className = "breadcrumb-link 1"; 
185                        newBreadcrumbItem.appendChild(categoryLink); 
186                    } else { 
187                        newBreadcrumbItem.textContent = categoryName; 
188
189 
190                    breadcrumbList.appendChild(newBreadcrumbItem); 
191
192
193
194 
195        // Atualiza o iframe existente 
196        var oldIframe = document.querySelector('iframe'); 
197        if (oldIframe) { 
198            var parentElement = oldIframe.parentNode; 
199            var newIframe = oldIframe.cloneNode(true); 
200 
201            newIframe.setAttribute('sandbox', 'allow-scripts allow-same-origin'); 
202            newIframe.setAttribute('src', oldIframe.getAttribute('src')); 
203            newIframe.setAttribute('allowfullscreen', oldIframe.hasAttribute('allowfullscreen')); 
204            newIframe.setAttribute('frameborder', oldIframe.getAttribute('frameborder')); 
205            newIframe.setAttribute('height', oldIframe.getAttribute('height')); 
206            newIframe.setAttribute('width', oldIframe.getAttribute('width')); 
207            newIframe.setAttribute('title', oldIframe.getAttribute('title')); 
208 
209            parentElement.replaceChild(newIframe, oldIframe); 
210
211    }); 
212		document.addEventListener('DOMContentLoaded', () => { 
213    const videoIframes = document.querySelectorAll('iframe[data-video-liferay]'); 
214     
215    videoIframes.forEach(iframe => { 
216        let embedId = iframe.closest('.embed-responsive').getAttribute('data-embed-id'); 
217         
218        if (embedId) { 
219            embedId = embedId.split('.mp4')[0] + '.mp4'; 
220
221         
222        if (embedId) { 
223            const videoElement = document.createElement('video'); 
224             
225            videoElement.controls = true; 
226            videoElement.preload = 'metadata'; 
227            videoElement.width = iframe.width || 560; 
228            videoElement.height = iframe.height || 315; 
229            videoElement.className = 'wp-video-shortcode'; 
230             
231            const sourceElement = document.createElement('source'); 
232            sourceElement.src = embedId; 
233            sourceElement.type = 'video/mp4'; 
234             
235            videoElement.appendChild(sourceElement); 
236             
237            // Substitui o iframe pelo vídeo 
238            iframe.parentNode.replaceChild(videoElement, iframe); 
239
240    }); 
241}); 
242</script>