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

Revision 6528, 5.5 KB checked in by gustavo, 12 years ago (diff)

Ticket #2766 - Merge do branch das novas funcionalidaes para o trunk

  • 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 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                        $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 Usuario');
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 Usuario');
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 Usuario');
180                $d->setDataType('string');
181                $d->setMaxLength(100);
182                $d->setMinLength(null);
183                $d->setRequired(true);
184
185                $t->addData($d);
186
187            $queries = new Querie();   
188                $queries->setHref($c->href);
189            $queries->setData('field','',true);
190            $queries->setData('value','',true);
191            $c->addQueries($queries);
192
193
194                $h->setCollection($c);
195
196        }catch (Exception $ex){
197                $error = new Error();
198                $error->setCode(Response::INTERNALSERVERERROR);
199                $error->setTitle('Internal Server Error');
200                $error->setDescription($ex);
201
202                $c->setError($error);
203                $h->setCollection($c);
204
205                $response->code = Response::INTERNALSERVERERROR;
206                $response->body = $h->getHypermedia($request->accept[10][0]);
207                return $response;
208        }
209
210        $response->body = $h->getHypermedia($request->accept[10][0]);
211        return $response;
212  }
213}
214?>
Note: See TracBrowser for help on using the repository browser.