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 | ?> |
---|