source: branches/2.4/prototype/mapDisponibility.php @ 7393

Revision 7393, 4.4 KB checked in by eduardow, 8 years ago (diff)

Ticket #3153 - Inconsistência na matriz de disponibilidade da agenda

  • Property svn:executable set to *
Line 
1<?php
2
3        /**
4    * Recupera os eventos de um usuário para uso no mapa de disponibilidade
5    *
6    * @license    http://www.gnu.org/copyleft/gpl.html GPL
7    * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
8    * @sponsor    Caixa Econômica Federal
9    * @author     Adriano Coutinho da Silva
10    * @return     Array de objetos com os eventos mergedos indexados por id de usuário
11    * @access     public
12    */
13
14        //TODO -  Teste Remover comentario
15        $data = $_GET;
16
17        require_once "api/controller.php";
18
19        if(isset($data)){
20               
21                $users = $data['attendees'];
22               
23                $disponibility = array();
24               
25                foreach($users as $key => $value){
26                /*     
27
28                         SELECT * FROM 
29                                calendar_object as co inner join
30                                calendar_to_calendar_object as ctco on
31                                ctco.calendar_object_id = co.id
32                                WHERE (range_start >=  1331434800000 AND range_end <= 1332039600000) AND
33                                ctco.calendar_id IN(5)
34                       
35                         SELECT * FROM 
36                                calendar_object WHERE (range_start >=  1331434800000 AND range_end <= 1332039600000 AND id IN
37                                ( SELECT calendar_object_id from calendar_to_calendar_object where calendar_id IN (5)  ))
38                */
39                       
40                       
41                        $sql = 'SELECT calendar_object.range_start as "startTime" , calendar_object.range_end as "endTime", calendar_object.allday as "allDay", calendar_object.tzid as "timezone" FROM calendar_object WHERE ('
42                        .'((range_start >=  '.$data['startTime'].' AND range_start <= '.$data['endTime'].')'
43                        .' OR (range_end >=  '.$data['startTime'].' AND range_end <= '.$data['endTime'].')'
44                        .' OR (range_start <=  '.$data['startTime'].' AND range_end >= '.$data['endTime'].') )'
45                        .' AND transp = 0  AND id IN ( SELECT calendar_object_id from calendar_to_calendar_object where '
46                        .'calendar_id IN (SELECT calendar_id FROM calendar_signature WHERE (user_uidnumber = '. $value['id'] .'  AND is_owner = 1 ))  )'
47                        .'AND (calendar_object.id NOT IN (SELECT calendar_object_activity_id FROM calendar_task_to_activity_object)'
48                        .'OR calendar_object.type_id = 1))';
49
50                        $result = Controller::service('PostgreSQL')->execResultSql($sql);
51               
52                        if(!count($result))
53                                continue;               
54                       
55                        $disponibilyUser = array();
56                       
57                        $startTime = new DateTime('now', new DateTimeZone($data['timezone']));
58                        $endTime = new DateTime('now', new DateTimeZone($data['timezone']));
59                       
60                        foreach($result as $ke => $va){
61
62                                $startTime->setTimestamp((int) ($va['startTime'] / 1000));
63                                $endTime->setTimestamp((int) ($va['endTime'] / 1000));
64                               
65                                array_push($disponibilyUser, array('startTime' => ($startTime->format('U') + ( $startTime->format('O') * (36) )).'000', 'endTime' => ($endTime->format('U') + ( $startTime->format('O') * (36) )).'000', 'allDay' => $va['allDay']));
66
67                        /*
68                        *
69                        * A implementação abaixo une eventos que convergem os horários
70                        *
71                       
72                                if(count($disponibilyUser) == 0){
73                                        array_push($disponibilyUser, array('startTime' => $va['startTime'], 'endTime' => $va['endTime']));
74                                        continue;
75                                }
76
77                                $action = 'new';
78                                $position = '0';
79                               
80                                foreach($disponibilyUser as $k => $v){
81                                       
82                                        if($v['startTime'] >= $va['startTime']){
83                                               
84                                                if($v['startTime'] > $va['endTime'])
85                                                        continue;
86                                               
87                                                else if(($v['endTime'] <= $va['endTime'])){
88                                                        $action = 'delete';
89
90                                                }else if(($v['endTime'] > $va['endTime'])){
91
92                                                        $action = 'afterUpdate';
93                                       
94
95                                                }
96                                        }else if($v['startTime'] <= $va['startTime']){
97                                               
98                                                if($v['endTime'] < $va['startTime'])
99                                                        continue;
100                                               
101                                                else if($v['endTime'] >= $va['endTime']){
102                                               
103                                                        $action = 'update';
104
105                                               
106                                                }else
107                                                        $action = 'afterUpdate';
108                                       
109                                        }
110
111                                        $position = $k;
112                                }
113                       
114                                switch($action){
115                                        case 'new':
116                                                array_push($disponibilyUser, array('startTime' => $va['startTime'], 'endTime' => $va['endTime']));
117                                        break;
118                                       
119                                        case 'update':
120
121                                                $disponibilyUser[$position]['startTime'] = $v['startTime'];
122                                                $disponibilyUser[$position]['endTime'] = $v['endTime'];
123                                       
124                                        break;
125                                       
126                                        case 'beforeUpdate':
127                                       
128                                                $disponibilyUser[$position]['startTime'] = $v['startTime'];
129                                       
130                                        break;
131                                       
132                                        case 'afterUpdate':
133                                       
134                                                $disponibilyUser[$position]['endTime'] = $v['endTime'];
135                                       
136                                        break;
137                                       
138                                        case 'delete':
139                                        break;
140                                }
141        */             
142                        }
143
144                $disponibility[$value['id']] = $disponibilyUser;
145
146                 unset($disponibilyUser);
147       
148                }       
149                echo json_encode($disponibility);
150
151        }else{
152
153                return json_encode(array('false'));
154        }
155
156?>
Note: See TracBrowser for help on using the repository browser.