Ignore:
Timestamp:
03/16/12 15:02:14 (12 years ago)
Author:
natan
Message:

Ticket #2434 - Desenvolvimento do backend de suporte a excessoes nas repeticoes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/prototype/modules/calendar/interceptors/DBMapping.php

    r5737 r5741  
    120120 
    121121         $params = Controller::service('PostgreSQL')->execResultSql($sql); 
     122 
     123         $params = array_merge( $params, $occ ); 
    122124         $params = self::deepnessFindEvent( &$uri , &$params , &$criteria , $original); 
    123   
    124          $params = array_merge( $params, $occ ); 
    125125 
    126126         return false; 
     
    166166        unset( $repeat['id'] ); 
    167167 
    168         $params = self::decodeRepeat( $repeat, $ranges[0]['rangeStart'], $ranges[0]['rangeEnd'] ); 
     168        $exceptions = array(); 
     169 
     170        if( isset( $repeat['exceptions'] ) ) 
     171        { 
     172            $exceptions = explode( ',', $repeat['exceptions'] ); 
     173            unset( $repeat['exceptions'] ); 
     174        } 
     175 
     176        $params = array_diff( self::decodeRepeat( $repeat, $ranges[0]['rangeStart'], $ranges[0]['rangeEnd'] ), $exceptions ); 
    169177 
    170178        Controller::delete( array( 'concept' => 'repeatOccurrence' ), false, array( 'filter' => array( '=', 'repeat', $id ) ) ); 
    171179 
    172180        if( !empty($params) ) 
    173             Controller::service('PostgreSQL')->execResultSql( "INSERT INTO calendar_repeat_occurrence(repeat_id,occurrence)VALUES('".$id."', '".implode( "'),('".$id."','", $params )."')" ); 
     181            Controller::service('PostgreSQL')->execResultSql( "INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES('".$id."','0','".implode( "'),('".$id."','0','", $params )."')".( empty($exceptions) ? "" : ",('".$id."','1','".implode( "'),('".$id."','0','", $exceptions )."')" ) ); 
    174182 
    175183    } 
     
    244252        } 
    245253 
    246         $return = Controller::find( array( 'concept' => 'repeatOccurrence' ), false, array( 'filter' => array( 'AND', array( '>=', 'occurrence', $origStart ), array( '<=', 'occurrence', $origEnd ), array( 'IN', 'repeat', $ids ) ), 'deepness' => $deep ) ); 
     254//      $return = Controller::find( array( 'concept' => 'repeatOccurrence' ), false, array( 'filter' => array( 'AND', array( '>=', 'occurrence', $origStart ), array( '<=', 'occurrence', $origEnd ), array( 'IN', 'repeat', $ids ) ), 'deepness' => $deep ) ); 
     255 
     256        $return = Controller::service('PostgreSQL')->execResultSql( 'SELECT calendar_repeat_occurrence.occurrence as "occurrence", calendar_repeat.object_id as "schedulable" FROM calendar_repeat, calendar_repeat_occurrence WHERE calendar_repeat_occurrence.occurrence >= \''.$origStart.'\' AND calendar_repeat_occurrence.occurrence <= \''.$origEnd.'\' AND calendar_repeat_occurrence.repeat_id IN (\''.implode( '\',\'', $ids ).'\') AND calendar_repeat.id = calendar_repeat_occurrence.repeat_id AND calendar_repeat_occurrence.exception != 1' ); 
    247257 
    248258        if( !is_array( $return ) ) 
     
    254264        foreach( $return as $ret ) 
    255265        { 
    256               $currentId = $ret['repeat']['schedulable']['id']; 
     266              $currentId = $ret['schedulable']; 
    257267 
    258268              if( !isset( $result[ $currentId ] ) ) 
    259269              { 
    260                     $result[ $currentId ] = $ret['repeat']['schedulable']; 
    261                     $result[ $currentId ]['repeat']['schedulable'] = $currentId; 
    262  
     270                    $result[ $currentId ] = Controller::read( array( 'concept' => 'schedulable', 'id' => $currentId ) ); 
    263271                    $result[ $currentId ][ 'occurrences' ] = array(); 
    264272 
    265273                    $calendarToCalendarObj = self::schedulable2calendarToObject( $currentId ); 
    266  
    267                     $result[ $currentId ]['calendar'] = $calendarToCalendarObj[0]['calendar_id'];   
     274                    $result[ $currentId ]['calendar'] = $calendarToCalendarObj[0]['calendar_id']; 
    268275              } 
    269276       
     
    527534                    $repeat = Controller::find( array( 'concept' => 'repeat' ), false, array( 'filter' => array( '=', 'schedulable', $v['id'] ) ) ); 
    528535 
     536                    unset( $result[$i]['repeat'] ); 
     537 
    529538                    if( is_array($repeat) ) 
    530539                        $result[$i]['repeat'] = $repeat[0]; 
Note: See TracChangeset for help on using the changeset viewer.