处理模板时发生错误。
Java method "jdk.proxy4.$Proxy169.getDLFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on jdk.proxy4.$Proxy169 object "com.liferay.document.library.internal.service.FriendlyURLDLFileEntryLocalServiceWrapper@2686e5ed"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign displayHeadshotId = DLFileEnt... [in template "20116#20152#31814" at line 261, column 41] ----
1<#-- Web content templates are used to lay out the fields defined in a web content structure. Please use the left panel to quickly add commonly used variables. Autocomplete is also available and can be invoked by typing "${". -->
2<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() />
3<#assign themeDisplay = serviceContext.getThemeDisplay() />
4<#assign preview = false/>
5<#assign currentPageUrl = themeDisplay.getURLCurrent() />
6
7<#if (currentPageUrl?contains("preview_article_content.jsp")) || (currentPageUrl?contains("preview_article_content_template.jsp"))>
8 <#assign preview = true />
9
10 <script data-senna-track="permanent"
11 src="/o/atk-dot-com-theme/js/react/dist/vendor.bundle.js"></script>
12
13 <script data-senna-track="permanent"
14 src="/o/atk-dot-com-theme/js/react/dist/bundle.js"></script>
15
16 <style data-senna-track="temporary" type="text/css">
17 :root {
18 --container-max-sm: 576px;
19 --h4-font-size: 22px;
20 --font-weight-bold: 700;
21 --rounded-pill: 50rem;
22 --navigation-submenu-item-float: left;
23 --display4-weight: 300;
24 --danger: #da1414;
25 --atk-row: absolute;
26 --display2-size: 5.5rem;
27 --body-bg: #f9f9f9;
28 --display2-weight: 300;
29 --display1-weight: 300;
30 --display3-weight: 300;
31 --box-shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075);
32 --text-align-hero-text-container: center;
33 --cta-background-color: #F5F5F5;
34 --font-weight-lighter: lighter;
35 --h3-font-size: 36px;
36 --btn-outline-primary-hover-border-color: #0b5fff;
37 --transition-collapse: height .35s ease;
38 --blockquote-small-color: #6b6c7e;
39 --gray-200: #f1f2f5;
40 --btn-secondary-hover-background-color: #f7f8f9;
41 --gray-600: #6b6c7e;
42 --secondary: #6b6c7e;
43 --btn-outline-primary-color: #0b5fff;
44 --btn-link-hover-color: #004ad7;
45 --hr-border-color: rgba(0, 0, 0, .1);
46 --hr-border-margin-y: 1rem;
47 --light: #f1f2f5;
48 --btn-outline-primary-hover-color: #0b5fff;
49 --font-weight-read-more: 400;
50 --btn-secondary-background-color: #fff;
51 --btn-outline-secondary-hover-border-color: transparent;
52 --display3-size: 4.5rem;
53 --primary: #0b5fff;
54 --container-max-md: 768px;
55 --border-radius-sm: 0.1875rem;
56 --display-line-height: 1.2;
57 --font-family-hero-text: 'Graphik Web';
58 --h6-font-size: 0.8125rem;
59 --h2-font-size: 44px;
60 --aspect-ratio-4-to-3: 75%;
61 --font-family-read-more: 'Graphik Web';
62 --spacer-10: 10rem;
63 --font-family-semibold: 'Graphik Web';
64 --font-weight-normal: 400;
65 --dark: #272833;
66 --blockquote-small-font-size: 80%;
67 --h5-font-size: 0.875rem;
68 --blockquote-font-size: 1.25rem;
69 --transition-fade: opacity .15s linear;
70 --display4-size: 3.5rem;
71 --border-radius-lg: 0.375rem;
72 --btn-primary-hover-color: #fff;
73 --display1-size: 6rem;
74 --black: #000;
75 --gray-300: #e7e7ed;
76 --gray-700: #495057;
77 --btn-secondary-border-color: #cdced9;
78 --btn-outline-secondary-hover-color: #272833;
79 --purple: #7823DC;
80 --body-color: #111;
81 --btn-outline-secondary-hover-background-color: rgba(39, 40, 51, 0.03);
82 --font-weight-button-body: 400;
83 --btn-primary-color: #fff;
84 --btn-secondary-color: #6b6c7e;
85 --btn-secondary-hover-border-color: #cdced9;
86 --box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, .175);
87 --container-max-lg: 992px;
88 --btn-outline-primary-border-color: #0b5fff;
89 --aspect-ratio: 100%;
90 --cta-link-hover-color: #000;
91 --body-container: #fff;
92 --cta-link-color: #7823DC;
93 --aspect-ratio-16-to-9: 56.25%;
94 --box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);
95 --white: #fff;
96 --portlet-bg-color: #272833;
97 --warning: #b95000;
98 --info: #2e5aac;
99 --hr-border-width: 1px;
100 --btn-link-color: #0b5fff;
101 --gray-400: #cdced9;
102 --font-weight-hero-text-h4: 100;
103 --gray-800: #393a4a;
104 --font-weight-semibold: 600;
105 --btn-outline-primary-hover-background-color: #f0f5ff;
106 --btn-primary-hover-background-color: #0053f0;
107 --btn-primary-background-color: #0b5fff;
108 --font-weight-heading4: 100;
109 --font-weight-hero-text-h1: 600;
110 --font-weight-heading3: 400;
111 --success: #287d3c;
112 --font-family-heading4: 'Graphik Web';
113 --font-family-heading3: 'Graphik Web';
114 --font-weight-heading2: 400;
115 --font-weight-heading1: 600;
116 --font-size-sm: 0.875rem;
117 --font-family-heading2: 'Graphik Web';
118 --btn-primary-border-color: #0b5fff;
119 --font-family-heading1: 'Graphik Web';
120 --font-family-base: 'Arabic', sans-serif;
121 --spacer-0: 0;
122 --font-family-monospace: 'Arabic', sans-serif;
123 --lead-font-size: 1.25rem;
124 --border-radius: 0.25rem;
125 --spacer-9: 9rem;
126 --font-weight-light: 300;
127 --btn-secondary-hover-color: #272833;
128 --spacer-2: 0.5rem;
129 --font-family-button-body: 'Graphik Web';
130 --spacer-1: 0.25rem;
131 --spacer-4: 1.5rem;
132 --spacer-3: 1rem;
133 --spacer-6: 4.5rem;
134 --spacer-5: 3rem;
135 --spacer-8: 7.5rem;
136 --border-radius-circle: 50%;
137 --spacer-7: 6rem;
138 --font-size-lg: 1.125rem;
139 --aspect-ratio-8-to-3: 37.5%;
140 --font-family-sans-serif: 'Arabic', sans-serif;
141 --gray-100: #f7f8f9;
142 --font-weight-bolder: 900;
143 --container-max-xl: 1280px;
144 --btn-outline-secondary-color: #6b6c7e;
145 --custom-black: #1E1E1E;
146 --gray-500: #a7a9bc;
147 --h1-font-size: 66px;
148 --gray-900: #272833;
149 --text-muted: #a7a9bc;
150 --btn-primary-hover-border-color: transparent;
151 --btn-outline-secondary-border-color: #cdced9;
152 --lead-font-weight: 300;
153 --font-size-base: 0.875rem;
154 }
155
156 #leftColumnDiv
157 a{
158 color: var(--purple) !important;
159 text-decoration: underline !important;
160 text-decoration-color: #E6E6E6 !important;
161 }
162
163 #leftColumnDiv
164 a:hover{
165 text-decoration: none !important;
166 }
167
168 a.smallerMobileText
169 {
170 color: var(--purple) !important;
171 text-decoration: underline !important;
172 text-decoration-color: #E6E6E6 !important;
173 }
174
175
176 a.smallerMobileText:hover{
177 text-decoration: none !important;
178 }
179
180 </style>
181
182</#if>
183
184<#assign JournalArticleLocalService = serviceLocator.findService(
185"com.liferay.journal.service.JournalArticleLocalService")>
186<#assign AssetEntryLocalService = serviceLocator.findService(
187"com.liferay.asset.kernel.service.AssetEntryLocalService")>
188<#assign AssetCategoryLocalService = serviceLocator.findService(
189"com.liferay.asset.kernel.service.AssetCategoryLocalService")>
190<#assign AssetVocabularyLocalService = serviceLocator.findService(
191"com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
192<#assign AssetCategoryPropertyLocalService = serviceLocator.findService(
193"com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")/>
194<#assign AssetLinkLocalService = serviceLocator.findService("com.liferay.asset.link.service.AssetLinkLocalService")>
195<#assign AssetEntryAssetCategoryRelLocalService = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService")>
196<#assign GroupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")>
197<#assign CurrentJournalArticle = JournalArticleLocalService.getLatestArticle(groupId,.vars['reserved-article-id'].data)>
198<#assign CurrentAssetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle",CurrentJournalArticle.getResourcePrimKey())>
199<#assign AssetLinks = AssetLinkLocalService.getReverseLinks(CurrentAssetEntry.getEntryId(), 0)>
200<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
201
202<#assign TemplateCustomService = serviceLocator.findService("template.custom.services.TemplateCustomService") />
203<!-- update name here if change asset library name -->
204<#assign assetLibGroup = GroupLocalService.getGroup(themeDisplay.getCompanyId(), "Kearney Global Asset Library") />
205<#assign DLFolderLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFolderLocalService")/>
206<#assign DLFileEntryLocalService = serviceLocator.findService(
207 "com.liferay.document.library.kernel.service.DLFileEntryLocalService")/>
208<#if assetLibGroup?? >
209 <#assign assetLibGroupId = assetLibGroup.getGroupId() />
210</#if>
211<#assign atkGroupId = company.getGroupId() />
212<#assign layoutUrl = themeDisplay.getLayout().getFriendlyURL()/>
213
214<#-- Macro used to get specific field text from an Asset Entry -->
215<#macro entryNode assetEntry field>
216 <#assign document = saxReaderUtil.read(assetEntry.getContent())>
217 <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??>
218 "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}"
219 <#else>
220 ""
221 </#if>
222</#macro>
223
224<!-- Adjust portlet topper offset since bio goes to top of page -->
225<style>
226 header.portlet-topper {
227 position: absolute !important;
228 top: 33px !important;
229 width: 100% !important;
230 }
231</style>
232
233<div id="employeeBioDiv"></div>
234<script>
235
236 <#assign displayHeadshotId = "" />
237 <#assign displayHeadshot = "" />
238 <#assign displayHeadshotFileName = "" />
239
240 <#if DisplayHeadshot??>
241 <#assign displayHeadshot = DisplayHeadshot.getData()>
242 <#assign parts = displayHeadshot?split("/")!"">
243 <#if DisplayHeadshot.getAttribute("title")??>
244 <#assign displayHeadshotFileName = DisplayHeadshot.getAttribute("title") />
245 <#else>
246 <#assign displayHeadshotFileName = parts[4]!"" />
247 </#if>
248 <#if DisplayHeadshot.getAttribute("fileEntryId")??>
249 <#assign displayHeadshotId = DisplayHeadshot.getAttribute("fileEntryId")>
250 <#else>
251 <#attempt>
252 <#assign displayHeadshotId = DLFileEntryLocalService.getFileEntryByFileName(parts[2]?number, parts[3]?number, displayHeadshotFileName).getFileEntryId() />
253 <#recover>
254 <#if DisplayHeadshot.getAttribute("uuid")??>
255 <#assign displayHeadshotUuid = DisplayHeadshot.getAttribute("uuid") />
256 </#if>
257 <#if DisplayHeadshot.getAttribute("groupId")??>
258 <#assign displayHeadshotGroupId = DisplayHeadshot.getAttribute("groupId")?number />
259 </#if>
260 <#if displayHeadshotUuid?? && displayHeadshotGroupId??>
261 <#assign displayHeadshotId = DLFileEntryLocalService.getDLFileEntryByUuidAndGroupId(displayHeadshotUuid,displayHeadshotGroupId).getFileEntryId()!"" />
262 </#if>
263 </#attempt>
264 </#if>
265 </#if>
266
267 <#-- ATK-941 Bio Contact Form -->
268 <#assign bioContactUrl = "" />
269 <#attempt>
270 <#assign bioContactLayout = LayoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(),false,"/contact/bio") />
271 <#assign bioContactUrl = themeDisplay.getPortalURL() + "/contact/bio" />
272 <#recover>
273 <#assign guestGroup = GroupLocalService.getFriendlyURLGroup(themeDisplay.getCompanyId(), "/guest") />
274 <#assign bioContactLayout = LayoutLocalService.getFriendlyURLLayout(guestGroup.getGroupId(),false,"/contact/bio") />
275 <#assign bioContactUrl = themeDisplay.getURLHome() + "/contact/bio" />
276 </#attempt>
277
278 var empInfo = {
279 fullName: "${(htmlUtil.unescape(FullName.getData()))?js_string}",
280 preferredName: "${(htmlUtil.unescape(PreferredFirstName.getData()))?js_string}",
281 position: "${(htmlUtil.unescape(Position.getData()))?js_string}",
282 office: "${(htmlUtil.unescape(Office.getData()))?js_string}",
283 title: "${(htmlUtil.unescape(Title.getData()))?js_string}",
284 linkedIn: "${LinkedInURL.getData()?js_string}",
285 headshotLocation: "${displayHeadshot}",
286 headShotId: "${displayHeadshotId}",
287 headshotFileName: "${displayHeadshotFileName}",
288 quote: "${(htmlUtil.unescape(Quote.getData()))?js_string}",
289 description: "${Description.getData()?js_string}",
290 urlTitle: "${.vars['reserved-article-url-title'].data?js_string}",
291 bioContactFormUrl: "${bioContactUrl}"
292 };
293
294 <#assign industryVocabulary = AssetVocabularyLocalService.getGroupVocabulary(atkGroupId, "Industries")/>
295 <#assign industryCategories = industryVocabulary.getCategories()/>
296
297 var industryCategories = [];
298 <#list industryCategories as category>
299 <#if category.parentCategoryId == 0>
300 <#attempt>
301 <#assign categoryUrl = AssetCategoryPropertyLocalService.getCategoryProperty(category.categoryId, "url")/>
302 industryCategories.push({
303 id: "${category.categoryId}",
304 name: "${category.name}",
305 url: "${categoryUrl.value}",
306 });
307 <#recover>
308 console.log("could not find url property on industry category ${category.name?js_string}");
309 </#attempt>
310 </#if>
311 </#list>
312
313 <#assign expertiseVocabulary = AssetVocabularyLocalService.getGroupVocabulary(atkGroupId, "Services")/>
314 <#assign expertiseCategories = expertiseVocabulary.getCategories()/>
315
316 var expertiseCategories = [];
317 <#list expertiseCategories as category>
318 <#if category.parentCategoryId == 0>
319 <#attempt>
320 <#assign categoryUrl = AssetCategoryPropertyLocalService.getCategoryProperty(category.categoryId, "url")/>
321 expertiseCategories.push({
322 id: "${category.categoryId}",
323 name: "${category.name}",
324 url: "${categoryUrl.value}",
325 });
326 <#recover>
327 console.log("could not find url property on capability category ${category.name?js_string}");
328 </#attempt>
329 </#if>
330 </#list>
331
332 var expertise = [];
333 var industries = [];
334
335 <#-- ATK-830 : Adding Experties & Industries to Bio Rail (Right sidebar on Bio Page) using Asset Categories -->
336 <#assign CurrentArticleAssetCategoryIdList = AssetEntryAssetCategoryRelLocalService.getAssetEntryAssetCategoryRelsByAssetEntryId(CurrentAssetEntry.getEntryId()) />
337 <#assign CategoryNameSequence = [] />
338 <#assign industryVocabularyId = industryVocabulary.vocabularyId />
339 <#assign expertiseVocabularyId = expertiseVocabulary.vocabularyId />
340
341 <#-- Generating Map of Category Name and Category URL -->
342 <#assign CategoryURLmap = {} />
343 <#list CurrentArticleAssetCategoryIdList as assetEntryAssetCategoryRel>
344 <#assign assetcategory = AssetCategoryLocalService.getCategory(assetEntryAssetCategoryRel.assetCategoryId)>
345 <#assign categoryPropertyFound = false />
346 <#if assetcategory.vocabularyId == industryVocabularyId>
347 <#if AssetCategoryPropertyLocalService.getCategoryProperties(assetcategory.categoryId)??>
348 <#assign CategoryPropertyList = AssetCategoryPropertyLocalService.getCategoryProperties(assetcategory.categoryId) />
349 <#list CategoryPropertyList as categoryProperty>
350 <#if categoryProperty.key == "url">
351 <#assign categoryUrlForIndustries = AssetCategoryPropertyLocalService.getCategoryProperty(assetcategory.categoryId, "url") />
352 <#if categoryUrlForIndustries??>
353 <#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Industries") : categoryUrlForIndustries.value } >
354 <#else>
355 <#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Industries") : "" } >
356 </#if>
357 <#assign categoryPropertyFound = true />
358 </#if>
359 </#list>
360 </#if>
361 <#if !categoryPropertyFound>
362 <#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Industries") : "" } >
363 </#if>
364 <#elseif assetcategory.vocabularyId == expertiseVocabularyId>
365 <#if AssetCategoryPropertyLocalService.getCategoryProperties(assetcategory.categoryId)??>
366 <#assign CategoryPropertyList = AssetCategoryPropertyLocalService.getCategoryProperties(assetcategory.categoryId) />
367 <#list CategoryPropertyList as categoryProperty>
368 <#if categoryProperty.key == "url">
369 <#assign categoryUrlForServices = AssetCategoryPropertyLocalService.getCategoryProperty(assetcategory.categoryId, "url") />
370 <#if categoryUrlForServices??>
371 <#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Expertise") : categoryUrlForServices.value } >
372 <#else>
373 <#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Expertise") : "" } >
374 </#if>
375 <#assign categoryPropertyFound = true />
376 </#if>
377 </#list>
378 </#if>
379 <#if !categoryPropertyFound>
380 <#assign CategoryURLmap = CategoryURLmap + { (assetcategory.name + "--Expertise") : "" } >
381 </#if>
382 </#if>
383 </#list>
384
385 <#-- Sorting in Alphabetical Order -->
386 <#assign SortedCategoryURLmap = {} />
387 <#list CategoryURLmap?keys?sort as key>
388 <#assign SortedCategoryURLmap = SortedCategoryURLmap + { key : CategoryURLmap[key] } >
389 </#list>
390
391 <#assign CategoryURLmap = SortedCategoryURLmap />
392 <#-- Generation Map of Category Name and Category URL Over -->
393
394 <#-- Adding Industries and Expertise To Bio Rail based on asset categories selected in webcontent -->
395 <#list CategoryURLmap as categoryName, categoryURL>
396 <#if categoryName?contains("--Industries")>
397 <#assign CategoryNameSequence = CategoryNameSequence + [categoryName?keep_before("--Industries")] />
398 <#if categoryURL?has_content>
399 industries.push({
400 title: "${categoryName?keep_before("--Industries")?js_string}",
401 customURL: "/${categoryURL?js_string}",
402 useDefault: false
403 });
404 <#else>
405 industries.push({
406 title: "${categoryName?keep_before("--Industries")?js_string}",
407 customURL: "",
408 useDefault: false
409 });
410 </#if>
411 </#if>
412
413 <#if categoryName?contains("--Expertise")>
414 <#assign CategoryNameSequence = CategoryNameSequence + [categoryName?keep_before("--Expertise")] />
415 <#if categoryURL?has_content>
416 expertise.push({
417 title: "${categoryName?keep_before("--Expertise")?js_string}",
418 customURL: "/${categoryURL?js_string}",
419 useDefault: false
420 });
421 <#else>
422 expertise.push({
423 title: "${categoryName?keep_before("--Expertise")?js_string}",
424 customURL: "",
425 useDefault: false
426 });
427 </#if>
428 </#if>
429 </#list>
430
431 <#-- Adding Industries and Expertise To Bio Rail based on manual entry provided in webcontent's Field -->
432 <#if Industries.getSiblings()?has_content>
433 <#list Industries.getSiblings() as cur_Industries>
434 var defaultChecked = false;
435 <#if getterUtil.getBoolean(cur_Industries.UseDefaultIndustryPage.getData())>
436 defaultChecked = true;
437 </#if>
438
439 <#if !(CategoryNameSequence?seq_contains(cur_Industries.getData())) >
440 <#assign CategoryNameSequence = CategoryNameSequence + [htmlUtil.unescape(cur_Industries.getData())] />
441 industries.push({
442 title: "${(htmlUtil.unescape(cur_Industries.getData()))?js_string}",
443 customURL: "${cur_Industries.CustomIndustryURL.getData()?js_string}",
444 useDefault: defaultChecked
445 });
446 </#if>
447 </#list>
448 </#if>
449 <#if Expertise?? && Expertise.getSiblings()?has_content>
450 <#list Expertise.getSiblings() as cur_Expertise>
451 var defaultChecked = false;
452 <#if getterUtil.getBoolean(cur_Expertise.UseDefaultExpertisePage.getData())>
453 defaultChecked = true;
454 </#if>
455
456 <#if !(CategoryNameSequence?seq_contains(cur_Expertise.getData())) >
457 expertise.push({
458 title: "${(htmlUtil.unescape(cur_Expertise.getData()))?js_string}",
459 customURL: "${cur_Expertise.CustomExpertiseURL.getData()?js_string}",
460 useDefault: defaultChecked
461 });
462 </#if>
463 </#list>
464 </#if>
465
466 <#-- If No Expertise added for web content then null entry is added -->
467 if(expertise.length == 0)
468 {
469 expertise.push({
470 title: "",
471 customURL: "",
472 useDefault: false
473 });
474 }
475
476 <#-- If No Industries added for web content then null entry is added -->
477 if(industries.length == 0)
478 {
479 industries.push({
480 title: "",
481 customURL: "",
482 useDefault: false
483 });
484 }
485
486 <#-- ATK-830 Over -->
487
488 var clientImpact = [];
489 <#if ClientImpactTitle?? && ClientImpactTitle.getSiblings()?has_content>
490 <#list ClientImpactTitle.getSiblings() as cur_ClientImpactTitle>
491
492 var impactUrlTitle = "";
493 <#assign jArt = "" />
494 <#if cur_ClientImpactTitle.impactUrlTitle?? && cur_ClientImpactTitle.impactUrlTitle.getData()?has_content>
495 <#assign jArt = JournalArticleLocalService.getArticleByUrlTitle(assetLibGroupId, cur_ClientImpactTitle.impactUrlTitle.getData()) />
496 impactUrlTitle = "${cur_ClientImpactTitle.impactUrlTitle.getData()?js_string}";
497 </#if>
498
499 var link = "";
500 <#if cur_ClientImpactTitle.ClientImpactLink?? && cur_ClientImpactTitle.ClientImpactLink.getData()?has_content>
501 link = "${cur_ClientImpactTitle.ClientImpactLink.getData()?js_string}";
502 </#if>
503
504 var title = "";
505 <#if cur_ClientImpactTitle?? && cur_ClientImpactTitle.getData()?has_content>
506 title = "${(htmlUtil.unescape(cur_ClientImpactTitle.getData()))?js_string}";
507 <#elseif jArt != "">
508 title = "${jArt.getTitle(locale)?js_string}";
509 </#if>
510
511 var subtitle = "";
512 <#if cur_ClientImpactTitle.ClientImpactText?? && cur_ClientImpactTitle.ClientImpactText.getData()?has_content>
513 subtitle = "${(htmlUtil.unescape(cur_ClientImpactTitle.ClientImpactText.getData()))?js_string}";
514 <#elseif jArt != "">
515 subtitle = <@entryNode assetEntry=jArt field="Subtitle"/>;
516 </#if>
517
518 var svgMask = "";
519 <#if TextDecoration.getData()?has_content>
520 svgMask = "${TextDecoration.getData()?js_string}";
521 <#elseif jArt != "">
522 svgMask = <@entryNode assetEntry=jArt field="SvgMask"/>;
523 </#if>
524
525 var articleCategories = [];
526 <#if jArt != "">
527 <#assign jAsset = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", jArt.getResourcePrimKey()) />
528 <#assign assetCategories = AssetCategoryLocalService.getAssetEntryAssetCategories(jAsset.getEntryId()) />
529
530 <#list assetCategories as category>
531 <#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())>
532 <#assign categoryUrl = AssetCategoryPropertyLocalService.getCategoryProperty(category.categoryId, "url")/>
533 articleCategories.push({
534 id: "${category.categoryId}",
535 name: "${category.name}",
536 url: "${categoryUrl.value}",
537 vocabularyName: "${categoryVocabulary.getName()?js_string}",
538 });
539 </#list>
540 </#if>
541
542 clientImpact.push({
543 slug: "Client Impact",
544 title: title,
545 description: subtitle,
546 largeDescriptionText: 'false',
547 link: link,
548 urlTitle: impactUrlTitle,
549 categories: articleCategories,
550 displayType: "Bio Feature",
551 svgMaskURL: svgMask
552 });
553 </#list>
554 </#if>
555
556 if (clientImpact.length > 0) {
557 <#if SmallerPrimaryClientImpactTitle??>
558 clientImpact[0].useSmallerTitle = !${getterUtil.getBoolean(SmallerPrimaryClientImpactTitle.getData())?c};
559 <#else>
560 clientImpact[0].useSmallerTitle = false;
561 </#if>
562
563 <#if SmallerPrimaryClientImpactSubtitle??>
564 clientImpact[0].largeDescriptionText = '' + (!${getterUtil.getBoolean(SmallerPrimaryClientImpactSubtitle.getData())?c});
565 <#else>
566 clientImpact[0].largeDescriptionText = 'true';
567 </#if>
568 }
569
570 if (clientImpact[0].useSmallerTitle) {
571 clientImpact[0].titleTextSize = 'heading1';
572 } else {
573 clientImpact[0].titleTextSize = 'heading2';
574 }
575
576 var perspectives = [];
577 <#if PerspectiveTitle?has_content && PerspectiveTitle.getSiblings()?has_content>
578 <#list PerspectiveTitle.getSiblings() as cur_PerspectiveTitle>
579 <#if cur_PerspectiveTitle.getData()?has_content && cur_PerspectiveTitle.PerspectiveLink.getData()?has_content>
580 perspectives.push({
581 title: "${(htmlUtil.unescape(cur_PerspectiveTitle.getData()))?js_string}",
582 link: "${(htmlUtil.unescape(cur_PerspectiveTitle.PerspectiveLink.getData()))?js_string}",
583 });
584 </#if>
585 </#list>
586 </#if>
587
588
589 var formData = {};
590 <#if TemplateCustomService.getBioDDMDdmFormInstance()??>
591 <#assign recordset = TemplateCustomService.getBioDDMDdmFormInstance() >
592 <#if recordset??>
593 <#assign recordSetUUID = recordset.getUuid()>
594 <#assign structure = recordset.getStructure() >
595 <#assign JSONFactory = serviceLocator.findService(
596 "com.liferay.portal.kernel.json.JSONFactory")/>
597 <#assign definition = JSONFactory.createJSONObject(structure.getDefinition()) >
598 <#assign description = structure.getDescription("en_US") >
599
600 <#assign name = structure.getName("en_US") >
601
602 formData = {
603 configuration: {formId: '${recordSetUUID}'},
604 definition: ${definition},
605 description: "${description}",
606 name: "${name}"
607 }
608 </#if>
609 </#if>
610
611
612 ATK.React.App.EmployeeBio('employeeBioDiv', empInfo, industries, industryCategories, expertise, expertiseCategories, clientImpact, perspectives, formData); </script>
613<#compress>
614 <script type="application/ld+json">
615 {
616 "@context": "https://schema.org/",
617 "@type": "ProfilePage",
618 "mainEntity": {
619 "@type": "Person",
620 "name": "<#if (FullName.getData())??>${htmlUtil.unescape(FullName.getData())?replace('<[^>]+>','','r')?replace('\\n+','','r')?replace('\\t+','','r')?replace('\\r+','','r')?replace(' ','','r')}</#if>",
621 "givenName": "<#if (PreferredFirstName.getData())??>${htmlUtil.unescape(PreferredFirstName.getData())?replace('<[^>]+>','','r')?replace('\\n+','','r')?replace('\\t+','','r')?replace('\\r+','','r')?replace(' ','','r')}</#if>",
622 "familyName": "<#if (FullName.getData())??><#if (FullName.getData())?contains(" ")>${FullName.getData()?split(" ")[1]}<#elseif (FullName.getData())?contains("・")>${FullName.getData()?split("・")[1]}<#else>${FullName.getData()}</#if></#if>",
623 "url": "https://www.kearney.com${layoutUrl}",
624 "image": "<#if (DisplayHeadshot.getData())??>${DisplayHeadshot.getData()}</#if>",
625 "jobTitle": "<#if (Title.getData())??>${htmlUtil.unescape(Title.getData())?replace('<[^>]+>','','r')?replace('\\n+','','r')?replace('\\t+','','r')?replace('\\r+','','r')?replace(' ','','r')}</#if>",
626 "worksFor": {
627 "@id": "https://www.kearney.com#organization"
628 },
629 "sameAs": [
630 "<#if (LinkedInURL.getData())??>${LinkedInURL.getData()}</#if>"
631 ]
632 }
633 }
634 </script>
635</#compress>
636
637
638<script>
639$(document).on("click",".buttonBodyText", function (event) {
640 var text = $(this).text();
641 if(text == "Contact"){
642
643 <#-- ATK-941 Changes Start -->
644 event.preventDefault();
645
646 <#if (!preview)>
647 var keyLastName = (themeDisplay.getLayoutURL()).substring(themeDisplay.getLayoutURL().lastIndexOf("/")+1).split('?')[0].split('#')[0];
648 localStorage.setItem("bio-name-"+keyLastName, "<#if (FullName.getData())??>${FullName.getData()}</#if>");
649 </#if>
650 <#-- ATK-941 Changes Over -->
651
652 try {
653 Analytics.track('emailClick',{
654 'propertyName': 'emailClick',
655 'bioName':"${FullName.getData()?js_string}",
656 'pageURL':'themeDisplay.getLayoutURL()'
657 });
658 }
659 catch(error) {
660 console.error("Error with Analytics tracking:", error);
661 }
662
663 window.location.href = event.target.href;
664 }
665});
666</script>