source: sandbox/2.4.1-3/prototype/rest/user/UsersResource.php @ 6395

Revision 6395, 6.7 KB checked in by gustavo, 12 years ago (diff)

Ticket #2768 - Melhorias na inserção de destinatários na criacao de mensagem

  • 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 UsersResource extends Resource {
11
12    /**
13     * Retorna uma lista de usuários
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 uma lista de usuários do LDAP
20     * @access     public
21     * */
22    function get($request) {
23
24        $response = new Response($request);
25        $response->addHeader('Content-type', 'aplication/json');
26        $response->code = Response::OK;
27
28        $h = new Hypermedia();
29        $c = new Collection($request->resources, 'UsersResource');
30
31        try {
32            $this->secured();
33
34            //Executa uma consulta de usuários do LDAP a partir de um determinado atributo e valor
35            if(isset($_GET['field']) && isset($_GET['value'])){
36
37                    //recupera os atributos definidos no conceito 'user'
38                    $map = Config::get('user', 'OpenLDAP.mapping');
39
40                    //verifica se o campo(atributo) passado pelo usuário está definido no conceito 'user'
41                    if(isset($map[ $_GET['field'] ])){
42                            $users = Controller::find(array('concept' => 'user','service'=>'OpenLDAP'), false, array('filter' => array('=', $_GET['field'],$_GET['value'] )));
43                    }
44                    else{
45                        //lança warning no log do Expresso
46                        trigger_error("Invalid field (".$_GET['field'].") in the query.", E_USER_WARNING);
47
48                        //formata os atributos LDAP do conceito 'user'
49                        $attributes = implode(', ', $map);
50
51                        //Configura o erro na hypermedia
52                        $error = new Error();
53                        $error->setCode(Response::NOTFOUND);
54                        $error->setTitle('UserLDAP not found');
55                        $error->setDescription("Invalid field (".$_GET['field'].") in the query. Use of these: ".$attributes);
56
57                        $c->setError($error);
58                        $h->setCollection($c);
59
60                        //retorna a hypermedia
61                        $response->code = Response::NOTFOUND;
62                        $response->body = $h->getHypermedia($request->accept[10][0]);
63                        return $response;
64                    }
65            }
66            else{
67                    //Executa a consulta dos primeiros 20 usuarios do LDAP
68                    $users = Controller::find(array('concept' => 'user','service'=>'OpenLDAP'), false, array('filter' => array('=', 'phpgwAccountType', 'u'),'limit'=>20));
69            }
70
71            //Se nao foi encontrado usuarios na consulta
72            if($users===false){
73                $error = new Error();
74                $error->setCode(Response::NOTFOUND);
75                $error->setTitle('UserLDAP not found');
76                $error->setDescription('Users not found.');
77
78                $c->setError($error);
79                $h->setCollection($c);
80
81                $response->code = Response::NOTFOUND;
82                $response->body = $h->getHypermedia($request->accept[10][0]);
83                return $response;
84            }
85
86            foreach($users as $value){
87                $d = new Data();
88                $i = new Item($request->resources, 'UsersResource', $value['uid']);
89
90                $d->setName('name');
91                $d->setValue($value['name']);
92                $d->setPrompt('Nome do Usuário');
93                $d->setDataType('string');
94                $d->setMaxLength('100');
95                $d->setMinLength(null);
96                $d->setRequired(true);
97
98                $i->addData($d);
99
100                $d = new Data();
101                $d->setName('email');
102                $d->setValue($value['mail']);
103                $d->setPrompt('Email do Usuário');
104                $d->setDataType('string');
105                $d->setMaxLength('100');
106                $d->setMinLength(null);
107                $d->setRequired(true);
108
109                $i->addData($d);
110
111                $d = new Data();
112                $d->setName('telephoneNumber');
113                $d->setValue($value['telephoneNumber']);
114                $d->setPrompt('Telefone do Usuário');
115                $d->setDataType('string');
116                $d->setMaxLength('100');
117                $d->setMinLength(null);
118                $d->setRequired(true);
119
120                $i->addData($d);
121
122                $l = new Link();
123
124                $l->setHref('');
125                $l->setRel('delete');
126                $l->setAlt('Remover');
127                $l->setPrompt('Remover');
128                $l->setRender('link');
129
130                $i->addLink($l);
131
132                $l = new Link();
133                $l->setHref('');
134                $l->setRel('put');
135                $l->setAlt('Atualizar');
136                $l->setPrompt('Atualizar');
137                $l->setRender('link');
138
139                $i->addLink($l);
140
141                $l = new Link();
142                $l->setHref('/userldap/'.$value['uid']);
143                $l->setRel('get');
144                $l->setAlt('Buscar');
145                $l->setPrompt('Buscar');
146                $l->setRender('link');
147
148                $i->addLink($l);
149                $c->addItem($i);
150            }
151
152            $t = new Template();
153            $d = new Data();
154
155            $d->setName('name');
156            $d->setValue(null);
157            $d->setPrompt('Nome do Usuário');
158            $d->setDataType('string');
159            $d->setMaxLength(100);
160            $d->setMinLength(null);
161            $d->setRequired(true);
162
163            $t->addData($d);
164
165            $d = new Data();
166            $d->setName('email');
167            $d->setValue(null);
168            $d->setPrompt('Email do Usuário');
169            $d->setDataType('string');
170            $d->setMaxLength(100);
171            $d->setMinLength(null);
172            $d->setRequired(true);
173
174            $t->addData($d);
175
176            $d = new Data();
177            $d->setName('telefone');
178            $d->setValue(null);
179            $d->setPrompt('Telefone do Usuário');
180            $d->setDataType('string');
181            $d->setMaxLength(100);
182            $d->setMinLength(null);
183            $d->setRequired(true);
184
185            $t->addData($d);
186
187            $c->setTemplate($t);
188
189            $d = new Data();
190            $d->setName('Usuário LDAP');
191            $d->setValue(null);
192            $d->setPrompt('Usuário do LDAP');
193            $d->setDataType(null);
194            $d->setMaxLength(null);
195            $d->setMinLength(null);
196            $d->setRequired(null);
197
198            $c->setData($d);
199
200            $queries = array();
201            $queries[0] = new Querie();
202            $queries[0]->setHref($c->href);
203            $queries[0]->setData('field','',true);
204            $queries[0]->setData('value','',true);
205            $c->setQueries($queries);
206
207
208            $h->setCollection($c);
209
210        }catch (Exception $ex){
211                $error = new Error();
212                $error->setCode(Response::INTERNALSERVERERROR);
213                $error->setTitle('Internal Server Error');
214                $error->setDescription($ex);
215
216                $c->setError($error);
217                $h->setCollection($c);
218
219                $response->code = Response::INTERNALSERVERERROR;
220                $response->body = $h->getHypermedia($request->accept[10][0]);
221                return $response;
222        }
223
224        $response->body = $h->getHypermedia($request->accept[10][0]);
225        return $response;
226  }
227}
228?>
Note: See TracBrowser for help on using the repository browser.