Changeset 6344


Ignore:
Timestamp:
05/29/12 17:05:46 (12 years ago)
Author:
acoutinho
Message:

Ticket #2812 - Inconsistências na importação de evento para diferentes agendas

Location:
trunk/prototype
Files:
2 edited

Legend:

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

    r6331 r6344  
    202202        $lastExceptions = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('AND', array('=', 'repeat', $id), array('=', 'exception', 1)))); 
    203203 
    204         //Recurepa as execeções anteriores caso exista 
     204        //Recurepa as execeções anteriores caso exista 
    205205        if (isset($lastExceptions) && count($lastExceptions) && $lastExceptions) 
    206206            foreach ($lastExceptions as $key => $value) 
     
    323323            return( array() ); 
    324324 
    325         //Nao deve ser usando o horário da repeticao pois nela contem apenas o dias, 
    326         //deve se recuperar o horário do evento para um correto calculo. 
     325        //Nao deve ser usando o horário da repeticao pois nela contem apenas o dias, 
     326        //deve se recuperar o horário do evento para um correto calculo. 
    327327        if (max($start, $repeat['startTime']) != $repeat['startTime']) { 
    328328            $time = new DateTime('@' . (int) ( $repeat['startTime'] / 1000 ), new DateTimeZone('UTC')); 
     
    362362            $u = $result->format('U') * 1000; 
    363363 
    364             if ($u > $end) //data da repetição atual maior que a data final da busca do usuario ? 
     364            if ($u > $end) //data da repetição atual maior que a data final da busca do usuario ? 
    365365                break; 
    366366 
     
    628628                    $result[$i]['calendar'] = Controller::read(array('concept' => 'calendar', 'id' => $v['calendar']), false, false); 
    629629                    $result[$i]['defaultAlarms'] = Controller::find(array('concept' => 'calendarSignatureAlarm'), false, array('filter' => array('=', 'calendarSignature', $v['id']))); 
    630                     //Caso não seja o dono da agenda retorna o objeto permission com as acls 
     630                    //Caso nï¿œo seja o dono da agenda retorna o objeto permission com as acls 
    631631                    if ($result[$i]['isOwner'] == 0) { 
    632632                        $permission = Controller::find(array('concept' => 'calendarToPermission'), false, array('filter' => array('AND', array('=', 'calendar', $v['calendar']), array('=', 'user', Config::me('uidNumber'))))); 
     
    712712        } 
    713713    }  
    714  
     714     
     715    static private function countMyCalendarsEvent($id, $owner) { 
     716                $sig = Controller::find(array('concept' => 'calendarSignature'), array('user', 'calendar', 'isOwner'), array('filter' => array('AND', array('=', 'user', $owner), array('=', 'isOwner', '1')))); 
     717                $calendars = array(); 
     718                foreach ($sig as $val) 
     719                        $calendars[] = $val['calendar']; 
     720 
     721                $return = Controller::find(array('concept' => 'calendarToSchedulable'), null, array('filter' => array('AND', array('IN', 'calendar', $calendars), array('=', 'schedulable', $id)))); 
     722 
     723                return (isset($return[0])) ? count($return) : 0; 
     724    } 
     725     
    715726    public function deleteSchedulable(&$uri, &$params, &$criteria, $original) { 
    716  
    717         if (Config::module('useCaldav', 'expressoCalendar')) 
     727        if (Config::module('useCaldav', 'expressoCalendar')) 
    718728            require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
    719          
    720         if(isset($criteria['filter']) && $criteria['filter'] && isset($criteria['filter'][1][2])){ 
    721             $idSchedulable = $criteria['filter'][1][2]; 
    722             $idCalendar = $criteria['filter'][2][2]; 
    723              
    724             if(!self::ownerSchedulable($idSchedulable, $criteria['filter'][3][2])){ 
    725                 $isPermissionFromOwner = self::permissionFromCalendarSignature($idCalendar, $idSchedulable); 
    726                  
    727                 if($isPermissionFromOwner){ 
    728                     Controller::delete(array('concept' => 'schedulable', 'id' => $idSchedulable)); 
    729  
    730                 }else{ 
    731                     $calendarsToSchedulable = self::schedulable2calendarToObject($idSchedulable); 
    732  
    733                     foreach($calendarsToSchedulable as $value) 
    734                         if($value['calendar_id'] == $idCalendar){     
    735  
    736                             $participant = Controller::read(array('concept' => 'participant'), array('id'), array('filter' => 
    737                                 array('AND', 
    738                                     array('=', 'user', $criteria['filter'][3][2]), 
    739                                     array('=', 'schedulable', $idSchedulable) 
    740                                 ))); 
    741  
    742                             Controller::call(('update'), array('concept' => 'participant', 'id' => $participant[0]['id']), array('status' => STATUS_CANCELLED)); 
    743                             Controller::delete(array('concept' => 'calendarToSchedulable', 'id' => $value['calendar_to_calendar_object'])); 
    744                             break; 
    745                         } 
    746                 } 
    747                 return false; 
    748             } 
    749  
    750             $uri['id'] = $idSchedulable; 
    751         } 
    752  
    753         $calendarsToSchedulable = self::schedulable2calendarToObject($uri['id']); 
    754  
    755         if (!self::ownerSchedulable($uri['id'], Config::me('uidNumber')) && !self::isAllowDeleteInCalendar($calendarsToSchedulable[0]['calendar_id'])) { 
    756  
    757             foreach ($calendarsToSchedulable as $i => $v) { 
    758                 Controller::delete(array('concept' => 'calendarToSchedulable', 'id' => $v['calendar_to_calendar_object'])); 
    759  
    760                 if (Config::module('useCaldav', 'expressoCalendar')) 
    761                     DAViCalAdapter::deleteEvent($uri['id'], array('location' => $v['calendar_location'])); 
    762             } 
    763  
    764             /* Seta o participante como rejeitado */ 
    765             $participant = Controller::read(array('concept' => 'participant'), array('id'), array('filter' => 
    766                 array('AND', 
    767                     array('=', 'user', Config::me('uidNumber')), 
    768                     array('=', 'schedulable', $idSchedulable) 
    769                 ))); 
    770  
    771             Controller::call(('update'), array('concept' => 'participant', 'id' => $participant[0]['id']), array('status' => STATUS_CANCELLED)); 
    772  
    773             return false; /* Mata o restante da execução */ 
    774         } 
    775  
    776         if (Config::module('useCaldav', 'expressoCalendar')) 
    777             foreach ($calendarsToSchedulable as $i => $v) 
    778                 DAViCalAdapter::deleteEvent($uri['id'], array('location' => $v['calendar_location'])); 
     729         
     730        if(isset($criteria['filter']) && $criteria['filter'] && isset($criteria['filter'][1][2])){ 
     731            $idSchedulable = $criteria['filter'][1][2]; 
     732                        $idCalendar = $criteria['filter'][2][2]; 
     733            $owner = $criteria['filter'][3][2]; 
     734 
     735            $qtdMyCalendars = self::countMyCalendarsEvent($idSchedulable, $owner); 
     736 
     737            $link = Controller::read(array('concept' => 'calendarToSchedulable'), false, array('filter' => array('AND', array('=','calendar',$idCalendar), array('=','schedulable',$idSchedulable)))); 
     738            $link = (is_array($link) && isset($link[0])) ? $link[0] : $link; 
     739             
     740            $calendar = Controller::read(array('concept' => 'calendar'), false, array('filter' => array('=','id',$idCalendar))); 
     741            $calendar = (is_array($calendar) && isset($calendar[0])) ? $calendar[0] : $calendar; 
     742 
     743            if($isAttende = !self::ownerSchedulable($idSchedulable, $owner)){ 
     744                Controller::delete(array('concept' => 'calendarToSchedulable', 'id' => $link['id'])); 
     745                 
     746                if($qtdMyCalendars <= 1){ 
     747 
     748                    $participant = Controller::read(array('concept' => 'participant'), array('id'), array('filter' => 
     749                        array('AND', 
     750                            array('=', 'user', $owner), 
     751                            array('=', 'schedulable', $idSchedulable) 
     752                        ))); 
     753 
     754                    Controller::call(('update'), array('concept' => 'participant', 'id' => $participant[0]['id']), array('status' => STATUS_CANCELLED)); 
     755                } 
     756 
     757            }else{ 
     758                if($qtdMyCalendars > 1 ) 
     759                    Controller::delete(array('concept' => 'calendarToSchedulable', 'id' => $link['id'])); 
     760            } 
     761 
     762            if (Config::module('useCaldav', 'expressoCalendar')) 
     763                    DAViCalAdapter::deleteEvent($idSchedulable, array('location' => $calendar['location'])); 
     764 
     765            if($isAttende || ($qtdMyCalendars > 1)) 
     766                return false; 
     767 
     768            $uri['id'] = $idSchedulable; 
     769        } 
     770         
    779771    } 
    780772 
     
    829821    public function createDefaultSignature(&$uri, &$result, &$criteria, $original) { 
    830822 
    831         //Caso uma busca não retorne nenhum resultado e foi buscado pelas assinaturas do usuario logado apenas 
     823        //Caso uma busca não retorne nenhum resultado e foi buscado pelas assinaturas do usuario logado apenas 
    832824        $isValidSignature = false; 
    833825 
    834         //Veirifica pois o usuário pode ter varias assinaturas mas não ser dona de nenhuma 
     826        //Veirifica pois o usuário pode ter varias assinaturas mas não ser dona de nenhuma 
    835827        if (count($result) > 0) { 
    836828            foreach ($result as $value) { 
     
    883875                } 
    884876            } else { 
    885                 //Criaremos uma agenda padrão 
     877                //Criaremos uma agenda padrï¿œo 
    886878                $cal = array('name' => 'Calendario', 
    887                     'description' => 'Calendario Padrão', 
     879                    'description' => 'Calendario Padrï¿œo', 
    888880                    'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
    889881                    'dtstamp' => time() . '000' 
     
    10121004    } 
    10131005 
    1014     private static function permissionFromCalendarSignature($idCalendar, $idEvent) { 
    1015         $signature = Controller::find(array('concept' => 'calendarSignature'), false, array( 'filter' => array('AND', array('=', 'calendar', $idCalendar), array('=', 'isOwner', '1')), 'deepness' => 2)); 
    1016          
    1017         $signature = is_array($signature) ? $signature[0] : $signature; 
    1018  
    1019         if($signature['user']['id'] == Config::me('uidNumber')){ 
    1020             return false; 
    1021         }else{ 
    1022            $isOwner = Controller::find(array('concept' => 'participant'), array('id'), array('filter' => 
    1023                     array('AND', 
    1024                         array('=', 'isOrganizer', '1'), 
    1025                         array('=', 'user', $signature['user']['id']), 
    1026                         array('=', 'schedulable', $idEvent) 
    1027                         ))); 
    1028  
    1029         return ( isset($isOwner[0]['id']) ) ? true : false; 
    1030         } 
    1031     } 
    1032      
    1033      
    10341006    private static function ownerSchedulable($id, $me) { 
    10351007 
  • trunk/prototype/services/iCal.php

    r6331 r6344  
    235235                    switch ($method) { 
    236236                        case 'PUBLISH': 
    237                             if (!$schedulable = self::_getSchedulable($uid)) 
     237                            //Caso o evento não exista o mesmo cria um novo evento, se já existir o mesmo referencia o evento com agenda 
     238                            if (!$schedulable = self::_getSchedulable($uid)) 
    238239                                $interation = self::_makeVEVENT($schedulable, $component, $params); 
     240                            else{ 
     241                                $links = Controller::read(array('concept' => 'calendarToSchedulable'), array('id'), array('filter' => 
     242                                array('AND', 
     243                                    array('=', 'calendar', $params['calendar']), 
     244                                    array('=', 'schedulable', $schedulable['id']) 
     245                                ))); 
     246 
     247                                if(!$links &&  !isset($links[0])) 
     248                                    Controller::create(array('concept' => 'calendarToSchedulable'), array('calendar' => $params['calendar'], 'schedulable' => $schedulable['id'])); 
     249 
     250                                } 
    239251                            break; 
    240252 
     
    791803 
    792804    static private function _makeVEVENT($schedulable, $component, $params) { 
    793  
    794805        $interation = array(); 
    795806        $eventID = isset($schedulable['id']) ? $schedulable['id'] : mt_rand() . '(Formatter)'; 
Note: See TracChangeset for help on using the changeset viewer.