Une erreur s'est produite lors du traitement du modèle.
Java method "jdk.proxy169.$Proxy886.getLatestArticle(long, String)" threw an exception when invoked on jdk.proxy169.$Proxy886 object [freemarker.core._DelayedJQuote.toString() failed: com.liferay.portal.kernel.exception.SystemException: javax.persistence.OptimisticLockException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [com.liferay.portlet.asset.model.impl.AssetTagImpl#3679578]]; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign journalArticle = JournalArtic... [in template "10155#10193#COM-MEDIA" at line 16, column 1] ----
1<#setting url_escaping_charset='ISO-8859-1'>
2
3<#-- local services -->
4<#assign JournalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
5<#assign AssetEntryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
6<#assign assetVocabularyService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
7<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
8
9
10<#-- journalarticle and assetentry -->
11<#assign articleId = .vars['reserved-article-id'].data />
12<#assign articleTitle = .vars['reserved-article-title'].data />
13<#assign articleDescription = .vars['reserved-article-description'].data />
14<#assign articleImage = .vars['reserved-article-small-image-url'].data />
15<#assign webContentClassName = "com.liferay.journal.model.JournalArticle"/>
16<#assign journalArticle = JournalArticleService.getLatestArticle(groupId, articleId) />
17<#assign resourcePK = journalArticle.getResourcePrimKey() />
18<#assign assetEntry = AssetEntryService.getEntry('com.liferay.journal.model.JournalArticle', resourcePK) />
19
20
21<#-- get category ids of vocabulary -->
22<#assign Categories = getCategoriesOfVocabulary(assetEntry, "010 Pouvoirs") />
23<#assign CategoriesType = getCategoriesOfVocabulary(assetEntry, "020 Typologies") />
24
25<#-- Current url -->
26<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
27<#assign themeDisplay = serviceContext.getThemeDisplay() />
28<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
29
30
31
32
33 <#assign og_title = articleTitle?replace('<[^>]+>','','r') />
34<#assign og_description = articleDescription?replace('<[^>]+>','','r') />
35
36<#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] />
37 <#assign og_language = locale.getLanguage() />
38<#assign og_languageID = themeDisplay.getLanguageId() />
39<#assign og_domain = themeDisplay.getURLPortal() />
40<#assign og_siteName = "vs.ch" />
41
42<#assign og_url = og_domain+themeDisplay.getURLCurrent() />
43<#-- Open Graph / Facebook -->
44<@liferay_util["html-top"]><meta property="og:type" content="website"></@>
45<@liferay_util["html-top"]><meta property="og:locale" content="${og_languageID}"></@>
46<@liferay_util["html-top"]><meta property="og:site_name" content="${og_siteName}"></@>
47<@liferay_util["html-top"]><meta property="og:url" content="${og_url}"></@>
48<@liferay_util["html-top"]><meta property="og:title" content="${og_title}"></@>
49<@liferay_util["html-top"]><meta property="og:description" content="${og_description} - ${og_url}"></@>
50<#if image?? && image.getData() != "">
51 <@liferay_util["html-top"]><meta property="og:image" content="${og_domain}${image.getData()}"></@>
52</#if>
53
54
55<!-- Twitter -->
56<@liferay_util["html-top"]><meta property="twitter:card" content="summary_large_image"></@>
57<@liferay_util["html-top"]><meta property="twitter:url" content="${og_url}"></@>
58<@liferay_util["html-top"]><meta property="twitter:title" content="${og_title}"></@>
59<@liferay_util["html-top"]><meta property="twitter:description" content="${og_description}"></@>
60<#if image?? && image.getData() != "">
61 <@liferay_util["html-top"]><meta property="twitter:image" content="${og_domain}${image.getData()}"></@>
62</#if>
63
64
65
66
67
68
69<#-- ***CR : Gestion de l'embargo*** -->
70
71<#function fncGetGroupId pLink>
72 <#assign lSplit = pLink?split("/")>
73 <#return lSplit[2]?number>
74 </#function>
75
76 <#--
77 <#function fncGetUuid pLink>
78 <#assign lSplit = pLink?split("/")>
79 <#return lSplit?last>
80 </#function>
81 -->
82
83 <#function fncGetUuid pLink>
84 <#assign lSplit = pLink?split("/")>
85 <#assign luuidtimestamp = lSplit?last>
86 <#assign luuid = luuidtimestamp?split("?")[0]>
87 <#return luuid>
88 </#function>
89
90<#if isDocEmpty()=="false" >
91 <#assign lPublicationDate = journalArticle.getDisplayDate()?datetime/>
92 <#assign lNow = .now>
93 <#if lPublicationDate < lNow>
94 <#assign lRoleService = serviceLocator.findService("com.liferay.portal.kernel.service.RoleLocalService")>
95 <#assign lPortalPermissionService = serviceLocator.findService("com.liferay.portal.kernel.service.ResourcePermissionLocalService")>
96 <#assign lDLService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService")>
97 <#assign lScope = 4>
98 <#assign lCompanyId = companyId>
99 <#assign lRoleId = lRoleService.getRole(lCompanyId,"Guest").getRoleId()>
100 <#assign lRole = ["VIEW"]>
101 <#assign lName = "com.liferay.portlet.documentlibrary.model.DLFileEntry">
102
103 <#if docGroup.getSiblings()?has_content>
104 <#list docGroup.getSiblings() as cur_docGroup>
105 <#if cur_docGroup.annexeDocumentLinkTo??>
106 <#if cur_docGroup.annexeDocumentLinkTo.getSiblings()?has_content>
107 <#list cur_docGroup.annexeDocumentLinkTo.getSiblings() as cur_doc>
108
109 <#-- debug point -->
110 <#-- <strong>test ${cur_doc.getData()}</strong><br /> string can be empty or in somme cases null -->
111 <#-- /debug point -->
112 <#if cur_doc.getData()?trim != "" && cur_doc.getData() != "null">
113 <#assign lGroupId = fncGetGroupId(cur_doc.getData())>
114 <#assign lUuid = fncGetUuid(cur_doc.getData())>
115 <#assign lFile = lDLService.getFileEntryByUuidAndGroupId(lUuid, lGroupId)>
116 <#assign lFileId = lFile.getFileEntryId()>
117
118 <#-- deactivatio de ressource-->
119
120
121
122 <#--${lPortalPermissionService.setResourcePermissions(lCompanyId, lName, lScope, lFileId?string,lRoleId,lRole)}-->
123 </#if>
124 </#list>
125 </#if>
126 </#if>
127 </#list>
128 </#if>
129 </#if>
130 <#-- ***Fin de la gestion de l'embargo*** -->
131</#if>
132
133<#-- <@getBackLink /> -->
134<section class="single">
135
136 <style>
137 p:first-child strong{
138 font-size: 125%;
139 line-height: 1.45em;
140 }
141 </style>
142
143 <div class="grid">
144 <div class="grid__row">
145
146
147 <div class="grid__col-m--1"></div>
148
149
150
151
152 <div class="grid__col-xxs--12 grid__col-m--10">
153 <#list CategoriesType as cur_cat>
154 <#if (cur_cat.getDescription(locale)?trim)!="" >
155 <div class="single-content-type">${cur_cat.getDescription(locale)?trim}</div>
156 </#if>
157 </#list>
158
159 <#if title?? >
160 <h1 class="page-title page-title-small">${title.getData()}</h1>
161 </#if>
162
163
164 <div class="single-meta">
165 <span class="single-date">
166 <@displayArticleDate dateType="published" journalArticle=journalArticle />
167 </span>
168 <#list Categories as cur_cat>
169 <#if (cur_cat.getDescription(locale)?trim)!="" >
170 |
171 <span class="single-cat">
172 ${cur_cat.getDescription(locale)?trim}
173 </span>
174 </#if>
175 </#list>
176 </div>
177
178 </div>
179
180
181
182 <div class="grid__col-m--2"></div>
183
184 <div class="grid__col-xxs--12 grid__col-m--8">
185 <div style="text-align: justify;" class="single-content entry-body">
186 <#if urlDirect?? && urlDirect.getData()?? && urlDirect.getData()?trim != "" >
187 <#assign directLinkText = "Lien direct" />
188 <#if locale == "de_DE">
189 <#assign directLinkText = "Direktlink" />
190 </#if>
191
192 <p class="u-tac">
193 <a href="${urlDirect.getData()}" class="btn btn-red">
194 <span>${directLinkText}</span>
195 </a>
196 </p>
197 </#if>
198
199 <#if description?? >
200 ${description.getData()?replace("<o:p></o:p>", "")}
201 </#if>
202
203 <#-- <a href="https://twitter.com/share?ref_src=twsrc%5Etfw" class="twitter-share-button" data-text="${title.getData()}" data-url="${currentUrl}" data-show-count="false">Tweet</a><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> -->
204 <#--
205
206 <div id="fb-root"></div>
207 -->
208 <script>
209 /*
210 (function(d, s, id) {
211 var js, fjs = d.getElementsByTagName(s)[0];
212 if (d.getElementById(id)) return;
213 js = d.createElement(s); js.id = id;
214 js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1";
215 fjs.parentNode.insertBefore(js, fjs);
216 }(document, 'script', 'facebook-jssdk'));
217 */
218 </script>
219 <#--
220 <div class="fb-share-button"
221 data-href="https://www.your-domain.com/your-page.html"
222 data-layout="button_count">
223 </div>
224 -->
225
226
227
228 </div>
229
230
231 <#if isDocEmpty() == "false">
232 <@getDownloads />
233 </#if>
234
235 </div>
236
237 <div class="grid__col-m--1"></div>
238
239 </div>
240 </div>
241</section>
242<#macro getBackLink>
243 <#if request.attributes??>
244 <#assign url = request.attributes.CURRENT_URL />
245 <#assign multipleValues = httpUtil.getQueryString(url) />
246 <#assign paramMap = httpUtil.getParameterMap(httpUtil.getQueryString(url)) />
247 <#list paramMap?keys as key>
248 <#if key?contains("_redirect")>
249 <#assign keyFound = key />
250 </#if>
251 </#list>
252 <#assign encodedUrlString = httpUtil.getParameter(url, keyFound, false) />
253 <#assign decodedUrlString = httpUtil.decodeURL(encodedUrlString) />
254 </#if>
255 <div class="clearfix">
256 <span class="pull-left muted">${title.getData()} <@displayArticleDate dateType="published" journalArticle=journalArticle /></span>
257 <#if decodedUrlString??>
258 <a class="pull-right" href="${decodedUrlString}"><i class="icon-chevron-sign-left"></i> <@liferay.language key="back" /></a>
259 </#if>
260 <hr />
261 </div>
262</#macro>
263
264<#macro displayArticleDate dateType journalArticle>
265 <#if serviceLocator??>
266 <#if dateType == "published">
267 ${journalArticle.displayDate?string["dd/MM/yyyy"]}
268 <#elseif dateType == "modified">
269 ${journalArticle.modifiedDate?string["dd/MM/yyyy"]}
270 <#elseif dateType == "created">
271 ${journalArticle.createDate?string["dd/MM/yyyy"]}
272 </#if>
273 </#if>
274</#macro>
275
276<#macro getDownloads>
277
278 <#list docGroup.getSiblings() as cur_docGroup>
279 <#if cur_docGroup.data?trim != "">
280 <h3 class="block-title u-tac">${cur_docGroup.data}</h3>
281 </#if>
282
283
284
285 <#if cur_docGroup.folderId?? >
286 <#if cur_docGroup.folderId.data?trim != "">
287 <#assign filesInFolder = getFileEntries(groupId, cur_docGroup.folderId.data) />
288 <#list filesInFolder?sort_by("title") as cur_file>
289 <#-- ${cur_file}<br /><br /> -->
290 <div class="grid__row section-docs">
291 <@DocumentFromUuid groupId cur_file.uuid />
292 </div>
293 </#list>
294
295 <#assign filesInFolder = "" />
296 </#if>
297 </#if>
298
299
300 <#if cur_docGroup.annexeDocumentLinkTo??>
301 <div class="grid__row section-docs">
302
303 <#list cur_docGroup.annexeDocumentLinkTo.getSiblings() as cur_intDoc>
304 <#if cur_intDoc.getData()?trim != "" && cur_intDoc.getData() != "null">
305 <@getDocument docLink=cur_intDoc/>
306 </#if>
307 </#list>
308
309 </div>
310 </#if>
311
312 </#list>
313</#macro>
314
315<#macro DocumentFromUuid group uuid>
316 <#assign document = DLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, group) />
317 <#if document.getTitle()?index_of("/") != 0>
318
319 <div class="grid__col-xxs--12 grid__col-s--6">
320 <a class="doc-item doc-item-small" href="/documents/${document.groupId}/${document.folderId}/${document.title?url}/${document.uuid}" target="_blank">
321 <span class="u-table">
322 <span class="u-cell">
323 <span class="subtitle">${document.extension}</span>
324 <span>"${document.getTitle()}</span>
325 </span>
326 </span>
327 <i class="icon icon_arrow-right">
328 <svg viewBox="0 0 37.1 12" class="svg_arrow-right">
329 <use xlink:href="/o/vs-theme/css/../assets/svg/sprite.svg#svg-arrow-right"></use>
330 <use xlink:href="#svg-arrow-right"></use>
331 </svg>
332 </i>
333 </a>
334 <#-- <small class="muted" style="white-space: nowrap;">(${(document.size/1024)?round} <@liferay.language key="vs-kb"/>)</small> -->
335 </div>
336
337 </#if>
338 <#assign document = "" />
339</#macro>
340
341<#macro getDocument docLink>
342 <#assign docJSON = jsonFactoryUtil.createJSONObject(docLink.data) />
343 <#assign gid = docJSON.groupId />
344 <#assign longGid = getterUtil.getLong(gid) />
345 <#assign uuid = docJSON.uuid />
346 <#if DLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, longGid)?? >
347 <#assign document = DLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, longGid) />
348
349 <div class="grid__col-xxs--12 grid__col-s--6">
350 <a class="doc-item doc-item-small" href="${docLink.getData()}">
351 <span class="u-table">
352 <span class="u-cell">
353 <span class="subtitle">${document.extension}</span>
354 <span>${document.getTitle()}</span>
355 </span>
356 </span>
357 <i class="icon icon_arrow-right">
358 <svg viewBox="0 0 37.1 12" class="svg_arrow-right">
359 <use xlink:href="/o/vs-theme/css/../assets/svg/sprite.svg#svg-arrow-right"></use>
360 <use xlink:href="#svg-arrow-right"></use>
361 </svg>
362 </i>
363 </a>
364 </div>
365 </#if>
366</#macro>
367
368
369<#macro getDateAndCategory>
370 <#-- get date and name of category -->
371
372
373
374</#macro>
375
376
377
378
379<#function isDocEmpty>
380 <#if docGroup?? >
381 <#list docGroup.getSiblings() as cur_docGroup>
382 <#if cur_docGroup.annexeDocumentLinkTo?? >
383 <#list cur_docGroup.annexeDocumentLinkTo.getSiblings() as cur_intDoc>
384 <#if cur_intDoc.data?trim != "" && cur_intDoc.data?trim != "null">
385 <#return "false" />
386 </#if>
387 </#list>
388 </#if>
389 <#if cur_docGroup.folderId?? >
390 <#list cur_docGroup.folderId.getSiblings() as cur_intDoc>
391 <#if cur_intDoc.data?trim != "" && cur_intDoc.data?trim != "null">
392 <#return "false" />
393 </#if>
394 </#list>
395 </#if>
396
397 </#list>
398 </#if>
399 <#return "true" />
400</#function>
401
402<#-- categorie pour mobile app -->
403
404
405<#-- -->
406
407
408<#function getCategoriesOfVocabulary assetEntry vocabularyName>
409
410 <#assign categories = assetEntry.getCategories() />
411 <#assign categorylist = [] />
412 <#list categories as category>
413 <#assign vocabulary = assetVocabularyService.getVocabulary(category.vocabularyId)/>
414 <#if vocabulary.name == vocabularyName>
415 <#-- <#assign categorylist = categorylist + [ category.getDescription(locale) ] /> -->
416 <#assign categorylist = categorylist + [ category ] />
417 </#if>
418 </#list>
419 <#return categorylist />
420
421</#function>
422
423
424<#function getFileEntries group folderId>
425 <#if serviceLocator??>
426 <#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
427 <#return DLFileEntryLocalService.getFileEntries(group, getterUtil.getLong(folderId)) />
428 </#if>
429 <#return "" />
430</#function>
431
432
433
434
435
436<#if isContactEmpty() == "false">
437 <div class="grid__col-xxs--12 grid__col-s--4">
438 <div class="grid__col-xxs--12 grid__col-s--12 services-header">
439 <div class="grid__col-xxs--12">
440 <h3>
441 <@liferay.language key="vs-contact"/>
442 </h3>
443 <@contactInfo/>
444 <br />
445 </div>
446 </div>
447 </div>
448 </#if>
449
450
451
452
453
454
455
456<#macro contactInfo>
457 ${contact.getData()}
458 <#if serviceLocator??>
459 <#if contact.contactId?? >
460 <#if contact.contactId.data?trim != "">
461 ${getArticleContent(groupId, contact.contactId.data, "")}
462 </#if>
463 </#if>
464 </#if>
465</#macro>
466
467
468
469
470
471<#function getArticleContent gid aid tid>
472 <#assign article = JournalArticleService.getArticle(gid?number, aid?upper_case) />
473 <#assign articleContent = JournalArticleService.getArticleContent(article, tid, null, locale, model, themeDisplay) />
474 <#if articleContent?? >
475 <#return articleContent />
476 </#if>
477 <#return "" />
478</#function>
479
480
481
482
483
484<#function isContactEmpty>
485 <#if contact?? >
486 <#if contact.contactId?? >
487 <#if contact.getData()?trim != "" || contact.contactId.data?trim != "" >
488 <#return "false" />
489 </#if>
490 <#else>
491 <#if contact.getData()?trim != "" >
492 <#return "false" />
493 </#if>
494 </#if>
495 <#return "true" />
496 </#if>
497 <#return "true" />
498</#function>