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

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