Changeset 7733 for trunk/prototype/rest/calendar/EventsResource.php
- Timestamp:
- 01/11/13 08:56:36 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/rest/calendar/EventsResource.php
r7342 r7733 6 6 parent::post($request); 7 7 8 if($this-> isLoggedIn()) 9 { 10 $user_id = $this->getUserId(); 11 $tz_offset = $this->getTimezoneOffset(); 8 $user_id = $this->getUserId(); 9 $tz_offset = $this->getTimezoneOffset(); 10 11 if($this-> isLoggedIn()) { 12 12 13 $date_start = $this->getParam('dateStart'); 13 14 $date_end = $this->getParam('dateEnd'); 14 $split_event = $this->getParam('splitEvent'); // Boolean 1 or 0 - if you want to split the events that last for more than 1 day 15 15 16 16 17 // check the dates parameters formats (ex: 31/12/2012 23:59:59, but the time is optional) … … 23 24 Errors::runException("CALENDAR_INVALID_END_DATE"); 24 25 26 25 27 // get the start timestamp UNIX from the parameter 26 28 $start_arr = explode(' ', $date_start); 27 29 $start_date_arr = explode('/', $start_arr[0]); 28 30 $start_time_arr = !empty($start_arr[1]) ? explode(':', $start_arr[1]) : array('00', '00', '00'); 29 $ datetime= 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);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); 30 32 31 33 // get the end timestamp UNIX from the parameter … … 33 35 $end_date_arr = explode('/', $end_arr[0]); 34 36 $end_time_arr = !empty($end_arr[1]) ? explode(':', $end_arr[1]) : array('23', '59', '59'); 35 $ edatetime= 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);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); 36 38 37 $sql = 'SELECT DISTINCT ' 38 .'phpgw_cal.cal_id, ' 39 .'phpgw_cal.datetime, ' 40 .'phpgw_cal.edatetime, ' 41 .'phpgw_cal.title, ' 42 .'phpgw_cal.description, ' 43 .'phpgw_cal.location ' 44 .'FROM phpgw_cal_user, phpgw_cal ' 45 .'WHERE (phpgw_cal_user.cal_id = phpgw_cal.cal_id) '; 39 $rangeStart = $rangeStart * 1000; 40 $rangeEnd = $rangeEnd * 1000; 46 41 47 // user clauses48 $ sql .= ' AND (phpgw_cal_user.cal_login = ' . $user_id . ' OR (phpgw_cal.owner = ' . $user_id . ')) ';42 $concept = "schedulable"; 43 $id = false; 49 44 50 // date range clauses 51 $sql .= ' AND ( ' 52 .' ( (phpgw_cal.datetime >= '.$datetime.') AND (phpgw_cal.edatetime <= '.$edatetime.') ) ' 53 .'OR ( (phpgw_cal.datetime <= '.$datetime.') AND (phpgw_cal.edatetime >= '.$edatetime.') ) ' 54 .'OR ( (phpgw_cal.datetime >= '.$datetime.') AND (phpgw_cal.datetime <= '.$edatetime.') AND (phpgw_cal.edatetime >= '.$edatetime.') ) ' 55 .'OR ( (phpgw_cal.datetime <= '.$datetime.') AND (phpgw_cal.edatetime >= '.$datetime.') AND (phpgw_cal.edatetime <= '.$edatetime.') ) ' 56 .') '; 45 $criteria = array(); 46 $criteria['order'] = "startTime"; 47 $criteria['deepness'] = 2; 57 48 58 $sql .= ' ORDER BY phpgw_cal.datetime ASC, phpgw_cal.edatetime ASC '; 49 $criteria['timezones'] = array(); 50 $criteria['timezones'][1] = 'America/Sao_Paulo'; 51 $criteria['timezones'][3] = 'America/Sao_Paulo'; 59 52 60 if (!$this->getDb()->query($sql))61 return false;62 53 63 $events = array(); 64 while($this->getDb()->next_record()) { 65 $row = $this->getDb()->row(); 66 $id = $row['cal_id']; 67 $sdate = $row['datetime'] + ($tz_offset); 68 $edate = $row['edatetime'] + ($tz_offset); 69 $datetime += ($tz_offset); 70 $edatetime += ($tz_offset); 54 $criteria['filter'] = array(); 55 $criteria['filter'][0] = "AND"; 56 $criteria['filter'][1] = array(); 57 $criteria['filter'][1][0] = "OR"; 71 58 72 $association_arr = array(73 'eventID' => 'cal_id',74 'eventName' => 'title',75 'eventDescription' => 'description',76 'eventLocation' => 'location'77 );78 59 79 // if the event starts and ends in the same day OR the user does not want to split the event, 80 // return the event in only one register 81 if(date('d/m/Y', $sdate) == date('d/m/Y', $edate) || !$split_event){ 82 foreach($association_arr AS $k => $v) 83 $events[$id][$k] = mb_convert_encoding($row[$v],"UTF8", "ISO_8859-1"); 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 84 70 85 $events[$id]['eventStartDate'] = date('d/m/Y H:i', $sdate);86 $events[$id]['eventEndDate'] = date('d/m/Y H:i', $edate);87 $events[$id]['eventAllDay'] = '0';88 }89 // if the event lasts for more than one day AND the user wants it splitted day by day,90 // return the event splitted into as many parts of the array as the days remaining91 else{92 // walk through the event date range, adding one register for each day93 $step_date = $sdate;94 $step_date_ymd = date('Ymd', $step_date);95 while($step_date_ymd <= date('Ymd', $edate) && $step_date_ymd <= date('Ymd', $edatetime)){96 if($step_date_ymd >= date('Ymd', $datetime) && $step_date_ymd <= date('Ymd', $edatetime)){97 foreach($association_arr AS $k => $v)98 $events_tmp[$k] = $row[$v];99 71 100 // the first day of the event 101 if($step_date == $sdate){ 102 $events_tmp['eventStartDate'] = date('d/m/Y H:i', $sdate); 103 $events_tmp['eventEndDate'] = date('d/m/Y 23:59', $sdate); 104 $events_tmp['eventAllDay'] = '0'; 105 } 106 // the last day of the event 107 elseif($step_date_ymd == date('Ymd', $edate)){ 108 $events_tmp['eventStartDate'] = date('d/m/Y 00:00', $edate); 109 $events_tmp['eventEndDate'] = date('d/m/Y H:i', $edate); 110 $events_tmp['eventAllDay'] = '0'; 111 } 112 // the other days 113 else{ 114 $events_tmp['eventStartDate'] = date('d/m/Y 00:00', $step_date); 115 $events_tmp['eventEndDate'] = date('d/m/Y 23:59', $step_date); 116 $events_tmp['eventAllDay'] = '1'; 117 } 118 $events[$id.$step_date_ymd] = $events_tmp; 119 } 120 $step_date = strtotime("+1 day", $step_date); 121 $step_date_ymd = date('Ymd', $step_date); 122 } 123 } 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; 124 125 } 125 126 126 $result = array ('events' => array_values($events));127 $result = array ('events' => $arrEvents); 127 128 128 $this->setResult($result); 129 $this->setResult($result); 130 131 129 132 } 130 133 //to Send Response (JSON RPC format)
Note: See TracChangeset
for help on using the changeset viewer.