source: branches/2.4/prototype/rest/catalog/SharedContactResource.php @ 6754

Revision 6754, 9.4 KB checked in by niltonneto, 12 years ago (diff)

Ticket #0000 - Copiadas as alterações do Trunk. Versão final da 2.4.1.

  • 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 SharedContactResource extends Resource {
11
12    /**
13     * Retorna um contato 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 um contato 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 contato
36            $contact = Controller::find( array( 'concept' => 'contact' ), false, array( 'filter' => array('=', 'id', $id) ) );
37
38            if (!$contact) {
39                $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Resource not found.');
40                return $response;
41            }
42
43            //Proprietario do contato
44            $ownerId = $contact[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            $flagContact = 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 contato habilitou o acesso de leitura para o usuario logado
63                    if($s['uidNumber'] == $ownerId && $acl[$s['uidNumber']]['read']){
64                        $flagContact = true;
65                    }
66                }
67            }
68
69            //Se o contato nao esta compartilhado
70            if(!$flagContact){
71                $this->createException($request, $response, Response::UNAUTHORIZED, 'unauthorized', 'Resource unauthorized.');
72                return $response;
73            }
74
75            //Obtem informacoes do proprietario do contato
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            $t = new Template();
87            $d = new Data();
88
89            $d->setName('name');
90            $d->setValue(null);
91            $d->setPrompt('Nome do Contato');
92            $d->setDataType('string');
93            $d->setMaxLength(100);
94            $d->setMinLength(null);
95            $d->setRequired(true);
96
97            $t->addData($d);
98
99            $d = new Data();
100            $d->setName('email');
101            $d->setValue(null);
102            $d->setPrompt('Email do Contato');
103            $d->setDataType('string');
104            $d->setMaxLength(100);
105            $d->setMinLength(null);
106            $d->setRequired(true);
107
108            $t->addData($d);
109
110            $d = new Data();
111            $d->setName('telefone');
112            $d->setValue(null);
113            $d->setPrompt('Telefone do Contato');
114            $d->setDataType('string');
115            $d->setMaxLength(100);
116            $d->setMinLength(null);
117            $d->setRequired(true);
118
119            $t->addData($d);
120
121            $c->setTemplate($t);
122
123
124            $d = new Data();
125            $d->setName('name');
126            $d->setValue($contact[0]['name']);
127            $d->setPrompt('Nome do Contato');
128            $d->setDataType('string');
129            $d->setMaxLength('100');
130            $d->setMinLength(null);
131            $d->setRequired(true);
132
133            $c->addData($d);
134
135            $d = new Data();
136            $d->setName('email');
137            $d->setValue($contact[0]['email']);
138            $d->setPrompt('Email do Contato');
139            $d->setDataType('string');
140            $d->setMaxLength('100');
141            $d->setMinLength(null);
142            $d->setRequired(true);
143
144            $c->addData($d);
145
146            $d = new Data();
147            $d->setName('telephone');
148            $d->setValue($contact[0]['telephone']);
149            $d->setPrompt('Telefone do Contato');
150            $d->setDataType('string');
151            $d->setMaxLength('100');
152            $d->setMinLength(null);
153            $d->setRequired(true);
154
155            $c->addData($d);
156
157            $d = new Data();
158            $d->setName('ownerId');
159            $d->setValue($userOwner['id']);
160            $d->setPrompt('Atributo UID (LDAP)');
161            $d->setDataType('string');
162            $d->setMaxLength(100);
163            $d->setMinLength(null);
164            $d->setRequired(true);
165
166            $c->addData($d);
167
168            $d = new Data();
169            $d->setName('ownerName');
170            $d->setValue($userOwner['name']);
171            $d->setPrompt('Atributo cn (LDAP)');
172            $d->setDataType('string');
173            $d->setMaxLength(100);
174            $d->setMinLength(null);
175            $d->setRequired(true);
176
177            $c->addData($d);
178
179            //Define os link baseado nas permissoes de acesso
180            if(Config::me('uidNumber') != $value['user']){
181                    /*Descomentar ao implementar os métodos
182                    if($acl[$value['user']]['delete']){
183                          $l = new Link();
184                          $l->setHref('');
185                          $l->setRel('delete');
186                          $l->setAlt('Remover');
187                          $l->setPrompt('Remover');
188                          $l->setRender('link');
189                          $i->addLink($l);
190                    }
191
192                    if($acl[$value['user']]['update']){
193                          $l = new Link();
194                          $l->setHref('');
195                          $l->setRel('put');
196                          $l->setAlt('Atualizar');
197                          $l->setPrompt('Atualizar');
198                          $l->setRender('link');
199                          $i->addLink($l);
200                    }
201
202                    if($acl[$value['user']]['write']){
203                          $l = new Link();
204                          $l->setHref('');
205                          $l->setRel('post');
206                          $l->setAlt('Criar');
207                          $l->setPrompt('Criar novo');
208                          $l->setRender('link');
209                          $i->addLink($l);
210                    }
211
212                    if($acl[$value['user']]['read']){
213                          $l = new Link();
214                          $l->setHref('');
215                          $l->setRel('get');
216                          $l->setAlt('Buscar');
217                          $l->setPrompt('Buscar');
218                          $l->setRender('link');
219                          $i->addLink($l);
220                    }*/
221            }
222            else{
223                    /*Descomentar ao implementar métodos no recurso
224                    $l = new Link();
225                    $l->setHref('');
226                    $l->setRel('delete');
227                    $l->setAlt('Remover');
228                    $l->setPrompt('Remover');
229                    $l->setRender('link');
230                    $i->addLink($l);
231
232                    $l = new Link();
233                    $l->setHref('');
234                    $l->setRel('put');
235                    $l->setAlt('Atualizar');
236                    $l->setPrompt('Atualizar');
237                    $l->setRender('link');
238                    $i->addLink($l);
239
240                    $l = new Link();
241                    $l->setHref('');
242                    $l->setRel('get');
243                    $l->setAlt('Buscar');
244                    $l->setPrompt('Buscar');
245                    $l->setRender('link');
246
247                    $i->addLink($l);
248                    */
249            }
250
251            $h->setCollection($c);
252
253        } catch (Exception $ex) {
254            $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', $ex);
255            return $response;
256        }
257
258        $response->body = $h->getHypermedia($request->accept[10][0]);
259        return $response;
260    }
261
262    function decodeAcl($bin) {
263
264        $acl = array();
265        $bin = str_split($bin);
266        $acl['read'] = (isset($bin[0]) && $bin[0] == 1) ? true : false;
267        $acl['write'] = (isset($bin[1]) && $bin[1] == 1) ? true : false;
268        $acl['update'] = (isset($bin[2]) && $bin[2] == 1) ? true : false;
269        $acl['delete'] = (isset($bin[3]) && $bin[3] == 1) ? true : false;
270
271        return $acl;
272    }
273
274    private function createException($request, &$response, $code, $title, $description) {
275        $response->code = $code;
276
277        $h = new Hypermedia();
278        $c = new Collection($request->resources, 'DynamicContactResource');
279        $e = new Error();
280
281        $e->setCode($code);
282        $e->setTitle($title);
283        $e->setDescription($description);
284
285        $c->setError($e);
286        $h->setCollection($c);
287
288        $response->body = $h->getHypermedia($request->accept[10][0]);
289    }
290}
291
292?>
Note: See TracBrowser for help on using the repository browser.