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