An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
An error occurred while processing the template.
The following has evaluated to null or missing:
==> stat [in template "20098#20124#2513884" at line 20, column 27]
----
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 articleTitleEn = stat.getTitl... [in template "20098#20124#2513884" at line 20, column 1]
----
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<#assign articleTitleEn = stat.getTitle("en_US")!journalArticleTitle />
21 <#assign articleTitleAr = stat.getTitle("ar_SA")!journalArticleTitle />
22 <#assign currentUserScreenName = themeDisplay.getUser().getScreenName()!"" />
23
24<#assign journalArticlele = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
25<#assign journalArticleDisplayDate = journalArticlele.getExpandoBridge().getAttribute("UIIssueDate")/>
26
27
28<#assign themeColor="d29c4b" imgUrl="${themeDisplay.getPathThemeImages()}/publications/005.jpg"
29 categoryDisplay="Economic" />
30<#if (articleCatNames?size > 0)>
31 <#list articleCatNames as category>
32 <#if category.parentCategoryId==0>
33 <#if category.getVocabularyId()==statisticVocabulary.getVocabularyId()>
34 <#assign assetThemeCategoryId=category.categoryId?long />
35 <#assign
36 themeColor=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_color").getValue()
37 themeIconId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"theme_icon_id").getValue()
38 themeImgId=assetCategoryPropService.getCategoryProperty(assetThemeCategoryId,"portfolio-image").getValue() />
39
40 <#if themeImgId!="0">
41 <#assign imgDlFile=dlAppLocalServiceUtil.getFileEntry(themeImgId?number)
42 imgUrl=dlUtil.getPreviewURL(imgDlFile, imgDlFile.getFileVersion(), themeDisplay, '' ) />
43 </#if>
44 <#list category.name?split(" ") as catWords>
45 <#assign categoryDisplay = catWords/>
46 <#break>
47 </#list>
48 <#assign categoryDisplay = category.titleCurrentValue/>
49 </#if>
50 </#if>
51 </#list>
52
53 </#if>
54
55
56<#if file_upload.getSiblings()?has_content>
57
58 <#list file_upload.getSiblings() as medias>
59 <#if medias.getData()?has_content >
60
61 <div class=" row mb-3 mx-0 bg-white d-flex w-100 align-items-center h-100 border rounded">
62 <div class="col-lg-1 p-0 ">
63 <div class="icon d-flex text-center px-2 py-3" style="background: #eee">
64 <div class="align-self-center mx-auto d-flex flex-column">
65 <img src="/documents/d/guest/${themeIconId}" height="30">
66 <label class="small mx-auto mb-0" style="color: #${themeColor} ;">
67 ${categoryDisplay}
68 </label>
69 </div>
70 </div>
71 </div>
72
73 <div class="col-8">
74 <p class="mb-0 py-3 publication-p">${journalArticleTitle}</p>
75 <div class="dates_inside_wrapper">
76
77<div class="dates_inside">
78<img height="16" src="/documents/d/guest/release_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
79
80 <div>
81 Release Date: <#assign releaseArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
82 <#assign releaseDate = releaseArticle.getExpandoBridge().getAttribute("UIIssueDate")/>
83${releaseDate?string("yyyy-MM-dd")}
84 </div>
85 </div>
86 <#assign publicationArticle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
87<#assign revisionDate = publicationArticle.getExpandoBridge().getAttribute("revisionDate")/>
88 <#assign formattedRevDate = revisionDate?string("yyyy-MM-dd")>
89 <#if formattedRevDate != "1888-01-01">
90 <div class="dates_inside">
91 <img height="16" src="/documents/d/guest/revision_icon" class="pe-2" style="filter: invert(1); padding-inline-end: 2px; padding-bottom:3px;">
92
93<div>Revision Date:
94 ${revisionDate?string("yyyy-MM-dd")}
95 </div>
96 </div>
97 </#if>
98
99
100
101
102 </div>
103
104 <#assign articleId = .vars["reserved-article-id"].data?number>
105 <#if .vars['publicationNote']?? && .vars['publicationNote'].getData()?has_content>
106 <div class="dates_inside_wrapper p-1">
107 <img src="/documents/d/guest/information-circle-svgrepo-com" height="20" width="20">
108 ${.vars['publicationNote'].getData()}
109 </div>
110</#if>
111
112
113
114
115 </div>
116
117 <div class="col-3 d-flex align-items-center justify-content-end">
118
119
120 <div class="my-2 right-icons d-flex align-items-center ">
121 <#if file_upload.getSiblings()?has_content>
122 <#list file_upload.getSiblings() as media>
123 <#if media.getData()?has_content>
124
125 <#assign counter=0>
126 <#list "${media.getData()}" ?split("/") as mediaDataSplit>
127 <#if counter==5>
128 <#list mediaDataSplit?split("?") as uuId>
129 <#assign uuid=uuId />
130 <#break>
131 </#list>
132 </#if>
133 <#assign counter=counter+1>
134 </#list>
135 <#if uuid??>
136 <#assign file=dlFileEntryService.getFileEntryByUuidAndGroupId(uuid,groupId)>
137 <#assign fileExtension=file.extension>
138 <#assign fileSize = file.size >
139 <#assign fileSizeInMB = (file.size / 1024 / 1024)?string('0.##')>
140 <#if fileExtension=="">
141 <#list "${file.fileName}" ?split(".") as extention>
142 <#if extention?is_last>
143 <#assign fileExtension=extention>
144 <#break>
145 </#if>
146 </#list>
147 </#if>
148 <#if media.getData()?has_content>
149
150
151 <#if fileExtension=="pdf" || fileExtension=="PDF">
152 <a class="ml-2" href="${media.getData()}" target="blank"
153 style="order:1" onclick="trackDownload(event, '${file.fileName}'); trackPublicationDownload('${articleTitleEn?js_string}', '${articleTitleAr?js_string}', '${media.getData()?js_string}', '${currentUserScreenName?js_string}');">
154 <li class="list-item list-inline-item d-flex flex-column">
155 <img src=${themeDisplay.getPathThemeImages()}/publications/pdf-svgrepo-com.svg
156 class="d-flex mx-auto align-self-center" />
157 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
158 </li>
159 </a>
160
161 <#elseif fileExtension=="xls" || fileExtension=="XLS" ||
162 fileExtension=="xlsx" || fileExtension=="XLSX">
163 <a class="ml-2" href="${media.getData()}" target="blank"
164 style="order:2" onclick="trackDownload(event, '${file.fileName}')">
165 <li class="list-item list-inline-item d-flex flex-column">
166
167 <img src=${themeDisplay.getPathThemeImages()}/publications/excel-svgrepo-com.svg
168 class="d-flex mx-auto align-self-center" />
169 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
170 </li>
171 </a>
172
173 <#else>
174
175 <a class="ml-2" href="${media.getData()}" target="blank"
176 style="order:3" onclick="trackDownload(event, '${file.fileName}')">
177 <li class="list-item list-inline-item d-flex flex-column">
178
179 <img src="/documents/d/guest/docx-1-"
180 class="d-flex mx-auto align-self-center" style="height:25px;" />
181 <small class="text-dark-blue"> ${fileSizeInMB} MB </small>
182
183 </li>
184 </a>
185
186 </#if>
187
188
189 </#if>
190 </#if>
191 </#if>
192 </#list>
193 </#if>
194 </div>
195 </div>
196 </div>
197
198
199
200<#break>
201
202 </#if>
203</#list>
204</#if>
205<style>.dates_inside_wrapper{
206
207display: flex;
208 gap: 5px;
209 align-items: center;
210 font-size: 13px;
211 flex-direction: row;
212 gap: 20px;
213}
214
215.dates_inside {
216
217 display: flex;
218 gap: 5px;
219 align-items: center;
220
221 padding: 4px 10px;
222 color: #616060;
223 border-radius: 5px;
224
225}
226.file-size{padding :5px;}</style>
227<script>
228<#assign JArticleTitle = JournalArticleLocalService.getArticle(groupId, .vars["reserved-article-id"].data) />
229<#assign JDisplayDate = JArticleTitle.getExpandoBridge().getAttribute("UIIssueDate")/>
230var dateString = '${JDisplayDate?string("yyyy-MM-dd")}';
231
232// Convert the string into a Date object
233var date = new Date(dateString);
234
235// Format the date to "dd MMM yyyy" (e.g., "02 Feb 2024")
236var formattedDate = date.toLocaleDateString('en-GB', {
237 day: '2-digit',
238 month: 'short',
239 year: 'numeric'
240});
241
242// Set the formatted date into the HTML
243document.querySelector('.publications-display').innerHTML = formattedDate;
244function trackDownload(event, fileName) {
245 console.log("INSIDE TRACKING DOWNLOADS");
246
247 // Check if fileName is correctly passed
248 if (fileName) {
249 console.log("File Name: " + fileName);
250 Analytics.track('trackPublicationDownloads', {
251 'fileName': fileName
252 });
253 } else {
254 console.log("Error: File name is missing or incorrect.");
255 }
256
257 console.log("INSIDE TRACKER");
258}
259function escapeNonAscii(str) {
260 return str.replace(/[^\x00-\x7F]/g, function(ch) {
261 return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4);
262 });
263}
264function trackPublicationDownload(nameEn, nameAr, fileUrl, createdBy) {
265 var innerPayload = {
266 Name_EN: nameEn,
267 Name_AR: nameAr,
268 PublicationID: 0,
269 CalendarID: 0,
270 URL: fileUrl,
271 CreatedBy: createdBy
272 };
273
274 var outerPayload = {
275 url: 'Publication/InsertPublicationDownload',
276 body: escapeNonAscii(JSON.stringify(innerPayload))
277 };
278
279 try {
280 fetch('/o/communication', {
281 method: 'POST',
282 headers: {
283 'Accept': '*/*',
284 'Content-Type': 'application/json; charset=utf-8'
285 },
286 body: JSON.stringify(outerPayload)
287 });
288 } catch (e) {}
289}
290</script>
Did you find this content useful?
Share your feedback with us so we can improve your experience.