An error occurred while processing the template.
The following has evaluated to null or missing:
==> formconfig.formFields [in template "20115#20151#CONTACT" at line 133, column 52]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
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: #list formconfig.formFields.getSiblin... [in template "20115#20151#CONTACT" at line 133, column 45]
----
1<#assign serviceContext=staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
2 <#if serviceContext.getThemeDisplay().getThemeSetting("v2-look-and-feel")?has_content && serviceContext.getThemeDisplay().getThemeSetting("v2-look-and-feel")!="">
3 <#assign v2_enabled=serviceContext.getThemeDisplay().getThemeSetting("v2-look-and-feel")?boolean />
4 <#else>
5 <#assign v2_enabled=false />
6 </#if>
7 <#if (mandatoryContactFormFields.isMandatoryContactType.getData())?? && getterUtil.getBoolean(mandatoryContactFormFields.isMandatoryContactType.getData())>
8 <#assign isMandatoryContactType="required">
9 <#else>
10 <#assign isMandatoryContactType="">
11 </#if>
12 <#if (mandatoryContactFormFields.isMandatoryName.getData())?? && getterUtil.getBoolean(mandatoryContactFormFields.isMandatoryName.getData())>
13 <#assign isMandatoryName="required">
14 <#else>
15 <#assign isMandatoryName="">
16 </#if>
17 <#if (mandatoryContactFormFields.isMandatoryEmail.getData())?? && getterUtil.getBoolean(mandatoryContactFormFields.isMandatoryEmail.getData())>
18 <#assign isMandatoryEmail="required">
19 <#else>
20 <#assign isMandatoryEmail="">
21 </#if>
22 <#if (mandatoryContactFormFields.isMandatoryPhone.getData())?? && getterUtil.getBoolean(mandatoryContactFormFields.isMandatoryPhone.getData())>
23 <#assign isMandatoryPhone="required">
24 <#else>
25 <#assign isMandatoryPhone="">
26 </#if>
27 <#if (mandatoryContactFormFields.isMandatoryDescription.getData())?? && getterUtil.getBoolean(mandatoryContactFormFields.isMandatoryDescription.getData())>
28 <#assign isMandatoryDescription="required">
29 <#else>
30 <#assign isMandatoryDescription="">
31 </#if>
32
33 <#if v2_enabled>
34 <!-- /Page Contact -->
35 <section class="page-contact sheme-grease-light">
36 <!-- hero-banner -->
37 <div class="hero-banner">
38 <div class="hero-banner__mask">
39 <#if (Background.getData())?has_content>
40 <picture>
41 <img class="lazyload" src="${Background.getData()}" data-fileentryid="${Background.getAttribute("fileEntryId")}" data-src="${Background.getData()}" data-srcset="${Background.getData()}" />
42 </picture>
43 </#if>
44 <div class="hero-banner__mask">
45 <div class="hero-banner__container">
46 <div class="hero-banner__content">
47 <h2 class="font-display-4 color-white">
48 ${htmlUtil.unescape(Title.getData())}
49 </h2>
50 <p class="hero-banner__text font-medium color-white">
51 ${htmlUtil.unescape(Title.MainText.getData())}
52 </p>
53 </div>
54 </div>
55 </div>
56 </div>
57 </div>
58 <!-- /hero-banner -->
59 <div class="article-full__container container">
60 <div class="article-full__row pt-5 pb-5">
61 <div class="article-full__left--t">
62 <div class="article-full__content--text">
63 <div class="article-full__resumen">
64 <#if (formconfig.formTitle.getData())?has_content && (formconfig.actionUrl.getData())?has_content && (formconfig.orgid.getData())?has_content>
65 <#assign serviceContext=staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
66 <#assign themeDisplay=serviceContext.getThemeDisplay() />
67 <#assign currentUrl=themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
68 <h3 class="article-full__left--title font-x-big font-bold-publicoheadline">
69 ${htmlUtil.unescape(formconfig.formTitle.getData())}
70 </h3>
71 <form id="contactForm" class="t_salesforce" action="${formconfig.actionUrl.getData()}" method="POST" onSubmit="sendForm()">
72 <input type=hidden name="retURL" value="${formconfig.retURL.getData()}">
73 <fieldset class="form__group pt-3">
74 <label for="type">
75 <@liferay.language key="neo.contact.form.type.label" />
76 </label>
77 <select id="type" name="type" ${isMandatoryContactType}>
78 <option value="">
79 <@liferay.language key="neo.contact.form.type.none" />
80 </option>
81 <#if formconfig.customOptionsFields??>
82 <#list formconfig.customOptionsFields.getSiblings() as customOptions>
83 <option value="${customOptions.customValue.getData()}">
84 ${htmlUtil.unescape(customOptions.customLabel.getData())}
85 </option>
86 </#list>
87 <#else>
88 <option value="Complaints / Acknowledgements">
89 <@liferay.language key="neo.contact.form.type.complaints" />
90 </option>
91 <option value="Claims Office">
92 <@liferay.language key="neo.contact.form.type.claimsoffice" />
93 </option>
94 <option vablue="Customer Service">
95 <@liferay.language key="neo.contact.form.type.customerservice" />
96 </option>
97 </#if>
98 </select>
99 </fieldset>
100 <fieldset class="form__group pt-3">
101 <label for="name">
102 <@liferay.language key="neo.contact.form.contact.name" />
103 </label>
104 <input id="name" maxlength="80" name="name" size="20" type="text" ${isMandatoryName} />
105 </fieldset>
106 <fieldset class="form__group pt-3">
107 <label for="email">
108 <@liferay.language key="neo.contact.form.contact.email" />
109 </label><input id="email" maxlength="80" name="email" size="20" type="email" class="t_textfield" ${isMandatoryEmail} />
110 </fieldset>
111 <fieldset class="form__group pt-3">
112 <label for="phone">
113 <@liferay.language key="neo.contact.form.contact.phone" />
114 </label><input id="phone" maxlength="40" name="phone" size="20" type="text" class="t_textfield" ${isMandatoryPhone} />
115 </fieldset>
116 <fieldset class="form__group pt-3">
117 <label for="description">
118 <@liferay.language key="neo.contact.form.contact.description" />
119 </label><textarea name="description" class="t_textarea" ${isMandatoryDescription}></textarea>
120 </fieldset>
121 <#if formconfig.captchaField?has_content>
122 <fieldset class="form__group">
123 <input class="capture hide" type="checkbox" id="${formconfig.captchaField.getData()!}" name="${formconfig.captchaField.getData()!}" value="true">
124 </fieldset>
125 <#else>
126 <fieldset class="form__group">
127 <input class="capture hide" type="checkbox" id="Captureuser" name="Captureuser" value="true">
128 </fieldset>
129 </#if>
130 <#list formconfig.hiddenFields.getSiblings() as hiddenFields>
131 <input type=hidden name="${hiddenFields.hiddenName.getData()}" id="${hiddenFields.hiddenId.getData()}" value="${hiddenFields.hiddenValue.getData()}">
132 </#list>
133 <#list formconfig.formFields.getSiblings()! as formFields>
134 <#assign fieldLabel=formFields.fieldLabel.getData()! />
135 <!-- <#assign fieldLabel = fieldLabel?remove_beginning("<p>")> -->
136 <!-- <#assign fieldLabel = fieldLabel?remove_ending("<p>")> -->
137 <#if formFields.isMandatory?? && formFields.isMandatory.getData()=="true">
138 <#assign isMandatory="required">
139 <#else>
140 <#assign isMandatory="">
141 </#if>
142 <#if fieldLabel?has_content>
143 <#if formFields.fieldType.getData()?contains("checkbox")>
144 <fieldset class="form__group formFieldCheckbox">
145 <input type="checkbox" id="${formFields.fieldId.getData()!}" name="${formFields.fieldId.getData()!}" value="true" ${isMandatory}>
146 <span style="padding-left:0.3em;">
147 ${htmlUtil.unescape(fieldLabel)}
148 </span>
149 <label for="${formFields.fieldId.getData()!}" class="t_label"></label>
150 </fieldset>
151 <#else>
152 <fieldset class="form__group pt-3">
153 <label for="${formFields.fieldId.getData()!}">
154 ${htmlUtil.unescape(fieldLabel)}
155 </label>
156 <#if (formFields.hideInputField.getData())?? && getterUtil.getBoolean(formFields.hideInputField.getData())>
157 <#else>
158 <input type="text" id="${formFields.fieldId.getData()!}" name="${formFields.fieldId.getData()!}" ${isMandatory}>
159 </#if>
160 </fieldset>
161 </#if>
162 </#if>
163 </#list>
164 <div class="pt-3">
165 <button type="submit" name="submit" class="btn btn--primary text-uppercase mt-2">
166 <@liferay.language key="send" />
167 </button>
168 </div>
169 </form>
170 </#if>
171 </div>
172 </div>
173 </div>
174 <div class="article-full__right">
175 <!-- Detail 1 -->
176 <div class="article-full__detail sheme-white">
177 <div class="article-full__container pb-1">
178 <p class="font-bold-publicoheadline font-display-6 pb-3">
179 ${htmlUtil.unescape(AxaContactTitle.getData())}
180 </p>
181 <#if Number.getData()?has_content && Number.getData()?trim!="">
182 <a href="tel:${Number.getData()}" class="link link--primary-link"><i class="icon-call pr-1"></i>
183 ${htmlUtil.unescape(Number.getData())}
184 </a>
185 <p>
186 ${Number.Info.getData()}
187 </p>
188 </#if>
189 </div>
190 <#if Email.getData()?has_content && Email.getData()?trim!="">
191 <div class="article-full__container pb-2">
192 <a href="mailto:${Email.getData()}" class="link link--primary-link"><i class="icon-email pr-1"></i>
193 ${Email.getData()}
194 </a>
195 </div>
196 </#if>
197 <#if OptionTitle.getSiblings()?has_content>
198 <#list OptionTitle.getSiblings() as cur_OptionTitle>
199 <div class="article-full__container pb-2">
200 <h3 class="article-full__detail--title">
201 ${htmlUtil.unescape(cur_OptionTitle.getData())}
202 </h3>
203 <p>
204 ${htmlUtil.unescape(cur_OptionTitle.Description.getData())}
205 </p>
206 </div>
207 </#list>
208 </#if>
209 </div>
210 </div>
211 </div>
212 </div>
213 <script>
214 validateSelect();
215 function validateSelect(){
216 const select = document.getElementById("type");
217 const opcionesValidas = Array.from(select.options).filter(opt => opt.value.trim() !== "");
218 if (opcionesValidas.length == 1) {
219 select.value = opcionesValidas[0].value;
220 }
221 }
222 function sendForm() {
223 var element1 = document.createElement("input");
224 element1.type = "hidden";
225 element1.value = "${formconfig.orgid.getData()!}";
226 element1.name = "orgid";
227 document.getElementById("contactForm").appendChild(element1);
228 dataLayer.push({
229 'event': 'form_submit',
230 'form_name': 'Contact',
231 'contact_reason': document.getElementById("type").value,
232 'ip_address': themeDisplay.getRemoteAddr()
233 });
234 }
235
236 function onSubmit() {
237 dataLayer.push({
238 'event': 'form_submit',
239 'form_name': 'Contact',
240 'contact_reason': document.getElementById("type").value,
241 'ip_address': themeDisplay.getRemoteAddr()
242 });
243 }
244 </script>
245 <style>
246 .form__group>span>p>a {
247 color: #007bff;
248 }
249
250 fieldset.formFieldCheckbox ul {
251 list-style-type: none;
252 padding-left: 0;
253 }
254
255 fieldset.formFieldCheckbox {
256 font-size: 0.75rem;
257 padding: 0.35em 1em 0.625em;
258 }
259
260 fieldset.formFieldCheckbox input {
261 position: relative;
262 top: 2.5px;
263 }
264 </style>
265 </section>
266 <!-- /Page Contact -->
267 <#else>
268 <section class="t_contact" xmlns="http://www.w3.org/1999/html">
269 <#if (Background.getData())?has_content>
270 <header class="t_contact__header t_block is-colored" style="background-image: url('${Background.getData()}')">
271 <#else>
272 <header class="t_contact__header t_block is-colored">
273 </#if>
274 <h2 class="t_mainTitle">
275 ${Title.getData()}
276 </h2>
277 <p class="t_mainText">
278 ${Title.MainText.getData()}
279 </p>
280 </header>
281 <div class="t_main t_contact__content">
282 <h3 class="t_contact__mainTitle">
283 ${AxaContactTitle.getData()}
284 </h3>
285 <ul class="t_contact__infos">
286 <li class="t_contact__info">
287 <span class="t_contact__infoIcon">
288 <svg width="14" height="14" class="t_contact__infoPicto" xmlns="http://www.w3.org/2000/svg" role="presentation">
289 <use href="#phone" xlink:href="#phone" />
290 </svg>
291 </span>
292 <div class="t_contact__infoText">
293 <p class="t_contact__infoText__inner">
294 ${Number.getData()}
295 </p>
296 <p class="t_contact__infoText__help">
297 ${Number.Info.getData()}
298 </p>
299 </div>
300 </li>
301 <#if Email.getData()?has_content && Email.getData()?trim!="">
302 <li class="t_contact__info">
303 <span class="t_contact__infoIcon">
304 <svg width="14" height="14" class="t_contact__infoPicto" xmlns="http://www.w3.org/2000/svg" role="presentation">
305 <use href="#enveloppe" xlink:href="#enveloppe" />
306 </svg>
307 </span>
308 <div class="t_contact__infoText">
309 <p class="t_contact__infoText__inner">
310 <a class="t_contact__infoText__innerLink" href="mailto:${Email.getData()}">
311 ${Email.getData()}
312 </a>
313 </p>
314 </div>
315 </li>
316 </#if>
317 </ul>
318 <ul class="t_contact__options">
319 <#if OptionTitle.getSiblings()?has_content>
320 <#list OptionTitle.getSiblings() as cur_OptionTitle>
321 <li class="t_contact__option">
322 <h3 class="t_contact__option__title">
323 ${htmlUtil.unescape(cur_OptionTitle.getData())}
324 </h3>
325 <p class="t_contact__option__text">
326 ${htmlUtil.unescape(cur_OptionTitle.Description.getData())}
327 </p>
328 </li>
329 </#list>
330 </#if>
331 </ul>
332 <#if (formconfig.formTitle.getData())?has_content && (formconfig.actionUrl.getData())?has_content && (formconfig.orgid.getData())?has_content>
333 <#assign serviceContext=staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
334 <#assign themeDisplay=serviceContext.getThemeDisplay() />
335 <#assign currentUrl=themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
336 <h3 class="t_contact__mainTitle">
337 ${htmlUtil.unescape(formconfig.formTitle.getData())}
338 </h3>
339 <form id="contactForm" class="t_salesforce" action="${formconfig.actionUrl.getData()}" method="POST" onSubmit="sendForm()">
340 <input type=hidden name="retURL" value="${formconfig.retURL.getData()}">
341 <#if formconfig.captchaField?has_content>
342 <input class="capture" type="checkbox" id="${formconfig.captchaField.getData()!}" name="${formconfig.captchaField.getData()!}" value="true">
343 <#else>
344 <input class="capture" type="checkbox" id="Captureuser" name="Captureuser" value="true">
345 </#if>
346 <#list formconfig.hiddenFields.getSiblings() as hiddenFields>
347 <input type=hidden name="${hiddenFields.hiddenName.getData()}" id="${hiddenFields.hiddenId.getData()}" value="${hiddenFields.hiddenValue.getData()}">
348 </#list>
349 <label for="type" class="t_label">
350 <@liferay.language key="neo.contact.form.type.label" /><br />
351 <div class="t_select t_select--cms">
352 <select id="type" name="type" class="t_select__input" required>
353 <option value="">
354 <@liferay.language key="neo.contact.form.type.none" />
355 </option>
356 <#if formconfig.customOptionsFields??>
357 <#list formconfig.customOptionsFields.getSiblings() as customOptions>
358 <option value="${customOptions.customValue.getData()}">
359 ${htmlUtil.unescape(customOptions.customLabel.getData())}
360 </option>
361 </#list>
362 <#else>
363 <option value="Complaints / Acknowledgements">
364 <@liferay.language key="neo.contact.form.type.complaints" />
365 </option>
366 <option value="Claims Office">
367 <@liferay.language key="neo.contact.form.type.claimsoffice" />
368 </option>
369 <option value="Customer Service">
370 <@liferay.language key="neo.contact.form.type.customerservice" />
371 </option>
372 </#if>
373 </select>
374 <svg class="t_select__arrow">
375 <use href="#chevron" xlink:href="#chevron" />
376 </svg>
377 </div>
378 <div class="t_inputText">
379 <label for="name" class="t_label">
380 <@liferay.language key="neo.contact.form.contact.name" />
381 </label>
382 <input id="name" maxlength="80" name="name" size="20" type="text" class="t_textfield" required />
383 </div>
384 <label for="email" class="t_label">
385 <@liferay.language key="neo.contact.form.contact.email" />
386 </label><input id="email" maxlength="80" name="email" size="20" type="text" class="t_textfield" required />
387 <label for="phone" class="t_label">
388 <@liferay.language key="neo.contact.form.contact.phone" />
389 </label><input id="phone" maxlength="40" name="phone" size="20" type="text" class="t_textfield" required />
390 <label for="description" class="t_label">
391 <@liferay.language key="neo.contact.form.contact.description" />
392 </label><textarea name="description" class="t_textarea" required></textarea>
393 <#list formconfig.formFields.getSiblings()! as formFields>
394 <#assign fieldLabel=formFields.fieldLabel.getData()! />
395 <!-- <#assign fieldLabel = fieldLabel?remove_beginning("<p>")> -->
396 <!-- <#assign fieldLabel = fieldLabel?remove_ending("<p>")> -->
397 <#if formFields.isMandatory?? && formFields.isMandatory.getData()=="true">
398 <#assign isMandatory="required">
399 <#else>
400 <#assign isMandatory="">
401 </#if>
402 <#if formFields.fieldType.getData()?contains("checkbox")>
403 <fieldset class="form__group formFieldCheckbox">
404 <input type="checkbox" id="${formFields.fieldId.getData()!}" name="${formFields.fieldId.getData()!}" value="true" ${isMandatory}>
405 <span class="checkboxLabel" style="padding-left:0.3em; font-weight: 500;">
406 ${htmlUtil.unescape(fieldLabel)}
407 </span>
408 <label for="${formFields.fieldId.getData()!}" class="t_label"></label>
409 </input>
410 </fieldset>
411 </#if>
412 </#list>
413 <button type="submit" name="submit" class="t_button t_button--ghost">
414 <label class="t_button__label">
415 <@liferay.language key="send" />
416 </label>
417 </button>
418 </form>
419 </#if>
420 </div>
421 </section>
422 <script>
423 validateSelect();
424 function validateSelect(){
425 const select = document.getElementById("type");
426 const opcionesValidas = Array.from(select.options).filter(opt => opt.value.trim() !== "");
427 if (opcionesValidas.length == 1) {
428 select.value = opcionesValidas[0].value;
429 }
430 }
431 function sendForm() {
432 var element1 = document.createElement("input");
433 element1.type = "hidden";
434 element1.value = "${formconfig.orgid.getData()!}";
435 element1.name = "orgid";
436 document.getElementById("contactForm").appendChild(element1);
437 dataLayer.push({
438 'event': 'form_submit',
439 'form_name': 'Contact',
440 'contact_reason': document.getElementById("type").value,
441 'ip_address': themeDisplay.getRemoteAddr()
442 });
443 }
444
445 function pushDataLayerContact() {
446 dataLayer.push({
447 'event': 'form_submit',
448 'form_name': 'Contact',
449 'contact_reason': document.getElementById("type").value,
450 'ip_address': themeDisplay.getRemoteAddr()
451 });
452 }
453 </script>
454
455 <style>
456 div.t_neo_cms .t_contact .t_main.t_contact__content #contactForm.t_salesforce input.capture {
457 display: none;
458 }
459
460 .t_button--ghost>label.t_button__label {
461 margin: 0;
462 }
463
464 fieldset.formFieldCheckbox {
465 font-size: 0.75rem;
466 padding: 0.35em 0em 0.625em;
467 }
468
469 fieldset.formFieldCheckbox input {
470 position: relative;
471 top: 2.5px;
472 }
473 </style>
474 </#if>