حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing:
==> spec  [in template "20099#20135#321193" at line 226, column 69]

----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if (aDateTime?date lte eventDateOfCu...  [in template "20099#20135#321193" at line 226, column 9]
----
1<style> 
2   /* Your existing styles here */ 
3   time.icon { 
4   font-size: 1em; /* change icon size */ 
5   display: block; 
6   position: relative; 
7   width: 112px; 
8   height: 112px; 
9   background-color: #fff; 
10   border-radius: 0.6em; 
11   box-shadow: 0 1px 0 #bdbdbd, 0 2px 0 #fff, 0 3px 0 #bdbdbd, 0 4px 0 #fff, 0 5px 0 #bdbdbd, 0 0 0 1px #bdbdbd; 
12   overflow: hidden; 
13
14   table.dataTable thead th{ 
15   text-align: inherit; 
16
17   table.dataTable thead th:last-child input{ 
18   display:none; 
19
20   table.dataTable thead th:last-child:before, 
21   table.dataTable thead th:last-child:after{ 
22   display:none !important; 
23
24   table.dataTable thead tr:first-child{ 
25   display:none; 
26
27   time.icon * { 
28   display: block; 
29   width: 100%; 
30   font-size: 1em; 
31   font-weight: bold; 
32   font-style: normal; 
33   text-align: center; 
34
35   time.icon strong { 
36   position: absolute; 
37   top: 0; 
38   padding: 0.4em 0; 
39   color: #fff; 
40   background-color: #f68c30; 
41   border-bottom: 1px dashed #d27220; 
42   box-shadow: 0 2px 0 #f68c30; 
43
44   time.icon em { 
45   position: absolute; 
46   bottom: 0.3em; 
47   color: #1f5e97; 
48
49   time.icon span { 
50   font-size: 2.8em; 
51   letter-spacing: -0.05em; 
52   padding-top: 0.8em; 
53   color: #2f2f2f; 
54
55   .upcommingActivityInfo small{ 
56   margin-bottom:6px; 
57   display:inline-block; 
58
59   .upcommingActivity{ 
60   border: 1px solid #cccccc; 
61   box-sizing: border-box; 
62   display: inline-block; 
63   width: 100%; 
64   border-radius: 10px; 
65   padding: 15px; 
66
67   .upcommingActivity .upcommingActivityInfo{ 
68   width:calc(100% - 128px); 
69
70   .owl-carousel-upcomming .owl-item:after{ 
71   display:none; 
72
73   .owl-carousel-upcomming .owl-item{ 
74   padding:1px; 
75
76   <#if locale="ar_SA"> 
77   .owl-carousel-upcomming{ 
78   direction:ltr; 
79
80   .upcommingActivityInfo{ 
81   text-align:right; 
82
83   .upcommingActivity time{ 
84   float:right; 
85   margin-left:16px; 
86
87   .upcommingActivity .upcommingActivityInfo{ 
88   float:left; 
89
90   .owl-carousel-upcomming .owl-dots{ 
91   direction:rtl; 
92
93   .owl-stage-outer .owl-stage .owl-item{ 
94   text-align:left: 
95
96   </#if> 
97   <#if locale="en_US"> 
98   .upcommingActivity time{ 
99   float:left; 
100   margin-right:15px; 
101
102   .upcommingActivity .upcommingActivityInfo{ 
103   float:right; 
104
105   .owl-stage-outer .owl-stage .owl-item{ 
106   text-align:right: 
107
108   .upcommingActivityInfo{ 
109   text-align:left; 
110
111   </#if> 
112   .owl-stage-outer{ 
113   text-align:center; 
114
115   .owl-stage-outer .owl-stage{ 
116   margin:0 auto !important; 
117
118   @media only screen and (max-width: 768px) { 
119   table th:nth-child(3), 
120   table th:nth-child(4){ 
121   display:none; 
122
123   .hideOnMobile{ 
124   display:none; 
125
126
127</style> 
128 
129<script type="application/javascript"> 
130   function validateForm() { 
131     var startDate = document.getElementById("fromDate").value; 
132     var endDate = document.getElementById("toDate").value; 
133     var title = document.getElementById("title").value; 
134     var governorate = document.getElementById("governorate").value; 
135    
136      if(governorate==="" && startDate ==="" && endDate ==="" && title ===""){ 
137      alert("Please enter at least one value"); 
138       return false; 
139
140       
141     // Check if both fields are filled 
142     if (((startDate !== "") && (endDate === "")) || ((startDate === "") && (endDate !== ""))) { 
143       alert("Please enter both start date and end date."); 
144       return false; 
145
146    
147     // Convert the input values to Date objects 
148     var startDateObj = new Date(startDate); 
149     var endDateObj = new Date(endDate); 
150    
151     // Check if the start date is before the end date 
152     if (startDateObj >= endDateObj) { 
153       alert("End date must be greater than start date."); 
154       return false; 
155
156    
157     // Validation passed 
158     return true; 
159
160</script> 
161 
162<script type="application/javascript"> 
163   document.addEventListener("DOMContentLoaded", function () { 
164     const myForm = document.getElementById("searchForm"); 
165     const cancelButton = document.getElementById("cancelButton"); 
166       
167     // Add an event listener to the cancel button 
168     cancelButton.addEventListener("click", function () { 
169       // Clear all the input fields when the cancel button is clicked 
170        const currentURL = window.location.href; 
171        const newUrl = "/activities?spec=1"; 
172         myForm.reset();  
173         if(currentURL.includes('fromDate')){ 
174         window.location.href = newUrl; 
175         }else{ 
176       history.pushState(null, '', newUrl); 
177
178     }); 
179   }); 
180</script> 
181 
182<script> 
183   const dynamicSelect = document.getElementById('governorate'); 
184   const currentURL = window.location.href; 
185      if(currentURL.includes('fromDate')){ 
186     const urlParams = new URLSearchParams(window.location.search); 
187     const governorate = urlParams.get('governorate'); 
188     console.log('governorateParam: '+governorate); 
189     window.onload = (event) =>{ 
190     document.getElementById("governorate").value = governorate;  
191     }; 
192
193</script> 
194 
195<div class="container"> 
196   <span class="title title-large title-bold sds mr-5-dir mt-4"> 
197   <#if locale="ar_SA"> 
198    الأنشطة الحالية 
199   </#if> 
200   <#if locale="en_US"> 
201   Current Activities 
202   </#if> 
203   </span> 
204   <div class="owl-carousel-upcomming owl-carousel owl-theme"> 
205      <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
206      <#list entries as curEntry> 
207      <#if curEntry.getAssetRenderer()?? && curEntry.getAssetRenderer().getArticle()??>  
208        <#assign article = curEntry.getAssetRenderer().getArticle() />  
209        <#assign structKey = article.getDDMStructureKey()/>  
210        <#assign docXml = saxReaderUtil.read(article.getContent())!"" />  
211        <#assign eventDateOfCurrent = docXml.valueOf("//dynamic-element[@name='toDate']/dynamic-content/text()")!""/>  
212        <#assign eventDate = docXml.valueOf("//dynamic-element[@name='date']/dynamic-content/text()")!""/>  
213        <#assign speciality = docXml.valueOf("//dynamic-element[@name='speciality']/dynamic-content/text()")!""/>  
214        <#if request.getParameter("spec")??>  
215            <#assign spec = request.getParameter("spec") /> 
216        </#if>  
217        <#assign eventDateOfCurrent_Data = getterUtil.getString(eventDateOfCurrent)>  
218        <#assign eventDate_Data = getterUtil.getString(eventDate)>  
219        <#if validator.isNotNull(eventDateOfCurrent_Data)>  
220            <#assign eventDateOfCurrent_DataObj = dateUtil.parseDate("yyyy-MM-dd", eventDateOfCurrent_Data, locale)>  
221        </#if>  
222        <#if validator.isNotNull(eventDate_Data)>  
223            <#assign eventDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", eventDate_Data, locale)>  
224        </#if>  
225        <#assign aDateTime = .now?date>  
226        <#if (aDateTime?date lte eventDateOfCurrent_DataObj?date && spec == speciality) >  
227            ${journalArticleLocalService.getArticleContent(article,"326760", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
228        </#if>  
229      </#if>  
230    </#list>  
231</div>  
232</div>  
233 
234<#if locale="ar_SA">  
235    <div class="container mb-5">  
236        <span class="title title-large title-bold sds mr-5-dir mt-4"> جميع الانشطة </span>  
237        <form id="searchForm" onsubmit="return validateForm()" method="get">  
238        <#assign startDate = "">  
239        <#assign endDate = "">  
240        <#assign title = "">  
241        <#assign governorate = "">  
242        <#if themeDisplay.getURLCurrent()?contains("fromDate")>  
243            <#if request.getParameter("fromDate")?? && request.getParameter("fromDate") != "">  
244                <#assign startDate = request.getParameter("fromDate") />  
245            </#if>  
246            <#if request.getParameter("toDate")?? && request.getParameter("toDate") != "">  
247                <#assign endDate = request.getParameter("toDate") />  
248            </#if>  
249            <#if request.getParameter("title")?? && request.getParameter("title") != "">  
250                <#assign title = request.getParameter("title") />  
251            </#if>  
252            <#if request.getParameter("governorate")?? && request.getParameter("governorate") != "">  
253                <#assign governorate = request.getParameter("governorate") />  
254            </#if>  
255        </#if>  
256    <div class="row mt-5"> 
257    <input type="hidden" name="spec" value="${spec!}"> 
258      <div class="col-md-2">  
259        <div class="form-group">  
260            <label>عنوان النشاط</label>  
261            <input id="title" name="title" class="form-control" value="${title!}"> 
262        </div> 
263      </div> 
264      <div class="col-md-2"> 
265        <div class="form-group"> 
266            <label>انعقاد النشاط من</label> 
267            <input id="fromDate" name="fromDate" class="form-control gj-textbox-md-rev newdatepicker01" value="${startDate!}"> 
268        </div> 
269      </div> 
270      <div class="col-md-2"> 
271        <div class="form-group"> 
272            <label>انعقاد النشاط الي</label> 
273            <input id="toDate" name="toDate" class="form-control gj-textbox-md-rev newdatepicker02" value="${endDate!}"> 
274        </div> 
275      </div> 
276      <div class="col-md-2"> 
277        <div class="form-group">  
278            <label>المحافظة</label>  
279            <input id="governorate" name="governorate" class="form-control" value="${governorate!}"> 
280        </div> 
281      </div> 
282          
283      <div class="col-md-2"> 
284         <label class="helper"></label> 
285         <button type="submit" class="btn btn-blue w100" >بحث</button> 
286      </div> 
287      <div class="col-md-2"> 
288         <label class="helper"></label> 
289         <button type="button" class="btn btn-white w100" id="cancelButton">اعادة البحث</button> 
290      </div> 
291      </div> 
292   </form> 
293   <div class="row mt-5"> 
294      <div class="col-md-12 table-responsive"> 
295         <table id="datatable01" class="display" style="width:100%"> 
296            <thead> 
297               <tr> 
298                  <th>عنوان النشاط</th> 
299                  <th>نوع النشاط</th> 
300                  <th>تاريخ بداية أنعقاد النشاط </th> 
301                  <th>تاريخ نهاية أنعقاد النشاط </th> 
302                  <th>المحافظة</th> 
303                  <th>عرض</th> 
304               </tr> 
305            </thead> 
306            <tbody>  
307                <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>  
308                <#list entries as curEntry>  
309                    <#if curEntry.getAssetRenderer()?? && curEntry.getAssetRenderer().getArticle()??>  
310                        <#assign article = curEntry.getAssetRenderer().getArticle() />  
311                        <#assign structKey = article.getDDMStructureKey()/>  
312                        <#assign docXml = saxReaderUtil.read(article.getContent())!"" />  
313                        <#assign document = saxReaderUtil.read(article.getContentByLocale(locale))!"" /> 
314                         
315                        <#-- Get localized title --> 
316                        <#assign eventTitle = article.getTitle(locale)!"" /> 
317                        <#if !eventTitle?has_content> 
318                            <#assign eventTitle = docXml.valueOf("//dynamic-element[@name='title']/dynamic-content[@language-id='ar_SA']/text()")!"" /> 
319                        </#if> 
320                         
321                        <#-- Get localized governorate --> 
322                        <#assign eventGovernorate = docXml.valueOf("//dynamic-element[@name='governorate']/dynamic-content[@language-id='ar_SA']/text()")!"" /> 
323                         
324                        <#assign eventType = docXml.valueOf("//dynamic-element[@name='kind']/dynamic-content/text()")!""/>  
325                        <#assign eventDate = docXml.valueOf("//dynamic-element[@name='date']/dynamic-content/text()")!""/>  
326                        <#assign eventTypeDropdown = docXml.valueOf("//dynamic-element[@name='eventType1']/dynamic-content/text()")!""/>  
327                        <#assign eventDate_Data = getterUtil.getString(eventDate)>  
328                        <#if validator.isNotNull(eventDate_Data)>  
329                            <#assign eventDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", eventDate_Data, locale)>  
330                        </#if>  
331                        <#assign speciality = docXml.valueOf("//dynamic-element[@name='speciality']/dynamic-content/text()")!""/>  
332                        <#if request.getParameter("spec")??>  
333                            <#assign spec = request.getParameter("spec") />  
334                            <#if spec == speciality> 
335                                <#if !themeDisplay.getURLCurrent()?contains("fromDate")>  
336                                    ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
337                                </#if>  
338                                <#if title?has_content && eventTitle?contains(title)>  
339                                    ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
340                                </#if>  
341                                <#if governorate?has_content && eventGovernorate?contains(governorate)>              
342                                    ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
343                                </#if> 
344                                <#if ((startDate?has_content) && eventDate_DateObj?date gte startDate?date("MM/dd/yyyy")) && (eventDate_DateObj?date lte endDate?date("MM/dd/yyyy"))>  
345                                    ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
346                                </#if>  
347                                <#if (kind?has_content) && (eventTypeDropdown == kind)>  
348                                    ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
349                                </#if>  
350                            </#if>  
351                        </#if>  
352                    </#if>  
353                </#list> 
354            </tbody>  
355        </table> 
356    </div> </div> </div> </#if>  
357 
358<#if locale="en_US">  
359    <div class="container mb-5">  
360    <span class="title title-large title-bold sds mr-5-dir mt-4">All Activities </span>  
361    <form id="searchForm" onsubmit="return validateForm()" method="get">  
362    <#assign startDate = "">  
363    <#assign endDate = "">  
364    <#assign title = ""> 
365    <#assign governorate = "">  
366    <#assign kind = "">  
367    <#if themeDisplay.getURLCurrent()?contains("fromDate")> 
368        <#if request.getParameter("fromDate")?? && request.getParameter("fromDate") != ""> 
369            <#assign startDate = request.getParameter("fromDate") />  
370        </#if>  
371        <#if request.getParameter("toDate")?? && request.getParameter("toDate") != "">  
372            <#assign endDate = request.getParameter("toDate") />  
373        </#if>  
374        <#if request.getParameter("title")?? && request.getParameter("title") != ""> 
375            <#assign title = request.getParameter("title") />  
376        </#if>  
377        <#if request.getParameter("governorate")?? && request.getParameter("governorate") != "">  
378            <#assign governorate = request.getParameter("governorate") />  
379        </#if>  
380    </#if>  
381    <div class="row mt-5">  
382        <input type="hidden" name="spec" value="${spec!}"> 
383            <div class="col-md-2"> 
384            <div class="form-group"> 
385                <label>Activity Title</label>  
386                <input id="title" name="title" class="form-control" value="${title!}" placeholder=""> 
387            </div> 
388         </div> 
389         <div class="col-md-2"> 
390            <div class="form-group"> 
391                <label>Activity From</label> 
392                <input id="fromDate" name="fromDate" class="form-control gj-textbox-md-rev newdatepicker01" value="${startDate!}" placeholder=""> 
393            </div> 
394         </div> 
395         <div class="col-md-2"> 
396            <div class="form-group"> 
397                <label>Activity To</label> 
398                <input id="toDate" name="toDate" class="form-control gj-textbox-md-rev newdatepicker02" value="${endDate!}" placeholder=""> 
399            </div> 
400         </div> 
401         <div class="col-md-2"> 
402            <div class="form-group">  
403                <label>Governorate</label>  
404                <input id="governorate" name="governorate" class="form-control" value="${governorate!}"> 
405            </div> 
406         </div> 
407         <div class="col-md-2"> 
408            <label class="helper"></label> 
409            <button type="submit" class="btn btn-blue w100" >Search</button> 
410         </div> 
411         <div class="col-md-2"> 
412            <label class="helper"></label> 
413            <button type="button" class="btn btn-white w100" id="cancelButton">Clear</button> 
414         </div> 
415      </div> 
416   </form> 
417   <div class="row mt-5"> 
418      <div class="col-md-12 table-responsive"> 
419         <table id="datatable01" class="display" style="width:100%"> 
420            <thead> 
421               <tr> 
422                  <th>Activity Title</th> 
423                  <th>Activity Type</th> 
424                  <th>From Activity Date</th> 
425                  <th class="hideOnMobile">To Activity Date</th> 
426                  <th class="hideOnMobile">Governorate</th> 
427                  <th>Show</th> 
428               </tr> 
429            </thead> 
430            <tbody>  
431                <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>  
432                 
433                <#list entries as curEntry>  
434                    <#if curEntry.getAssetRenderer()?? && curEntry.getAssetRenderer().getArticle()??>  
435                        <#assign article = curEntry.getAssetRenderer().getArticle() />  
436                        <#assign structKey = article.getDDMStructureKey()/>  
437                        <#assign docXml = saxReaderUtil.read(article.getContent())!"" />  
438                        <#assign document = saxReaderUtil.read(article.getContentByLocale(locale))!"" /> 
439                         
440                        <#-- Get localized title --> 
441                        <#assign eventTitle = article.getTitle(locale)!"" /> 
442                        <#if !eventTitle?has_content> 
443                            <#assign eventTitle = docXml.valueOf("//dynamic-element[@name='title']/dynamic-content[@language-id='en_US']/text()")!"" /> 
444                        </#if> 
445                         
446                        <#-- Get localized governorate --> 
447                        <#assign eventGovernorate = docXml.valueOf("//dynamic-element[@name='governorate']/dynamic-content[@language-id='en_US']/text()")!"" /> 
448                         
449                        <#assign eventType = docXml.valueOf("//dynamic-element[@name='kind']/dynamic-content/text()")!""/>  
450                        <#assign eventDate = docXml.valueOf("//dynamic-element[@name='date']/dynamic-content/text()")!""/>  
451                        <#assign eventTypeDropdown = docXml.valueOf("//dynamic-element[@name='eventType1']/dynamic-content/text()")!""/>  
452                        <#assign eventDate_Data = getterUtil.getString(eventDate)>  
453                        <#if validator.isNotNull(eventDate_Data)>  
454                            <#assign eventDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", eventDate_Data, locale)>  
455                        </#if>  
456                        <#assign speciality = docXml.valueOf("//dynamic-element[@name='speciality']/dynamic-content/text()")!""/>  
457                        <#if request.getParameter("spec")??>  
458                            <#assign spec = request.getParameter("spec") />  
459                            <#if spec == speciality>  
460                                <#if !themeDisplay.getURLCurrent()?contains("fromDate")>  
461                                    ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
462                                </#if>  
463                                <#if title?has_content> 
464                                    <script> 
465                                        console.log("Search Title: '${title}'"); 
466                                        console.log("Content Title: '${eventTitle}'"); 
467                                        console.log("Match: ${eventTitle?contains(title)?string('true', 'false')}"); 
468                                    </script> 
469                                    <#if eventTitle?contains(title)>  
470                                        ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)} 
471                                    </#if> 
472                                </#if> 
473                                <#if governorate?has_content> 
474                                    <script> 
475                                        console.log("Search Governorate: '${governorate}'"); 
476                                        console.log("Content Governorate: '${eventGovernorate}'"); 
477                                        console.log("Match: ${eventGovernorate?contains(governorate)?string('true', 'false')}"); 
478                                    </script> 
479                                    <#if eventGovernorate?contains(governorate)>  
480                                        ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
481                                    </#if>  
482                                </#if>  
483                                <#if ((startDate?has_content) && eventDate_DateObj?date gte startDate?date("MM/dd/yyyy")) && (eventDate_DateObj?date lte endDate?date("MM/dd/yyyy"))>  
484                                    ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
485                                </#if> 
486                                <#if (kind?has_content) && (eventTypeDropdown == kind)>  
487                                    ${journalArticleLocalService.getArticleContent(article,"321238", "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}  
488                                </#if>  
489                            </#if>  
490                        </#if>  
491                    </#if>  
492                </#list>  
493            </tbody>  
494        </table>  
495    </div>  
496</div>  
497</div>  
498</#if>