Hide last authors
Andrey Che 1.1 1 {{velocity output="false"}}
2 #if("$!{request.outputSyntax}" == 'plain')
3 $response.setContentType('application/json')
4 #end
5 {{/velocity}}
6 {{velocity filter="html" wiki="false"}}
7 #if($xcontext.action == 'get')
8 #if("$!{request.newEvent}"!="")
9 ## special case 1: find a new unused event name
10 #set($eventName = $request.newEvent)
11 #set($wiki = $doc.wiki)
12 #set($space = $doc.space)
13 #if ($request.parent)
14 #set($space = $xwiki.getDocument($request.parent).getSpace())
15 #end
16 #set($eventName = $xwiki.getUniquePageName($space, $eventName))
17 $jsontool.serialize( { 'name' : $eventName } )
18 #elseif("$!{request.action}" == "checkDate")
19 ## special case 2: check if a date has a time part
20 #set($isAllDay = '')
21 #macro(checkDate $format $dateStr)
22 ## this check is ultra silly, but at least it works w/o timezone issues
23 #set($date = $datetool.toDate($fmt, $dateStr))
24 #set($dateStrReparsed = $datetool.format("yyyyMMdd", $date))
25 #set($date2 = $datetool.toDate("yyyyMMdd", $dateStrReparsed))
26 #if($date.time == $date2.time && $isAllDay != false)
27 #set($isAllDay = true)
28 #else
29 #set($isAllDay = false)
30 #end
31 #end
32 #set($startDateStr = "$!{request.startDate}")
33 #if($startDateStr)
34 #set($fmt = $xwiki.getDocument("MoccaCalendar.MoccaCalendarEventClass").getxWikiClass().get("startDate").getProperty('dateFormat').value)
35 #checkDate($fmt $startDateStr)
36 #end
37 #set($endDateStr = "$!{request.endDate}")
38 #if($endDateStr)
39 #set($fmt = $xwiki.getDocument("MoccaCalendar.MoccaCalendarEventClass").getxWikiClass().get("endDate").getProperty('dateFormat').value)
40 #checkDate($fmt $endDateStr)
41 #end
42 $jsontool.serialize( { 'isAllDay' : $isAllDay } )
43 #else
44 #set($startQuery = $datetool.toDate('yyyy-M-d', $request.start))
45 #set($qsy = $datetool.getYear($startQuery))
46 #set($qsm = $datetool.getMonth($startQuery))
47 #set($qsm = $mathtool.add($qsm, 1))
48 #set($qsd = $datetool.getDay($startQuery))
49 ## if enddate is empty, use startdate instead
50 #set($endDateCheck = "year(enddate.value) > :startyear or (year(enddate.value) = :startyear and (month(enddate.value) > :startmonth or (month(enddate.value) = :startmonth and day(enddate.value) >= :startday)))")
51 #set($startDateCheck = "year(startdate.value) > :startyear or (year(startdate.value) = :startyear and (month(startdate.value) > :startmonth or (month(startdate.value) = :startmonth and day(startdate.value) >= :startday)))")
52 #set($whereQuery = "and (enddate.value is not null and ($endDateCheck) or ($startDateCheck)) ")
53
54 #set($endQuery = $datetool.toDate('yyyy-M-d', $request.end))
55 #set($qey = $datetool.getYear($endQuery))
56 #set($qem = $datetool.getMonth($endQuery))
57 #set($qem = $mathtool.add($qem, 1))
58 #set($qed = $datetool.getDay($endQuery))
59 #set($whereQuery = "$whereQuery and (year(startdate.value) < :endyear or ( year(startdate.value) = :endyear and (month(startdate.value) < :endmonth or (month(startdate.value) = :endmonth and day(startdate.value) <= :endday))))")
60
61 #set($queryParams = { "startyear" : $qsy, "startmonth" : $qsm, "startday" : $qsd, "endyear" : $qey, "endmonth" : $qem, "endday" : $qed, "startDateField" : $request.startfield, "endDateField" : $request.endfield, "eventClass" : $request.classname })
62
63 #if("$!{request.filter}" != "" && "$!{request.calendarDoc}" != "")
64 #set($document = $xwiki.getDocument($request.calendarDoc))
65 #if("$!{request.filter}" == "page")
66 ## see MOCCCAL-97 why we need to ways to get at the parent document
67 #set($whereQuery = "$whereQuery and (doc.parent = :parentDoc or doc.parent = :parentAbsDoc)")
68 #set($discard = $queryParams.put('parentDoc', $request.calendarDoc))
69 #set($discard = $queryParams.put('parentAbsDoc', "${xcontext.getDatabase()}:${request.calendarDoc}"))
70 #end
71 #if("$!{request.filter}" == "space")
72 #set($document = $xwiki.getDocument($request.calendarDoc))
73 #set($translated = $document.getTranslatedDocument())
74 #set($space = $translated.getSpace())
75 #set($whereQuery = "$whereQuery and (doc.space = :space)")
76 #set($discard = $queryParams.put('space', $space))
77 #end
78 #end
79
80 #set($direction="asc")
81 #if("$!{request.outputView}"=="plainList" && $datetool.difference($datetool.getDate(),$endQuery).getSeconds()<0)
82 #set($direction="desc")
83 #end
84
85 #set($hql =", BaseObject as obj, DateProperty as startdate, DateProperty as enddate where doc.fullName=obj.name and obj.id=startdate.id.id and startdate.id.name=:startDateField and obj.id=enddate.id.id and enddate.id.name=:endDateField and doc.name!='MoccaCalendarEventTemplate' and obj.className= :eventClass $whereQuery order by startdate.value $direction")
86
87 #set($query = $services.query.hql($hql))
88 #foreach($param in $queryParams.entrySet())
89 #set($query = $query.bindValue($param.key, $param.value))
90 #end
91
92 #set($jsondateformat = $xwiki.jodatime.getDateTimeFormatterForPattern("yyyy-MM-dd'T'HH:mm"))
93 #set($calDocParam = "calendarDoc=$!{escapetool.url($request.calendarDoc)}")
94 #set($results = [])
95 ##set($discard = $results.add($hql))
96 ##set($discard = $results.add($queryParams))
97 #foreach($item in $query.execute())
98 #if($xwiki.hasAccessLevel("view", $xcontext.getUser(), $item))
99 #set($itemdoc = $xwiki.getDocument($item))
100 #set($parentCalDocName = $itemdoc.getParent())
101 #if($parentCalDocName == "$!lastparentCalDocName")
102 #set($color="$!lastColor")
103 #else
104 #set($lastparentCalDocName = $parentCalDocName)
105 #set($color="$!xwiki.getDocument($parentCalDocName).getValue('color')")
106 #set($lastColor = $color)
107 #end
108 #set($startdate = $itemdoc.getValue($request.startfield))
109 #set($enddate = $itemdoc.getValue($request.endfield))
110 #set($duration = $itemdoc.getValue($request.durationfield))
111 #if(!$duration)
112 #set($duration = "30")
113 #end
114 #if($startdate)
115 #set($startdate = $xwiki.jodatime.getDateTime($startdate.getTime()))
116 #if($enddate)
117 #set($enddate = $xwiki.jodatime.getDateTime($enddate.getTime()))
118 #else
119 #set($enddate = $startdate.plusMinutes($duration))
120 #end
121 #set($allDay=false)
122 #if("$!itemdoc.getValue('allDay')"==1)
123 #set($allDay=true)
124 #set($enddateExclusive = $enddate.plusDays(1))
125 #else
126 #set($enddateExclusive = $enddate)
127 #end
128 #set($event = {"id" : $itemdoc.getDocumentReference().toString(), "title" : $itemdoc.getPlainTitle(), "url" : $itemdoc.getURL('view',"$calDocParam"), "editUrl" : $itemdoc.getURL('edit',"$calDocParam"), "saveUrl" : $itemdoc.getURL('save',"$calDocParam"), "deleteUrl" : $itemdoc.getURL('delete',"$calDocParam"), "canEdit": $xwiki.hasAccessLevel("edit", $xcontext.getUser(), $item), "canDelete": $xwiki.hasAccessLevel("delete", $xcontext.getUser(), $item), "start" : $jsondateformat.print($startdate), "end" : $jsondateformat.print($enddateExclusive), "allDay" : $allDay, "color" : $color })
129 #if("$!{request.outputView}"=="plainList")
130 #set($format = $!itemdoc.getObject("${request.classname}").getxWikiClass().get($request.startfield).getProperty('dateFormat').value)
131 #if($!format=="")
132 #set($format = $xwiki.getSpacePreference('dateformat', 'dd.MM.yyyy'))
133 #end
134 #if($allDay)
135 #set($idx = $format.indexOf("H"))
136 #if($idx > 0)
137 #set($format = $format.substring(0,$idx).trim())
138 #end
139 #end
140 #set($dateprinter = $xwiki.jodatime.getDateTimeFormatterForPattern($format))
141 #set($html = '<div class="moccaevent" style="border-color:' +$color + '">')
142 #set($html = "${html}"+'<h5><a href="'+${itemdoc.getURL("view")}+'">' + $escapetool.html($itemdoc.getPlainTitle()) + '</a></h5>')
143 #if($allDay)
144 #set($discard = $services.localization.use('document', 'Calendar.Translations'))
145 #set($html = "${html}" + '<p class="date">' + $dateprinter.print($startdate) + ' ' + $services.localization.render('xwiki.calendar.allDayText')+'</p>')
146 #else
147 #if($enddate.getYear() == $startdate.getYear() && $enddate.getDayOfYear() == $startdate.getDayOfYear())
148 #set($idx = $format.indexOf("H"))
149 #if($idx > 0)
150 #set($timeformat = $format.substring($idx).trim())
151 #else
152 #set($timeformat = "HH:mm")
153 #end
154 #set($timeprinter = $xwiki.jodatime.getDateTimeFormatterForPattern($timeformat))
155 #set($html = "${html}" + '<p class="date">' + $dateprinter.print($startdate) + ' - ' + $timeprinter.print($enddate) + '</p>')
156 #else
157 #set($html = "${html}" + '<p class="date">' + $dateprinter.print($startdate) + ' - ' + $dateprinter.print($enddate) + '</p>')
158 #end
159 #end
160 #set($desc = $itemdoc.getValue('description'))
161 #if($desc)
162 #set($desc = $services.rendering.parse($desc, "xwiki/2.1"))
163 #set($desc = $services.rendering.render($desc, "xhtml/1.0"))
164 #set($html = "${html}" + $desc )
165 #end
166 #set($html = "${html}</div>")
167 #set($discard = $event.put("html", $html))
168 #end
169 #set($discard = $results.add($event))
170 #end
171 #end
172 #end
173 $jsontool.serialize($results)
174 #end ## end of #if("$!{request.newEvent}"!="")
175 #else
176 Service Page for the Mocca Calendar Application
177 #end ## end of #if($xcontext.action == 'get')
178 {{/velocity}}

Tips

You can click on the arrows next to the breadcrumb elements to quickly navigate to sibling and children pages.

My Recent Modifications

Need help?

If you need help with XWiki you can contact: