Une erreur s'est produite lors du traitement du modèle.
The following has evaluated to null or missing: ==> serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") [in template "10155#10193#TRIBUNAL-CUSTOM" at line 3, column 29] ---- 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: #assign AssetLinkService = serviceLoc... [in template "10155#10193#TRIBUNAL-CUSTOM" at line 3, column 1] ----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
2<#assign AssetLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
3<#assign AssetLinkService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")/>
4<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
5
6
7<#assign yourChoosenLocal = locale?split("_")[0] />
8<#assign pathFileicon = "/html/themes/classic/images/file_system/small/" />
9<#setting url_escaping_charset='ISO-8859-1'>
10<#assign gArticleId = .vars['reserved-article-id'].data />
11<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
12
13<style>
14 .aui .valais-structure .span4 .structure-area h3 {
15 /*margin-top: 1em;*/
16 line-height: 1;
17 font-size: 14px;
18 }
19
20 .aui .valais-structure .img-aside {
21 width: 300px;
22 max-width: 100%;
23 height: auto;
24 }
25
26 .aui .span4 .structure-area {
27 margin-bottom: 3em;
28 }
29 .aui .valais-structure .span4 {
30 padding-right: 0.5em;
31 padding-left: 1.5em;
32 font-size: 12px;
33 border-left: 1px solid rgb(240, 240, 240);
34 }
35
36 .vs-documents .vs-documents-internal,
37 .vs-documents .vs-documents-external,
38 .vs-documents .vs-documents-folder {
39 list-style-type: none;
40 }
41
42
43 .vs-documents .vs-icon:before {
44 display: inline-block;
45 font: normal normal normal 14px/1 FontAwesome;
46 font-size: inherit;
47 text-rendering: auto;
48 -webkit-font-smoothing: antialiased;
49 -moz-osx-font-smoothing: grayscale;
50 transform: translate(0, 0);
51 text-indent: -1.5em;
52 }
53
54 .vs-documents .ext:before {
55 content: "\f08e";
56 }
57 .vs-documents .pdf:before {
58 content: "\f1c1";
59 }
60
61 .vs-documents .xls:before,
62 .vs-documents .xlsx:before,
63 .vs-documents .csv:before {
64 content: "\f1c3";
65 }
66
67 .vs-documents .doc:before,
68 .vs-documents .docx:before,
69 .vs-documents .dot:before {
70 content: "\f1c2";
71 }
72
73 .vs-documents .bpm:before,
74 .vs-documents .jpeg:before,
75 .vs-documents .jpg:before,
76 .vs-documents .jpeg:before,
77 .vs-documents .gif:before,
78 .vs-documents .png:before,
79 .vs-documents .tiff:before,
80 .vs-documents .jpeg:before {
81 content: "\f1c5";
82 }
83
84 .vs-documents .xml:before,
85 .vs-documents .xslt:before,
86 .vs-documents .css:before,
87 .vs-documents .js:before,
88 .vs-documents .htm:before,
89 .vs-documents .html:before,
90 .vs-documents .json:before {
91 content: "\f1c9";
92 }
93 .vs-documents .pptx:before,
94 .vs-documents .ppt:before,
95 .vs-documents .potx:before,
96 .vs-documents .pot:before,
97 .vs-documents .ppsx:before,
98 .vs-documents .pps:before {
99 content: "\f1c4";
100 }
101
102.img-responsive {
103 display: block;
104 max-width: 100%; // Set a maximum relative to the parent
105 height: auto; // Scale the height according to the width, otherwise you get stretching
106}
107
108
109</style>
110
111<div class="valais-structure container">
112
113 <@getBackLink />
114 <div class="row">
115 <div class="col-8" style="">
116
117 ${description.getData()}
118
119 <#if isDocEmpty() == "false" >
120
121 <div class="structure-area">
122 <h3><@liferay.language key="${docBlockTitle.data}" /></h3>
123
124 <@downloads />
125 </div>
126 </#if>
127
128 </div>
129
130 <div class="col-4" style="border-left: 1px solid rgb(240, 240, 240);padding-left:1.5em;">
131
132 <#-- <@relatedAssets /> -->
133
134 <#if isImageEmpty() == "false">
135 <div class="structure-area" style="margin-top: 20px;">
136 <img class="img-responsive" src="${smallImage.getData()}" alt="">
137 </div>
138 </#if>
139
140 <#if isContactEmpty() == "false">
141 <div class="structure-area">
142 <h3><@liferay.language key="vs-contact"/></h3>
143 <@contactInfo/>
144 </div>
145 </#if>
146
147 <#if isLinkEmpty() == "false">
148 <div class="structure-area">
149 <h3><@liferay.language key="vs-link"/></h3>
150 <@links/>
151 </div>
152 </#if>
153
154 <#if isLexEmpty() == "false">
155 <div class="structure-area">
156 <h3><@liferay.language key="vs-legal-base"/></h3>
157 <@lex/>
158 </div>
159 </#if>
160
161 <#if isGenericHtmlEmpty() == "false">
162 <div class="structure-area">
163 ${htmlGeneric.getData()}
164 </div>
165 </#if>
166 <#--
167 <div class="structure-area">
168 <@sitemapInfo />
169 </div>
170 -->
171
172 <#-- <span class="pull-right muted"><@liferay.language key="vs-last-modified" />: ${getArticleDate("modified")}</span> -->
173
174 </div>
175 </div>
176</div>
177
178<#macro sitemapInfo>
179
180 <#if serviceLocator??>
181 ${getArticleContent(groupId, "ACCESSDIRECT")}
182 </#if>
183</#macro>
184
185<#-- functions and macros -->
186
187<#macro getBackLink>
188 <#if request.attributes??>
189 <#assign url = request.attributes.CURRENT_URL />
190 <#assign multipleValues = httpUtil.getQueryString(url) />
191 <#assign paramMap = httpUtil.getParameterMap(httpUtil.getQueryString(url)) />
192 <#list paramMap?keys as key>
193 <#if key?contains("_redirect")>
194 <#assign keyFound = key />
195 </#if>
196 </#list>
197 <#if keyFound??>
198 <#assign encodedUrlString = httpUtil.getParameter(url, keyFound, false) />
199 <#assign decodedUrlString = httpUtil.decodeURL(encodedUrlString) />
200 <div class="clearfix">
201 <#-- <span class="pull-left muted">${title.getData()} <@displayArticleDate dateType="published"/></span> -->
202 <#if decodedUrlString??>
203 <a class="pull-left" href="${decodedUrlString}"><i class="icon-chevron-sign-left"></i> <@liferay.language key="back" /></a>
204 </#if>
205 <hr />
206 </div>
207 </#if>
208 </#if>
209</#macro>
210
211<#macro downloads>
212
213 <#list docGroup.getSiblings() as cur_docGroup>
214 <#if cur_docGroup.data?trim != "">
215 ${cur_docGroup.data}
216 </#if>
217 <ul class="vs-documents">
218
219 <#list cur_docGroup.annexeDocumentLinkTo.getSiblings() as cur_intDoc>
220 <#assign docHash = ""/>
221 <#if cur_intDoc.data?trim != "" && cur_intDoc.data != "null">
222
223 <li class="vs-documents-internal">
224
225 <#if serviceLocator??>
226 <#assign docHash = {"url": cur_intDoc.data, "name": cur_intDoc_index}/>
227 <#if cur_intDoc.data?split("/")[5]??>
228 <@Documents docLink=cur_intDoc.data/>
229
230 <#-- Bug correction by STETSC-->
231 <#else>
232 <#assign docJSON = jsonFactoryUtil.createJSONObject(cur_intDoc.data) />
233 <#assign gid = docJSON.groupId />
234 <#assign title = docJSON.title />
235 <#assign longGid = getterUtil.getLong(gid) />
236 <#assign uuid = docJSON.uuid />
237 <#assign tnow = '?t='+.now?long />
238 <li>
239 <a class="red" href="${cur_intDoc.getData()}${tnow}" target="_blank">
240 <#-- <span class="subtitle">${document.extension}</span> -->
241 <span>${docJSON.title}</span>
242 </a>
243 </li>
244 <#-- End bug correction by STETSC-->
245
246
247 </#if>
248 <#else>
249 <#if cur_intDoc.data?split("/")[4]??>
250 <#assign docHash = {"url": cur_intDoc.data, "name": httpUtil.decodeURL(cur_intDoc.data?split("/")[4])}/>
251 <#else>
252 <#assign docHash = {"url": cur_intDoc.data, "name": cur_intDoc.data}/>
253 </#if>
254 <a href="${docHash.url}">
255 ${docHash.name}
256 </a>
257 </#if>
258 </li>
259 </#if>
260 </#list>
261
262 <#list cur_docGroup.annexeUrlTitle.getSiblings() as cur_extDoc>
263 <#if cur_extDoc.data?trim != "" && cur_extDoc.data != "null">
264 <li class="vs-documents-external">
265 <a class="vs-icon ext" href="${cur_extDoc.annexeUrl.data}">
266 <span style="color: #333333;">${cur_extDoc.data}</span>
267 </a>
268 </li>
269 </#if>
270 </#list>
271
272
273 <#if cur_docGroup.folderId?? >
274 <#if cur_docGroup.folderId.data?trim != "">
275 <#assign filesInFolder = getFileEntries(groupId, cur_docGroup.folderId.data) />
276 <#list filesInFolder as cur_file>
277 <li class="vs-documents-folder">
278 <@DocumentFromUuid groupId cur_file.uuid />
279 </li>
280 </#list>
281
282 <#assign filesInFolder = "" />
283 </#if>
284 </#if>
285
286 </ul>
287 </#list>
288</#macro>
289
290<#macro DocumentFromUuid group uuid>
291 <#assign document = DLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, group) />
292 <a class="vs-icon ${document.extension}" href="/documents/${document.groupId}/${document.folderId}/${document.title?url}/${document.uuid}"><span style="color: #333333;">${document.getTitle()}</span></a>
293 <small class="muted" style="white-space: nowrap;">(${(document.size/1024)?round} <@liferay.language key="vs-kb"/>)</small>
294 <#assign document = "" />
295</#macro>
296
297<#macro Documents docLink>
298 <#assign gid = docLink?split("/")[2] />
299 <#assign longGid = getterUtil.getLong(gid) />
300 <#assign last = docLink?split("/")[5] />
301 <#assign uuid = last?split("?")[0] />
302 <#assign document = DLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, longGid) />
303 <a class="vs-icon ${document.extension}" href="${docLink}"><span style="color: #333333;">${document.getTitle()}</span></a>
304 <small class="muted" style="white-space: nowrap;">(${(document.size/1024)?round} <@liferay.language key="vs-kb"/>)</small>
305</#macro>
306
307<#macro links>
308 <#list linkGroup.getSiblings() as cur_linkGroup>
309 <#if cur_linkGroup.data?trim != "">
310 ${cur_linkGroup.data}
311 </#if>
312 <ul>
313 <#list cur_linkGroup.linkTitle.getSiblings() as cur_link>
314 <#if cur_link.data?trim != "" && cur_link.data != "null">
315 <li>
316 <a href="${cur_link.linkUrl.data}">
317 ${cur_link.data}
318 </a>
319 </li>
320 </#if>
321 </#list>
322 </ul>
323 </#list>
324</#macro>
325
326<#macro lex>
327 <#if yourChoosenLocal == "de">
328 <#assign lexLanguage = "de" />
329 <#else>
330 <#assign lexLanguage = "fr" />
331 </#if>
332 <#list lexGroup.getSiblings() as cur_lexGroup>
333 <#if cur_lexGroup.data?trim != "">
334 ${cur_lexGroup.data}
335 </#if>
336 <ul>
337 <#list cur_lexGroup.lexTitle.getSiblings() as cur_lex>
338 <#if cur_lex.data?trim != "" && cur_lex.data != "null">
339 <li>
340 <#if cur_lex.lexType.data == "leglisttype" >
341 <#assign lexLinkUrl = "http://apps.vs.ch/legxml/site/search.php?norm_language=" + lexLanguage + "&norm_number=" + cur_lex.lexNumbers.getData() />
342 <#elseif cur_lex.lexType.data == "legdetailtype" >
343 <#assign lexLinkUrl = "http://apps.vs.ch/legxml/site/laws_show.php?norm_language=" + lexLanguage + "&norm_specific_number=" + cur_lex.lexNumbers.getData() />
344 <#elseif cur_lex.lexType.data == "legpdftype" >
345 <#assign lexLinkUrl = "http://apps.vs.ch/legxml/site/laws_pdf.php?norm_language=" + lexLanguage + "&norm_specific_number=" + cur_lex.lexNumbers.getData() + "&MODE=2" />
346 <#elseif cur_lex.lexType.data == "leglinktype" >
347 <#assign lexLinkUrl = cur_lex.lexNumbers.getData() />
348 </#if>
349 <a href="${lexLinkUrl}">
350 ${cur_lex.data}
351 </a>
352 </li>
353 </#if>
354 </#list>
355 </ul>
356 </#list>
357</#macro>
358
359<#macro contactInfo>
360 ${contact.getData()}
361 <#if serviceLocator??>
362 <#if contact.contactId?? >
363 <#if contact.contactId.data?trim != "">
364 ${getArticleContent(groupId, contact.contactId.data)}
365 </#if>
366 </#if>
367 </#if>
368</#macro>
369
370<#function getArticleDate dateType>
371 <#if serviceLocator??>
372 <#assign article = JournalArticleLocalService.getArticle(groupId, gArticleId) />
373 <#if dateType == "published">
374 <#assign date = article.displayDate?date />
375 <#elseif dateType == "modified">
376 <#assign date = article.modifiedDate?date />
377 <#elseif dateType == "created">
378 <#assign date = article.createDate?date />
379 <#else>
380 <#assign date = "???" />
381 </#if>
382 <#return date>
383 </#if>
384</#function>
385
386<#function getFileEntries group folderId>
387 <#if serviceLocator??>
388 <#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
389 <#return DLFileEntryLocalService.getFileEntries(group, getterUtil.getLong(folderId)) />
390 </#if>
391 <#return "" />
392</#function>
393
394<#function getArticleContent gid aid>
395 <#attempt>
396 <#assign article = JournalArticleLocalService.getArticle(gid?number, aid?upper_case) />
397 <#assign articleContent = JournalArticleLocalService.getArticleContent(article, null, null, locale, themeDisplay) />
398 <#if articleContent?? >
399 <#return articleContent />
400 </#if>
401 <#return "" />
402 <#recover>
403 <#return "" />
404 </#attempt>
405 </#function>
406
407<#function isDocEmpty>
408 <#list docGroup.getSiblings() as cur_docGroup>
409 <#list cur_docGroup.annexeDocumentLinkTo.getSiblings() as cur_intDoc>
410 <#if cur_intDoc.data?trim != "" && cur_intDoc.data?trim != "null">
411 <#return "false" />
412 </#if>
413 </#list>
414 <#list cur_docGroup.annexeUrlTitle.getSiblings() as cur_extDoc>
415 <#if cur_extDoc.data?trim != "" && cur_extDoc.data?trim != "null">
416 <#return "false" />
417 </#if>
418 </#list>
419 <#if cur_docGroup.folderId?? >
420 <#list cur_docGroup.folderId.getSiblings() as cur_folder>
421 <#if cur_folder.data?trim != "" && cur_folder.data?trim != "null">
422 <#return "false" />
423 </#if>
424 </#list>
425 </#if>
426 </#list>
427 <#return "true" />
428</#function>
429
430<#function isLinkEmpty>
431 <#list linkGroup.getSiblings() as cur_linkGroup>
432 <#list cur_linkGroup.linkTitle.getSiblings() as cur_link>
433 <#if cur_link.data?trim != "">
434 <#return "false" />
435 </#if>
436 </#list>
437 </#list>
438 <#return "true" />
439</#function>
440
441<#function isLexEmpty>
442 <#list lexGroup.getSiblings() as cur_lexGroup>
443 <#list cur_lexGroup.lexTitle.getSiblings() as cur_lex>
444 <#if cur_lex.data?trim != "">
445 <#return "false" />
446 </#if>
447 </#list>
448 </#list>
449 <#return "true" />
450</#function>
451
452<#function isContactEmpty>
453 <#if contact.contactId?? >
454 <#if contact.getData()?trim != "" || contact.contactId.data?trim != "" >
455 <#return "false" />
456 </#if>
457 <#else>
458 <#if contact.getData()?trim != "" >
459 <#return "false" />
460 </#if>
461 </#if>
462 <#return "true" />
463</#function>
464
465<#function isGenericHtmlEmpty>
466 <#if htmlGeneric ??>
467 <#if htmlGeneric.getData()?trim != "" >
468 <#return "false">
469 </#if>
470 </#if>
471 <#return "true" />
472</#function>
473
474<#function isRelatedEmpty relatedEntries>
475 <#if relatedEntries?? >
476 <#list relatedEntries as cur_entry >
477 <#if cur_entry?trim != "">
478 <#return "false">
479 </#if>
480 </#list>
481 </#if>
482 <#return "true" />
483</#function>
484
485<#function isImageEmpty>
486 <#if smallImage.getData()?trim != "" && smallImage.getData()?trim != "null" >
487 <#return "false">
488 </#if>
489 <#return "true" />
490</#function>
491
492
493
494<#macro relatedAssets >
495 <#assign relatedEntries = getRelatedContent() />
496 <#-- <#if relatedEntries?? > -->
497 <#if isRelatedEmpty(relatedEntries) == "false">
498 <div class="structure-area block">
499 <h3 style="color: white;"><@liferay.language key="vs-en-relation"/></h3>
500 <ul class="unstyled">
501 <#list relatedEntries as cur_asset_link>
502 <#assign assetEntry = getAssetEntry(cur_asset_link.entryId2) />
503 <#assign lClassName = "com.liferay.portlet.journal.model.JournalArticle"/>
504 <#assign journalArticle = JournalArticleLocalService.getLatestArticle(assetEntry.getClassPK())/>
505 <li>
506 <a href="#">${journalArticle.getTitle(locale)}</a>
507 </li>
508 </#list>
509 </ul>
510 </div>
511 </#if>
512</#macro>
513
514<#function getAssetEntry entryId>
515 <#assign entry = AssetLocalService.getAssetEntry(entryId) />
516 <#return entry />
517</#function>
518
519<#function getRelatedContent >
520 <#assign lClassName = "com.liferay.portlet.journal.model.JournalArticle"/>
521 <#assign lArticle = JournalArticleLocalService.getArticle(groupId, gArticleId)/>
522 <#assign lPk = lArticle.getResourcePrimKey()/>
523 <#assign lEntry = AssetLocalService.getEntry(lClassName,lPk)/>
524 <#assign lLinks = AssetLinkService.getDirectLinks(lEntry.getEntryId())/>
525 <#return lLinks />
526</#function>