[6069] | 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 | |
---|
[5636] | 154 | ?> |
---|