source: trunk/prototype/rest/catalog/DynamicContactResource.php @ 6528

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

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

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