Back Outcome of the 176th session of the European Pharmacopoeia Commission, June 2023

An error occurred while processing the template.
The following has evaluated to null or missing:
==> .vars['surtitre']  [in template "20097#20123#1770048" at line 26, column 10]

----
Tip: It's the final [] step that caused this error, not those before it.
----
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 .vars["surtitre"].getData()?has_c...  [in template "20097#20123#1770048" at line 26, column 5]
----
1<#assign 
2contentId =  .vars['reserved-article-id'].data 
3contentClass = "news-" + contentId 
4/> 
5 
6 
7<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
8<#assign dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"> 
9<#assign originalLocale = locale> 
10<#setting locale = 'en_GB'> 
11<#assign displayDate = .vars['reserved-article-display-date'].data> 
12<#assign modifiedDate = .vars['reserved-article-modified-date'].data> 
13<#assign displayDate = displayDate?datetime("EEE, d MMM yyyy HH:mm:ss Z")> 
14<#assign modifiedDate = modifiedDate?datetime("EEE, d MMM yyyy HH:mm:ss Z")> 
15<#setting locale = originalLocale> 
16 
17<#if .vars['image_library']?? && .vars['image_library'].getData()?has_content > 
18    <#assign imageNews = .vars['image_library'].getData() /> 
19<#elseif .vars['image']?? && .vars['image'].getData()?has_content && .vars['image'].getData()?length != 20 > 
20    <#assign imageNews = .vars['image'].getData() /> 
21<#else> 
22<#assign imageNews = "" /> 
23</#if> 
24 
25<div class="content ${contentClass}"> 
26    <#if .vars['surtitre'].getData()?has_content> 
27    <div class="surtitre">${.vars['surtitre'].getData()}</div> 
28</#if> 
29 
30<#if .vars['introduction']?? && .vars['introduction'].getData()?has_content> 
31<div class="introduction">${.vars['introduction'].getData()}</div> 
32</#if> 
33 
34<#if .vars['origine'].getData()?has_content || .vars['location'].getData()?has_content || .vars['date'].getData()?has_content> 
35 
36<div class="info-content"><span class="square"></span> 
37    <#if .vars['headline']?? && .vars['headline'].getData()?has_content><span class="headline">${languageUtil.get(locale, 'headline')}</span></#if> 
38<#if .vars['origine'].getData()?has_content><span class="origine">${.vars['origine'].getData()}</span></#if> 
39<#if .vars['location'].getData()?has_content><span class="location">${.vars['location'].getData()}</span></#if> 
40<#if .vars['date'].getData()?has_content><span class="date">${.vars['date'].getData()}</span></#if> 
41<ul class="pull-right newstools"> 
42    <li class="diminuer"> 
43        Diminuer la taille du texte 
44    </li> 
45    <li class="augmenter"> 
46        Augmenter la taille du texte 
47    </li> 
48    <li onclick="print();" class="imprimer"> 
49        Imprimer la page 
50    </li> 
51    <li class="imprimerpdf"> 
52        Imprimer en PDF 
53    </li> 
54</ul> 
55</div> 
56 
57</#if> 
58 
59<#if .vars['video_script']?? && .vars['video_script'].getData()?has_content> 
60 
61<div class="video-content"> 
62 
63    ${.vars['video_script'].getData()} 
64 
65    <#if .vars['legende_image'].getData()?has_content><p class="legende">${.vars['legende_image'].getData()}</p></#if> 
66 
67</div> 
68 
69<#elseif imageNews != "" > 
70 
71<div class="image-content"> 
72 
73    <img src="${imageNews}" alt="<#if .vars['legende_image'].getData()?has_content>${.vars['legende_image'].getData()}<#else>${.vars['reserved-article-title'].data}</#if>" /> 
74 
75    <#if .vars['legende_image'].getData()?has_content><p class="legende">${.vars['legende_image'].getData()}</p></#if> 
76 
77</div> 
78 
79</#if> 
80 
81<div class="text">${.vars['content'].getData()}</div> 
82 
83<#if .vars['resource_text']?? && .vars['resource_text'].getData()?has_content && .vars['resource_url']?? && .vars['resource_url'].getData()?has_content><div class="ressource-link"><a href="${.vars['resource_url'].getData()}" class="${.vars['resource_text'].getData()}">${.vars['resource_text'].getData()}</a></div> 
84</#if> 
85 
86<#if .vars['image_gallery_folder']?? && .vars['image_gallery_folder'].getData()?has_content> 
87 
88		<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
89		<#assign themeDisplay = serviceContext.getThemeDisplay()> 
90        <#assign entryLocalService = staticUtil["com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil"]> 
91 
92        <#assign orderByComparatorFactory = staticUtil["com.liferay.portal.kernel.util.OrderByComparatorFactoryUtil"]> 
93        <#assign comp = orderByComparatorFactory.create("DLFileEntry", "fileEntryId", true) /> 
94 
95		<#assign fileList = .vars['image_gallery_folder'].getData()?split("/") /> 
96 
97		<#if fileList[2]?? && fileList[3]??> 
98			<#assign groupId = fileList[2]?number /> 
99			<#assign folderId = fileList[3]?number /> 
100			<#assign entries = entryLocalService.getFileEntries(groupId, folderId, 0, 30, comp)!null /> 
101 
102			<hr> 
103			<h3>${languageUtil.get(locale, "image-gallery")}</h3> 
104 
105			<#if entries?? && entries?has_content> 
106				<div id="gallery${contentId}" class="media-gallery"> 
107					<div class="image-gallery"> 
108						<div class="veil"></div> 
109						<div class="image-container"> 
110							<div class="image-wrapper"> 
111								<div class="image-box"> 
112									<div class="image-control-left"></div> 
113									<div class="image-control-right"></div> 
114									<div class="close">×</div> 
115									<img class="image-loader" src="${themeDisplay.getPathThemeImages()}/progress_bar/loading_animation.gif"/> 
116								</div> 
117							</div> 
118						</div> 
119					</div> 
120					<div class="gallery-thumbnails"> 
121						<#list entries?sort_by(["title"]) as curFileEntry> 
122								<div class="gallery-item"> 
123									<span class="mask"> 
124										<a style="background-image:url('/documents/${curFileEntry.groupId}/${curFileEntry.folderId}/${curFileEntry.title?url('utf-8')?replace("'","")}/${curFileEntry.uuid}?version=${curFileEntry.version}&width=256&height=192')" 
125											alt="${curFileEntry.title}" 
126											title="${curFileEntry.description}" 
127											class="gallery-thumbnail" 
128											href="/documents/${curFileEntry.groupId}/${curFileEntry.folderId}/${curFileEntry.title}/${curFileEntry.uuid}?version=${curFileEntry.version}" > 
129										</a> 
130									</span> 
131								</div> 
132						</#list> 
133					<div class="clearfix"></div> 
134					</div> 
135				</div> 
136			</#if> 
137		</#if> 
138 
139		<style> 
140		.image-title { 
141			display: none; 
142
143		</style> 
144 
145        <script src="https://static.coe.int/libs/common/coe-2014-theme/media-gallery.js"></script> 
146		<script> 
147			jQuery(document).ready(function(){ 
148				jQuery('#gallery${contentId}').mediaGallery(); 
149			}); 
150		</script> 
151 
152	</#if> 
153 
154</div> 
155 
156 
157<#setting locale="en_GB"> 
158<time pubdate="pubdate" class="hidden">${.vars['reserved-article-display-date'].data?datetime("EEE, dd MMM yyyy hh:mm:ss Z")?string("yyyy-MM-dd'T'hh:mm:ss")}</time> 
159 
160<script> 
161    $(function() { 
162        let portletBody = $('.portlet-asset-publisher .${contentClass}').parentsUntil('.portlet-body'); 
163        portletBody.find('.surtitre').insertBefore(portletBody.find('.asset-title')); 
164    }); 
165</script> 
166 
167 
168<#if introduction?has_content> 
169<#assign mdDescription = introduction.getData()> 
170<#else> 
171<#assign mdDescription = stringUtil.shorten(htmlUtil.extractText(content.getData()), 150)> 
172</#if> 
173<#assign mdDescription = stringUtil.replace(mdDescription,'"', '\\"')> 
174 
175<#assign headline = stringUtil.replace(.vars['reserved-article-title'].getData(),'"', '\\"')> 
176<#assign displayDate = stringUtil.replaceLast(displayDate?string(dateFormat),'00',':00')> 
177<#assign modifiedDate = stringUtil.replaceLast(modifiedDate?string(dateFormat),'00',':00')> 
178<#assign image = httpUtil.removeParameter(imageNews, 't')> 
179<#assign image = "${themeDisplay.getPortalURL()}${image}"> 
180<#if imageNews?has_content> 
181    <#assign 
182    imageJson="\"image\": {"+ 
183        "\"@type\": \"ImageObject\","+ 
184        "\"url\": \"${themeDisplay.getPortalURL()}${httpUtil.removeParameter(imageNews, 't')}\","+ 
185        "\"height\": 489,"+ 
186        "\"width\": 870"+ 
187      "}," 
188    /> 
189<#else> 
190    <#assign imageJson="" /> 
191</#if> 
192<script type="application/ld+json"> 
193
194        "@context": "http://schema.org", 
195        "@type": "NewsArticle", 
196        "mainEntityOfPage":{ 
197            "@type":"WebPage", 
198            "@id":"${currentUrl}" 
199        }, 
200        "headline": "${headline}", 
201        ${imageJson} 
202        "datePublished": "${displayDate}", 
203        "dateModified": "${modifiedDate}", 
204        "author": { 
205            "@type": "Organization", 
206            "name": "Council of Europe" 
207        }, 
208        "publisher": { 
209            "@type": "Organization", 
210            "name": "Council of Europe", 
211            "logo": { 
212                "@type": "ImageObject", 
213                "url": "https://static.coe.int/pics/logos/desktop/logo-coe-google-news.png", 
214                "width": 78, 
215                "height": 60 
216
217        }, 
218        "description": "${mdDescription}" 
219
220</script> 
221<script> 
222$(function() { 
223    $('.augmenter').click(function() { 
224        $('.content .surtitre, .content .introduction, .content .info-content > span, .content .legende, .content .text, .content .text > *').css({ 
225            'font-size': '+=1px', 
226            'line-height' : '1.2' 
227        }); 
228    }); 
229 
230    $('.diminuer').click(function() { 
231        $('.content .surtitre, .content .introduction, .content .info-content > span, .content .legende, .content .text, .content .text > *').css({ 
232            'font-size': '-=1px', 
233            'line-height' : '1.2' 
234        }); 
235    }); 
236}); 
237</script> 
238 
239<#--------------------------------------> 
240<#------- Load categories in JSON ------> 
241<#--------------------------------------> 
242 
243<#-- Get article primary key --> 
244<#assign JournalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService") /> 
245<#assign articleResourcePK = JournalArticleResourceLocalService.getArticleResourcePrimKey(themeDisplay.getLayout().getGroupId(), contentId) /> 
246 
247<#-- Get article categories --> 
248<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
249<#assign assetCategories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", articleResourcePK) /> 
250 
251<#-- Load required services --> 
252<#assign jsonFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactoryUtil") /> 
253<#assign vocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
254 
255<#-- Get vocabulary ids into a list --> 
256<#assign vocabularyIds = [] /> 
257<#list assetCategories as cat> 
258    <#assign vocabularyId = cat.vocabularyId /> 
259    <#if !vocabularyIds?seq_contains(vocabularyId) > 
260        <#assign vocabularyIds = vocabularyIds + [vocabularyId] /> 
261    </#if> 
262</#list> 
263 
264<#-- Get vocabularies (one SQL request) --> 
265<#assign vocabularies = vocabularyLocalService.getVocabularies(vocabularyIds) /> 
266 
267<#-- Combine vocabularies and categories --> 
268<#assign categories = [] /> 
269<#list assetCategories as cat> 
270    <#assign vocabularyId   = cat.vocabularyId /> 
271 
272    <#list vocabularies as voc> 
273        <#if voc.vocabularyId == vocabularyId > 
274            <#assign catAndVoc = {"vocabularyId": voc.vocabularyId, "vocabularyTitle": voc.title, "vocabularyName": voc.name, "vocabularytitleCurrentValue": voc.titleCurrentValue, "categoryId": cat.categoryId, "categoryTitle": cat.title, "categoryName": cat.name, "categorytitleCurrentValue": cat.titleCurrentValue} /> 
275            <#assign categories = categories + [catAndVoc] /> 
276        </#if> 
277    </#list> 
278</#list> 
279 
280<script> 
281     var assetCategories = ${jsonFactoryUtil.looseSerializeDeep(categories)}; 
282</script>