
Discover a cross-section of content from industry leaders and experts shaping the future of our innovation economy.

Discover a cross-section of content from industry leaders and experts shaping the future of our innovation economy.
CIBC Innovation Banking Podcast
On our #CIBCInnovationEconomy podcast series, hear from leaders, entrepreneurs, experts and venture capitalists about the changing dynamics of the North American innovation economy
Java method "jdk.proxy3.$Proxy155.getDLFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on jdk.proxy3.$Proxy155 object "com.liferay.document.library.internal.service.FriendlyURLDLFileEntryLocalServiceWrapper@2b656642"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #local dlFileEntry = dlFileEntryLocal... [in template "709831#709857#732636" in function "getArticleDLEntryUrl" at line 116, column 5]
----
1<#macro language
2 key
3>
4${languageUtil.get(locale, key)}
5</#macro>
6<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() />
7
8<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")
9 layout = LayoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), false, "/podcast-list")
10 listUrl = portalUtil.getLayoutFullURL(layout, themeDisplay)
11>
12<div class="insight-section">
13 <#if entries?has_content>
14 <div class="currect-section">
15 <div class="container">
16 <#assign
17 httpUtil = staticUtil["com.liferay.portal.kernel.util.HttpComponentsUtil"]
18 lastestEntry = entries[0]
19 assetRenderer = lastestEntry.getAssetRenderer()
20
21 journalArticle = assetRenderer.getAssetObject()
22 document = saxReaderUtil.read(journalArticle.getContentByLocale(locale))
23 titleNode = document.selectSingleNode("/root/dynamic-element[@name='PodcastTitle']/dynamic-content")
24 imageNode = document.valueOf("/root/dynamic-element[@name='PodcastImage']/dynamic-content")
25 imageJson = jsonFactoryUtil.createJSONObject(imageNode)
26 documentUrl = getArticleDLEntryUrl(imageJson)
27 summaryNode = document.selectSingleNode("/root/dynamic-element[@name='PodcastSummary']/dynamic-content")
28 embedURL = document.selectSingleNode("/root/dynamic-element[@name='EmbedURL']/dynamic-content")
29 viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, lastestEntry, true)
30 viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL)
31 viewURL = httpUtil.setParameter(viewURL,"podcastdetail","transcript")
32 videoDuration = document.valueOf("//dynamic-element[@name='VideoDuration']/dynamic-content/text()")
33 />
34
35 <div class="card">
36 <#if documentUrl??>
37 <img alt="${imageJson.getString('alt')}" src="${documentUrl}" class="card-img-top col-md-12"/>
38 </#if>
39 <div class="card-body" style="padding: 15px;">
40 <div class="row no-gutters">
41 <div class="primary-color subhead_md col-md-auto"><@liferay.language key="current-episode" />: </div>
42 <div class="subhead_md col-md-9">${titleNode.getText()}</div>
43 </div>
44 <p>${summaryNode.getText() }</p>
45 <div class="row">
46 <a href="${embedURL.getText()}" class="podcast-play-link" role="button" data-toggle="modal" data-target="#podcastModal" aria-label="<@liferay.language key="play-video"/>: ${titleNode.getText()} ${videoDuration}. <@liferay.language key="opens-in-dialog"/>"><img src="/o/innovation-banking-theme/images/Play-Icon-Red-Large.png" alt="" class="mr-2"></a>
47 <a href="${viewURL}" class="link-of-page my-auto" aria-label="<@liferay.language key="transcript" /> ${titleNode.getText()}">
48 <@liferay.language key="transcript" /></a>
49 </div>
50 </div>
51 </div>
52 </div>
53 </div>
54 <div class="container podcast-cards">
55 <div class="row">
56 <#list 1..3 as x>
57 <div class="col-md-4 col-sm-6 mb-2">
58 <#if entries[x]??>
59 <#assign
60 lastestEntry = entries[x]
61 assetRenderer = lastestEntry.getAssetRenderer()
62 journalArticle = assetRenderer.getAssetObject()
63 viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, lastestEntry, true)
64 viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL)
65 viewURL = httpUtil.setParameter(viewURL,"podcastdetail","transcript")
66 temp = serviceContext.setAttribute("my_view_url", viewURL)
67 />
68 <@liferay_journal["journal-article"]
69 articleId=journalArticle.getArticleId()
70 ddmTemplateKey="665778"
71 groupId=journalArticle.getGroupId()
72 />
73 </#if>
74 </div>
75 </#list>
76 </div>
77 </div>
78 </#if>
79</div>
80<div class="d-flex justify-content-center">
81 <a href="${listUrl}" class="btn btn-primary" aria-label="<@liferay.language key="view-all-podcasts-alt-text"/>">${languageUtil.get(locale, "view-all-podcasts-alt-text")}</a>
82</div>
83<div class="podcast-modal">
84<div class="modal fade" id="podcastModal" tabindex="-1" role="dialog" aria-hidden="true">
85 <div class="modal-dialog">
86 <div class="modal-content">
87 <div class="modal-body">
88 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
89 <span aria-hidden="true">×</span>
90 </button>
91 <div id="videoContainer" tabindex="0" class="youtubevideo">
92 <div class="youtubeVideoEmbed">
93 <iframe class="embed-responsive-item optanon-category-[C0004]" id="podcastVideo" allowscriptaccess="autoplay" allow="autoplay" title="<@liferay.language key="video-player"/>"></iframe>
94 </div>
95 <div class="youtube-notification hide" id="ytvideo-notification">
96 <img src="/documents/709853/1056517/youtube-256x256.svg/227c2cba-952b-94ae-acf5-163ccacd0458?t=1726482979959">
97 <h3 style="text-align: center;"><span class="subhead-medium"><@liferay.language key="cookies-disabled"/></span></h3>
98 <p>
99 <span class="banner-body-copy"><@liferay.language key="cookies-disabled-message-part1"/><a href="#" target="_blank" class=" inlineLink DefaultColor" data-di-id="di-id-6c88222-cea0fdde"> <@liferay.language key="cookies-disabled-message-part2"/> </a><@liferay.language key="cookies-disabled-message-part3"/></span></p>
100 </div>
101 </div>
102 </div>
103 </div>
104 </div>
105</div>
106</div>
107<#function getArticleDLEntryUrl jsonObject>
108 <#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
109 <#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")>
110 <#local docUrl = "" />
111
112 <#if jsonObject?has_content>
113 <#local entryUuid = jsonObject.getString("uuid") />
114 <#local entryGroupId = getterUtil.getLong(jsonObject.getString("groupId")) />
115
116 <#local dlFileEntry = dlFileEntryLocalService.getDLFileEntryByUuidAndGroupId(entryUuid, entryGroupId) />
117
118 <#local assetEntry = assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry", dlFileEntry.fileEntryId) />
119 <#local assetRenderer = assetEntry.assetRenderer />
120
121 <#local docUrl = assetRenderer.getURLDownload(themeDisplay) />
122 </#if>
123 <#return docUrl />
124</#function>
125
126<style>
127 .subhead_md p{
128 margin-bottom:0px;
129 font-size: 26px!important;
130 font-family: Whitney-Medium-Pro,Arial,Helvetica,sans-serif;
131 }
132 .podcast-cards .col-md-4 {
133 display: flex;
134 }
135
136 .podcast-cards .card {
137 height : 100%;
138 background: #f2f3f2;
139 margin-bottom: 0;
140 }
141 .podcast-cards .journal-content-article {
142 width: 100%;
143 }
144 .podcast-modal .modal {
145 display: none;
146 }
147
148 .podcast-modal .modal-dialog {
149 max-width: 550px;
150 margin: 30px auto;
151 position: relative;
152 }
153 .podcast-card-link {
154 position: absolute;
155 bottom: 0;
156 margin-bottom: 0.50rem;
157 }
158 .podcast-cards .card-body {
159 padding-bottom: 2rem;
160 }
161 .insight-section a.link-of-page{
162 text-decoration:none;
163}
164 .insight-section a.link-of-page:hover{
165 text-decoration:underline;
166}
167.btn-red-medium-play:hover{
168 /* border-bottom: none!important; */
169}
170.btn-listen:hover {
171 /* border-bottom: 1px solid #8B1D41; */
172}
173
174
175.videoWrapper .youtube-notification {
176 position: absolute;
177 text-align: center;
178 width: 100%;
179 padding: 0 20px 0 20px
180}
181
182.youtubeVideoEmbed {
183 position: relative;
184 padding-bottom: 56.25%;
185 height: 0
186}
187
188.youtubeVideoEmbed iframe {
189 position: absolute;
190 top: 0;
191 left: 0;
192 width: 100%;
193 height: 100%
194}
195
196.youtubeVideoEmbed .youtube-notification img,.videoWrapper .youtube-notification img {
197 height: 64px;
198 width: 64px
199}
200
201.youtubeVideoEmbed .youtube-notification span,.videoWrapper .youtube-notification span {
202 margin: 20px 0 20px 0
203}
204
205.youtubeVideoEmbed.youtube-notification-min-height {
206 border: 1px solid var(--Border-border-decorative,#bbbcbc)
207}
208
209
210@media only screen and (max-width: 767px) {
211 .youtubeVideoEmbed .youtube-notification {
212 text-align:center
213 }
214
215 .youtubeVideoEmbed.youtube-notification-min-height {
216 min-height: 363px;
217 padding: 8px 8px 0 8px
218 }
219
220 .youtubeVideoEmbed.youtube-notification-min-height {
221 padding: 15px 15px 15px 15px
222 }
223}
224
225@media only screen and (min-width: 768px) {
226 .youtubeVideoEmbed .youtube-notification {
227 position: absolute;
228 left: 50%;
229 top: 52%;
230 transform: translate(-50%, -50%);
231 text-align: center;
232 width: 490px;
233 padding: 0 20px 0 20px;
234 }
235}
236</style>
237<script>
238$(document).ready(function() {
239
240 var $podcastSrc, $podcastTitle;
241 $('.podcast-play-link').click(function() {
242 $podcastSrc = $(this).attr("href");
243 $podcastTitle = $(this).attr("aria-label").split('. '.concat('<@liferay.language key="opens-in-dialog"/>'))[0];
244 });
245 $('#podcastModal').on('shown.bs.modal', function (e) {
246 if( isOneTrustEnabled() && (checkOptanonCookie('C0004') === 1) ) {
247 $("#podcastVideo").attr('src',$podcastSrc + "?modestbranding=1&showinfo=0" );
248 $("#videoContainer").attr('aria-label',$podcastTitle);
249 }
250 })
251
252 $('#podcastModal').on('hide.bs.modal', function (e) {
253 $("#podcastVideo").attr('src',"");
254 $("#videoContainer").removeAttr('aria-label');
255 })
256});
257</script>
This content is intended as general information only and is not to be relied upon as constituting legal, financial or other professional advice. Information presented is believed to be factual and current but we do not guarantee its accuracy and it should not be regarded as a complete analysis of the subjects discussed. All expressions of opinion reflect the judgment of the authors as of the date of publication and are subject to change. No endorsement of any third parties or their advice, opinions, information, products or services is expressly given or implied by Canadian Imperial Bank of Commerce or any of its affiliates.