Při zpracování šablony došlo k chybě.
The string doesn't match the expected date/time/date-time format. The string to parse was: "". The expected format was: "ISO 8601 (subset) date". The nested reason given follows: The value didn't match the expected pattern: (-?[0-9]{4,})-([0-9]{2})-([0-9]{2}) or (-?[0-9]{4,}?)([0-9]{2})([0-9]{2}) ---- FTL stack trace ("~" means nesting-related): - Failed at: #local startWithDelay = dateDiff(star... [in template "20116#20152#227094" in function "getEventEntries" at line 124, column 21] ----
1<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")/>
2
3<#assign
4 currMonth = ""
5 currYear = ""
6 eventEntries = getEventEntries()
7/>
8
9<div class="ponsse-events events-full">
10 <#list eventEntries?sort_by("start") as event>
11 <#if validator.isNotNull(event.start)>
12 <#assign
13 startDate = dateUtil.parseDate("yyyy-MM-dd", event.start, locale)
14 nextYear = startDate?string('yyyy')
15 nextMonth = startDate?string('MM')
16 />
17 </#if>
18
19 <#if (nextMonth != currMonth || (nextYear != currYear))>
20 <#assign
21 currMonth = nextMonth
22 currYear = nextYear
23 />
24 <div class="currentMonth">
25 <@liferay_ui["message"] key="ponsse.month.${currMonth}"/>, ${currYear}</div>
26 </#if>
27
28 <div class="event-item">
29 <@getEditIcon event/>
30 <a href="${event.viewURL}" class="event-link">
31 <div class="date">
32 ${dateUtil.getDate(startDate, "dd.MM.yyyy", locale)} <#if startTime?has_content>- ${startTime}</#if>
33 </div>
34 <div class="event-type">
35 <#if (event.eventType?has_content)>
36 <span>${event.eventType}</span>
37 </#if>
38 </div>
39 <div class="event-title">${event.entryTitle}</div>
40 <div class="location">
41 <#if event.location?has_content>
42 ${event.location}
43 </#if>
44 </div>
45 </a>
46 </div>
47 <#else>
48 <#if !themeDisplay.isSignedIn()>
49 ${renderRequest.setAttribute("PORTLET_CONFIGURATOR_VISIBILITY", true)}
50 </#if>
51
52 <div class="alert alert-info">
53 <@liferay_ui["message"] key="there-are-no-results" />
54 </div>
55 </#list>
56</div>
57
58<#macro getEditIcon entry>
59 <div class="pull-right">
60 <#if entry.allowEdit>
61 <#if validator.isNotNull(entry.editPortletURL)>
62 <#local title = languageUtil.format(locale, "edit-x", entry.entryTitle, false) />
63 <@liferay_ui["icon"]
64 cssClass="icon-monospaced visible-interaction"
65 icon="pencil"
66 markupView="lexicon"
67 message=title
68 url="javascript:Liferay.Util.openWindow({id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(entry.editPortletURL.toString()) + "'});"
69 />
70 </#if>
71 </#if>
72 </div>
73</#macro>
74
75<#function getEventEntries>
76 <#local
77 newEntries = []
78 now = .now?date?iso_utc
79 redirectURL = renderResponse.createRenderURL()
80 />
81 ${redirectURL.setParameter("mvcPath", "/add_asset_redirect.jsp")}
82 ${redirectURL.setWindowState("pop_up")}
83
84 <#list entries as entry>
85 <#local
86 categories = entry.getCategories()
87 assetRenderer = entry.getAssetRenderer()
88 journalArticle = assetRenderer.getArticle() <#-- JournalArticleImpl -->
89 document = saxReaderUtil.read(journalArticle.getContentByLocale(locale))
90 rootElement = document.getRootElement()
91 elements = rootElement.elements()
92
93 link = ""
94 location = ""
95 start = ""
96 eventType = ""
97 displayLocale = ""
98 startWithDelay = ""
99 endWithDelay = ""
100 renderEvent = false
101 />
102
103 <#if categories?has_content>
104 <#list categories as cat>
105 <#if (cat.getVocabularyId()?long == 246344)>
106 <#local displayLocale = cat.getName()/>
107 </#if>
108 <#if (cat.getVocabularyId()?long == 227201)>
109 <#local eventType = cat.getTitle(locale)/>
110 </#if>
111 </#list>
112 </#if>
113
114 <#if (!displayLocale?has_content)||(displayLocale == locale)>
115 <#list elements as element>
116 <#if "link" == element.attributeValue("name")>
117 <#local link = element.element("dynamic-content").getText() />
118 </#if>
119 <#if "location" == element.attributeValue("name")>
120 <#local location = element.element("dynamic-content").getText() />
121 </#if>
122 <#if "start" == element.attributeValue("name")>
123 <#local start = element.element("dynamic-content").getText() />
124 <#local startWithDelay = dateDiff(start?date('iso'),-3)>
125 </#if>
126 <#if "end" == element.attributeValue("name") && element.element("dynamic-content").getText()?has_content>
127 <#local end = element.element("dynamic-content").getText() />
128 <#local endWithDelay = dateDiff(end?date('iso'),-3)>
129 </#if>
130 </#list>
131
132 <#if endWithDelay?has_content>
133 <#local renderEvent = (now?date('iso') <= endWithDelay)>
134 <#elseif startWithDelay?has_content>
135 <#local renderEvent = (now?date('iso') <= startWithDelay)>
136 </#if>
137
138 <#if renderEvent>
139 <#local
140 viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent"))?split("?")[0]
141 editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL)!""
142 entryJson = {
143 "entryTitle": htmlUtil.escape(assetRenderer.getTitle(locale)),
144 "start": start,
145 "viewURL": viewURL,
146 "allowEdit": assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker()),
147 "editPortletURL": editPortletURL,
148 "eventType": eventType,
149 "location": location
150 }
151 newEntries = newEntries + [ entryJson ]
152 />
153 </#if>
154 </#if>
155 </#list>
156 <#return newEntries>
157</#function>
158
159<#function dateDiff date days>
160 <#local timeInMilliseconds = (1000 * 60 * 60 * 24 * days) >
161 <#local aDate = date?long - timeInMilliseconds?long>
162 <#return aDate?number_to_date>
163</#function>