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

Revision 8156, 13.7 KB checked in by angelo, 11 years ago (diff)

Ticket #3486 - Problema na criacao e envio de email para 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('=','id', $id), 'AND' => array('=','user', $ownerId) , 'order' => array('name')));
88            if($groups){
89                foreach($groups[0]['contacts'] as $value){
90                        $d = new Data();
91                        $i = new Item($request->resources, 'ContactResource', $value['id']);
92
93                        $d->setName('name');
94                        $d->setValue($value['name']);
95                        $d->setPrompt('Nome do Grupo');
96                        $d->setDataType('string');
97                        $d->setMaxLength('100');
98                        $d->setMinLength(null);
99                        $d->setRequired(true);
100
101                        $i->addData($d);
102
103                        $d = new Data();
104                        $d->setName('id');
105                        $d->setValue($value['id']);
106                        $d->setPrompt('Id do Contato');
107                        $d->setDataType('string');
108                        $d->setMaxLength('100');
109                        $d->setMinLength(null);
110                        $d->setRequired(true);
111
112                        $i->addData($d);
113
114                        $d = new Data();
115                        $d->setName('email');
116                        $d->setValue($value['email']);
117                        $d->setPrompt('Email do Contato');
118                        $d->setDataType('string');
119                        $d->setMaxLength('100');
120                        $d->setMinLength(null);
121                        $d->setRequired(true);
122
123                        $i->addData($d);
124
125                        //Define os link baseado nas permissoes de acesso
126                        if(Config::me('uidNumber') != $value['user']){
127                                /*Descomentar ao implementar os métodos
128                                if($acl[$value['user']]['delete']){
129                                        $l = new Link();
130                                        $l->setHref('');
131                                        $l->setRel('delete');
132                                        $l->setAlt('Remover');
133                                        $l->setPrompt('Remover');
134                                        $l->setRender('link');
135                                        $i->addLink($l);
136                                }
137
138                                if($acl[$value['user']]['update']){
139                                        $l = new Link();
140                                        $l->setHref('');
141                                        $l->setRel('put');
142                                        $l->setAlt('Atualizar');
143                                        $l->setPrompt('Atualizar');
144                                        $l->setRender('link');
145                                        $i->addLink($l);
146                                }
147
148                                if($acl[$value['user']]['write']){
149                                        $l = new Link();
150                                        $l->setHref('');
151                                        $l->setRel('post');
152                                        $l->setAlt('Criar');
153                                        $l->setPrompt('Criar novo');
154                                        $l->setRender('link');
155                                        $i->addLink($l);
156                                }
157
158                                if($acl[$value['user']]['read']){
159                                        $l = new Link();
160                                        $l->setHref('');
161                                        $l->setRel('get');
162                                        $l->setAlt('Buscar');
163                                        $l->setPrompt('Buscar');
164                                        $l->setRender('link');
165                                        $i->addLink($l);
166                                }*/
167                        }
168                        else{
169                                /*Descomentar ao implementar métodos no recurso
170                                $l = new Link();
171                                $l->setHref('');
172                                $l->setRel('delete');
173                                $l->setAlt('Remover');
174                                $l->setPrompt('Remover');
175                                $l->setRender('link');
176                                $i->addLink($l);
177
178                                $l = new Link();
179                                $l->setHref('');
180                                $l->setRel('put');
181                                $l->setAlt('Atualizar');
182                                $l->setPrompt('Atualizar');
183                                $l->setRender('link');
184                                $i->addLink($l);
185
186                                $l = new Link();
187                                $l->setHref('');
188                                $l->setRel('get');
189                                $l->setAlt('Buscar');
190                                $l->setPrompt('Buscar');
191                                $l->setRender('link');
192
193                                $i->addLink($l);
194                                */
195                        }
196                        $c->addItem($i);
197                }
198            }
199
200            if (!$groups) {
201                $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Resource not found.');
202                return $response;
203            }
204
205            $t = new Template();
206            $d = new Data();
207
208            $d->setName('name');
209            $d->setValue(null);
210            $d->setPrompt('Nome do Contato');
211            $d->setDataType('string');
212            $d->setMaxLength(100);
213            $d->setMinLength(null);
214            $d->setRequired(true);
215
216            $t->addData($d);
217
218            $d = new Data();
219            $d->setName('email');
220            $d->setValue(null);
221            $d->setPrompt('Email do Contato');
222            $d->setDataType('string');
223            $d->setMaxLength(100);
224            $d->setMinLength(null);
225            $d->setRequired(true);
226
227            $t->addData($d);
228
229            $d = new Data();
230            $d->setName('telefone');
231            $d->setValue(null);
232            $d->setPrompt('Telefone do Contato');
233            $d->setDataType('string');
234            $d->setMaxLength(100);
235            $d->setMinLength(null);
236            $d->setRequired(true);
237
238            $t->addData($d);
239
240            $c->setTemplate($t);
241
242            $d = new Data();
243            $d->setName('id');
244            $d->setValue($groups[0]['id']);
245
246            $d->setPrompt('Id do Grupo');
247            $d->setDataType('string');
248            $d->setMaxLength(100);
249            $d->setMinLength(null);
250            $d->setRequired(true);
251
252            $c->addData($d);
253
254            $d = new Data();
255            $d->setName('name');
256            $d->setValue($groups[0]['name']);
257            $d->setPrompt('Nome do Grupo');
258            $d->setDataType('string');
259            $d->setMaxLength(100);
260            $d->setMinLength(null);
261            $d->setRequired(true);
262
263            $c->addData($d);
264
265            $d = new Data();
266            $d->setName('email');
267            $d->setValue($groups[0]['email']);
268            $d->setPrompt('Email do Grupo');
269            $d->setDataType('string');
270            $d->setMaxLength(100);
271            $d->setMinLength(null);
272            $d->setRequired(true);
273
274            $c->addData($d);
275
276            $d = new Data();
277            $d->setName('ownerId');
278            $d->setValue($userOwner['id']);
279            $d->setPrompt('Atributo UID (LDAP)');
280            $d->setDataType('string');
281            $d->setMaxLength(100);
282            $d->setMinLength(null);
283            $d->setRequired(true);
284
285            $c->addData($d);
286
287            $d = new Data();
288            $d->setName('ownerName');
289            $d->setValue($userOwner['name']);
290            $d->setPrompt('Atributo cn (LDAP)');
291            $d->setDataType('string');
292            $d->setMaxLength(100);
293            $d->setMinLength(null);
294            $d->setRequired(true);
295
296            $c->addData($d);
297
298
299            //Define os link baseado nas permissoes de acesso
300            if(Config::me('uidNumber') != $value['user']){
301                    /*Descomentar ao implementar os métodos
302                    if($acl[$value['user']]['delete']){
303                          $l = new Link();
304                          $l->setHref('');
305                          $l->setRel('delete');
306                          $l->setAlt('Remover');
307                          $l->setPrompt('Remover');
308                          $l->setRender('link');
309                          $i->addLink($l);
310                    }
311
312                    if($acl[$value['user']]['update']){
313                          $l = new Link();
314                          $l->setHref('');
315                          $l->setRel('put');
316                          $l->setAlt('Atualizar');
317                          $l->setPrompt('Atualizar');
318                          $l->setRender('link');
319                          $i->addLink($l);
320                    }
321
322                    if($acl[$value['user']]['write']){
323                          $l = new Link();
324                          $l->setHref('');
325                          $l->setRel('post');
326                          $l->setAlt('Criar');
327                          $l->setPrompt('Criar novo');
328                          $l->setRender('link');
329                          $i->addLink($l);
330                    }
331
332                    if($acl[$value['user']]['read']){
333                          $l = new Link();
334                          $l->setHref('');
335                          $l->setRel('get');
336                          $l->setAlt('Buscar');
337                          $l->setPrompt('Buscar');
338                          $l->setRender('link');
339                          $i->addLink($l);
340                    }*/
341            }
342            else{
343                    /*Descomentar ao implementar métodos no recurso
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                    $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                    $l = new Link();
361                    $l->setHref('');
362                    $l->setRel('get');
363                    $l->setAlt('Buscar');
364                    $l->setPrompt('Buscar');
365                    $l->setRender('link');
366
367                    $i->addLink($l);
368                    */
369            }
370
371            $h->setCollection($c);
372
373        } catch (Exception $ex) {
374            $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', $ex);
375            return $response;
376        }
377
378        $response->body = $h->getHypermedia($request->accept[10][0]);
379        return $response;
380    }
381
382    function decodeAcl($bin) {
383
384        $acl = array();
385        $bin = str_split($bin);
386        $acl['read'] = (isset($bin[0]) && $bin[0] == 1) ? true : false;
387        $acl['write'] = (isset($bin[1]) && $bin[1] == 1) ? true : false;
388        $acl['update'] = (isset($bin[2]) && $bin[2] == 1) ? true : false;
389        $acl['delete'] = (isset($bin[3]) && $bin[3] == 1) ? true : false;
390
391        return $acl;
392    }
393
394    private function createException($request, &$response, $code, $title, $description) {
395        $response->code = $code;
396
397        $h = new Hypermedia();
398        $c = new Collection($request->resources, 'DynamicContactResource');
399        $e = new Error();
400
401        $e->setCode($code);
402        $e->setTitle($title);
403        $e->setDescription($description);
404
405        $c->setError($e);
406        $h->setCollection($c);
407
408        $response->body = $h->getHypermedia($request->accept[10][0]);
409    }
410}
411
412?>
Note: See TracBrowser for help on using the repository browser.