An error occurred while processing the template.
The following has evaluated to null or missing:
==> ddmFormFieldValue.getValue().getString(locale) [in template "64612643129409#230641#235120" at line 17, column 32]
----
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: #assign value = ddmFormFieldValue.get... [in template "64612643129409#230641#235120" in function "getFieldValue" at line 17, column 17]
----
1<#setting url_escaping_charset='UTF-8'/>
2<script src="//cdnjs.cloudflare.com/ajax/libs/luxon/1.25.0/luxon.min.js"></script>
3
4<#assign doubleComma ='"' />
5<#assign groupId = themeDisplay.getScopeGroupId() />
6<#assign commonServicesGroupConfiguration = ArenaConfigurationScopeManager.commonServicesGroupConfiguration(groupId) />
7<#assign commonServicesSystemConfiguration = ArenaConfigurationScopeManager.commonServicesSystemConfiguration() />
8<#assign openingHoursCustomerId = commonServicesGroupConfiguration.openingHoursCustomerId() />
9<#assign openingHoursApiEndpoint = commonServicesSystemConfiguration.openingHoursApiEndpoint() />
10<#assign customerId = doubleComma + openingHoursCustomerId + doubleComma />
11<#assign serviceEndpoint = doubleComma + openingHoursApiEndpoint + doubleComma />
12
13<#function getFieldValue ddmFormFieldValues fieldReference>
14 <#list ddmFormFieldValues as ddmFormFieldValue>
15 <#if ddmFormFieldValue.getDDMFormField().getFieldReference()==fieldReference>
16 <#if (ddmFormFieldValue.getValue())??>
17 <#assign value=ddmFormFieldValue.getValue().getString(locale) />
18 <#return value />
19 <#else>
20 <#return null />
21 </#if>
22 </#if>
23 </#list>
24 <#return null />
25</#function>
26
27<script>
28 <#-- check if array exists, otherwise create it -->
29 var branchNames = branchNames || [];
30 var branchNamesCount = branchNames.length;
31 <#-- increase counter with one unless it´s zero -->
32 var branchNamesCount = branchNamesCount == 0 ? branchNamesCount : branchNamesCount++;
33
34 <#-- create a new array in the array -->
35 branchNames[branchNamesCount] = [];
36 var branchName = [];
37 <#list entries as entry>
38 <#assign assetRenderer = entry.getAssetRenderer() />
39 <#assign className = assetRenderer.getClassName() />
40 <#assign ddmFormValuesReader = assetRenderer.getDDMFormValuesReader() />
41 <#assign ddmFormFieldValues = ddmFormValuesReader.getDDMFormValues().getDDMFormFieldValues() />
42 <#assign title = assetRenderer.getTitle(locale) />
43 <#assign branchName = getFieldValue(ddmFormFieldValues, 'libraryName')! />
44 <#assign entry = entry />
45 branchNames[branchNamesCount].push("${branchName}");
46 </#list>
47</script>
48<script>
49 function arenaOpeningHoursAllBranchesInit() {
50 for(var i = 0; i < branchNames.length; i++) {
51 branchNames[i].forEach(displayOpeningHours);
52 }
53 }
54 function displayOpeningHours(value) {
55 var calendar = new openingHoursAllBranches.Calendar(
56 {
57 instanceId: value.replace(/[ÄäÅå]/g, 'a').replace(/[Öö]/g, 'o').replace(/ /g, '-').replace(/,/g, '-').toLowerCase(),
58 customerId: ${customerId},
59 openingHoursServiceEndpoint: ${serviceEndpoint},
60 municipalities: [{name: value,libraries: [{name: value}]}]
61 }
62 );
63 calendar.show();
64 }
65</script>
66
67<#list entries as entry>
68 <#if !entries?has_content>
69 <div class="alert alert-info">
70 <@liferay_ui["message"] key="there-are-no-results" />
71 </div>
72 </#if>
73 <#assign entry = entry />
74 <#assign assetRenderer = entry.getAssetRenderer() />
75 <#assign className = assetRenderer.getClassName() />
76 <#assign ddmFormValuesReader = assetRenderer.getDDMFormValuesReader() />
77 <#assign ddmFormFieldValues = ddmFormValuesReader.getDDMFormValues().getDDMFormFieldValues() />
78 <#assign entryTitle = assetRenderer.getTitle(locale) />
79 <#assign branchId = getFieldValue(ddmFormFieldValues, 'libraryName')! />
80 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry,!stringUtil.equals(assetLinkBehavior, "showFullContent")) />
81 <#assign viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL) />
82 <#assign categories = entry.getCategories() />
83 <#assign eventRoute = getEventRoute(categories) />
84 <#assign viewURL = viewURL+eventRoute />
85
86 <div class="asset-abstract ">
87 <div class="asset-actions lfr-meta-actions"><@getEditIcon /></div>
88 <h2 class="asset-title">${entryTitle}</h2>
89 <div class="asset-content ">
90 <article class="branch-container branch-${entryTitle?replace('Ä', 'a')?replace('ä', 'a')?replace('Å', 'a')?replace('å', 'a')?replace('Ö', 'o')?replace('ö', 'o')?replace(' ', '-')?lower_case}">
91 <div class="openinghours-card">
92 <div id="${branchId?replace('Ä', 'a')?replace('ä', 'a')?replace('Å', 'a')?replace('å', 'a')?replace('Ö', 'o')?replace('ö', 'o')?replace(' ', '-')?lower_case}-dynamic-cal-wrapper" class="row">
93 <div class="dynamic-cal-events">
94 <div class="dynamic-cal-loader">
95 </div>
96 </div>
97 </div>
98 </div>
99 </article>
100 <div class="more-opening-hours">
101 <a class="asset-abstract-link" href="${viewURL}"><span>
102 <@liferay.language_format arguments="${entryTitle}" key="branch.opening.hours-view-all" /></span> </a>
103 </div>
104 </div>
105 </div>
106
107</#list>
108
109<#function getEventRoute categories>
110 <#assign searchQuery=''/>
111 <#if categories?has_content>
112 <#list categories as category>
113 <#if searchQuery?has_content>
114 <#assign searchQuery=searchQuery+"&location="+category.getName()?url />
115 <#else>
116 <#assign searchQuery="#/?location="+category.getName()?url />
117 </#if>
118 </#list>
119 </#if>
120 <#return searchQuery>
121</#function>
122
123<#macro getEditIcon>
124 <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())>
125 <#assign redirectURL = renderResponse.createRenderURL() />
126
127 ${redirectURL.setParameter("struts_action", "/asset_publisher/add_asset_redirect")}
128 ${redirectURL.setWindowState("pop_up")}
129
130 <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL) />
131
132 <#if validator.isNotNull(editPortletURL)>
133 <#assign title = languageUtil.format(locale, "edit-x", htmlUtil.escape(assetRenderer.getTitle(locale))) />
134
135 <@liferay_ui["icon"]
136 <#--image="edit"-->
137 iconCssClass="icon-edit"
138 message=title
139 url="javascript:Liferay.Util.openWindow({dialog: {destroyOnHide: true, width: 960}, id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});"
140 />
141 </#if>
142 </#if>
143</#macro>