Climate Statistics-Annual 2023
Waste Statistics-Annual 2023
Birth Statistics 2023
Death Statistics 2023
Climate Statistics-Monthly December 2023
Hotel Price Index December 2023
Statistics of Exporters and Importers Registry Third Quarter 2023
SMEs Establishments Statistics 2022
Non-oil Foreign Merchandise Trade Through the Ports of Abu Dhabi Emirate November 2023
Biodiversity and Protected Area Statistics 2022
Banks Statistics Third Quarter 2023
Environmental Health And Incidents Table-Annual 2023
Air Quality Statistics Fourth Quarter 2023
Securities Market Statistics Table 2023
Air Quality Annual Summary Report Abu Dhabi 2022
Oil Prices Table 2023
Industrial Production Index Third Quarter 2023
Producer Price Index Third Quarter 2023
Construction Cost Index Third Quarter 2023
SMEs Establishments Statistics 2021
Climate Statistics November 2023
Consumer Price Index November 2023
Hotel Price Index November 2023
The following has evaluated to null or missing:
==> themeIconId [in template "20098#20124#2513884" at line 95, column 60]
----
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: ${themeIconId} [in template "20098#20124#2513884" at line 95, column 58]
----
1<div data-analytics-asset-type="document"
2 data-analytics-asset-id="publications-downloaded"
3 data-analytics-asset-title="Publications Downloaded"
4 data-analytics-asset-action="download">
5
6<#assign catLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")
7 JournalArticleService=serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")
8 resourcePrimKey=JournalArticleService.getArticleResourcePrimKey(groupId, .vars['reserved-article-id'].data)
9 articleCatNames=catLocalService.getCategories("com.liferay.journal.model.JournalArticle", resourcePrimKey)
10 dlFileEntryService=serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService')
11 assetVocabularyLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")
12 dlAppLocalServiceUtil=staticUtil["com.liferay.document.library.kernel.service.DLAppLocalServiceUtil"]
13 dlUtil=staticUtil["com.liferay.document.library.kernel.util.DLUtil"]
14 statisticVocabulary=assetVocabularyLocalService.getGroupVocabulary(groupId?long,"statistics")
15 assetCategoryPropService=serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService") />
16 <#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
17
18
19<#assign journalArticleTitle=.vars['reserved-article-title'].data />
20
21<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
22<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
23
24<#-- The structure field wrapper does not expose getData to "??", so call it directly. -->
25<#assign publicationNoteHtml = "" />
26<#attempt>
27 <#assign publicationNoteHtml = (.vars['publicationNote'].getData())!"" />
28<#recover>
29</#attempt>
30<#-- Fall back to the article XML, matching how the Latest Publications portlet reads the note. -->
31<#if !publicationNoteHtml?has_content>
32 <#attempt>
33 <#assign saxReaderUtil = staticUtil["com.liferay.portal.kernel.xml.SAXReaderUtil"] />
34 <#assign noteField = saxReaderUtil.read(journalArticlele.getContent()).selectSingleNode("/root/dynamic-element[@field-reference='publicationNote' or @name='publicationNote']") />
35 <#if noteField??>
36 <#assign noteValue = noteField.selectSingleNode("dynamic-content[@language-id='" + themeDisplay.getLanguageId() + "']")! />
37 <#if noteValue?has_content && noteValue.getText()?trim?has_content>
38 <#assign publicationNoteHtml = noteValue.getText() />
39 <#else>
40 <#list noteField.selectNodes("dynamic-content") as noteContent>
41 <#if noteContent.getText()?trim?has_content>
42 <#assign publicationNoteHtml = noteContent.getText() />
43 <#break>
44 </#if>
45 </#list>
46 </#if>
47 </#if>
48 <#recover>
49 </#attempt>
50</#if>
51<#assign publicationNote = publicationNoteHtml?trim />
52<#-- The rich-text editor saves "<p> </p>" for an emptied field, so check for visible text. -->
53<#assign hasPublicationNote = publicationNote?replace("<[^>]*>", "", "r")?replace(" ", "")?replace("\xA0", "")?trim?has_content />
54<#assign publicationNoteId = "scad-pub-note-" + .vars["reserved-article-id"].data />
55<#assign publicationNoteLabel = (themeDisplay.getLanguageId()!"")?starts_with("ar")?then("ملاحظة المنشور", "Publication note") />
56
57
58<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
59 categoryDisplay="Economic" />
60<#if (articleCatNames?size > 0)>
61 <#list articleCatNames as category>
62 <#if category.parentCategoryId==0>
63 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
64 <#assign assetThemeCategoryId=category.categoryId?long />
65 <#assign
66 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
67 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
68 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
69
70 <#if themeImgId!="0">
71 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
72 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
73 </#if>
74 <#list category.name?split(" ") as catWords>
75 <#assign categoryDisplay = catWords/>
76 <#break>
77 </#list>
78 <#assign categoryDisplay = category.titleCurrentValue/>
79 </#if>
80 </#if>
81 </#list>
82
83 </#if>
84
85
86<#if file_upload.getSiblings()?has_content>
87
88 <#list file_upload.getSiblings() as medias>
89 <#if medias.getData()?has_content >
90
91 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
92 <div class="col-lg-1 p-0 ">
93 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
94 <div class="align-self-center mx-auto d-flex flex-column">
95 <img src="/documents/d/guest/${themeIconId}" height="30">
96 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
97 ${categoryDisplay}
98 </label>
99 </div>
100 </div>
101 </div>
102
103 <div class="col-8">
104 <p class="mb-0 py-3 publication-p">${journalArticleTitle}<#if hasPublicationNote><button type="button" class="scad-pub-note-toggle" aria-expanded="false" aria-controls="${publicationNoteId}" aria-label="${publicationNoteLabel}" title="${publicationNoteLabel}"><svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="m9.708 6.075-3.024.379-.108.502.595.108c.387.093.464.232.38.619l-.975 4.577c-.255 1.183.14 1.74 1.067 1.74.72 0 1.554-.332 1.933-.789l.116-.549c-.263.232-.65.325-.905.325-.363 0-.494-.255-.402-.704zm.091-2.755a1.32 1.32 0 1 1-2.64 0 1.32 1.32 0 0 1 2.64 0"/></svg></button></#if></p>
105 <div class="dates_inside_wrapper">
106
107<div class="dates_inside">
108<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
109
110 <div>
111 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
112 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
113${releaseDate?string("yyyy-MM-dd")}
114 </div>
115 </div>
116 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
117<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
118 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
119 <#if formattedRevDate != "1888-01-01">
120 <div class="dates_inside">
121 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
122
123<div>Revision Date:
124 ${revisionDate?string("yyyy-MM-dd")}
125 </div>
126 </div>
127 </#if>
128
129
130
131
132 </div>
133
134 <#assign articleId = .vars["reserved-article-id"].data?number>
135
136
137
138
139
140 </div>
141
142 <div class="col-3 d-flex align-items-center justify-content-end">
143
144
145 <div class="my-2 right-icons d-flex align-items-center ">
146 <#if file_upload.getSiblings()?has_content>
147 <#list file_upload.getSiblings() as media>
148 <#if media.getData()?has_content>
149
150 <#assign counter=0>
151 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
152 <#if counter==5>
153 <#list mediaDataSplit?split("?") as uuId>
154 <#assign uuid=uuId />
155 <#break>
156 </#list>
157 </#if>
158 <#assign counter=counter+1>
159 </#list>
160 <#if uuid??>
161 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
162 <#assign fileExtension=file.extension>
163 <#assign fileSize = file.size >
164 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
165 <#if fileExtension=="">
166 <#list "${file.fileName}" ?split(".") as extention>
167 <#if extention?is_last>
168 <#assign fileExtension=extention>
169 <#break>
170 </#if>
171 </#list>
172 </#if>
173 <#if media.getData()?has_content>
174
175
176 <#if fileExtension=="pdf" || fileExtension=="PDF">
177 <a class="ml-2" href="${media.getData()}" target="blank"
178 style="order:1" onclick="trackDownload(event, '${file.fileName}')">
179 <li class="list-item list-inline-item d-flex flex-column">
180 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
181 class="d-flex mx-auto align-self-center" />
182 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
183 </li>
184 </a>
185
186 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
187 fileExtension=="xlsx" || fileExtension=="XLSX">
188 <a class="ml-2" href="${media.getData()}" target="blank"
189 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
190 <li class="list-item list-inline-item d-flex flex-column">
191
192 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
193 class="d-flex mx-auto align-self-center" />
194 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
195 </li>
196 </a>
197
198 <#else>
199
200 <a class="ml-2" href="${media.getData()}" target="blank"
201 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
202 <li class="list-item list-inline-item d-flex flex-column">
203
204 <img src="/documents/d/guest/docx-1-"
205 class="d-flex mx-auto align-self-center" style="height:25px;" />
206 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
207
208 </li>
209 </a>
210
211 </#if>
212
213
214 </#if>
215 </#if>
216 </#if>
217 </#list>
218 </#if>
219 </div>
220 </div>
221
222 <#if hasPublicationNote>
223 <div class="scad-pub-note" id="${publicationNoteId}" role="note" hidden>${publicationNote}</div>
224 </#if>
225 </div>
226
227
228
229<#break>
230
231 </#if>
232</#list>
233</#if>
234<style>.dates_inside_wrapper{
235
236display: flex;
237 gap: 5px;
238 align-items: center;
239 font-size: 13px;
240 flex-direction: row;
241 gap: 20px;
242}
243
244.dates_inside {
245
246 display: flex;
247 gap: 5px;
248 align-items: center;
249
250 padding: 4px 10px;
251 color: #616060;
252 border-radius: 5px;
253
254}
255.file-size{padding :5px;}
256.publication-p .scad-pub-note-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:22px;height:22px;min-width:22px;margin:0;margin-inline-start:8px;padding:0;border:0!important;border-radius:50%!important;background:#1a73e8!important;color:#fff!important;font-size:0;line-height:1;vertical-align:-4px;box-shadow:none;cursor:pointer;transition:background-color .15s ease,box-shadow .15s ease}
257.publication-p .scad-pub-note-toggle svg{display:block;width:14px;height:14px;fill:#fff}
258.publication-p .scad-pub-note-toggle:hover,.publication-p .scad-pub-note-toggle[aria-expanded="true"]{background:#1558b0!important}
259.publication-p .scad-pub-note-toggle:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(26,115,232,.35)}
260.scad-pub-note{box-sizing:border-box;flex:0 0 calc(100% - 24px);width:calc(100% - 24px);max-width:calc(100% - 24px);margin:12px;padding:14px 16px;border:1px solid #d6e6fb;border-inline-start:4px solid #297de3;border-radius:8px;background:#f2f8ff;color:#475569;font-size:.85rem;line-height:1.6;text-align:start}
261.scad-pub-note[hidden]{display:none!important}
262.scad-pub-note>:first-child{font-weight:700;color:#0f172a}
263.scad-pub-note p{margin:0 0 8px}
264.scad-pub-note>:last-child{margin-bottom:0}</style>
265<#if hasPublicationNote>
266<script>
267(function () {
268 if (window.scadPubNoteToggleBound) {
269 return;
270 }
271
272 window.scadPubNoteToggleBound = true;
273
274 document.addEventListener('click', function (event) {
275 var button = event.target.closest && event.target.closest('.scad-pub-note-toggle');
276
277 if (!button) {
278 return;
279 }
280
281 var note = document.getElementById(button.getAttribute('aria-controls'));
282
283 if (!note) {
284 return;
285 }
286
287 var open = button.getAttribute('aria-expanded') !== 'true';
288
289 button.setAttribute('aria-expanded', String(open));
290 note.hidden = !open;
291 });
292})();
293</script>
294</#if>
295<script>
296<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
297<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
298var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
299
300// Convert the string into a Date object
301var date = new Date(dateString);
302
303// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
304var formattedDate = date.toLocaleDateString('en-GB', {
305 day: '2-digit',
306 month: 'short',
307 year: 'numeric'
308});
309
310// Set the formatted date into the HTML
311document.querySelector('.publications-display').innerHTML = formattedDate;
312function trackDownload(event, fileName) {
313 console.log("INSIDE TRACKING DOWNLOADS");
314
315 // Check if fileName is correctly passed
316 if (fileName) {
317 console.log("File Name: " + fileName);
318 Analytics.track('trackPublicationDownloads', {
319 'fileName': fileName
320 });
321 } else {
322 console.log("Error: File name is missing or incorrect.");
323 }
324
325 console.log("INSIDE TRACKER");
326}
327</script>
Non-oil Foreign Merchandise Trade Through the Ports of Abu Dhabi Emirate October 2023
Social Aids Table 2022
Air Quality Statistics Third Quarter 2023
Non-oil Foreign Merchandise Trade Through the Ports of Abu Dhabi Emirate September 2023
Banks Statistics Second Quarter 2023
Death Statistics 2022
Health Statistics 2022
Banks Statistics First Quarter 2023
Death Statistics 2021
Climate Statistics April 2023
The following has evaluated to null or missing:
==> themeIconId [in template "20098#20124#2513884" at line 95, column 60]
----
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: ${themeIconId} [in template "20098#20124#2513884" at line 95, column 58]
----
1<div data-analytics-asset-type="document"
2 data-analytics-asset-id="publications-downloaded"
3 data-analytics-asset-title="Publications Downloaded"
4 data-analytics-asset-action="download">
5
6<#assign catLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")
7 JournalArticleService=serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")
8 resourcePrimKey=JournalArticleService.getArticleResourcePrimKey(groupId, .vars['reserved-article-id'].data)
9 articleCatNames=catLocalService.getCategories("com.liferay.journal.model.JournalArticle", resourcePrimKey)
10 dlFileEntryService=serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService')
11 assetVocabularyLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")
12 dlAppLocalServiceUtil=staticUtil["com.liferay.document.library.kernel.service.DLAppLocalServiceUtil"]
13 dlUtil=staticUtil["com.liferay.document.library.kernel.util.DLUtil"]
14 statisticVocabulary=assetVocabularyLocalService.getGroupVocabulary(groupId?long,"statistics")
15 assetCategoryPropService=serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService") />
16 <#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
17
18
19<#assign journalArticleTitle=.vars['reserved-article-title'].data />
20
21<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
22<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
23
24<#-- The structure field wrapper does not expose getData to "??", so call it directly. -->
25<#assign publicationNoteHtml = "" />
26<#attempt>
27 <#assign publicationNoteHtml = (.vars['publicationNote'].getData())!"" />
28<#recover>
29</#attempt>
30<#-- Fall back to the article XML, matching how the Latest Publications portlet reads the note. -->
31<#if !publicationNoteHtml?has_content>
32 <#attempt>
33 <#assign saxReaderUtil = staticUtil["com.liferay.portal.kernel.xml.SAXReaderUtil"] />
34 <#assign noteField = saxReaderUtil.read(journalArticlele.getContent()).selectSingleNode("/root/dynamic-element[@field-reference='publicationNote' or @name='publicationNote']") />
35 <#if noteField??>
36 <#assign noteValue = noteField.selectSingleNode("dynamic-content[@language-id='" + themeDisplay.getLanguageId() + "']")! />
37 <#if noteValue?has_content && noteValue.getText()?trim?has_content>
38 <#assign publicationNoteHtml = noteValue.getText() />
39 <#else>
40 <#list noteField.selectNodes("dynamic-content") as noteContent>
41 <#if noteContent.getText()?trim?has_content>
42 <#assign publicationNoteHtml = noteContent.getText() />
43 <#break>
44 </#if>
45 </#list>
46 </#if>
47 </#if>
48 <#recover>
49 </#attempt>
50</#if>
51<#assign publicationNote = publicationNoteHtml?trim />
52<#-- The rich-text editor saves "<p> </p>" for an emptied field, so check for visible text. -->
53<#assign hasPublicationNote = publicationNote?replace("<[^>]*>", "", "r")?replace(" ", "")?replace("\xA0", "")?trim?has_content />
54<#assign publicationNoteId = "scad-pub-note-" + .vars["reserved-article-id"].data />
55<#assign publicationNoteLabel = (themeDisplay.getLanguageId()!"")?starts_with("ar")?then("ملاحظة المنشور", "Publication note") />
56
57
58<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
59 categoryDisplay="Economic" />
60<#if (articleCatNames?size > 0)>
61 <#list articleCatNames as category>
62 <#if category.parentCategoryId==0>
63 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
64 <#assign assetThemeCategoryId=category.categoryId?long />
65 <#assign
66 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
67 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
68 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
69
70 <#if themeImgId!="0">
71 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
72 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
73 </#if>
74 <#list category.name?split(" ") as catWords>
75 <#assign categoryDisplay = catWords/>
76 <#break>
77 </#list>
78 <#assign categoryDisplay = category.titleCurrentValue/>
79 </#if>
80 </#if>
81 </#list>
82
83 </#if>
84
85
86<#if file_upload.getSiblings()?has_content>
87
88 <#list file_upload.getSiblings() as medias>
89 <#if medias.getData()?has_content >
90
91 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
92 <div class="col-lg-1 p-0 ">
93 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
94 <div class="align-self-center mx-auto d-flex flex-column">
95 <img src="/documents/d/guest/${themeIconId}" height="30">
96 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
97 ${categoryDisplay}
98 </label>
99 </div>
100 </div>
101 </div>
102
103 <div class="col-8">
104 <p class="mb-0 py-3 publication-p">${journalArticleTitle}<#if hasPublicationNote><button type="button" class="scad-pub-note-toggle" aria-expanded="false" aria-controls="${publicationNoteId}" aria-label="${publicationNoteLabel}" title="${publicationNoteLabel}"><svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="m9.708 6.075-3.024.379-.108.502.595.108c.387.093.464.232.38.619l-.975 4.577c-.255 1.183.14 1.74 1.067 1.74.72 0 1.554-.332 1.933-.789l.116-.549c-.263.232-.65.325-.905.325-.363 0-.494-.255-.402-.704zm.091-2.755a1.32 1.32 0 1 1-2.64 0 1.32 1.32 0 0 1 2.64 0"/></svg></button></#if></p>
105 <div class="dates_inside_wrapper">
106
107<div class="dates_inside">
108<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
109
110 <div>
111 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
112 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
113${releaseDate?string("yyyy-MM-dd")}
114 </div>
115 </div>
116 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
117<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
118 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
119 <#if formattedRevDate != "1888-01-01">
120 <div class="dates_inside">
121 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
122
123<div>Revision Date:
124 ${revisionDate?string("yyyy-MM-dd")}
125 </div>
126 </div>
127 </#if>
128
129
130
131
132 </div>
133
134 <#assign articleId = .vars["reserved-article-id"].data?number>
135
136
137
138
139
140 </div>
141
142 <div class="col-3 d-flex align-items-center justify-content-end">
143
144
145 <div class="my-2 right-icons d-flex align-items-center ">
146 <#if file_upload.getSiblings()?has_content>
147 <#list file_upload.getSiblings() as media>
148 <#if media.getData()?has_content>
149
150 <#assign counter=0>
151 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
152 <#if counter==5>
153 <#list mediaDataSplit?split("?") as uuId>
154 <#assign uuid=uuId />
155 <#break>
156 </#list>
157 </#if>
158 <#assign counter=counter+1>
159 </#list>
160 <#if uuid??>
161 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
162 <#assign fileExtension=file.extension>
163 <#assign fileSize = file.size >
164 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
165 <#if fileExtension=="">
166 <#list "${file.fileName}" ?split(".") as extention>
167 <#if extention?is_last>
168 <#assign fileExtension=extention>
169 <#break>
170 </#if>
171 </#list>
172 </#if>
173 <#if media.getData()?has_content>
174
175
176 <#if fileExtension=="pdf" || fileExtension=="PDF">
177 <a class="ml-2" href="${media.getData()}" target="blank"
178 style="order:1" onclick="trackDownload(event, '${file.fileName}')">
179 <li class="list-item list-inline-item d-flex flex-column">
180 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
181 class="d-flex mx-auto align-self-center" />
182 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
183 </li>
184 </a>
185
186 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
187 fileExtension=="xlsx" || fileExtension=="XLSX">
188 <a class="ml-2" href="${media.getData()}" target="blank"
189 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
190 <li class="list-item list-inline-item d-flex flex-column">
191
192 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
193 class="d-flex mx-auto align-self-center" />
194 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
195 </li>
196 </a>
197
198 <#else>
199
200 <a class="ml-2" href="${media.getData()}" target="blank"
201 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
202 <li class="list-item list-inline-item d-flex flex-column">
203
204 <img src="/documents/d/guest/docx-1-"
205 class="d-flex mx-auto align-self-center" style="height:25px;" />
206 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
207
208 </li>
209 </a>
210
211 </#if>
212
213
214 </#if>
215 </#if>
216 </#if>
217 </#list>
218 </#if>
219 </div>
220 </div>
221
222 <#if hasPublicationNote>
223 <div class="scad-pub-note" id="${publicationNoteId}" role="note" hidden>${publicationNote}</div>
224 </#if>
225 </div>
226
227
228
229<#break>
230
231 </#if>
232</#list>
233</#if>
234<style>.dates_inside_wrapper{
235
236display: flex;
237 gap: 5px;
238 align-items: center;
239 font-size: 13px;
240 flex-direction: row;
241 gap: 20px;
242}
243
244.dates_inside {
245
246 display: flex;
247 gap: 5px;
248 align-items: center;
249
250 padding: 4px 10px;
251 color: #616060;
252 border-radius: 5px;
253
254}
255.file-size{padding :5px;}
256.publication-p .scad-pub-note-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:22px;height:22px;min-width:22px;margin:0;margin-inline-start:8px;padding:0;border:0!important;border-radius:50%!important;background:#1a73e8!important;color:#fff!important;font-size:0;line-height:1;vertical-align:-4px;box-shadow:none;cursor:pointer;transition:background-color .15s ease,box-shadow .15s ease}
257.publication-p .scad-pub-note-toggle svg{display:block;width:14px;height:14px;fill:#fff}
258.publication-p .scad-pub-note-toggle:hover,.publication-p .scad-pub-note-toggle[aria-expanded="true"]{background:#1558b0!important}
259.publication-p .scad-pub-note-toggle:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(26,115,232,.35)}
260.scad-pub-note{box-sizing:border-box;flex:0 0 calc(100% - 24px);width:calc(100% - 24px);max-width:calc(100% - 24px);margin:12px;padding:14px 16px;border:1px solid #d6e6fb;border-inline-start:4px solid #297de3;border-radius:8px;background:#f2f8ff;color:#475569;font-size:.85rem;line-height:1.6;text-align:start}
261.scad-pub-note[hidden]{display:none!important}
262.scad-pub-note>:first-child{font-weight:700;color:#0f172a}
263.scad-pub-note p{margin:0 0 8px}
264.scad-pub-note>:last-child{margin-bottom:0}</style>
265<#if hasPublicationNote>
266<script>
267(function () {
268 if (window.scadPubNoteToggleBound) {
269 return;
270 }
271
272 window.scadPubNoteToggleBound = true;
273
274 document.addEventListener('click', function (event) {
275 var button = event.target.closest && event.target.closest('.scad-pub-note-toggle');
276
277 if (!button) {
278 return;
279 }
280
281 var note = document.getElementById(button.getAttribute('aria-controls'));
282
283 if (!note) {
284 return;
285 }
286
287 var open = button.getAttribute('aria-expanded') !== 'true';
288
289 button.setAttribute('aria-expanded', String(open));
290 note.hidden = !open;
291 });
292})();
293</script>
294</#if>
295<script>
296<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
297<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
298var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
299
300// Convert the string into a Date object
301var date = new Date(dateString);
302
303// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
304var formattedDate = date.toLocaleDateString('en-GB', {
305 day: '2-digit',
306 month: 'short',
307 year: 'numeric'
308});
309
310// Set the formatted date into the HTML
311document.querySelector('.publications-display').innerHTML = formattedDate;
312function trackDownload(event, fileName) {
313 console.log("INSIDE TRACKING DOWNLOADS");
314
315 // Check if fileName is correctly passed
316 if (fileName) {
317 console.log("File Name: " + fileName);
318 Analytics.track('trackPublicationDownloads', {
319 'fileName': fileName
320 });
321 } else {
322 console.log("Error: File name is missing or incorrect.");
323 }
324
325 console.log("INSIDE TRACKER");
326}
327</script>
Non-oil Foreign Merchandise Trade Through the Ports of Abu Dhabi Emirate August 2023
Hotel Price Index September 2023
The following has evaluated to null or missing:
==> themeIconId [in template "20098#20124#2513884" at line 95, column 60]
----
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: ${themeIconId} [in template "20098#20124#2513884" at line 95, column 58]
----
1<div data-analytics-asset-type="document"
2 data-analytics-asset-id="publications-downloaded"
3 data-analytics-asset-title="Publications Downloaded"
4 data-analytics-asset-action="download">
5
6<#assign catLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")
7 JournalArticleService=serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")
8 resourcePrimKey=JournalArticleService.getArticleResourcePrimKey(groupId, .vars['reserved-article-id'].data)
9 articleCatNames=catLocalService.getCategories("com.liferay.journal.model.JournalArticle", resourcePrimKey)
10 dlFileEntryService=serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService')
11 assetVocabularyLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")
12 dlAppLocalServiceUtil=staticUtil["com.liferay.document.library.kernel.service.DLAppLocalServiceUtil"]
13 dlUtil=staticUtil["com.liferay.document.library.kernel.util.DLUtil"]
14 statisticVocabulary=assetVocabularyLocalService.getGroupVocabulary(groupId?long,"statistics")
15 assetCategoryPropService=serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService") />
16 <#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
17
18
19<#assign journalArticleTitle=.vars['reserved-article-title'].data />
20
21<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
22<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
23
24<#-- The structure field wrapper does not expose getData to "??", so call it directly. -->
25<#assign publicationNoteHtml = "" />
26<#attempt>
27 <#assign publicationNoteHtml = (.vars['publicationNote'].getData())!"" />
28<#recover>
29</#attempt>
30<#-- Fall back to the article XML, matching how the Latest Publications portlet reads the note. -->
31<#if !publicationNoteHtml?has_content>
32 <#attempt>
33 <#assign saxReaderUtil = staticUtil["com.liferay.portal.kernel.xml.SAXReaderUtil"] />
34 <#assign noteField = saxReaderUtil.read(journalArticlele.getContent()).selectSingleNode("/root/dynamic-element[@field-reference='publicationNote' or @name='publicationNote']") />
35 <#if noteField??>
36 <#assign noteValue = noteField.selectSingleNode("dynamic-content[@language-id='" + themeDisplay.getLanguageId() + "']")! />
37 <#if noteValue?has_content && noteValue.getText()?trim?has_content>
38 <#assign publicationNoteHtml = noteValue.getText() />
39 <#else>
40 <#list noteField.selectNodes("dynamic-content") as noteContent>
41 <#if noteContent.getText()?trim?has_content>
42 <#assign publicationNoteHtml = noteContent.getText() />
43 <#break>
44 </#if>
45 </#list>
46 </#if>
47 </#if>
48 <#recover>
49 </#attempt>
50</#if>
51<#assign publicationNote = publicationNoteHtml?trim />
52<#-- The rich-text editor saves "<p> </p>" for an emptied field, so check for visible text. -->
53<#assign hasPublicationNote = publicationNote?replace("<[^>]*>", "", "r")?replace(" ", "")?replace("\xA0", "")?trim?has_content />
54<#assign publicationNoteId = "scad-pub-note-" + .vars["reserved-article-id"].data />
55<#assign publicationNoteLabel = (themeDisplay.getLanguageId()!"")?starts_with("ar")?then("ملاحظة المنشور", "Publication note") />
56
57
58<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
59 categoryDisplay="Economic" />
60<#if (articleCatNames?size > 0)>
61 <#list articleCatNames as category>
62 <#if category.parentCategoryId==0>
63 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
64 <#assign assetThemeCategoryId=category.categoryId?long />
65 <#assign
66 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
67 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
68 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
69
70 <#if themeImgId!="0">
71 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
72 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
73 </#if>
74 <#list category.name?split(" ") as catWords>
75 <#assign categoryDisplay = catWords/>
76 <#break>
77 </#list>
78 <#assign categoryDisplay = category.titleCurrentValue/>
79 </#if>
80 </#if>
81 </#list>
82
83 </#if>
84
85
86<#if file_upload.getSiblings()?has_content>
87
88 <#list file_upload.getSiblings() as medias>
89 <#if medias.getData()?has_content >
90
91 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
92 <div class="col-lg-1 p-0 ">
93 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
94 <div class="align-self-center mx-auto d-flex flex-column">
95 <img src="/documents/d/guest/${themeIconId}" height="30">
96 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
97 ${categoryDisplay}
98 </label>
99 </div>
100 </div>
101 </div>
102
103 <div class="col-8">
104 <p class="mb-0 py-3 publication-p">${journalArticleTitle}<#if hasPublicationNote><button type="button" class="scad-pub-note-toggle" aria-expanded="false" aria-controls="${publicationNoteId}" aria-label="${publicationNoteLabel}" title="${publicationNoteLabel}"><svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="m9.708 6.075-3.024.379-.108.502.595.108c.387.093.464.232.38.619l-.975 4.577c-.255 1.183.14 1.74 1.067 1.74.72 0 1.554-.332 1.933-.789l.116-.549c-.263.232-.65.325-.905.325-.363 0-.494-.255-.402-.704zm.091-2.755a1.32 1.32 0 1 1-2.64 0 1.32 1.32 0 0 1 2.64 0"/></svg></button></#if></p>
105 <div class="dates_inside_wrapper">
106
107<div class="dates_inside">
108<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
109
110 <div>
111 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
112 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
113${releaseDate?string("yyyy-MM-dd")}
114 </div>
115 </div>
116 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
117<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
118 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
119 <#if formattedRevDate != "1888-01-01">
120 <div class="dates_inside">
121 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
122
123<div>Revision Date:
124 ${revisionDate?string("yyyy-MM-dd")}
125 </div>
126 </div>
127 </#if>
128
129
130
131
132 </div>
133
134 <#assign articleId = .vars["reserved-article-id"].data?number>
135
136
137
138
139
140 </div>
141
142 <div class="col-3 d-flex align-items-center justify-content-end">
143
144
145 <div class="my-2 right-icons d-flex align-items-center ">
146 <#if file_upload.getSiblings()?has_content>
147 <#list file_upload.getSiblings() as media>
148 <#if media.getData()?has_content>
149
150 <#assign counter=0>
151 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
152 <#if counter==5>
153 <#list mediaDataSplit?split("?") as uuId>
154 <#assign uuid=uuId />
155 <#break>
156 </#list>
157 </#if>
158 <#assign counter=counter+1>
159 </#list>
160 <#if uuid??>
161 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
162 <#assign fileExtension=file.extension>
163 <#assign fileSize = file.size >
164 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
165 <#if fileExtension=="">
166 <#list "${file.fileName}" ?split(".") as extention>
167 <#if extention?is_last>
168 <#assign fileExtension=extention>
169 <#break>
170 </#if>
171 </#list>
172 </#if>
173 <#if media.getData()?has_content>
174
175
176 <#if fileExtension=="pdf" || fileExtension=="PDF">
177 <a class="ml-2" href="${media.getData()}" target="blank"
178 style="order:1" onclick="trackDownload(event, '${file.fileName}')">
179 <li class="list-item list-inline-item d-flex flex-column">
180 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
181 class="d-flex mx-auto align-self-center" />
182 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
183 </li>
184 </a>
185
186 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
187 fileExtension=="xlsx" || fileExtension=="XLSX">
188 <a class="ml-2" href="${media.getData()}" target="blank"
189 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
190 <li class="list-item list-inline-item d-flex flex-column">
191
192 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
193 class="d-flex mx-auto align-self-center" />
194 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
195 </li>
196 </a>
197
198 <#else>
199
200 <a class="ml-2" href="${media.getData()}" target="blank"
201 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
202 <li class="list-item list-inline-item d-flex flex-column">
203
204 <img src="/documents/d/guest/docx-1-"
205 class="d-flex mx-auto align-self-center" style="height:25px;" />
206 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
207
208 </li>
209 </a>
210
211 </#if>
212
213
214 </#if>
215 </#if>
216 </#if>
217 </#list>
218 </#if>
219 </div>
220 </div>
221
222 <#if hasPublicationNote>
223 <div class="scad-pub-note" id="${publicationNoteId}" role="note" hidden>${publicationNote}</div>
224 </#if>
225 </div>
226
227
228
229<#break>
230
231 </#if>
232</#list>
233</#if>
234<style>.dates_inside_wrapper{
235
236display: flex;
237 gap: 5px;
238 align-items: center;
239 font-size: 13px;
240 flex-direction: row;
241 gap: 20px;
242}
243
244.dates_inside {
245
246 display: flex;
247 gap: 5px;
248 align-items: center;
249
250 padding: 4px 10px;
251 color: #616060;
252 border-radius: 5px;
253
254}
255.file-size{padding :5px;}
256.publication-p .scad-pub-note-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:22px;height:22px;min-width:22px;margin:0;margin-inline-start:8px;padding:0;border:0!important;border-radius:50%!important;background:#1a73e8!important;color:#fff!important;font-size:0;line-height:1;vertical-align:-4px;box-shadow:none;cursor:pointer;transition:background-color .15s ease,box-shadow .15s ease}
257.publication-p .scad-pub-note-toggle svg{display:block;width:14px;height:14px;fill:#fff}
258.publication-p .scad-pub-note-toggle:hover,.publication-p .scad-pub-note-toggle[aria-expanded="true"]{background:#1558b0!important}
259.publication-p .scad-pub-note-toggle:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(26,115,232,.35)}
260.scad-pub-note{box-sizing:border-box;flex:0 0 calc(100% - 24px);width:calc(100% - 24px);max-width:calc(100% - 24px);margin:12px;padding:14px 16px;border:1px solid #d6e6fb;border-inline-start:4px solid #297de3;border-radius:8px;background:#f2f8ff;color:#475569;font-size:.85rem;line-height:1.6;text-align:start}
261.scad-pub-note[hidden]{display:none!important}
262.scad-pub-note>:first-child{font-weight:700;color:#0f172a}
263.scad-pub-note p{margin:0 0 8px}
264.scad-pub-note>:last-child{margin-bottom:0}</style>
265<#if hasPublicationNote>
266<script>
267(function () {
268 if (window.scadPubNoteToggleBound) {
269 return;
270 }
271
272 window.scadPubNoteToggleBound = true;
273
274 document.addEventListener('click', function (event) {
275 var button = event.target.closest && event.target.closest('.scad-pub-note-toggle');
276
277 if (!button) {
278 return;
279 }
280
281 var note = document.getElementById(button.getAttribute('aria-controls'));
282
283 if (!note) {
284 return;
285 }
286
287 var open = button.getAttribute('aria-expanded') !== 'true';
288
289 button.setAttribute('aria-expanded', String(open));
290 note.hidden = !open;
291 });
292})();
293</script>
294</#if>
295<script>
296<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
297<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
298var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
299
300// Convert the string into a Date object
301var date = new Date(dateString);
302
303// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
304var formattedDate = date.toLocaleDateString('en-GB', {
305 day: '2-digit',
306 month: 'short',
307 year: 'numeric'
308});
309
310// Set the formatted date into the HTML
311document.querySelector('.publications-display').innerHTML = formattedDate;
312function trackDownload(event, fileName) {
313 console.log("INSIDE TRACKING DOWNLOADS");
314
315 // Check if fileName is correctly passed
316 if (fileName) {
317 console.log("File Name: " + fileName);
318 Analytics.track('trackPublicationDownloads', {
319 'fileName': fileName
320 });
321 } else {
322 console.log("Error: File name is missing or incorrect.");
323 }
324
325 console.log("INSIDE TRACKER");
326}
327</script>
Statistics of Exporters and Importers Registry Second Quarter 2023
Did you find this content useful?
Share your feedback with us so we can improve your experience.