Changeset 6962 for trunk


Ignore:
Timestamp:
08/08/12 15:53:29 (12 years ago)
Author:
cristiano
Message:

Ticket #3002 - Eventos não são deletados apartid do caldav

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoCalendar/docs/caldav-DELETE.php.diff

    r6431 r6962  
    1515+     $dav_name = explode('/', $dav_resource->GetProperty('dav_name')); 
    1616+ 
    17 +     DAViCalAdapter::delete($dav_resource->GetProperty('caldav_data') ,array('owner' => $dav_resource->GetProperty('username') , 'calendarName' => $dav_name[ (count($dav_name)-3) ]) .'/'. $dav_name[ (count($dav_name)-2) ]); 
     17+     DAViCalAdapter::delete($dav_resource->GetProperty('caldav_data') ,array('owner' => $dav_resource->GetProperty('username') , 'calendarName' => $dav_name[ (count($dav_name)-3) ] .'/'. $dav_name[ (count($dav_name)-2) ])); 
    1818+  } 
    1919+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
  • trunk/prototype/modules/calendar/interceptors/DAViCalAdapter.php

    r6528 r6962  
    5252    {       
    5353        if( Config::module('useCaldav' , 'expressoCalendar') ) 
    54         { 
    55             $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $params['calendar'] )); 
    56              
    57             if($params['user'] !== '0') 
    58             { 
    59                 $user = Controller::read( array( 'concept' => 'user' , 'id' => $params['user'] )); 
    60                 $xmUser =   '<D:href>'.Config::service( 'CalDAV' , 'url' ).'/'.$user['uid'].'/</D:href>'; 
    61             } 
    62             else 
    63                 $xmUser =   '<D:authenticated/>'; 
    64  
    65             $xml ="<?xml version=\"1.0\" encoding=\"utf-8\" ?> 
    66                    <D:acl xmlns:D=\"DAV:\"> 
    67                      <D:ace> 
    68                        <D:principal> 
    69                         ".$xmUser." 
    70                        </D:principal> 
    71                        <D:grant> 
    72                         ".self::acltToXML($params['acl'])." 
    73                        </D:grant> 
    74                      </D:ace> 
    75                     </D:acl>";   
    76              
    77             ob_start(); 
    78             require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
    79             $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.$calendar['location'].'/', Config::me( 'uid' ), Config::me( 'password' )); 
    80             $cal->DoXMLRequest('ACL', $xml); 
     54    { 
     55        $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $params['calendar'] )); 
     56         
     57        if($params['user'] !== '0') 
     58        { 
     59        $user = Controller::read( array( 'concept' => 'user' , 'id' => $params['user'] )); 
     60        $xmUser =   '<D:href>'.Config::service( 'CalDAV' , 'url' ).'/'.$user['uid'].'/</D:href>'; 
     61        } 
     62        else 
     63        $xmUser =   '<D:authenticated/>'; 
     64 
     65        $xml ="<?xml version=\"1.0\" encoding=\"utf-8\" ?> 
     66           <D:acl xmlns:D=\"DAV:\"> 
     67             <D:ace> 
     68               <D:principal> 
     69            ".$xmUser." 
     70               </D:principal> 
     71               <D:grant> 
     72            ".self::acltToXML($params['acl'])." 
     73               </D:grant> 
     74             </D:ace> 
     75            </D:acl>";   
     76         
     77        ob_start(); 
     78        require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
     79        $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.$calendar['location'].'/', Config::me( 'uid' ), Config::me( 'password' )); 
     80        $cal->DoXMLRequest('ACL', $xml); 
    8181            self::setReadCurrentUserPrivilege(Config::service( 'CalDAV' , 'url' ).'/'.substr($calendar['location'] , 0 , (strpos (  $calendar['location'] ,  '/'  ) + 1 ) )); 
    82             ob_end_clean(); 
    83         } 
     82        ob_end_clean(); 
     83    } 
    8484    } 
    8585     
     
    8787    {       
    8888        if( Config::module('useCaldav' , 'expressoCalendar') ) 
    89         {     
    90             $permision = Controller::read( array( 'concept' => 'calendarToPermission' , 'id' => $params['id'] )); 
    91             $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $permision['calendar'] )); 
    92              
    93             if($permision['user'] !== '0') 
    94             { 
    95                 $user = Controller::read( array( 'concept' => 'user' , 'id' => $permision['user'] )); 
    96                 $xmUser =   '<D:href>'.Config::service( 'CalDAV' , 'url' ).'/'.$user['uid'].'/</D:href>'; 
    97             } 
    98             else 
    99                 $xmUser =   '<D:authenticated/>'; 
    100  
    101                 $xml ="<?xml version=\"1.0\" encoding=\"utf-8\" ?> 
    102                        <D:acl xmlns:D=\"DAV:\"> 
    103                         <D:ace> 
    104                            <D:principal> 
    105                             ".$xmUser." 
    106                            </D:principal> 
    107                            <D:grant> 
    108                             ".self::acltToXML($params['acl'])." 
    109                            </D:grant> 
    110                         </D:ace> 
    111                         </D:acl>"; 
    112              
    113             ob_start(); 
    114             require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
    115             $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.$calendar['location'].'/', Config::me( 'uid' ), Config::me( 'password' )); 
     89    {     
     90        $permision = Controller::read( array( 'concept' => 'calendarToPermission' , 'id' => $params['id'] )); 
     91        $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $permision['calendar'] )); 
     92         
     93        if($permision['user'] !== '0') 
     94        { 
     95        $user = Controller::read( array( 'concept' => 'user' , 'id' => $permision['user'] )); 
     96        $xmUser =   '<D:href>'.Config::service( 'CalDAV' , 'url' ).'/'.$user['uid'].'/</D:href>'; 
     97        } 
     98        else 
     99        $xmUser =   '<D:authenticated/>'; 
     100 
     101        $xml ="<?xml version=\"1.0\" encoding=\"utf-8\" ?> 
     102               <D:acl xmlns:D=\"DAV:\"> 
     103            <D:ace> 
     104               <D:principal> 
     105                ".$xmUser." 
     106               </D:principal> 
     107               <D:grant> 
     108                ".self::acltToXML($params['acl'])." 
     109               </D:grant> 
     110            </D:ace> 
     111            </D:acl>"; 
     112         
     113        ob_start(); 
     114        require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
     115        $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.$calendar['location'].'/', Config::me( 'uid' ), Config::me( 'password' )); 
    116116            $cal->DoXMLRequest('ACL', $xml); 
    117117            self::setReadCurrentUserPrivilege(Config::service( 'CalDAV' , 'url' ).'/'.substr($calendar['location'] ,  0 ,(strpos (  $calendar['location'] ,  '/'  ) + 1 ) )); 
    118             ob_end_clean(); 
    119              
    120         } 
     118        ob_end_clean(); 
     119         
     120    } 
    121121    } 
    122122     
     
    128128         
    129129        $xml ="<?xml version=\"1.0\" encoding=\"utf-8\" ?> 
    130                        <D:acl xmlns:D=\"DAV:\"> 
    131                         <D:ace> 
    132                            <D:principal> 
    133                             <D:authenticated /> 
    134                            </D:principal> 
    135                            <D:grant> 
    136                             <D:privilege><D:read-current-user-privilege-set/></D:privilege> 
    137                            </D:grant> 
    138                         </D:ace> 
    139                         </D:acl>"; 
     130               <D:acl xmlns:D=\"DAV:\"> 
     131            <D:ace> 
     132               <D:principal> 
     133                <D:authenticated /> 
     134               </D:principal> 
     135               <D:grant> 
     136                <D:privilege><D:read-current-user-privilege-set/></D:privilege> 
     137               </D:grant> 
     138            </D:ace> 
     139            </D:acl>"; 
    140140        ob_start(); 
    141141        require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
     
    147147    private static function acltToXML($acls) 
    148148    { 
    149         $array = array(); 
    150         $acls = str_split($acls); 
    151          
    152         foreach ($acls as &$acl) 
    153             switch ($acl)  
    154             { 
    155                 case CALENDAR_ACL_WRITE: 
    156                     $array[] = "<D:privilege><D:bind/></D:privilege>"; 
    157                     $array[] = "<D:privilege><D:write-properties/></D:privilege>"; 
    158                     $array[] = "<D:privilege><D:write-content/></D:privilege>"; 
    159                     $array[] = "<D:privilege><D:unlock/></D:privilege>"; 
    160                     $array[] = "<D:privilege><D:schedule-deliver/></D:privilege>"; 
    161                     $array[] = "<D:privilege><D:schedule-send/></D:privilege>"; 
    162                     break; 
    163                 case CALENDAR_ACL_READ: 
    164                     $array[] = "<D:privilege><D:read /></D:privilege>"; 
    165                     $array[] = "<D:privilege><D:schedule-query-freebusy /></D:privilege>"; 
    166                     $array[] = "<D:privilege><D:read-free-busy /></D:privilege>"; 
    167                     break; 
    168                 case CALENDAR_ACL_REMOVE: 
    169                     $array[] = "<D:privilege><D:unbind/></D:privilege>"; 
    170                     break; 
    171                 case CALENDAR_ACL_SHARED: 
    172                     $array[] = "<D:privilege><D:write-acl/></D:privilege>"; 
    173                     $array[] = "<D:privilege><D:read-acl/></D:privilege>"; 
    174                     $array[] = "<D:privilege><D:read-current-user-privilege-set/></D:privilege>"; 
    175                     break; 
    176                 case CALENDAR_ACL_BUSY: 
    177                     $array[] = "<D:privilege><D:schedule-query-freebusy/></D:privilege>"; 
    178                     $array[] = "<D:privilege><D:read-free-busy/></D:privilege>"; 
    179                     break; 
    180             }       
    181         return implode("\n", $array); 
     149    $array = array(); 
     150    $acls = str_split($acls); 
     151     
     152    foreach ($acls as &$acl) 
     153        switch ($acl)  
     154        { 
     155        case CALENDAR_ACL_WRITE: 
     156            $array[] = "<D:privilege><D:bind/></D:privilege>"; 
     157            $array[] = "<D:privilege><D:write-properties/></D:privilege>"; 
     158            $array[] = "<D:privilege><D:write-content/></D:privilege>"; 
     159            $array[] = "<D:privilege><D:unlock/></D:privilege>"; 
     160            $array[] = "<D:privilege><D:schedule-deliver/></D:privilege>"; 
     161            $array[] = "<D:privilege><D:schedule-send/></D:privilege>"; 
     162            break; 
     163        case CALENDAR_ACL_READ: 
     164            $array[] = "<D:privilege><D:read /></D:privilege>"; 
     165            $array[] = "<D:privilege><D:schedule-query-freebusy /></D:privilege>"; 
     166            $array[] = "<D:privilege><D:read-free-busy /></D:privilege>"; 
     167            break; 
     168        case CALENDAR_ACL_REMOVE: 
     169            $array[] = "<D:privilege><D:unbind/></D:privilege>"; 
     170            break; 
     171        case CALENDAR_ACL_SHARED: 
     172            $array[] = "<D:privilege><D:write-acl/></D:privilege>"; 
     173            $array[] = "<D:privilege><D:read-acl/></D:privilege>"; 
     174            $array[] = "<D:privilege><D:read-current-user-privilege-set/></D:privilege>"; 
     175            break; 
     176        case CALENDAR_ACL_BUSY: 
     177            $array[] = "<D:privilege><D:schedule-query-freebusy/></D:privilege>"; 
     178            $array[] = "<D:privilege><D:read-free-busy/></D:privilege>"; 
     179            break; 
     180        }       
     181    return implode("\n", $array); 
    182182    } 
    183183     
    184184    static function import($data , $params = false) 
    185185    {                   
    186         $user =  Controller::find(array('concept' => 'user' , 'service' => 'OpenLDAP' ),false,array('filter' => array('=','uid',$params['owner'])));   
     186        $user =  Controller::find(array('concept' => 'user' , 'service' => 'OpenLDAP' ),false,array('filter' => array('=','uid',$params['owner']) , 'notExternal' => true));   
    187187        $params['owner'] = $user[0]['id']; 
    188188         
     
    214214     
    215215    static function delete($data , $params = false) 
    216     {          
    217         $user =  Controller::find(array('concept' => 'user' , 'service' => 'OpenLDAP' ),false,array('filter' => array('=','uid',$params['owner'])));   
     216    {    
     217 
     218        $user =  Controller::find(array('concept' => 'user' , 'service' => 'OpenLDAP' ),false,array('filter' => array('=','uid',$params['owner']) , 'notExternal' => true)); 
     219 
    218220        $params['owner'] = $user[0]['id']; 
    219221         
     
    255257            foreach ($toDelete as $v) 
    256258            { 
    257                  $even = Controller::find(array('concept' => 'schedulable') , false , array ( 'filter' => array('AND', array('=' , 'uid' , $v ), array('=' , 'calendar' , $params['calendar']))) );             
     259                 $even = Controller::find(array('concept' => 'schedulable') , false , array ( 'filter' => array('AND', array('=' , 'calendar' , $params['calendar']) , array('=' , 'uid' , $v ) ) ) );             
    258260                 if(is_array($even) && count($even) > 0 ) 
    259261                       Controller::delete(array('concept' => 'schedulable' , 'id' => $even[0]['id'])); 
     
    264266    static function move($origem , $destino , $owner) 
    265267    {   
    266         $user =  Controller::find(array('concept' => 'user' , 'service' => 'OpenLDAP' ),false,array('filter' => array('=','uid',$owner)));   
     268        $user =  Controller::find(array('concept' => 'user' , 'service' => 'OpenLDAP' ),false,array('filter' => array('=','uid',$owner) , 'notExternal' => true));   
    267269        $owner = $user[0]['id']; 
    268270         
     
    341343     
    342344    static function mkcalendar($location , $name, $description ) 
    343     {    
     345    {    
    344346        ob_start(); 
    345347        require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
  • trunk/prototype/services/PostgreSQL.php

    r6528 r6962  
    5252        $map =  Config::get($uri['concept'], 'PostgreSQL.mapping'); 
    5353         
    54         $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map) : ''; 
    55  
    56         $justthese = self::parseJustthese($justthese, $map); 
    57  
    58         return $this->execSql( 'SELECT '.$justthese['select'].' FROM '. (Config::get($uri['concept'],'PostgreSQL.concept')) .' '.$criteria ); 
     54    $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map) : ''; 
     55 
     56    $justthese = self::parseJustthese($justthese, $map); 
     57 
     58    return $this->execSql( 'SELECT '.$justthese['select'].' FROM '. (Config::get($uri['concept'],'PostgreSQL.concept')) .' '.$criteria ); 
    5959    } 
    6060 
     
    6363      $map =  Config::get($uri['concept'], 'PostgreSQL.mapping');    
    6464      $justthese = self::parseJustthese($justthese, $map); 
    65       $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\''; 
     65      $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\''; 
    6666    
    6767      return $this->execSql( 'SELECT '.$justthese['select'].' FROM '. (Config::get($uri['concept'],'PostgreSQL.concept')) .$criteria , true ); 
    6868    } 
    69          
     69     
    7070    public function deleteAll ( $uri,   $justthese = false, $criteria = false ){ 
    7171            $map = Config::get($uri['concept'], 'PostgreSQL.mapping'); 
    72             if(!self::parseCriteria ( $criteria , $map)) return false; //Validador para não apagar tabela inteira 
    73             return $this->execSql( 'DELETE FROM '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '.self::parseCriteria ( $criteria ,$map) ); 
     72        if(!self::parseCriteria ( $criteria , $map)) return false; //Validador para não apagar tabela inteira 
     73        return $this->execSql( 'DELETE FROM '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '.self::parseCriteria ( $criteria ,$map) ); 
    7474    } 
    7575 
    7676    public function delete ( $uri, $justthese = false, $criteria = false ){ 
    7777            if(!isset($uri['id']) && !is_int($uri['id'])) return false; //Delete chamado apenas passando id inteiros 
    78             $map = Config::get($uri['concept'], 'PostgreSQL.mapping'); 
    79             $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\''; 
    80             return $this->execSql('DELETE FROM '.(Config::get($uri['concept'],'PostgreSQL.concept')).$criteria); 
     78        $map = Config::get($uri['concept'], 'PostgreSQL.mapping'); 
     79        $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\''; 
     80        return $this->execSql('DELETE FROM '.(Config::get($uri['concept'],'PostgreSQL.concept')).$criteria); 
    8181    } 
    8282 
    8383    public function replace ( $uri,  $data, $criteria = false ){ 
    8484            $map = Config::get($uri['concept'], 'PostgreSQL.mapping'); 
    85             return $this->execSql('UPDATE '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '. self::parseUpdateData( $data ,$map).' '.self::parseCriteria($criteria , $map)); 
    86     } 
    87                  
     85        return $this->execSql('UPDATE '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '. self::parseUpdateData( $data ,$map).' '.self::parseCriteria($criteria , $map)); 
     86    } 
     87         
    8888    public function update ( $uri,  $data, $criteria = false ){ 
    8989            $map = Config::get($uri['concept'], 'PostgreSQL.mapping'); 
    90             $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\''; 
    91  
    92             return $this->execSql('UPDATE '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '. self::parseUpdateData( $data ,$map).$criteria); 
    93     } 
    94  
    95     public function create ( $uri,  $data ){     
    96             return $this->execSql( 'INSERT INTO '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '.self::parseInsertData( $data , $uri['concept'] ), true ); 
     90        $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\''; 
     91 
     92        return $this->execSql('UPDATE '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '. self::parseUpdateData( $data ,$map).$criteria); 
     93    } 
     94 
     95    public function create ( $uri,  $data ){     
     96        return $this->execSql( 'INSERT INTO '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '.self::parseInsertData( $data , $uri['concept'] ), true ); 
    9797    } 
    9898 
    9999    public function execSql( $sql, $unique = false ) 
    100100    { 
    101             if(!$this->con) $this->open( $this->config ); 
    102  
    103             $rs = pg_query( $this->con, $sql ); 
    104  
    105             switch( pg_num_rows( $rs ) ) 
    106             { 
    107                 case -1:  
    108                   $this->error = pg_last_error ( $this->con ); 
    109                   return( false ); 
    110  
    111                 case 0: 
    112                   return( pg_affected_rows( $rs ) ? true : array() ); 
    113  
    114                 default: 
    115                   $return = array(); 
    116  
    117                   while( $row = pg_fetch_assoc( $rs ) ) 
    118                       $return[] = $row; 
    119  
    120                   return( $unique ? $return[0] : $return ); 
    121             } 
     101        if(!$this->con) $this->open( $this->config ); 
     102 
     103        $rs = pg_query( $this->con, $sql ); 
     104 
     105        switch( pg_num_rows( $rs ) ) 
     106        { 
     107        case -1:  
     108          $this->error = pg_last_error ( $this->con ); 
     109          return( false ); 
     110 
     111        case 0: 
     112          return( pg_affected_rows( $rs ) ? true : array() ); 
     113 
     114        default: 
     115          $return = array(); 
     116 
     117          while( $row = pg_fetch_assoc( $rs ) ) 
     118              $return[] = $row; 
     119 
     120          return( $unique ? $return[0] : $return ); 
     121        } 
    122122    } 
    123123 
     
    125125    //@DEPRECATED 
    126126    public function execResultSql( $sql, $unique = false ){ 
    127             return $this->execSql( $sql, $unique ); 
     127        return $this->execSql( $sql, $unique ); 
    128128    } 
    129129 
    130130    public function begin( $uri ) { 
    131131    
    132         if(!$this->con) 
    133             $this->open( $this->config ); 
     132    if(!$this->con) 
     133        $this->open( $this->config ); 
    134134         
    135135        $this->error = false; 
    136         pg_query($this->con, "BEGIN WORK");  
     136    pg_query($this->con, "BEGIN WORK");  
    137137    } 
    138138 
    139139    public function commit($uri ) { 
    140140    
    141         if( $this->error !== false ) 
    142         { 
    143             $error = $this->error; 
    144             $this->error = false; 
    145  
    146             throw new Exception( $error ); 
    147         } 
    148  
    149         pg_query($this->con, "COMMIT"); 
    150  
    151         return( true ); 
     141    if( $this->error !== false ) 
     142    { 
     143        $error = $this->error; 
     144        $this->error = false; 
     145 
     146        throw new Exception( $error ); 
     147    } 
     148 
     149    pg_query($this->con, "COMMIT"); 
     150 
     151    return( true ); 
    152152    } 
    153153 
    154154    public function rollback( $uri ){ 
    155155     
    156         pg_query($this->con, "ROLLBACK"); 
     156    pg_query($this->con, "ROLLBACK"); 
    157157    } 
    158158 
    159159    public function open  ( $config ){ 
    160                          
     160                 
    161161        $this->config = $config; 
    162162         
     
    168168        $rs .= ( isset($this->config['port']) && $this->config['port'] )  ? ' port='.$this->config['port'] : '' ; 
    169169 
    170         if($this->con = pg_connect( $rs )) 
    171             return $this->con; 
    172  
    173         throw new Exception('It was not possible to enable the target connection!'); 
    174         //$this->con = pg_connect('host='.$config['host'].' user='.$config['user'].' password='.$config['password'].' dbname='.$config['dbname'].'  options=\'--client_encoding=UTF8\''); 
     170    if($this->con = pg_connect( $rs )) 
     171        return $this->con; 
     172 
     173    throw new Exception('It was not possible to enable the target connection!'); 
     174    //$this->con = pg_connect('host='.$config['host'].' user='.$config['user'].' password='.$config['password'].' dbname='.$config['dbname'].'  options=\'--client_encoding=UTF8\''); 
    175175    } 
    176176 
    177177    public function close(){ 
    178178 
    179             pg_close($this->con); 
     179        pg_close($this->con); 
    180180             
    181181            $this->con = false; 
     
    188188 
    189189    private static function parseInsertData( $data , $concept){ 
    190          
     190     
    191191            $map = Config::get($concept, 'PostgreSQL.mapping'); 
    192192         
    193             $ind = array(); 
    194             $val = array(); 
    195              
    196             foreach ($data as $i => $v){ 
     193        $ind = array(); 
     194        $val = array(); 
     195         
     196        foreach ($data as $i => $v){ 
    197197                    if(!isset($map[$i])) continue; 
    198198                 
    199                     $ind[] = $map[$i]; 
    200                     $val[] = '\''.addslashes($v).'\''; 
    201             } 
    202             return '('.implode(',', $ind).') VALUES ('.implode(',', $val).') RETURNING '.$map['id'].' as id';        
    203     } 
    204          
     199            $ind[] = $map[$i]; 
     200            $val[] = '\''.pg_escape_string($v).'\''; 
     201        } 
     202        return '('.implode(',', $ind).') VALUES ('.implode(',', $val).') RETURNING '.$map['id'].' as id';        
     203    } 
     204     
    205205    private static function parseUpdateData( $data , &$map){ 
    206                                              
    207             $d = array(); 
    208             foreach ($data as $i => $v) 
     206                                         
     207        $d = array(); 
     208        foreach ($data as $i => $v) 
    209209            { 
    210210                if(!isset($map[$i])) continue; 
    211211                 
    212                 $d[] = $map[$i].' = \''.addslashes ($v).'\''; 
     212                $d[] = $map[$i].' = \''.pg_escape_string ($v).'\''; 
    213213            } 
    214              
    215             return 'SET '.implode(',', $d); 
     214         
     215        return 'SET '.implode(',', $d); 
    216216    } 
    217217 
    218218    private static function parseCriteria( $criteria  , &$map , $query = '' ){                
    219          
    220             if( isset($criteria["filter"]) && $criteria["filter"] !== NULL ) 
    221             { 
    222                     /* 
    223                   * ex: array   (  
    224                   *               [0] 'OR', 
    225                   *               [1] array( 'OR', array( array( '=', 'campo', 'valor' ) ),  
    226                   *               [2] array( '=', 'campo' , 'valor' ), 
    227                   *               [3] array( 'IN', 'campo', array( '1' , '2' , '3' ) ) 
    228                   *             ) 
    229                   * OR 
    230                   *         array( '=' , 'campo' , 'valor' ) 
    231                 */ 
     219     
     220        if( isset($criteria["filter"]) && $criteria["filter"] !== NULL ) 
     221        { 
     222            /* 
     223          * ex: array   (  
     224          *       [0] 'OR', 
     225          *       [1] array( 'OR', array( array( '=', 'campo', 'valor' ) ),  
     226          *       [2] array( '=', 'campo' , 'valor' ), 
     227          *       [3] array( 'IN', 'campo', array( '1' , '2' , '3' ) ) 
     228          *     ) 
     229          * OR 
     230          *     array( '=' , 'campo' , 'valor' ) 
     231        */ 
    232232                $query .= ($query === '') ?  'WHERE ('.self::parseFilter( $criteria['filter'] , $map).')' : ' AND ('.self::parseFilter( $criteria['filter'] , $map).')'; 
    233             } 
    234             /* 
    235               * ex: array( 'table1' => 'table2' ,  'table1' => 'table2') 
    236               *          
    237               */ 
    238             if( isset($criteria["join"]) ) 
    239             { 
    240                 foreach ($criteria["join"] as $i => $v) 
    241                     $query .= ' AND '.$i.' = '.$v.' '; 
    242             } 
    243              
    244             if( isset($criteria["group"]) ) 
    245             { 
    246                     $query .= ' GROUP BY '.( is_array($criteria["group"]) ? implode(', ', $criteria["group"]) : $criteria["group"] ).' '; 
    247             } 
    248     
    249             if( isset($criteria["order"]) ) 
    250             { 
    251                     //Verificar se os atributos para o ORDER BY serao ordenados em ordem decrescente [DESC] 
    252                     $orderDesc = ( isset($criteria["orderDesc"]) && count($criteria["order"]) == count($criteria["orderDesc"]) ) ? $criteria["orderDesc"] : false; 
    253                  
    254                     $query .= ' ORDER BY '.self::parseOrder( $criteria["order"], $map, $orderDesc ).' '; 
    255              
    256             } 
    257  
    258             if( isset($criteria["limit"]) ) 
    259             { 
    260                     $query .= ' LIMIT '. $criteria["limit"] .' '; 
    261             } 
    262             if( isset($criteria["offset"]) ) 
    263             { 
    264                     $query .= ' OFFSET '. $criteria["offset"] .' '; 
    265             } 
    266              
    267             return $query; 
     233        } 
     234        /* 
     235          * ex: array( 'table1' => 'table2' ,  'table1' => 'table2') 
     236          *      
     237          */ 
     238        if( isset($criteria["join"]) ) 
     239        { 
     240        foreach ($criteria["join"] as $i => $v) 
     241            $query .= ' AND '.$i.' = '.$v.' '; 
     242        } 
     243         
     244        if( isset($criteria["group"]) ) 
     245        { 
     246            $query .= ' GROUP BY '.( is_array($criteria["group"]) ? implode(', ', $criteria["group"]) : $criteria["group"] ).' '; 
     247        } 
     248    
     249        if( isset($criteria["order"]) ) 
     250        { 
     251            //Verificar se os atributos para o ORDER BY serao ordenados em ordem decrescente [DESC] 
     252            $orderDesc = ( isset($criteria["orderDesc"]) && count($criteria["order"]) == count($criteria["orderDesc"]) ) ? $criteria["orderDesc"] : false; 
     253         
     254            $query .= ' ORDER BY '.self::parseOrder( $criteria["order"], $map, $orderDesc ).' '; 
     255         
     256        } 
     257 
     258        if( isset($criteria["limit"]) ) 
     259        { 
     260            $query .= ' LIMIT '. $criteria["limit"] .' '; 
     261        } 
     262        if( isset($criteria["offset"]) ) 
     263        { 
     264            $query .= ' OFFSET '. $criteria["offset"] .' '; 
     265        } 
     266         
     267        return $query; 
    268268    } 
    269269     
    270270    private static function parseFilter( $filter ,&$map){ 
    271271     
    272         if( !is_array( $filter ) || count($filter) <= 0) return null; 
    273                  
    274         $op = self::parseOperator( array_shift( $filter ) ); 
    275          
    276         if( is_array($filter[0]) ) 
    277         { 
    278             $nested = array(); 
    279  
    280             foreach( $filter as $i => $f ) 
     272    if( !is_array( $filter ) || count($filter) <= 0) return null; 
     273                 
     274    $op = self::parseOperator( array_shift( $filter ) ); 
     275         
     276    if( is_array($filter[0]) ) 
     277    { 
     278        $nested = array(); 
     279 
     280        foreach( $filter as $i => $f ) 
    281281                if( $n = self::parseFilter( $f , $map)) 
    282282                    $nested[] = $n;  
    283283 
    284284                 
    285             return (count($nested) > 0 ) ? '('.implode( ' '.$op.' ', $nested ).')' : ''; 
    286         } 
     285        return (count($nested) > 0 ) ? '('.implode( ' '.$op.' ', $nested ).')' : ''; 
     286    } 
    287287 
    288288        if(!isset($map[$filter[0]])) return ''; 
     
    290290        $filter[0] = $map[$filter[0]]; 
    291291         
    292         $igSuffix = $igPrefix = ''; 
    293                  
    294         if( strpos( $op[0], 'i' ) === 0 ) 
    295         { 
    296             $op[0] = substr( $op[0], 1 ); 
    297             $filter[0] = 'upper("'.$filter[0].'")'; 
    298             $igPrefix = 'upper('; 
    299             $igSuffix = ')'; 
    300         } 
    301  
    302         if( is_array($filter[1]) ) 
    303             return( $filter[0].' '.$op[0]." ($igPrefix'".implode( "'$igSuffix,$igPrefix'", array_map("addslashes" , $filter[1]) )."'$igSuffix)" ); 
    304  
    305         return( $filter[0].' '.$op[0]." $igPrefix'".$op[1].addslashes( $filter[1] ).$op[2]."'$igSuffix" ); 
     292    $igSuffix = $igPrefix = ''; 
     293                 
     294    if( strpos( $op[0], 'i' ) === 0 ) 
     295    { 
     296        $op[0] = substr( $op[0], 1 ); 
     297        $filter[0] = 'upper("'.$filter[0].'")'; 
     298        $igPrefix = 'upper('; 
     299        $igSuffix = ')'; 
     300    } 
     301 
     302    if( is_array($filter[1]) ) 
     303        return( $filter[0].' '.$op[0]." ($igPrefix'".implode( "'$igSuffix,$igPrefix'", array_map("pg_escape_string" , $filter[1]) )."'$igSuffix)" ); 
     304 
     305    return( $filter[0].' '.$op[0]." $igPrefix'".$op[1].pg_escape_string( $filter[1] ).$op[2]."'$igSuffix" ); 
    306306    } 
    307307 
    308308    private static function parseOperator( $op ){ 
    309309     
    310         switch(strtolower($op)) 
    311         { 
    312             case 'and': 
    313             case 'or': return( $op ); 
    314             case 'in': return array( $op ); 
    315             case '!in': return array( 'NOT IN' ); 
    316             case '^': return array( 'like', '%',  '' ); 
    317             case '$': return array( 'like',  '', '%' ); 
    318             case '*': return array( 'like', '%', '%' ); 
    319             case 'i^': return array( 'ilike', '%',  '' ); 
    320             case 'i$': return array( 'ilike',  '', '%' ); 
    321             case 'i*': return array( 'ilike', '%', '%' ); 
    322             default : return array( $op,  '',  '' ); 
    323         } 
     310    switch(strtolower($op)) 
     311    { 
     312        case 'and': 
     313        case 'or': return( $op ); 
     314        case 'in': return array( $op ); 
     315        case '!in': return array( 'NOT IN' ); 
     316        case '^': return array( 'like', '%',  '' ); 
     317        case '$': return array( 'like',  '', '%' ); 
     318        case '*': return array( 'like', '%', '%' ); 
     319        case 'i^': return array( 'ilike', '%',  '' ); 
     320        case 'i$': return array( 'ilike',  '', '%' ); 
     321        case 'i*': return array( 'ilike', '%', '%' ); 
     322        default : return array( $op,  '',  '' ); 
     323    } 
    324324    } 
    325325     
     
    352352            $order = array( $order ); 
    353353 
    354         //Caso seja feita ordenacao em ordem descrescente 
    355         //concatenar DESC em cada atributo 
    356         if($orderDesc !== false){ 
    357                 if(!is_array($orderDesc)){ 
    358                         $orderDesc = array( $orderDesc ); 
    359                 } 
    360  
    361                 for($i=0; $i<count($order); $i++){ 
    362                         $order[$i] .= ($orderDesc[$i] === true) ? ' DESC' : ''; 
    363                 } 
    364         } 
     354    //Caso seja feita ordenacao em ordem descrescente 
     355    //concatenar DESC em cada atributo 
     356    if($orderDesc !== false){ 
     357        if(!is_array($orderDesc)){ 
     358            $orderDesc = array( $orderDesc ); 
     359        } 
     360 
     361        for($i=0; $i<count($order); $i++){ 
     362            $order[$i] .= ($orderDesc[$i] === true) ? ' DESC' : ''; 
     363        } 
     364    } 
    365365 
    366366        $return = array(); 
Note: See TracChangeset for help on using the changeset viewer.