Ignore:
Timestamp:
06/15/12 14:49:24 (12 years ago)
Author:
acoutinho
Message:

Ticket #2766 - Melhorias e correcoes na api rest, criacao de novo cliente

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.4.1-3/prototype/rest/catalog/DynamicContactResource.php

    r6512 r6523  
    11<?php 
    22 
    3 if( !defined( 'ROOTPATH' ) ) 
    4     define( 'ROOTPATH', dirname(__FILE__).'/..' ); 
    5  
    6 require_once(ROOTPATH.'/rest/hypermedia/hypermedia.php'); 
     3if (!defined('ROOTPATH')) 
     4    define('ROOTPATH', dirname(__FILE__) . '/..'); 
     5 
     6require_once(ROOTPATH . '/rest/hypermedia/hypermedia.php'); 
    77 
    88use prototype\api\Config as Config; 
     
    2020     * @access     public 
    2121     * */ 
    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); 
     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); 
    157150 
    158151            $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      }    
     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    } 
    178160 
    179161    /** 
     
    187169     * @access     public 
    188170     * */ 
    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['timestamp']            = time(); 
    219         $params['id']                   = $id; 
    220  
    221  
    222         $response = new Response($request); 
    223 //      $response->addHeader('Content-type', 'aplication/json'); 
    224 //        $response->code = Response::NOCONTENT; 
    225  
    226         try{ 
    227  
    228 //                      $this->secured(); 
    229  
    230                 $dynamicContact = Controller::read( 
    231                                                 array( 'concept' => 'dynamicContact' ), 
    232                                                 false, 
    233                                                 array( 'filter' => array(  
    234                                                                         'AND',  
    235                                                                         array('=', 'owner',  Config::me("uidNumber") ),  
    236                                                                         array('=', 'id', $id) )  )  
    237                 ); 
    238  
     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]; 
    239223                 
    240                 //Se existe o recurso 
    241                 if($dynamicContact){ 
    242                                         $params['number_of_messages'] = $dynamicContact[0]['number_of_messages'] + 1; 
    243                                         $dynamicContact = Controller::update( 
    244                                                         array('concept' => 'dynamicContact', 
    245                                                                                                                 'id'=>$id), 
    246                                                         $params 
    247                     ); 
    248  
    249                     if(!$dynamicContact){ 
    250                         throw new Exception(Controller::service('PostgreSQL')->error); 
    251                     } 
    252  
    253                 } 
    254                 else{ 
    255                                         $params['number_of_messages']   = '1'; 
    256                     $idDynamicContact = Controller::create( 
    257                                                         array('concept' => 'dynamicContact'), 
    258                                                         $params 
    259                     ); 
    260  
    261                     if(!$idDynamicContact){ 
    262                         throw new Exception(Controller::service('PostgreSQL')->error); 
    263                     } 
    264  
    265                 } 
    266  
    267         }catch (Exception $ex){ 
    268                 $response->code = Response::INTERNALSERVERERROR; 
    269                 return $response; 
    270         } 
    271  
    272         return $response; 
    273  
    274      }    
     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    } 
    275248 
    276249    /** 
     
    283256     * @access     public 
    284257     * */ 
    285      function delete($request, $id){ 
     258    function delete($request, $id) { 
     259 
     260        $this->secured(); 
    286261 
    287262        $response = new Response($request); 
    288 //      $response->addHeader('Content-type', 'aplication/json'); 
     263        $response->addHeader('Content-type', 'aplication/json'); 
    289264        $response->code = Response::NOCONTENT; 
    290265 
    291         try{ 
    292                 //Verifica se o recurso existe 
    293                 $responseGET = $this->get($request, $id); 
    294                 $code = $responseGET->code; 
    295  
    296                 //Se existe o recurso 
    297                 if($code == Response::OK){ 
    298  
    299 //                      $this->secured(); 
    300  
    301                         $delete = Controller::delete(array('concept' => 'dynamicContact'), false, array('filter' => array('=', 'id', $id))); 
    302  
    303                         if(!$delete){ 
    304                                 throw new Exception(Controller::service('PostgreSQL')->error); 
    305                         } 
     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; 
    306278                } 
    307                 else{ 
    308                         $response->code = Response::NOTFOUND; 
    309                 } 
    310  
    311         }catch (Exception $ex){ 
    312                 $response->code = Response::INTERNALSERVERERROR; 
    313                 return $response; 
    314         } 
    315  
    316 $response->body = json_encode(array('ABC'=>'123')); 
    317  
    318         return $response; 
    319      } 
     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    } 
    320308 
    321309} 
     310 
    322311?> 
Note: See TracChangeset for help on using the changeset viewer.