source: trunk/prototype/rest/user/UsersResource.php @ 6543

Revision 6543, 6.1 KB checked in by gustavo, 12 years ago (diff)

Ticket #2766 - Mudanca da estrategia do desenvolvimento da melhoria

  • 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        $this->secured();
32       
33        try {       
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 Usuario');
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 Usuario');
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 Usuario');
115                        $d->setDataType('string');
116                        $d->setMaxLength('100');
117                        $d->setMinLength(null);
118                        $d->setRequired(true);
119
120                        $i->addData($d);
121
122                        $d = new Data();
123                        $d->setName('vacationActive');
124                        $d->setValue($value['vacationActive']);
125                        $d->setPrompt('Status da Regra fora de Escritorio');
126                        $d->setDataType('boolean');
127                        $d->setMaxLength('10');
128                        $d->setMinLength(null);
129                        $d->setRequired(null);
130
131                        $i->addData($d);
132                       
133                        $d = new Data();
134                        $d->setName('vacationInfo');
135                        $d->setValue($value['vacationInfo']);
136                        $d->setPrompt('Mensagem da Regra fora de Escritorio');
137                        $d->setDataType('boolean');
138                        $d->setMaxLength('10');
139                        $d->setMinLength(null);
140                        $d->setRequired(null);
141
142                        $i->addData($d);
143                       
144                        $l = new Link();
145
146                        $l->setHref('');
147                        $l->setRel('delete');
148                        $l->setAlt('Remover');
149                        $l->setPrompt('Remover');
150                        $l->setRender('link');
151
152                        $i->addLink($l);
153
154                        $l = new Link();
155                        $l->setHref('');
156                        $l->setRel('put');
157                        $l->setAlt('Atualizar');
158                        $l->setPrompt('Atualizar');
159                        $l->setRender('link');
160
161                        $i->addLink($l);
162
163                        $l = new Link();
164                        $l->setHref('/userldap/'.$value['uid']);
165                        $l->setRel('get');
166                        $l->setAlt('Buscar');
167                        $l->setPrompt('Buscar');
168                        $l->setRender('link');
169
170                        $i->addLink($l);
171                        $c->addItem($i);
172            }
173
174                $t = new Template();
175                $d = new Data();
176
177                $d->setName('name');
178                $d->setValue(null);
179                $d->setPrompt('Nome do Usuario');
180                $d->setDataType('string');
181                $d->setMaxLength(100);
182                $d->setMinLength(null);
183                $d->setRequired(true);
184
185                $t->addData($d);
186
187                $d = new Data();
188                $d->setName('email');
189                $d->setValue(null);
190                $d->setPrompt('Email do Usuario');
191                $d->setDataType('string');
192                $d->setMaxLength(100);
193                $d->setMinLength(null);
194                $d->setRequired(true);
195
196                $t->addData($d);
197
198                $d = new Data();
199                $d->setName('telefone');
200                $d->setValue(null);
201                $d->setPrompt('Telefone do Usuario');
202                $d->setDataType('string');
203                $d->setMaxLength(100);
204                $d->setMinLength(null);
205                $d->setRequired(true);
206
207                $t->addData($d);
208
209            $queries = new Querie();   
210                $queries->setHref($c->href);
211            $queries->setData('field','',true);
212            $queries->setData('value','',true);
213            $c->addQueries($queries);
214
215
216                $h->setCollection($c);
217
218        }catch (Exception $ex){
219                $error = new Error();
220                $error->setCode(Response::INTERNALSERVERERROR);
221                $error->setTitle('Internal Server Error');
222                $error->setDescription($ex);
223
224                $c->setError($error);
225                $h->setCollection($c);
226
227                $response->code = Response::INTERNALSERVERERROR;
228                $response->body = $h->getHypermedia($request->accept[10][0]);
229                return $response;
230        }
231
232        $response->body = $h->getHypermedia($request->accept[10][0]);
233        return $response;
234  }
235}
236?>
Note: See TracBrowser for help on using the repository browser.