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

Revision 6559, 12.9 KB checked in by acoutinho, 12 years ago (diff)

Ticket #2766 - Criacao de recurso unico para contatos dos usuario

  • 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($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
151                    $i = new Item($request->resources, ($value['user'] == Config::me("uidNumber") ? 'GroupsResource' : 'SharedGroupsResource'), $value['id']);
152
153                    $d = new Data();
154                    $d->setName('id');
155                    $d->setValue($value['id']);
156                    $d->setPrompt('Id do Grupo');
157                    $d->setDataType('string');
158                    $d->setMaxLength('100');
159                    $d->setMinLength(null);
160                    $d->setRequired(true);
161                    $i->addData($d);
162
163                    $d = new Data();
164                    $d->setName('owner');
165                    $d->setValue($value['user']);
166                    $d->setPrompt('Id Dono do Grupo');
167                    $d->setDataType('string');
168                    $d->setMaxLength('100');
169                    $d->setMinLength(null);
170                    $d->setRequired(true);
171                    $i->addData($d);
172
173                    $d = new Data();
174                    $d->setName('name');
175                    $d->setValue($value['name']);
176                    $d->setPrompt('Nome do Grupo');
177                    $d->setDataType('string');
178                    $d->setMaxLength('100');
179                    $d->setMinLength(null);
180                    $d->setRequired(true);
181                    $i->addData($d);
182
183                    $d = new Data();
184                    $d->setName('email');
185                    $d->setValue($value['email']);
186                    $d->setPrompt('Email do Grupo');
187                    $d->setDataType('string');
188                    $d->setMaxLength('100');
189                    $d->setMinLength(null);
190                    $d->setRequired(true);
191                    $i->addData($d);
192
193                    if (Config::me("uidNumber") != $value['user']) {
194                        /* Descomentar ao implementar os métodos
195                          if ($acl[$value['user']]['delete']) {
196                          $l = new Link();
197                          $l->setHref('');
198                          $l->setRel('delete');
199                          $l->setAlt('Remover');
200                          $l->setPrompt('Remover');
201                          $l->setRender('link');
202                          $i->addLink($l);
203                          }
204
205                          if ($acl[$value['user']]['update']) {
206                          $l = new Link();
207                          $l->setHref('');
208                          $l->setRel('put');
209                          $l->setAlt('Atualizar');
210                          $l->setPrompt('Atualizar');
211                          $l->setRender('link');
212                          $i->addLink($l);
213                          }
214
215                          if ($acl[$value['user']]['write']) {
216                          $l = new Link();
217                          $l->setHref('');
218                          $l->setRel('post');
219                          $l->setAlt('Criar');
220                          $l->setPrompt('Criar novo');
221                          $l->setRender('link');
222                          $i->addLink($l);
223                          }
224
225                          if ($acl[$value['user']]['read']) {
226                          $l = new Link();
227                          $l->setHref('/sharedgroup/' . $value['user'] . '/' . $value['id']);
228                          $l->setRel('get');
229                          $l->setAlt('Buscar');
230                          $l->setPrompt('Buscar');
231                          $l->setRender('link');
232                          $i->addLink($l);
233                          }
234                         */
235                    } else {
236                        /* Descomentar ao implementar métodos no recurso
237                          $l = new Link();
238                          $l->setHref('');
239                          $l->setRel('delete');
240                          $l->setAlt('Remover');
241                          $l->setPrompt('Remover');
242                          $l->setRender('link');
243                          $i->addLink($l);
244
245                          $l = new Link();
246                          $l->setHref('');
247                          $l->setRel('put');
248                          $l->setAlt('Atualizar');
249                          $l->setPrompt('Atualizar');
250                          $l->setRender('link');
251                          $i->addLink($l);
252                         */
253
254                        $l = new Link();
255                        $l->setHref('/group/' . $value['id']);
256                        $l->setRel('get');
257                        $l->setAlt('Buscar');
258                        $l->setPrompt('Buscar');
259                        $l->setRender('link');
260
261                        $i->addLink($l);
262                    }
263                    $c->addItem($i);
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                    $d = new Data();
274                    $i = new Item($request->resources, (($value['user'] == Config::me("uidNumber")) ? 'ContactsResource' : 'SharedContactsResource'), $value['id']);
275                    $d->setName('id');
276                    $d->setValue($value['id']);
277                    $d->setPrompt('Id do Contato');
278                    $d->setDataType('string');
279                    $d->setMaxLength('100');
280                    $d->setMinLength(null);
281                    $d->setRequired(true);
282
283                    $i->addData($d);
284
285                    $d = new Data();
286                    $d->setName('owner');
287                    $d->setValue($value['user']);
288                    $d->setPrompt('Id Dono do Contato');
289                    $d->setDataType('string');
290                    $d->setMaxLength('100');
291                    $d->setMinLength(null);
292                    $d->setRequired(true);
293
294                    $i->addData($d);
295
296                    $d = new Data();
297                    $d->setName('name');
298                    $d->setValue($value['name']);
299                    $d->setPrompt('Nome do Contato');
300                    $d->setDataType('string');
301                    $d->setMaxLength('100');
302                    $d->setMinLength(null);
303                    $d->setRequired(true);
304
305                    $i->addData($d);
306
307                    $d = new Data();
308                    $d->setName('email');
309                    $d->setValue(isset($value['email']) ? $value['email'] : null);
310                    $d->setPrompt('Email do Contato');
311                    $d->setDataType('string');
312                    $d->setMaxLength('100');
313                    $d->setMinLength(null);
314                    $d->setRequired(true);
315
316                    $i->addData($d);
317
318                    $d = new Data();
319                    $d->setName('telephone');
320                    $d->setValue(isset($value['telephone']) ? $value['telephone'] : null);
321                    $d->setPrompt('Telefone do Contato');
322                    $d->setDataType('string');
323                    $d->setMaxLength('100');
324                    $d->setMinLength(null);
325                    $d->setRequired(true);
326
327                    $i->addData($d);
328
329                    if (Config::me("uidNumber") != $value['user']) {
330                        /* Descomentar ao criar recursos
331                          if ($acl[$value['user']]['read']) {
332                          $l = new Link();
333                          $l->setHref('/sharedcontact/' . $value['id']);
334                          $l->setRel('get');
335                          $l->setAlt('Buscar');
336                          $l->setPrompt('Buscar');
337                          $l->setRender('link');
338                          $i->addLink($l);
339                          }
340
341                          if ($acl[$value['user']]['delete']) {
342                          $l = new Link();
343                          $l->setHref('');
344                          $l->setRel('delete');
345                          $l->setAlt('Remover');
346                          $l->setPrompt('Remover');
347                          $l->setRender('link');
348                          $i->addLink($l);
349                          }
350
351                          if ($acl[$value['user']]['put']) {
352                          $l = new Link();
353                          $l->setHref('');
354                          $l->setRel('put');
355                          $l->setAlt('Atualizar');
356                          $l->setPrompt('Atualizar');
357                          $l->setRender('link');
358                          $i->addLink($l);
359                          }
360                         */
361                    } else {
362                        /* Descomentar ao criar recursos
363                          $l = new Link();
364
365                          $l->setHref('');
366                          $l->setRel('delete');
367                          $l->setAlt('Remover');
368                          $l->setPrompt('Remover');
369                          $l->setRender('link');
370
371                          $i->addLink($l);
372
373                          $l = new Link();
374                          $l->setHref('');
375                          $l->setRel('put');
376                          $l->setAlt('Atualizar');
377                          $l->setPrompt('Atualizar');
378                          $l->setRender('link');
379
380                          $i->addLink($l);
381                         */
382                        $l = new Link();
383                        $l->setHref('/contact/' . $value['id']);
384                        $l->setRel('get');
385                        $l->setAlt('Buscar');
386                        $l->setPrompt('Buscar');
387                        $l->setRender('link');
388
389                        $i->addLink($l);
390                    }
391                    $c->addItem($i);
392                }
393            }
394
395
396            if (!$contacts && !$dynamicContacts && !$groups) {
397                $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Resource not found.');
398                return $response;
399            }
400
401
402            $t = new Template();
403
404            $d = new Data();
405
406            $d->setName('id');
407            $d->setValue(null);
408            $d->setPrompt('Id do Grupo');
409            $d->setDataType('string');
410            $d->setMaxLength('100');
411            $d->setMinLength(null);
412            $d->setRequired(true);
413
414            $t->addData($d);
415
416            $d = new Data();
417            $d->setName('user');
418            $d->setValue(null);
419            $d->setPrompt('Id Dono do Grupo');
420            $d->setDataType('string');
421            $d->setMaxLength('100');
422            $d->setMinLength(null);
423            $d->setRequired(true);
424
425            $t->addData($d);
426
427            $d = new Data();
428            $d->setName('name');
429            $d->setValue(null);
430            $d->setPrompt('Nome do Grupo');
431            $d->setDataType('string');
432            $d->setMaxLength('100');
433            $d->setMinLength(null);
434            $d->setRequired(true);
435
436            $t->addData($d);
437            $c->setTemplate($t);
438            $h->setCollection($c);
439
440            $response->body = $h->getHypermedia($request->accept[10][0]);
441            return $response;
442        } catch (Exception $ex) {
443            $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', $ex);
444            return $response;
445        }
446    }
447
448    function decodeAcl($bin) {
449
450        $acl = array();
451        $bin = str_split($bin);
452        $acl['read'] = (isset($bin[0]) && $bin[0] == 1) ? true : false;
453        $acl['write'] = (isset($bin[1]) && $bin[1] == 1) ? true : false;
454        $acl['update'] = (isset($bin[2]) && $bin[2] == 1) ? true : false;
455        $acl['delete'] = (isset($bin[3]) && $bin[3] == 1) ? true : false;
456
457        return $acl;
458    }
459
460    private function createException($request, &$response, $code, $title, $description) {
461        $response->code = $code;
462
463        $h = new Hypermedia();
464        $c = new Collection($request->resources, 'DynamicContactResource');
465        $e = new Error();
466
467        $e->setCode($code);
468        $e->setTitle($title);
469        $e->setDescription($description);
470
471        $c->setError($e);
472        $h->setCollection($c);
473
474        $response->body = $h->getHypermedia($request->accept[10][0]);
475    }
476
477}
478
479?>
Note: See TracBrowser for help on using the repository browser.