Atelier sur l’investissement des migrants en milieu rural au Sénégal, Paris
Ocorreu um erro ao processar o template.
The following has evaluated to null or missing: ==> related_documents_label [in template "10154#10192#EVENT" at line 257, column 10] ---- 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: #if related_documents_label.related_d... [in template "10154#10192#EVENT" at line 257, column 5] ----
1<#assign
2journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
3assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
4groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")
5classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")>
6
7<#assign globalGroup = groupLocalService.getFriendlyURLGroup(companyId, "/global")>
8<#assign destMacroClassId = classNameLocalService.getClassNameId("com.liferay.asset.kernel.model.AssetEntry")>
9<#include "_TEMPLATE_CONTEXT_/${companyId}/${globalGroup.groupId}/${destMacroClassId}/ASSET_ENTRY_MACROS" />
10
11<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(articleGroupId), .vars['reserved-article-id'].data)>
12<#assign asset = assetEntryLocalService.getEntry('com.liferay.journal.model.JournalArticle', article.resourcePrimKey)>
13
14<#assign articleUrl = asset.getAssetRenderer().getURLViewInContext(themeDisplay, currentUrl)>
15
16<#assign fullDateFormatted = "">
17
18<#if eventEndDate?hasContent && eventEndDate.getData()?hasContent>
19 <#assign eventStartDateLocal = dateUtil.parseDate("yyyy-MM-dd", eventStartDate.getData(), locale)>
20 <#assign eventEndDateLocal = dateUtil.parseDate("yyyy-MM-dd", eventEndDate.getData(), locale)>
21
22 <#assign eventStartDay = dateUtil.getDate(eventStartDateLocal, "dd", locale)>
23 <#assign eventEndDay = dateUtil.getDate(eventEndDateLocal, "dd", locale)>
24 <#assign eventYear = dateUtil.getDate(eventEndDateLocal, "yyyy", locale)>
25
26 <#assign eventStartMonth = dateUtil.getDate(eventStartDateLocal, "MMMM", locale)>
27 <#assign eventEndMonth = dateUtil.getDate(eventEndDateLocal, "MMMM", locale)>
28
29 <#if eventStartMonth == eventEndMonth>
30 <#if eventStartDay == eventEndDay>
31 <#assign fullDateFormatted = "${eventStartDay} ${eventStartMonth} ${eventYear}">
32 <#else>
33 <#assign fullDateFormatted = "${eventStartDay} - ${eventEndDay} ${eventStartMonth} ${eventYear}">
34 </#if>
35 <#else>
36 <#assign fullDateFormatted = "${eventStartDay} ${eventStartMonth} - ${eventEndDay} ${eventEndMonth} ${eventYear}">
37 </#if>
38<#elseIf eventStartDate?hasContent && eventStartDate.getData()?hasContent>
39 <#assign eventStartDateLocal = dateUtil.parseDate("yyyy-MM-dd", eventStartDate.getData(), locale)>
40 <#assign fullDateFormatted = dateUtil.getDate(eventStartDateLocal, "dd MMMM yyyy", locale)>
41</#if>
42
43<div class="abstract-article event">
44 <div class="container publication-structure">
45 <div class="row">
46 <div class="col-md-10 offset-md-1">
47 <div class="row">
48 <div class="col-md-6">
49 <div class="pub-header header-section">
50 <div class="tags"><@liferay.language key="${article.getStructureId()?lowerCase}" /></div>
51 <h1>${event_title.getData()}
52 <#if fullDateFormatted?hasContent>
53 <div class="article-date">${fullDateFormatted}</div>
54 </#if>
55 </h1>
56 </div>
57 <div class="main-content">
58 ${main_content.getData()}
59 </div>
60 </div>
61 <div class="col-md-5 offset-md-1">
62 <div class="pub-shadowbox">
63
64 <div class="pub-image">
65 <#if shadowbox_image?hasContent && shadowbox_image.getData()?hasContent>
66 <img class="staff-hero-image" src="${shadowbox_image.getData()}"/>
67 </#if>
68 </div>
69
70 <#if location?hasContent && location.getData()?hasContent>
71 <div class="pub-row">
72 <p class="pub-row-title"><@liferay.language key="location" /></p>
73 <p class="pub-row-text">${location.getData()}</p>
74 </div>
75 </#if>
76
77 <#if partners?hasContent && partners.getData()?hasContent>
78 <div class="pub-row">
79 <p class="pub-row-title"><@liferay.language key="partners" /></p>
80 <p class="pub-row-text">${partners.getData()}</p>
81 </div>
82 </#if>
83
84 <#if website?hasContent && website.getData()?hasContent>
85 <div class="pub-row">
86 <p class="pub-row-title"><@liferay.language key="event-website" /></p>
87 <#if website.website_title?hasContent && website.website_title.getData()?hasContent>
88 <p class="pub-row-text"><a href="${website.getData()}"
89 target="_blank">${website.website_title.getData()}</a>
90 </p>
91 <#else>
92 <p class="pub-row-text"><a href="${website.getData()}"
93 target="_blank">${website.getData()}</a></p>
94 </#if>
95 </div>
96 </#if>
97
98 <#assign langList = {}>
99 <#assign displayLangList = false>
100
101 <#list article.getAvailableLanguageIds() as articleLocale>
102 <#assign langCode = articleLocale?split("_")[0]>
103
104 <#assign localizedUrl =
105 articleUrl?replace("/${locale.getLanguage()}/", "/${langCode}/")>
106 <#assign langList = langList + {"${localeUtil.fromLanguageId(articleLocale).getDisplayLanguage()}": "${localizedUrl}"}>
107
108 <#-- Display full list only if there is at least one non-official language-->
109 <#if langCode != "en" && langCode != "es" && langCode != "fr" && langCode != "ar">
110 <#assign displayLangList = true>
111 </#if>
112 </#list>
113
114 <#if displayLangList>
115 <div class="pub-row">
116 <p class="pub-row-title"><@liferay.language key="additional-languages" /></p>
117 <p class="pub-row-text languages">
118 <#list langList as langName, localizedUrl>
119 <a href="${localizedUrl}">${langName} ${langName?hasNext?then(',','')}</a>
120 </#list>
121 </p>
122 </div>
123 </#if>
124
125 <#if asset.getTagNames()?hasContent>
126 <div class="pub-row">
127 <p class="pub-row-title">Hashtags</p>
128 <p class="pub-row-text">
129 <#list asset.getTagNames() as tag>
130 <span>#${tag}</span>
131 </#list>
132 </p>
133 </div>
134 </#if>
135
136 <#if button_label?hasContent && button_label.getData()?hasContent && button_label.button_url.getData()?hasContent>
137 <div class="pub-button-container">
138 <button type="button"
139 onclick="window.location.href='${button_label.button_url.getData()}'">${button_label.getData()}</button>
140 </div>
141 </#if>
142 </div>
143 </div>
144 </div>
145 </div>
146 </div>
147
148 <#if main_content.main_content_extended?hasContent && main_content.main_content_extended.getData()?hasContent>
149 <div class="row">
150 <div class="col-md-10 offset-md-1">
151 <div class="main-content-extended" style="display: none">
152 ${main_content.main_content_extended.getData()}
153 </div>
154 <div class="generic-btn less-btn" style="display: none">
155 <button class="bordered"><@liferay.language key="less" /></button>
156 </div>
157 <div class="generic-btn more-btn" style="display: block">
158 <button class="bordered"><@liferay.language key="more" /></button>
159 </div>
160 </div>
161 </div>
162 </#if>
163 </div>
164
165 <#if video_code?hasContent && video_code.getData()?hasContent>
166 <#assign thumbnailPath = abstract_image_medium.getData()>
167
168 <#if !thumbnailPath?hasContent>
169 <#assign thumbnailPath = "//img.youtube.com/vi/${video_code.getData()}/hqdefault.jpg">
170 </#if>
171
172 <div class="container">
173 <div class="row-fluid">
174 <div class="event-video span12">
175 <h2>Watch Live</h2>
176 <div class="video-clmn1">
177 <div class="ytube-video-cntnr">
178 <div class="play-button"></div>
179 <img class="video-thumbnail" src="${thumbnailPath}"
180 alt="image" style="visibility: hidden"/>
181 <div class="ytube-video-id">${video_code.getData()}</div>
182 </div>
183 </div>
184 </div>
185 </div>
186 </div>
187 </#if>
188
189 <#assign linkedProfiles = getLinkedProfiles(asset) />
190
191 <#if (linkedProfiles?size > 0)>
192 <div class="generic-container container">
193 <div class="row">
194 <div class="event-speakers col-md-10 offset-md-1">
195 <div class="event-speakers-title">
196 <h2><@liferay.language key="speakers" /></h2>
197 </div>
198
199 <div class="resource-links row">
200
201 <#list linkedProfiles as linkedProfileAssetEntry>
202 <#assign linkedProfileUrl = linkedProfileAssetEntry.getAssetRenderer()
203 .getURLViewInContext(themeDisplay, currentUrl)>
204
205 <#assign relatedlinkedProfile = linkedProfileAssetEntry.getAssetRenderer().getArticle() />
206 <#assign document = saxReaderUtil.read(relatedlinkedProfile.getContent()) />
207
208 <#assign titleNode = document.selectSingleNode(
209 "/root/dynamic-element[@name='title']/dynamic-content[@language-id='" + locale + "']/text()")!"" />
210
211 <#assign bioNode = document.selectSingleNode(
212 "/root/dynamic-element[@name='bio']/dynamic-content[@language-id='" + locale + "']/text()")!"" />
213
214 <#assign hasBio = false />
215
216 <#if bioNode?hasContent>
217 <#assign bioNodeValue = bioNode.getStringValue() />
218 <#if (bioNodeValue?? && bioNodeValue?hasContent)>
219 <#assign hasBio = true>
220 </#if>
221 </#if>
222
223 <div class="resource-link-node col-md-6">
224 <div class="speaker-link">
225 <div class="speaker-container">
226 <a href="${hasBio?then(linkedProfileUrl + "?p_l_back_url=${themeDisplay.getURLCurrent()}", "")}"
227 style="${hasBio?then("", "cursor: default")}"
228 onclick="${hasBio?then("", "return false;")}">
229 <img class="speaker-image" src="${getProfileCloseupUrl(document)}">
230 </a>
231
232 <div class="speaker-label">
233 <a href="${hasBio?then(linkedProfileUrl + "?p_l_back_url=${themeDisplay.getURLCurrent()}", "")}"
234 style="${hasBio?then("", "cursor: default")}"
235 onclick="${hasBio?then("", "return false;")}">
236 <div class="speaker-name">${linkedProfileAssetEntry.getTitle(locale)}</div>
237 <div class="speaker-title">${titleNode.getStringValue()}</div>
238 </a>
239 <#if hasBio>
240 <div class="speaker-bio">
241 <a href="${linkedProfileUrl + "?p_l_back_url=" + themeDisplay.getURLCurrent()}"
242 target="_blank"
243 class="adt-uppercase"><@liferay.language key="read-bio" /></a>
244 </div>
245 </#if>
246 </div>
247 </div>
248 </div>
249 </div>
250 </#list>
251 </div>
252 </div>
253 </div>
254 </div>
255 </#if>
256
257 <#if related_documents_label.related_documents_file?hasContent &&
258 related_documents_label.related_documents_file.getData()?hasContent>
259
260 <div class="generic-container">
261 <div class="related-docs row">
262 <div class="col-md-10 offset-md-1">
263
264 <div class="related-section-title">
265 <h2><@liferay.language key="event-documents" /></h2>
266 </div>
267
268 <#if related_documents_label.getSiblings()?hasContent>
269 <div class="row">
270 <#list related_documents_label.getSiblings() as relatedDocumentsLabel>
271 <div class="related-result-row col-md-6">
272 <div class="related-row">
273 <div class="related-row-img"></div>
274 <div class="related-row-content-wrapper">
275 <h3 class="related-row-title"><a
276 href="${relatedDocumentsLabel.related_documents_file.getData()}"
277 target="blank">${relatedDocumentsLabel.getData()}</a>
278 </h3>
279 </div>
280 </div>
281 </div>
282 </#list>
283 </div>
284 <#else>
285 <div class="related-result-row"><@liferay.language key="err-msg-no-related-documents-found" /></div>
286 </#if>
287 </div>
288 </div>
289 </div>
290 </#if>
291</div>
292
293<script>
294 $(".more-btn,.less-btn").on('click', function () {
295 $(".less-btn").toggle();
296 $(".more-btn").toggle();
297
298 $(".main-content-extended").slideToggle();
299 });
300</script>