Ignore:
Timestamp:
01/11/13 08:56:36 (11 years ago)
Author:
pereira.jair
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/prototype/rest/calendar/EventsResource.php

    r7342 r7733  
    66                parent::post($request); 
    77 
    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 
    1213                        $date_start  = $this->getParam('dateStart'); 
    1314                        $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 
    1516 
    1617                        // check the dates parameters formats (ex: 31/12/2012 23:59:59, but the time is optional) 
     
    2324                                Errors::runException("CALENDAR_INVALID_END_DATE"); 
    2425 
     26 
    2527                        // get the start timestamp UNIX from the parameter 
    2628                        $start_arr      = explode(' ', $date_start); 
    2729                        $start_date_arr = explode('/', $start_arr[0]); 
    2830                        $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); 
    3032 
    3133                        // get the end timestamp UNIX from the parameter 
     
    3335                        $end_date_arr   = explode('/', $end_arr[0]); 
    3436                        $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); 
    3638 
    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; 
    4641 
    47                         // user clauses 
    48                         $sql .= ' AND (phpgw_cal_user.cal_login = ' . $user_id . ' OR (phpgw_cal.owner = ' . $user_id . ')) '; 
     42                        $concept = "schedulable"; 
     43                        $id = false; 
    4944 
    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; 
    5748 
    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'; 
    5952 
    60                         if (!$this->getDb()->query($sql)) 
    61                                 return false; 
    6253 
    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"; 
    7158 
    72                                 $association_arr = array( 
    73                                                         'eventID'          => 'cal_id', 
    74                                                         'eventName'        => 'title', 
    75                                                         'eventDescription' => 'description', 
    76                                                         'eventLocation'    => 'location' 
    77                                                 ); 
    7859 
    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 
    8470 
    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 remaining 
    91                                 else{ 
    92                                         // walk through the event date range, adding one register for each day 
    93                                         $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]; 
    9971 
    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; 
    124125                        } 
    125126 
    126                         $result = array ('events' => array_values($events)); 
     127                        $result = array ('events' => $arrEvents);  
    127128 
    128                         $this->setResult($result); 
     129                        $this->setResult($result);  
     130 
     131 
    129132                } 
    130133                //to Send Response (JSON RPC format) 
Note: See TracChangeset for help on using the changeset viewer.