source: trunk/prototype/mapDisponibility.php @ 6069

Revision 6069, 4.2 KB checked in by douglasz, 12 years ago (diff)

Ticket #2673 - Problemas com o mapa de disponibilidade.

  • 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
48                        $result = Controller::service('PostgreSQL')->execResultSql($sql);
49               
50                        if(!count($result))
51                                continue;               
52                       
53                        $disponibilyUser = array();
54                       
55                        $startTime = new DateTime('now', new DateTimeZone($data['timezone']));
56                        $endTime = new DateTime('now', new DateTimeZone($data['timezone']));
57                       
58                        foreach($result as $ke => $va){
59
60                                $startTime->setTimestamp((int) ($va['startTime'] / 1000));
61                                $endTime->setTimestamp((int) ($va['endTime'] / 1000));
62                               
63                                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']));
64
65                        /*
66                        *
67                        * A implementação abaixo une eventos que convergem os horários
68                        *
69                       
70                                if(count($disponibilyUser) == 0){
71                                        array_push($disponibilyUser, array('startTime' => $va['startTime'], 'endTime' => $va['endTime']));
72                                        continue;
73                                }
74
75                                $action = 'new';
76                                $position = '0';
77                               
78                                foreach($disponibilyUser as $k => $v){
79                                       
80                                        if($v['startTime'] >= $va['startTime']){
81                                               
82                                                if($v['startTime'] > $va['endTime'])
83                                                        continue;
84                                               
85                                                else if(($v['endTime'] <= $va['endTime'])){
86                                                        $action = 'delete';
87
88                                                }else if(($v['endTime'] > $va['endTime'])){
89
90                                                        $action = 'afterUpdate';
91                                       
92
93                                                }
94                                        }else if($v['startTime'] <= $va['startTime']){
95                                               
96                                                if($v['endTime'] < $va['startTime'])
97                                                        continue;
98                                               
99                                                else if($v['endTime'] >= $va['endTime']){
100                                               
101                                                        $action = 'update';
102
103                                               
104                                                }else
105                                                        $action = 'afterUpdate';
106                                       
107                                        }
108
109                                        $position = $k;
110                                }
111                       
112                                switch($action){
113                                        case 'new':
114                                                array_push($disponibilyUser, array('startTime' => $va['startTime'], 'endTime' => $va['endTime']));
115                                        break;
116                                       
117                                        case 'update':
118
119                                                $disponibilyUser[$position]['startTime'] = $v['startTime'];
120                                                $disponibilyUser[$position]['endTime'] = $v['endTime'];
121                                       
122                                        break;
123                                       
124                                        case 'beforeUpdate':
125                                       
126                                                $disponibilyUser[$position]['startTime'] = $v['startTime'];
127                                       
128                                        break;
129                                       
130                                        case 'afterUpdate':
131                                       
132                                                $disponibilyUser[$position]['endTime'] = $v['endTime'];
133                                       
134                                        break;
135                                       
136                                        case 'delete':
137                                        break;
138                                }
139        */             
140                        }
141
142                $disponibility[$value['id']] = $disponibilyUser;
143
144                 unset($disponibilyUser);
145       
146                }       
147                echo json_encode($disponibility);
148
149        }else{
150
151                return json_encode(array('false'));
152        }
153
154?>
Note: See TracBrowser for help on using the repository browser.