source: trunk/prototype/mapDisponibility.php @ 5636

Revision 5636, 3.8 KB checked in by acoutinho, 12 years ago (diff)

Ticket #2434 - Implementacao da funcionalidade de 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                       
42                        $sql = 'SELECT calendar_object.range_start as "startTime" , calendar_object.range_end as "endTime", calendar_object.allday as "allDay" FROM calendar_object WHERE (range_start >=  '.$data['startTime']
43                        .' AND range_end <= '.$data['endTime'].' AND transp = 0  AND id IN ( SELECT calendar_object_id from calendar_to_calendar_object where '
44                        .'calendar_id IN (SELECT calendar_id FROM calendar_signature WHERE (user_uidnumber = '. $value['id'] .'  AND is_owner = 1 ))  ))';
45
46                        $result = Controller::service('PostgreSQL')->execResultSql($sql);
47               
48                        if(!count($result))
49                                continue;               
50                       
51                        $disponibilyUser = array();
52               
53                        foreach($result as $ke => $va){
54                       
55                        array_push($disponibilyUser, array('startTime' => $va['startTime'], 'endTime' => $va['endTime'], 'allDay' => $va['allDay']));
56
57                        /*
58                        *
59                        * A implementação abaixo une eventos que convergem os horários
60                        *
61                       
62                                if(count($disponibilyUser) == 0){
63                                        array_push($disponibilyUser, array('startTime' => $va['startTime'], 'endTime' => $va['endTime']));
64                                        continue;
65                                }
66
67                                $action = 'new';
68                                $position = '0';
69                               
70                                foreach($disponibilyUser as $k => $v){
71                                       
72                                        if($v['startTime'] >= $va['startTime']){
73                                               
74                                                if($v['startTime'] > $va['endTime'])
75                                                        continue;
76                                               
77                                                else if(($v['endTime'] <= $va['endTime'])){
78                                                        $action = 'delete';
79
80                                                }else if(($v['endTime'] > $va['endTime'])){
81
82                                                        $action = 'afterUpdate';
83                                       
84
85                                                }
86                                        }else if($v['startTime'] <= $va['startTime']){
87                                               
88                                                if($v['endTime'] < $va['startTime'])
89                                                        continue;
90                                               
91                                                else if($v['endTime'] >= $va['endTime']){
92                                               
93                                                        $action = 'update';
94
95                                               
96                                                }else
97                                                        $action = 'afterUpdate';
98                                       
99                                        }
100
101                                        $position = $k;
102                                }
103                       
104                                switch($action){
105                                        case 'new':
106                                                array_push($disponibilyUser, array('startTime' => $va['startTime'], 'endTime' => $va['endTime']));
107                                        break;
108                                       
109                                        case 'update':
110
111                                                $disponibilyUser[$position]['startTime'] = $v['startTime'];
112                                                $disponibilyUser[$position]['endTime'] = $v['endTime'];
113                                       
114                                        break;
115                                       
116                                        case 'beforeUpdate':
117                                       
118                                                $disponibilyUser[$position]['startTime'] = $v['startTime'];
119                                       
120                                        break;
121                                       
122                                        case 'afterUpdate':
123                                       
124                                                $disponibilyUser[$position]['endTime'] = $v['endTime'];
125                                       
126                                        break;
127                                       
128                                        case 'delete':
129                                        break;
130                                }
131        */             
132                        }
133
134                $disponibility[$value['id']] = $disponibilyUser;
135
136                 unset($disponibilyUser);
137       
138                }       
139                echo json_encode($disponibility);
140
141        }else{
142
143                return json_encode(array('false'));
144        }
145
146?>
Note: See TracBrowser for help on using the repository browser.