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

Revision 6578, 6.2 KB checked in by tezza, 12 years ago (diff)

Ticket #2766 - Acrescentado/corrigindo recursos de contatos/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 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
34        try {       
35            //Executa uma consulta de usuários do LDAP a partir de um determinado atributo e valor
36            if(isset($_GET['field']) && isset($_GET['value'])){
37
38                    //recupera os atributos definidos no conceito 'user'
39                    $map = Config::get('user', 'OpenLDAP.mapping');
40
41                    //verifica se o campo(atributo) passado pelo usuário está definido no conceito 'user'
42                    if(isset($map[ $_GET['field'] ])){
43                            $users = Controller::find(
44                                                        array('concept' => 'user','service'=>'OpenLDAP'),
45                                                        false,
46                                                        array('filter' => array('=', $_GET['field'],$_GET['value'] ), 'notExternal' => true)
47                            );
48                    }
49                    else{
50                                //lança warning no log do Expresso
51                                trigger_error("Invalid field (".$_GET['field'].") in the query.", E_USER_WARNING);
52
53                                //formata os atributos LDAP do conceito 'user'
54                                $attributes = implode(', ', $map);
55
56                                //Configura o erro na hypermedia
57                                $error = new Error();
58                                $error->setCode(Response::NOTFOUND);
59                                $error->setTitle('UserLDAP not found');
60                                $error->setDescription("Invalid field (".$_GET['field'].") in the query. Use of these: ".$attributes);
61
62                                $c->setError($error);
63                                $h->setCollection($c);
64
65                                //retorna a hypermedia
66                                $response->code = Response::NOTFOUND;
67                                $response->body = $h->getHypermedia($request->accept[10][0]);
68                                return $response;
69                    }
70            }
71            else{
72                    //Executa a consulta dos primeiros 20 usuarios do LDAP
73                    $users = Controller::find(
74                                                array('concept' => 'user','service'=>'OpenLDAP'),
75                                                false,
76                                                array('filter' => array('=', 'phpgwAccountType', 'u'),
77                                                      'limit' => 20,
78                                                      'notExternal' => true)
79                    );
80            }
81
82            //Se nao foi encontrado usuarios na consulta
83            if($users===false){
84                        $error = new Error();
85                        $error->setCode(Response::NOTFOUND);
86                        $error->setTitle('UserLDAP not found');
87                        $error->setDescription('Users not found.');
88
89                        $c->setError($error);
90                        $h->setCollection($c);
91
92                        $response->code = Response::NOTFOUND;
93                        $response->body = $h->getHypermedia($request->accept[10][0]);
94                        return $response;
95            }
96
97                foreach($users as $value){
98                        $d = new Data();
99                        $i = new Item($request->resources, 'UsersResource', $value['uid']);
100
101                        $d->setName('name');
102                        $d->setValue($value['name']);
103                        $d->setPrompt('Nome 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('email');
113                        $d->setValue($value['mail']);
114                        $d->setPrompt('Email 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('telephoneNumber');
124                        $d->setValue($value['telephoneNumber']);
125                        $d->setPrompt('Telefone do Usuario');
126                        $d->setDataType('string');
127                        $d->setMaxLength('100');
128                        $d->setMinLength(null);
129                        $d->setRequired(true);
130
131                        $i->addData($d);
132
133                        $d = new Data();
134                        $d->setName('vacationActive');
135                        $d->setValue($value['vacationActive']);
136                        $d->setPrompt('Status 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                        $d = new Data();
145                        $d->setName('vacationInfo');
146                        $d->setValue($value['vacationInfo']);
147                        $d->setPrompt('Mensagem da Regra fora de Escritorio');
148                        $d->setDataType('boolean');
149                        $d->setMaxLength('10');
150                        $d->setMinLength(null);
151                        $d->setRequired(null);
152
153                        $i->addData($d);
154                       
155                        $l = new Link();
156
157                        $l->setHref('');
158                        $l->setRel('delete');
159                        $l->setAlt('Remover');
160                        $l->setPrompt('Remover');
161                        $l->setRender('link');
162
163                        $i->addLink($l);
164
165                        $l = new Link();
166                        $l->setHref('');
167                        $l->setRel('put');
168                        $l->setAlt('Atualizar');
169                        $l->setPrompt('Atualizar');
170                        $l->setRender('link');
171
172                        $i->addLink($l);
173
174                        $l = new Link();
175                        $l->setHref('/userldap/'.$value['uid']);
176                        $l->setRel('get');
177                        $l->setAlt('Buscar');
178                        $l->setPrompt('Buscar');
179                        $l->setRender('link');
180
181                        $i->addLink($l);
182                        $c->addItem($i);
183            }
184
185                $t = new Template();
186                $d = new Data();
187
188                $d->setName('name');
189                $d->setValue(null);
190                $d->setPrompt('Nome 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('email');
200                $d->setValue(null);
201                $d->setPrompt('Email 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                $d = new Data();
210                $d->setName('telefone');
211                $d->setValue(null);
212                $d->setPrompt('Telefone do Usuario');
213                $d->setDataType('string');
214                $d->setMaxLength(100);
215                $d->setMinLength(null);
216                $d->setRequired(true);
217
218                $t->addData($d);
219
220            $queries = new Querie();   
221                $queries->setHref($c->href);
222            $queries->setData('field','',true);
223            $queries->setData('value','',true);
224            $c->addQueries($queries);
225
226
227                $h->setCollection($c);
228
229        }catch (Exception $ex){
230                $error = new Error();
231                $error->setCode(Response::INTERNALSERVERERROR);
232                $error->setTitle('Internal Server Error');
233                $error->setDescription($ex);
234
235                $c->setError($error);
236                $h->setCollection($c);
237
238                $response->code = Response::INTERNALSERVERERROR;
239                $response->body = $h->getHypermedia($request->accept[10][0]);
240                return $response;
241        }
242
243        $response->body = $h->getHypermedia($request->accept[10][0]);
244        return $response;
245  }
246}
247?>
Note: See TracBrowser for help on using the repository browser.