source: sandbox/2.4.1-3/prototype/rest/catalog/DynamicContactResource.php @ 6473

Revision 6473, 9.7 KB checked in by gustavo, 12 years ago (diff)

Ticket #2766 - Acrescentando rotas e novo atributo no contato recente.

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 DynamicContactResource extends Resource {
11
12    /**
13     * Retorna um contato recente
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 um contato recente
20     * @access     public
21     * */
22     function get($request, $id){
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, 'DynamicContactResource');
30
31        try {
32//            $this->secured();
33
34            $dynamicContacts = Controller::find(
35                                                array( 'concept' => 'dynamicContact' ),
36                                                false,
37                                                array( 'filter' => array( 'AND', array( '=', 'owner',  Config::me("uidNumber") ) , array('=', 'id', $id) ) ) 
38            );
39
40            //Se nao foi encontrado contatos na consulta
41            if($dynamicContacts===false){
42                $error = new Error();
43                $error->setCode(Response::NOTFOUND);
44                $error->setTitle('Dynamic Contact not found');
45                $error->setDescription('Dynamic Contact not found.');
46
47                $c->setError($error);
48                $h->setCollection($c);
49
50                $response->code = Response::NOTFOUND;
51                $response->body = $h->getHypermedia($request->accept[10][0]);
52                return $response;
53            }
54
55
56            $t = new Template();
57            $d = new Data();
58
59            $d->setName('name');
60            $d->setValue(null);
61            $d->setPrompt('Nome do Contato Recente');
62            $d->setDataType('string');
63            $d->setMaxLength(100);
64            $d->setMinLength(null);
65            $d->setRequired(true);
66
67            $t->addData($d);
68
69            $d = new Data();
70            $d->setName('mail');
71            $d->setValue(null);
72            $d->setPrompt('Email do Contato Recente');
73            $d->setDataType('string');
74            $d->setMaxLength(100);
75            $d->setMinLength(null);
76            $d->setRequired(true);
77
78            $t->addData($d);
79
80            $d = new Data();
81            $d->setName('number_of_messages');
82            $d->setValue(null);
83            $d->setPrompt('Quantidade de mensagens enviadas');
84            $d->setDataType('integer');
85            $d->setMaxLength(100);
86            $d->setMinLength(null);
87            $d->setRequired(false);
88
89            $t->addData($d);
90
91            $c->setTemplate($t);
92
93            $d = new Data();
94            $d->setName('id');
95            $d->setValue($dynamicContacts[0]['id']);
96            $d->setPrompt('Identificador do Contato Recente');
97            $d->setDataType('integer');
98            $d->setMaxLength(null);
99            $d->setMinLength(null);
100            $d->setRequired(true);
101
102            $c->addData($d);
103
104            $d = new Data();
105
106            $d->setName('name');
107            $d->setValue($dynamicContacts[0]['name']);
108            $d->setPrompt('Nome do Contato Recente');
109            $d->setDataType('string');
110            $d->setMaxLength('100');
111            $d->setMinLength(null);
112            $d->setRequired(true);
113
114            $c->addData($d);
115
116            $d = new Data();
117            $d->setName('mail');
118            $d->setValue($dynamicContacts[0]['mail']);
119            $d->setPrompt('Email do Contato Recente');
120            $d->setDataType('string');
121            $d->setMaxLength('100');
122            $d->setMinLength(null);
123            $d->setRequired(true);
124
125            $c->addData($d);
126
127            $d = new Data();
128            $d->setName('number_of_messages');
129            $d->setValue($dynamicContacts[0]['number_of_messages']);
130            $d->setPrompt('Quantidade de mensagens enviadas');
131            $d->setDataType('integer');
132            $d->setMaxLength('100');
133            $d->setMinLength(null);
134            $d->setRequired(false);
135
136            $c->addData($d);
137
138
139            $l = new Link();
140
141            $l->setHref('');
142            $l->setRel('delete');
143            $l->setAlt('Remover');
144            $l->setPrompt('Remover');
145            $l->setRender('link');
146
147            $c->addLink($l);
148
149            $l = new Link();
150            $l->setHref('');
151            $l->setRel('put');
152            $l->setAlt('Atualizar');
153            $l->setPrompt('Atualizar');
154            $l->setRender('link');
155
156            $c->addLink($l);
157
158            $h->setCollection($c);
159 
160
161        }catch (Exception $ex){
162                $error = new Error();
163                $error->setCode(Response::INTERNALSERVERERROR);
164                $error->setTitle('Internal Server Error');
165                $error->setDescription($ex);
166
167                $c->setError($error);
168                $h->setCollection($c);
169
170                $response->code = Response::INTERNALSERVERERROR;
171                $response->body = $h->getHypermedia($request->accept[10][0]);
172                return $response;
173        }
174
175        $response->body = $h->getHypermedia($request->accept[10][0]);
176        return $response;
177     }   
178
179    /**
180     * Atualiza um contato recente
181     *
182     * @license    http://www.gnu.org/copyleft/gpl.html GPL
183     * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
184     * @sponsor    Caixa Econômica Federal
185     * @author     José Vicente Tezza Jr.
186     * @return     retorna a uri do contato recente
187     * @access     public
188     * */
189     function put($request, $id){
190$post = $request->dataDecoded;
191
192        if(count($post) == 0){
193                $response = new Response($request);
194                $response->code = Response::INTERNALSERVERERROR;
195                return $response;
196        }
197
198        //recupera os atributos definidos no conceito 'user'
199        $map = Config::get('dynamicContact', 'PostgreSQL.mapping');
200
201        $params = array();
202        foreach($post as $key => $value){
203
204                if( !isset( $map[ $key ] ) || $key == 'id' || $key == 'timestamp' || $key == 'number_of_messages' ){
205                        continue;
206                }
207                $params[$key] = $value;
208        }
209
210        if(count($params) == 0){
211                $response = new Response($request);
212                $response->code = Response::INTERNALSERVERERROR;
213                return $response;
214        }
215
216        //completar os atributos
217        $params['owner']                = Config::me("uidNumber");
218        $params['number_of_messages']   = '1';
219        $params['timestamp']            = time();
220        $params['id']                   = $id;
221
222
223        $response = new Response($request);
224//      $response->addHeader('Content-type', 'aplication/json');
225//        $response->code = Response::NOCONTENT;
226
227        try{
228
229//                      $this->secured();
230
231                $dynamicContact = Controller::read(
232                                                array( 'concept' => 'dynamicContact' ),
233                                                false,
234                                                array( 'filter' => array(
235                                                                        'AND',
236                                                                        array('=', 'owner',  Config::me("uidNumber") ),
237                                                                        array('=', 'id', $id) )  )
238                );
239
240
241                //Se existe o recurso
242                if($dynamicContact){
243                    $params['number_of_messages']++;
244
245                    $dynamicContact = Controller::update(
246                                                        array('concept' => 'dynamicContact'),
247                                                        $params
248                    );
249
250                    if(!$dynamicContact){
251                        throw new Exception(Controller::service('PostgreSQL')->error);
252                    }
253
254                }
255                else{
256
257                    $idDynamicContact = Controller::create(
258                                                        array('concept' => 'dynamicContact'),
259                                                        $params
260                    );
261
262                    if(!$idDynamicContact){
263                        throw new Exception(Controller::service('PostgreSQL')->error);
264                    }
265
266                }
267
268        }catch (Exception $ex){
269                $response->code = Response::INTERNALSERVERERROR;
270                return $response;
271        }
272
273        return $response;
274
275     }   
276
277    /**
278     * Remove um contato recente
279     *
280     * @license    http://www.gnu.org/copyleft/gpl.html GPL
281     * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
282     * @sponsor    Caixa Econômica Federal
283     * @author     José Vicente Tezza Jr.
284     * @access     public
285     * */
286     function delete($request, $id){
287
288        $response = new Response($request);
289//      $response->addHeader('Content-type', 'aplication/json');
290        $response->code = Response::NOCONTENT;
291
292        try{
293                //Verifica se o recurso existe
294                $responseGET = $this->get($request, $id);
295                $code = $responseGET->code;
296
297                //Se existe o recurso
298                if($code == Response::OK){
299
300//                      $this->secured();
301
302                        $delete = Controller::delete(array('concept' => 'dynamicContact'), false, array('filter' => array('=', 'id', $id)));
303
304                        if(!$delete){
305                                throw new Exception(Controller::service('PostgreSQL')->error);
306                        }
307                }
308                else{
309                        $response->code = Response::NOTFOUND;
310                }
311
312        }catch (Exception $ex){
313                $response->code = Response::INTERNALSERVERERROR;
314                return $response;
315        }
316
317$response->body = json_encode(array('ABC'=>'123'));
318
319        return $response;
320     }
321
322}
323?>
Note: See TracBrowser for help on using the repository browser.