source: trunk/prototype/rest/calendar/EventsResource.php @ 7733

Revision 7733, 4.8 KB checked in by pereira.jair, 11 years ago (diff)

Ticket #3267 - Re-implementação do Recurso para utilizar a nova Agenda do Expresso.

Line 
1<?php
2
3class EventsResource extends CalendarAdapter {
4        public function post($request){
5                // to Receive POST Params (use $this->params)
6                parent::post($request);
7
8                $user_id     = $this->getUserId();
9                $tz_offset   = $this->getTimezoneOffset();
10
11                if($this-> isLoggedIn()) {
12
13                        $date_start  = $this->getParam('dateStart');
14                        $date_end    = $this->getParam('dateEnd');
15
16
17                        // check the dates parameters formats (ex: 31/12/2012 23:59:59, but the time is optional)
18                        $regex_date  = '/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/([12][0-9]{3})( ([01][0-9]|2[0-3])(:[0-5][0-9]){2})?$/';
19
20                        if(!preg_match($regex_date, $date_start))
21                                Errors::runException("CALENDAR_INVALID_START_DATE");
22
23                        if(!preg_match($regex_date, $date_end))
24                                Errors::runException("CALENDAR_INVALID_END_DATE");
25
26
27                        // get the start timestamp UNIX from the parameter
28                        $start_arr      = explode(' ', $date_start);
29                        $start_date_arr = explode('/', $start_arr[0]);
30                        $start_time_arr = !empty($start_arr[1]) ? explode(':', $start_arr[1]) : array('00', '00', '00');
31                        $rangeStart       = mktime($start_time_arr[0],$start_time_arr[1],$start_time_arr[2],$start_date_arr[1],$start_date_arr[0],$start_date_arr[2]) - ($tz_offset);
32
33                        // get the end timestamp UNIX from the parameter
34                        $end_arr        = explode(' ', $date_end);
35                        $end_date_arr   = explode('/', $end_arr[0]);
36                        $end_time_arr   = !empty($end_arr[1]) ? explode(':', $end_arr[1]) : array('23', '59', '59');
37                        $rangeEnd      = mktime($end_time_arr[0],$end_time_arr[1],$end_time_arr[2],$end_date_arr[1],$end_date_arr[0],$end_date_arr[2]) - ($tz_offset);
38
39                        $rangeStart = $rangeStart * 1000;
40                        $rangeEnd = $rangeEnd * 1000;
41
42                        $concept = "schedulable";
43                        $id = false;
44
45                        $criteria = array();
46                        $criteria['order'] = "startTime";
47                        $criteria['deepness'] = 2;
48
49                        $criteria['timezones'] = array();
50                        $criteria['timezones'][1] = 'America/Sao_Paulo';
51                        $criteria['timezones'][3] = 'America/Sao_Paulo';
52
53
54                        $criteria['filter'] = array();
55                        $criteria['filter'][0] = "AND";
56                        $criteria['filter'][1] = array();
57                        $criteria['filter'][1][0] = "OR";
58
59
60                        $criteria['filter'][1][1] = array();
61                        $criteria['filter'][1][1][0] = "AND";
62                        $criteria['filter'][1][1][1] = array();
63                        $criteria['filter'][1][1][1][0] = ">=";
64                        $criteria['filter'][1][1][1][1] = "rangeEnd";
65                        $criteria['filter'][1][1][1][2] = $rangeStart; //START
66                        $criteria['filter'][1][1][2] = array();
67                        $criteria['filter'][1][1][2][0] = "=<";
68                        $criteria['filter'][1][1][2][1] = "rangeEnd";
69                        $criteria['filter'][1][1][2][2] = $rangeEnd; //END
70
71
72                        $criteria['filter'][1][2] = array();
73                        $criteria['filter'][1][2][0] = "AND";
74                        $criteria['filter'][1][2][1] = array();
75                        $criteria['filter'][1][2][1][0] = ">=";
76                        $criteria['filter'][1][2][1][1] = "rangeStart";
77                        $criteria['filter'][1][2][1][2] = $rangeStart; //START
78                        $criteria['filter'][1][2][2] = array();
79                        $criteria['filter'][1][2][2][0] = "=<";
80                        $criteria['filter'][1][2][2][1] = "rangeStart";
81                        $criteria['filter'][1][2][2][2] = $rangeEnd; //END
82
83
84                        $criteria['filter'][1][3] = array();
85                        $criteria['filter'][1][3][0] = "AND";
86                        $criteria['filter'][1][3][1] = array();
87                        $criteria['filter'][1][3][1][0] = "<=";
88                        $criteria['filter'][1][3][1][1] = "rangeStart";
89                        $criteria['filter'][1][3][1][2] = $rangeStart; //START
90                        $criteria['filter'][1][3][2] = array();
91                        $criteria['filter'][1][3][2][0] = ">=";
92                        $criteria['filter'][1][3][2][1] = "rangeEnd";
93                        $criteria['filter'][1][3][2][2] = $rangeEnd; //END
94
95                        $criteria['filter'][2] = array("IN","calendar",array(1));
96
97                        $properties = ( $criteria && isset( $criteria['properties'] ) )? $criteria['properties']: false;
98                        $service = ( $criteria && isset( $criteria['service'] ) )? $criteria['service']: false;
99
100
101                        $res = Controller::call( 'find', Controller::URI( $concept ),false,$criteria );
102
103                        $arrEvents = array();
104                        foreach ($res as $event) {
105
106
107                                $timeZone = new DateTimeZone($event['timezone']);
108                                $timeStart = new DateTime('@' . (int) ( $event['startTime'] / 1000 ), $timeZone);
109                                $timeEnd = new DateTime('@' . (int) ( $event['endTime'] / 1000 ), $timeZone);
110
111                                $timeStart->setTimezone($timeZone);
112                                $timeEnd->setTimezone($timeZone);
113
114                                $newEvent = array();
115                                $newEvent['eventID'] =  "" . $event['id'];
116                                $newEvent['eventName'] = "" .$event['summary'];
117                                $newEvent['eventDescription'] = "" .$event['description'];
118                                $newEvent['eventLocation'] = "" . $event['location'];
119                                $newEvent['eventStartDate'] = "" . $timeStart->format('d/m/Y H:i:s');
120                                $newEvent['eventEndDate'] = "" . $timeEnd->format('d/m/Y H:i:s');
121                                //$newEvent['eventTimeZone'] = "" . $event['timezone'];
122                                $newEvent['eventAllDay'] = "" . $event['allDay'];
123
124                                $arrEvents[] = $newEvent;
125                        }
126
127                        $result = array ('events' => $arrEvents);
128
129                        $this->setResult($result);
130
131
132                }
133                //to Send Response (JSON RPC format)
134                return $this->getResponse();
135        }
136
137}
Note: See TracBrowser for help on using the repository browser.