source: trunk/prototype/rest/catalog/UserContactsResource.php @ 6592

Revision 6592, 13.1 KB checked in by gustavo, 12 years ago (diff)

Ticket #2766 - Arrumado a configuracao de limite de contatos dinamicos

  • Property svn:executable set to *
Line 
1<?php
2
3if (!defined('ROOTPATH'))
4    define('ROOTPATH', dirname(__FILE__) . '/..');
5
6require_once(ROOTPATH . '/rest/hypermedia/hypermedia.php');
7
8use prototype\api\Config as Config;
9
10class UserContactsResource extends Resource {
11
12    /**
13     * Retorna uma lista de grupos
14     *
15     * @license    http://www.gnu.org/copyleft/gpl.html GPL
16     * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
17     * @sponsor    Caixa Econômica Federal
18     * @author     Adrino Coutinho da Silva.
19     * @return     Retorna uma lista de Contatos Dinâmicos, Grupos, Contatos Pessoais, Grupos Compartilhados e Contatos Compartilhados
20     * @access     public
21     * */
22    function get($request) {
23
24        $this->secured();
25
26        $response = new Response($request);
27        $response->addHeader('Content-type', 'aplication/json');
28        $response->code = Response::OK;
29
30        $h = new Hypermedia();
31        $c = new Collection($request->resources, 'UserContactsResource');
32
33        try {
34
35            $d = new Data();
36
37            $d->setName('User Contacts');
38            $d->setValue(null);
39            $d->setPrompt('Contatos do usuário');
40            $d->setDataType(null);
41            $d->setMaxLength(null);
42            $d->setMinLength(null);
43            $d->setRequired(null);
44
45            $c->addData($d);
46
47//Recupera os contatos dinâmicos do usuario
48            $dynamicContacts = Controller::find(
49                            array('concept' => 'dynamicContact'), false, array('filter' => array('=', 'owner', Config::me("uidNumber")),
50                        'order' => array('number_of_messages', 'name', 'mail'),
51                        'orderDesc' => array(true, false, false))
52            );
53
54            if ($dynamicContacts) {
55                foreach ($dynamicContacts as $value) {
56                    $d = new Data();
57                    $i = new Item($request->resources, 'DynamicContactsResource', $value['id']);
58
59                    $d->setName('name');
60                    $d->setValue($value['name']);
61                    $d->setPrompt('Nome do Contato Recente');
62                    $d->setDataType('string');
63                    $d->setMaxLength('100');
64                    $d->setMinLength(null);
65                    $d->setRequired(true);
66
67                    $i->addData($d);
68
69                    $d = new Data();
70                    $d->setName('mail');
71                    $d->setValue($value['mail']);
72                    $d->setPrompt('Email do Contato Recente');
73                    $d->setDataType('string');
74                    $d->setMaxLength('100');
75                    $d->setMinLength(null);
76                    $d->setRequired(true);
77
78                    $i->addData($d);
79
80                    $d = new Data();
81                    $d->setName('number_of_messages');
82                    $d->setValue((int)$value['number_of_messages']);
83                    $d->setPrompt('Quantidade de mensagens enviadas');
84                    $d->setDataType('integer');
85                    $d->setMaxLength('100');
86                    $d->setMinLength(null);
87                    $d->setRequired(false);
88
89                    $i->addData($d);
90
91                    $d = new Data();
92                    $d->setName('id');
93                    $d->setValue($value['id']);
94                    $d->setPrompt('Id do contato dinamico');
95                    $d->setDataType('integer');
96                    $d->setMaxLength('100');
97                    $d->setMinLength(null);
98                    $d->setRequired(false);
99
100                    $i->addData($d);
101
102                    $l = new Link();
103
104                    $l->setHref('');
105                    $l->setRel('delete');
106                    $l->setAlt('Remover');
107                    $l->setPrompt('Remover');
108                    $l->setRender('link');
109
110                    $i->addLink($l);
111
112                    $l = new Link();
113                    $l->setHref('');
114                    $l->setRel('put');
115                    $l->setAlt('Atualizar');
116                    $l->setPrompt('Atualizar');
117                    $l->setRender('link');
118
119                    $i->addLink($l);
120
121                    $l = new Link();
122                    $l->setHref('/dynamiccontact/' . $value['id']);
123                    $l->setRel('get');
124                    $l->setAlt('Buscar');
125                    $l->setPrompt('Buscar');
126                    $l->setRender('link');
127
128                    $i->addLink($l);
129                    $c->addItem($i);
130                }
131            }
132
133            $idS = array(Config::me("uidNumber"));
134            $acl = array();
135
136//Recupera o uidNumber de todos os usuários que compartilham suas agendas com o usuário logado
137            $shareds = Controller::service('PostgreSQL')->execResultSql('select acl_account as "uidNumber", acl_rights as "acl" from phpgw_acl where (acl_location =   \'' . Config::me("uidNumber") . '\' AND acl_appname =  \'contactcenter\' )');
138
139            if (!empty($shareds) && $shareds)
140                foreach ($shareds as $s) {
141                    array_push($idS, $s['uidNumber']);
142                    $acl[$s['uidNumber']] = $this->decodeAcl(decbin($s['acl']));
143                }
144
145            //Recupera os grupos do usuario
146            $groups = Controller::find(array('concept' => 'contactGroup'), false, array('filter' => array('IN', 'user', $idS), 'order' => array('name')));
147
148            if ($groups) {
149                foreach ($groups as $value) {
150                    if (($value['user'] == Config::me("uidNumber")) || ($acl[$value['user']]['read'])) {
151
152                        $i = new Item($request->resources, ($value['user'] == Config::me("uidNumber") ? 'GroupsResource' : 'SharedGroupResource'), $value['id']);
153
154                        $d = new Data();
155                        $d->setName('id');
156                        $d->setValue($value['id']);
157                        $d->setPrompt('Id do Grupo');
158                        $d->setDataType('string');
159                        $d->setMaxLength('100');
160                        $d->setMinLength(null);
161                        $d->setRequired(true);
162                        $i->addData($d);
163
164                        $d = new Data();
165                        $d->setName('owner');
166                        $d->setValue($value['user']);
167                        $d->setPrompt('Id Dono do Grupo');
168                        $d->setDataType('string');
169                        $d->setMaxLength('100');
170                        $d->setMinLength(null);
171                        $d->setRequired(true);
172                        $i->addData($d);
173
174                        $d = new Data();
175                        $d->setName('name');
176                        $d->setValue($value['name']);
177                        $d->setPrompt('Nome do Grupo');
178                        $d->setDataType('string');
179                        $d->setMaxLength('100');
180                        $d->setMinLength(null);
181                        $d->setRequired(true);
182                        $i->addData($d);
183
184                        $d = new Data();
185                        $d->setName('mail');
186                        $d->setValue($value['email']);
187                        $d->setPrompt('Email do Grupo');
188                        $d->setDataType('string');
189                        $d->setMaxLength('100');
190                        $d->setMinLength(null);
191                        $d->setRequired(true);
192                        $i->addData($d);
193
194                        if (Config::me("uidNumber") != $value['user']) {
195                            /* Descomentar ao implementar os métodos
196                              if ($acl[$value['user']]['delete']) {
197                              $l = new Link();
198                              $l->setHref('');
199                              $l->setRel('delete');
200                              $l->setAlt('Remover');
201                              $l->setPrompt('Remover');
202                              $l->setRender('link');
203                              $i->addLink($l);
204                              }
205
206                              if ($acl[$value['user']]['update']) {
207                              $l = new Link();
208                              $l->setHref('');
209                              $l->setRel('put');
210                              $l->setAlt('Atualizar');
211                              $l->setPrompt('Atualizar');
212                              $l->setRender('link');
213                              $i->addLink($l);
214                              }
215
216                              if ($acl[$value['user']]['write']) {
217                              $l = new Link();
218                              $l->setHref('');
219                              $l->setRel('post');
220                              $l->setAlt('Criar');
221                              $l->setPrompt('Criar novo');
222                              $l->setRender('link');
223                              $i->addLink($l);
224                              }
225                             */
226
227                            $l = new Link();
228                            $l->setHref('/sharedgroup/' . $value['id']);
229                            $l->setRel('get');
230                            $l->setAlt('Buscar');
231                            $l->setPrompt('Buscar');
232                            $l->setRender('link');
233                            $i->addLink($l);
234                        } else {
235                            /* Descomentar ao implementar métodos no recurso
236                              $l = new Link();
237                              $l->setHref('');
238                              $l->setRel('delete');
239                              $l->setAlt('Remover');
240                              $l->setPrompt('Remover');
241                              $l->setRender('link');
242                              $i->addLink($l);
243
244                              $l = new Link();
245                              $l->setHref('');
246                              $l->setRel('put');
247                              $l->setAlt('Atualizar');
248                              $l->setPrompt('Atualizar');
249                              $l->setRender('link');
250                              $i->addLink($l);
251                             */
252
253                            $l = new Link();
254                            $l->setHref('/group/' . $value['id']);
255                            $l->setRel('get');
256                            $l->setAlt('Buscar');
257                            $l->setPrompt('Buscar');
258                            $l->setRender('link');
259
260                            $i->addLink($l);
261                        }
262                        $c->addItem($i);
263                    }
264                }
265            }
266
267//Recupera os contatos pessoais do usuario
268            $contacts = Controller::find(array('concept' => 'contact'), false, array('filter' => array('IN', 'user', $idS)));
269
270            if ($contacts) {
271
272                foreach ($contacts as $value) {
273
274                    if (($value['user'] == Config::me("uidNumber")) || ($acl[$value['user']]['read'])) {
275
276                        $d = new Data();
277                        $i = new Item($request->resources, (($value['user'] == Config::me("uidNumber")) ? 'ContactsResource' : 'SharedContactResource'), $value['id']);
278                        $d->setName('id');
279                        $d->setValue($value['id']);
280                        $d->setPrompt('Id do Contato');
281                        $d->setDataType('string');
282                        $d->setMaxLength('100');
283                        $d->setMinLength(null);
284                        $d->setRequired(true);
285
286                        $i->addData($d);
287
288                        $d = new Data();
289                        $d->setName('owner');
290                        $d->setValue($value['user']);
291                        $d->setPrompt('Id Dono do Contato');
292                        $d->setDataType('string');
293                        $d->setMaxLength('100');
294                        $d->setMinLength(null);
295                        $d->setRequired(true);
296
297                        $i->addData($d);
298
299                        $d = new Data();
300                        $d->setName('name');
301                        $d->setValue($value['name']);
302                        $d->setPrompt('Nome do Contato');
303                        $d->setDataType('string');
304                        $d->setMaxLength('100');
305                        $d->setMinLength(null);
306                        $d->setRequired(true);
307
308                        $i->addData($d);
309
310                        $d = new Data();
311                        $d->setName('mail');
312                        $d->setValue(isset($value['email']) ? $value['email'] : null);
313                        $d->setPrompt('Email do Contato');
314                        $d->setDataType('string');
315                        $d->setMaxLength('100');
316                        $d->setMinLength(null);
317                        $d->setRequired(true);
318
319                        $i->addData($d);
320
321                        $d = new Data();
322                        $d->setName('telephone');
323                        $d->setValue(isset($value['telephone']) ? $value['telephone'] : null);
324                        $d->setPrompt('Telefone do Contato');
325                        $d->setDataType('string');
326                        $d->setMaxLength('100');
327                        $d->setMinLength(null);
328                        $d->setRequired(true);
329
330                        $i->addData($d);
331
332                        if (Config::me("uidNumber") != $value['user']) {
333
334                            $l = new Link();
335                            $l->setHref('/sharedcontact/' . $value['id']);
336                            $l->setRel('get');
337                            $l->setAlt('Buscar');
338                            $l->setPrompt('Buscar');
339                            $l->setRender('link');
340                            $i->addLink($l);
341
342                            /* Descomentar ao criar recursos
343                              if ($acl[$value['user']]['delete']) {
344                              $l = new Link();
345                              $l->setHref('');
346                              $l->setRel('delete');
347                              $l->setAlt('Remover');
348                              $l->setPrompt('Remover');
349                              $l->setRender('link');
350                              $i->addLink($l);
351                              }
352
353                              if ($acl[$value['user']]['put']) {
354                              $l = new Link();
355                              $l->setHref('');
356                              $l->setRel('put');
357                              $l->setAlt('Atualizar');
358                              $l->setPrompt('Atualizar');
359                              $l->setRender('link');
360                              $i->addLink($l);
361                              }
362                             */
363                        } else {
364                            /* Descomentar ao criar recursos
365                              $l = new Link();
366
367                              $l->setHref('');
368                              $l->setRel('delete');
369                              $l->setAlt('Remover');
370                              $l->setPrompt('Remover');
371                              $l->setRender('link');
372
373                              $i->addLink($l);
374
375                              $l = new Link();
376                              $l->setHref('');
377                              $l->setRel('put');
378                              $l->setAlt('Atualizar');
379                              $l->setPrompt('Atualizar');
380                              $l->setRender('link');
381
382                              $i->addLink($l);
383                             */
384                            $l = new Link();
385                            $l->setHref('/contact/' . $value['id']);
386                            $l->setRel('get');
387                            $l->setAlt('Buscar');
388                            $l->setPrompt('Buscar');
389                            $l->setRender('link');
390
391                            $i->addLink($l);
392                        }
393                        $c->addItem($i);
394                    }
395                }
396            }
397
398
399            if (!$contacts && !$dynamicContacts && !$groups) {
400                $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Resource not found.');
401                return $response;
402            }
403
404
405            $t = new Template();
406
407            $d = new Data();
408
409            $d->setName('id');
410            $d->setValue(null);
411            $d->setPrompt('Id do Grupo');
412            $d->setDataType('string');
413            $d->setMaxLength('100');
414            $d->setMinLength(null);
415            $d->setRequired(true);
416
417            $t->addData($d);
418
419            $d = new Data();
420            $d->setName('user');
421            $d->setValue(null);
422            $d->setPrompt('Id Dono do Grupo');
423            $d->setDataType('string');
424            $d->setMaxLength('100');
425            $d->setMinLength(null);
426            $d->setRequired(true);
427
428            $t->addData($d);
429
430            $d = new Data();
431            $d->setName('name');
432            $d->setValue(null);
433            $d->setPrompt('Nome do Grupo');
434            $d->setDataType('string');
435            $d->setMaxLength('100');
436            $d->setMinLength(null);
437            $d->setRequired(true);
438
439            $t->addData($d);
440            $c->setTemplate($t);
441            $h->setCollection($c);
442
443            $response->body = $h->getHypermedia($request->accept[10][0]);
444            return $response;
445        } catch (Exception $ex) {
446            $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', $ex);
447            return $response;
448        }
449    }
450
451    function decodeAcl($bin) {
452
453        $acl = array();
454        $bin = str_split($bin);
455        $acl['read'] = (isset($bin[0]) && $bin[0] == 1) ? true : false;
456        $acl['write'] = (isset($bin[1]) && $bin[1] == 1) ? true : false;
457        $acl['update'] = (isset($bin[2]) && $bin[2] == 1) ? true : false;
458        $acl['delete'] = (isset($bin[3]) && $bin[3] == 1) ? true : false;
459
460        return $acl;
461    }
462
463    private function createException($request, &$response, $code, $title, $description) {
464        $response->code = $code;
465
466        $h = new Hypermedia();
467        $c = new Collection($request->resources, 'DynamicContactResource');
468        $e = new Error();
469
470        $e->setCode($code);
471        $e->setTitle($title);
472        $e->setDescription($description);
473
474        $c->setError($e);
475        $h->setCollection($c);
476
477        $response->body = $h->getHypermedia($request->accept[10][0]);
478    }
479
480}
481
482?>
Note: See TracBrowser for help on using the repository browser.