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

Revision 6357, 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
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
33            $this->secured();
34
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(array('concept' => 'user','service'=>'OpenLDAP'), false, array('filter' => array('=', $_GET['field'],$_GET['value'] )));
44                    }
45                    else{
46                        //lança warning no log do Expresso
47                        trigger_error("Invalid field (".$_GET['field'].") in the query.", E_USER_WARNING);
48
49                        //formata os atributos LDAP do conceito 'user'
50                        $attributes = implode(', ', $map);
51
52                        //Configura o erro na hypermedia
53                        $error = new Error();
54                        $error->setCode(Response::NOTFOUND);
55                        $error->setTitle('UserLDAP not found');
56                        $error->setDescription("Invalid field (".$_GET['field'].") in the query. Use of these: ".$attributes);
57
58                        $c->setError($error);
59                        $h->setCollection($c);
60
61                        //retorna a hypermedia
62                        $response->code = Response::NOTFOUND;
63                        $response->body = $h->getHypermedia($request->accept[10][0]);
64                        return $response;
65                    }
66            }
67            else{
68                    //Executa a consulta dos primeiros 20 usuarios do LDAP
69                    $users = Controller::find(array('concept' => 'user','service'=>'OpenLDAP'), false, array('filter' => array('=', 'phpgwAccountType', 'u'),'limit'=>20));
70            }
71
72            //Se nao foi encontrado usuarios na consulta
73            if($users===false){
74                $error = new Error();
75                $error->setCode(Response::NOTFOUND);
76                $error->setTitle('UserLDAP not found');
77                $error->setDescription('Users not found.');
78
79                $c->setError($error);
80                $h->setCollection($c);
81
82                $response->code = Response::NOTFOUND;
83                $response->body = $h->getHypermedia($request->accept[10][0]);
84                return $response;
85            }
86
87            foreach($users as $value){
88                $d = new Data();
89                $i = new Item($request->resources, 'UsersResource', $value['uid']);
90
91                $d->setName('name');
92                $d->setValue($value['name']);
93                $d->setPrompt('Nome do Usuário');
94                $d->setDataType('string');
95                $d->setMaxLength('100');
96                $d->setMinLength(null);
97                $d->setRequired(true);
98
99                $i->addData($d);
100
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                $l = new Link();
111
112                $l->setHref('');
113                $l->setRel('delete');
114                $l->setAlt('Remover');
115                $l->setPrompt('Remover');
116                $l->setRender('link');
117
118                $i->addLink($l);
119
120                $l = new Link();
121                $l->setHref('');
122                $l->setRel('put');
123                $l->setAlt('Atualizar');
124                $l->setPrompt('Atualizar');
125                $l->setRender('link');
126
127                $i->addLink($l);
128
129                $l = new Link();
130                $l->setHref('/userldap/'.$value['uid']);
131                $l->setRel('get');
132                $l->setAlt('Buscar');
133                $l->setPrompt('Buscar');
134                $l->setRender('link');
135
136                $i->addLink($l);
137                $c->addItem($i);
138            }
139
140            $t = new Template();
141            $d = new Data();
142
143            $d->setName('name');
144            $d->setValue(null);
145            $d->setPrompt('Nome do Usuário');
146            $d->setDataType('string');
147            $d->setMaxLength(100);
148            $d->setMinLength(null);
149            $d->setRequired(true);
150
151            $t->addData($d);
152            $d = new Data();
153
154            $d->setName('email');
155            $d->setValue(null);
156            $d->setPrompt('Email do Usuário');
157            $d->setDataType('string');
158            $d->setMaxLength(100);
159            $d->setMinLength(null);
160            $d->setRequired(true);
161
162            $t->addData($d);
163
164            $c->setTemplate($t);
165            $d = new Data();
166
167            $d->setName('Usuário LDAP');
168            $d->setValue(null);
169            $d->setPrompt('Usuário do LDAP');
170            $d->setDataType(null);
171            $d->setMaxLength(null);
172            $d->setMinLength(null);
173            $d->setRequired(null);
174
175            $c->setData($d);
176
177            $queries = array();
178            $queries[0] = new Querie();
179            $queries[0]->setHref($c->href);
180            $queries[0]->setData('field','',true);
181            $queries[0]->setData('value','',true);
182            $c->setQueries($queries);
183
184
185            $h->setCollection($c);
186
187        }catch (Exception $ex){
188                $error = new Error();
189                $error->setCode(Response::INTERNALSERVERERROR);
190                $error->setTitle('Internal Server Error');
191                $error->setDescription($ex);
192
193                $c->setError($error);
194                $h->setCollection($c);
195
196                $response->code = Response::INTERNALSERVERERROR;
197                $response->body = $h->getHypermedia($request->accept[10][0]);
198                return $response;
199        }
200
201        $response->body = $h->getHypermedia($request->accept[10][0]);
202        return $response;
203  }
204}
205?>
Note: See TracBrowser for help on using the repository browser.