Total Results : 18124

An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> releaseDate  [in template "11099719610328#20119#556301" at line 12, column 50]

----
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 releaseDate_Data = getterUtil...  [in template "11099719610328#20119#556301" at line 12, column 1]
----
1<#-- Service references --> 
2<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
3<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign DLFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryService") /> 
5<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
6 
7<#-- Fetch article and categories --> 
8<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars["reserved-article-id"].data) /> 
9<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) /> 
10 
11<#-- Extract release date --> 
12<#assign releaseDate_Data = getterUtil.getString(releaseDate.getData()) /> 
13 
14<#-- Defaults --> 
15<#assign tab = 436312 /> 
16<#assign catId = -1 /> 
17<#assign linksExist = false /> 
18<#assign year = "" /> 
19<#assign quarter = "" /> 
20<#assign month = "" /> 
21 
22<#-- Get specific category ID --> 
23<#list categories?sort_by("treePath") as cat> 
24    <#if cat.vocabularyId == 119020> 
25        <#assign catId = cat.categoryId /> 
26    </#if> 
27</#list> 
28 
29<#-- Check for files in publicationFilesLinks --> 
30<#if publicationFilesLinks.getSiblings()?has_content> 
31    <#list publicationFilesLinks.getSiblings() as file> 
32        <#if file.getData()?has_content && file.getData()?trim != ""> 
33            <#assign linksExist = true /> 
34            <#break> 
35        </#if> 
36    </#list> 
37</#if> 
38 
39<#-- Extract period info from categories --> 
40<#if categories?has_content> 
41    <#list categories as category> 
42        <#assign vocab = AssetVocabularyLocalService.fetchAssetVocabulary(category.vocabularyId) /> 
43        <#assign vocabName = vocab.getName()!"" /> 
44        <#assign title = category.getTitle(locale) /> 
45 
46        <#if vocabName == "periodicity"> 
47            <#assign quarter = title /> 
48        <#elseif vocabName == "year"> 
49            <#assign year = title /> 
50        <#elseif vocabName?contains("شهر") || vocabName?contains("quarter")> 
51            <#assign month = title /> 
52        </#if> 
53    </#list> 
54</#if> 
55 
56<#-- Helper to determine file type icon --> 
57<#macro getFileIcon url> 
58    <#assign ext = url?lower_case /> 
59    <#assign fileType = "pdf" /> 
60    <#if ext?contains(".docx") || ext?contains(".doc")> 
61        <#assign fileType = "word" /> 
62    <#elseif ext?contains(".jpeg") || ext?contains(".jpg")> 
63        <#assign fileType = "jpeg" /> 
64    <#elseif ext?contains(".ppt") || ext?contains(".pptx")> 
65        <#assign fileType = "ppt" /> 
66    <#elseif ext?contains(".xlsx") || ext?contains(".csv") || ext?contains(".xls")> 
67        <#assign fileType = "xlsx" /> 
68    </#if> 
69    <i class="dl-file-earmark-${fileType}-icon"></i> 
70</#macro> 
71 
72<#-- Render main card --> 
73<div class="card p-4 my-4"> 
74    <div class="box-body d-flex justify-content-between align-items-center"> 
75        <h3 class="fs-lg fw-700">${.vars["reserved-article-title"].data}</h3> 
76 
77        <div class="d-flex gap-2 align-items-center"> 
78            <#-- Display file links from publicationFilesLinks or fallback to publicationFiles --> 
79            <#assign fileField = linksExist?then(publicationFilesLinks, publicationFiles) /> 
80            <#if fileField.getSiblings()?has_content> 
81                <#list fileField.getSiblings() as file> 
82                    <#if file.getData()?has_content && file.getData()?trim != ""> 
83                        <a href="${file.getData()}" target="_blank"> 
84                            <@getFileIcon url=file.getData() /> 
85                        </a> 
86                    </#if> 
87                </#list> 
88            <#else> 
89
90            </#if> 
91 
92            <#-- View Details button --> 
93            <#if (SectionFieldSet.sectionBody.getData())?? && SectionFieldSet.sectionBody.getData()?trim != ""> 
94                <a class="dl-btn btn-padding-lg btn-secondary"  
95                   href="/web${themeDisplay.getSiteGroup().getFriendlyURL()}/w/${.vars['reserved-article-url-title'].data}?tab=${tab}&category=${catId}"> 
96                    <@liferay.language key="view-details-label" /> 
97                </a> 
98            </#if> 
99        </div> 
100    </div> 
101</div>