source: trunk/prototype/rest/catalog/SharedGroupResource.php @ 6578

Revision 6578, 14.1 KB checked in by tezza, 12 years ago (diff)

Ticket #2766 - Acrescentado/corrigindo recursos de contatos/grupos compartilhados.

  • 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 SharedGroupResource extends Resource {
11
12    /**
13     * Retorna um grupo compartilhado
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     José Vicente Tezza Jr.
19     * @return     Retorna os contatos de um Grupo Compartilhado
20     * @access     public
21     * */
22    function get($request, $id) {
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, 'SharedGroupResource');
32
33        try {
34
35            //Recupera o grupo
36            $group = Controller::read(array('concept' => 'contactGroup'), false, array('filter' => array('=', 'id', $id)));
37
38            if (!$group) {
39                $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Resource not found.');
40                return $response;
41            }
42
43            //Proprietario do grupo
44            $ownerId = $group[0]['user'];
45
46            $idS = array(Config::me("uidNumber"));
47            $acl = array();
48
49            //Recupera o uidNumber do usuário que compartilhou o grupo com o usuário logado
50            $sql = 'SELECT acl_account as "uidNumber", acl_rights as "acl" '.
51                   'FROM phpgw_acl '.
52                   'WHERE (acl_location =   \'' . Config::me("uidNumber") . '\' AND acl_appname =  \'contactcenter\' AND acl_account = \''.$ownerId.'\')';
53            $shareds = Controller::service('PostgreSQL')->execResultSql($sql);
54
55            //Verifica o acesso definido para o usuario logado
56            $flagGroup = false;
57            if (!empty($shareds) && $shareds){
58                foreach ($shareds as $s) {
59                    array_push($idS, $s['uidNumber']);
60                    $acl[$s['uidNumber']] = $this->decodeAcl(decbin($s['acl']));
61
62                    //verifica se o proprietario do grupo habilitou o acesso de leitura para o usuario logado
63                    if($s['uidNumber'] == $ownerId && $acl[$s['uidNumber']]['read']){
64                        $flagGroup = true;
65                    }
66                }
67            }
68
69            //Se o grupo nao esta compartilhado
70            if(!$flagGroup){
71                $this->createException($request, $response, Response::UNAUTHORIZED, 'unauthorized', 'Resource unauthorized.');
72                return $response;
73            }
74
75            //Obtem informacoes do proprietario do grupo
76            $userOwner = Controller::read(
77                                           array('concept' => 'user','service'=>'OpenLDAP'),
78                                           false,
79                                           array('filter' => array('=', 'id', $ownerId ), 'notExternal' => true)
80            );
81
82            if(is_array($userOwner)){
83                $userOwner = $userOwner[0];
84            }
85
86            //Recupera os grupos do usuario
87            $groups = Controller::find(array('concept' => 'contactGroup'), false, array('filter' => array('=', 'user', $ownerId), 'order' => array('name')));
88
89            if($groups){
90                foreach($groups[0]['contacts'] as $value){
91                        $d = new Data();
92                        $i = new Item($request->resources, 'ContactResource', $value['id']);
93
94                        $d->setName('name');
95                        $d->setValue($value['name']);
96                        $d->setPrompt('Nome do Grupo');
97                        $d->setDataType('string');
98                        $d->setMaxLength('100');
99                        $d->setMinLength(null);
100                        $d->setRequired(true);
101
102                        $i->addData($d);
103
104                        $d = new Data();
105                        $d->setName('id');
106                        $d->setValue($value['id']);
107                        $d->setPrompt('Id do Contato');
108                        $d->setDataType('string');
109                        $d->setMaxLength('100');
110                        $d->setMinLength(null);
111                        $d->setRequired(true);
112
113                        $i->addData($d);
114
115                        $d = new Data();
116                        $d->setName('email');
117                        $d->setValue($value['email']);
118                        $d->setPrompt('Email do Contato');
119                        $d->setDataType('string');
120                        $d->setMaxLength('100');
121                        $d->setMinLength(null);
122                        $d->setRequired(true);
123
124                        $i->addData($d);
125
126                        //Define os link baseado nas permissoes de acesso
127                        if(Config::me('uidNumber') != $value['user']){
128                                /*Descomentar ao implementar os métodos
129                                if($acl[$value['user']]['delete']){
130                                        $l = new Link();
131                                        $l->setHref('');
132                                        $l->setRel('delete');
133                                        $l->setAlt('Remover');
134                                        $l->setPrompt('Remover');
135                                        $l->setRender('link');
136                                        $i->addLink($l);
137                                }
138
139                                if($acl[$value['user']]['update']){
140                                        $l = new Link();
141                                        $l->setHref('');
142                                        $l->setRel('put');
143                                        $l->setAlt('Atualizar');
144                                        $l->setPrompt('Atualizar');
145                                        $l->setRender('link');
146                                        $i->addLink($l);
147                                }
148
149                                if($acl[$value['user']]['write']){
150                                        $l = new Link();
151                                        $l->setHref('');
152                                        $l->setRel('post');
153                                        $l->setAlt('Criar');
154                                        $l->setPrompt('Criar novo');
155                                        $l->setRender('link');
156                                        $i->addLink($l);
157                                }
158
159                                if($acl[$value['user']]['read']){
160                                        $l = new Link();
161                                        $l->setHref('');
162                                        $l->setRel('get');
163                                        $l->setAlt('Buscar');
164                                        $l->setPrompt('Buscar');
165                                        $l->setRender('link');
166                                        $i->addLink($l);
167                                }*/
168                        }
169                        else{
170                                /*Descomentar ao implementar métodos no recurso
171                                $l = new Link();
172                                $l->setHref('');
173                                $l->setRel('delete');
174                                $l->setAlt('Remover');
175                                $l->setPrompt('Remover');
176                                $l->setRender('link');
177                                $i->addLink($l);
178
179                                $l = new Link();
180                                $l->setHref('');
181                                $l->setRel('put');
182                                $l->setAlt('Atualizar');
183                                $l->setPrompt('Atualizar');
184                                $l->setRender('link');
185                                $i->addLink($l);
186
187                                $l = new Link();
188                                $l->setHref('');
189                                $l->setRel('get');
190                                $l->setAlt('Buscar');
191                                $l->setPrompt('Buscar');
192                                $l->setRender('link');
193
194                                $i->addLink($l);
195                                */
196                        }
197                        $c->addItem($i);
198                }
199            }
200
201            if (!$groups) {
202                $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Resource not found.');
203                return $response;
204            }
205
206            $t = new Template();
207            $d = new Data();
208
209            $d->setName('name');
210            $d->setValue(null);
211            $d->setPrompt('Nome do Contato');
212            $d->setDataType('string');
213            $d->setMaxLength(100);
214            $d->setMinLength(null);
215            $d->setRequired(true);
216
217            $t->addData($d);
218
219            $d = new Data();
220            $d->setName('email');
221            $d->setValue(null);
222            $d->setPrompt('Email do Contato');
223            $d->setDataType('string');
224            $d->setMaxLength(100);
225            $d->setMinLength(null);
226            $d->setRequired(true);
227
228            $t->addData($d);
229
230            $d = new Data();
231            $d->setName('telefone');
232            $d->setValue(null);
233            $d->setPrompt('Telefone do Contato');
234            $d->setDataType('string');
235            $d->setMaxLength(100);
236            $d->setMinLength(null);
237            $d->setRequired(true);
238
239            $t->addData($d);
240
241            $c->setTemplate($t);
242
243            $d = new Data();
244            $d->setName('id');
245            $d->setValue($groups[0]['id']);
246
247            $d->setPrompt('Id do Grupo');
248            $d->setDataType('string');
249            $d->setMaxLength(100);
250            $d->setMinLength(null);
251            $d->setRequired(true);
252
253            $c->addData($d);
254
255            $d = new Data();
256            $d->setName('name');
257            $d->setValue($groups[0]['name']);
258            $d->setPrompt('Nome do Grupo');
259            $d->setDataType('string');
260            $d->setMaxLength(100);
261            $d->setMinLength(null);
262            $d->setRequired(true);
263
264            $c->addData($d);
265
266            $d = new Data();
267            $d->setName('email');
268            $d->setValue($groups[0]['email']);
269            $d->setPrompt('Email do Grupo');
270            $d->setDataType('string');
271            $d->setMaxLength(100);
272            $d->setMinLength(null);
273            $d->setRequired(true);
274
275            $c->addData($d);
276
277            $d = new Data();
278            $d->setName('ownerId');
279            $d->setValue($userOwner['id']);
280            $d->setPrompt('Atributo UID (LDAP)');
281            $d->setDataType('string');
282            $d->setMaxLength(100);
283            $d->setMinLength(null);
284            $d->setRequired(true);
285
286            $c->addData($d);
287
288            $d = new Data();
289            $d->setName('ownerName');
290            $d->setValue($userOwner['name']);
291            $d->setPrompt('Atributo cn (LDAP)');
292            $d->setDataType('string');
293            $d->setMaxLength(100);
294            $d->setMinLength(null);
295            $d->setRequired(true);
296
297            $c->addData($d);
298
299
300            //Define os link baseado nas permissoes de acesso
301            if(Config::me('uidNumber') != $value['user']){
302                    /*Descomentar ao implementar os métodos
303                    if($acl[$value['user']]['delete']){
304                          $l = new Link();
305                          $l->setHref('');
306                          $l->setRel('delete');
307                          $l->setAlt('Remover');
308                          $l->setPrompt('Remover');
309                          $l->setRender('link');
310                          $i->addLink($l);
311                    }
312
313                    if($acl[$value['user']]['update']){
314                          $l = new Link();
315                          $l->setHref('');
316                          $l->setRel('put');
317                          $l->setAlt('Atualizar');
318                          $l->setPrompt('Atualizar');
319                          $l->setRender('link');
320                          $i->addLink($l);
321                    }
322
323                    if($acl[$value['user']]['write']){
324                          $l = new Link();
325                          $l->setHref('');
326                          $l->setRel('post');
327                          $l->setAlt('Criar');
328                          $l->setPrompt('Criar novo');
329                          $l->setRender('link');
330                          $i->addLink($l);
331                    }
332
333                    if($acl[$value['user']]['read']){
334                          $l = new Link();
335                          $l->setHref('');
336                          $l->setRel('get');
337                          $l->setAlt('Buscar');
338                          $l->setPrompt('Buscar');
339                          $l->setRender('link');
340                          $i->addLink($l);
341                    }*/
342            }
343            else{
344                    /*Descomentar ao implementar métodos no recurso
345                    $l = new Link();
346                    $l->setHref('');
347                    $l->setRel('delete');
348                    $l->setAlt('Remover');
349                    $l->setPrompt('Remover');
350                    $l->setRender('link');
351                    $i->addLink($l);
352
353                    $l = new Link();
354                    $l->setHref('');
355                    $l->setRel('put');
356                    $l->setAlt('Atualizar');
357                    $l->setPrompt('Atualizar');
358                    $l->setRender('link');
359                    $i->addLink($l);
360
361                    $l = new Link();
362                    $l->setHref('');
363                    $l->setRel('get');
364                    $l->setAlt('Buscar');
365                    $l->setPrompt('Buscar');
366                    $l->setRender('link');
367
368                    $i->addLink($l);
369                    */
370            }
371
372            $h->setCollection($c);
373
374        } catch (Exception $ex) {
375            $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', $ex);
376            return $response;
377        }
378
379        $response->body = $h->getHypermedia($request->accept[10][0]);
380        return $response;
381    }
382
383    function decodeAcl($bin) {
384
385        $acl = array();
386        $bin = str_split($bin);
387        $acl['read'] = (isset($bin[0]) && $bin[0] == 1) ? true : false;
388        $acl['write'] = (isset($bin[1]) && $bin[1] == 1) ? true : false;
389        $acl['update'] = (isset($bin[2]) && $bin[2] == 1) ? true : false;
390        $acl['delete'] = (isset($bin[3]) && $bin[3] == 1) ? true : false;
391
392        return $acl;
393    }
394
395    private function createException($request, &$response, $code, $title, $description) {
396        $response->code = $code;
397
398        $h = new Hypermedia();
399        $c = new Collection($request->resources, 'DynamicContactResource');
400        $e = new Error();
401
402        $e->setCode($code);
403        $e->setTitle($title);
404        $e->setDescription($description);
405
406        $c->setError($e);
407        $h->setCollection($c);
408
409        $response->body = $h->getHypermedia($request->accept[10][0]);
410    }
411}
412
413?>
Note: See TracBrowser for help on using the repository browser.