Changeset 5907


Ignore:
Timestamp:
04/10/12 17:27:27 (12 years ago)
Author:
cristiano
Message:

Ticket #2606 - Syncronização das acls e compartilhamentos com caldav

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoAdmin1_2/inc/class.uishared_accounts.inc.php

    r5850 r5907  
    101101                        $p->set_var('modal_id', $modal_id); 
    102102                         
     103                        $davicalConf = parse_ini_file( dirname(__FILE__)."/../../prototype/config/CalDAV.srv", true );   
    103104                        $var = Array( 
    104105                            'mailquota' =>  $this->current_config['expressoAdmin_defaultSharedAccountQuota'], 
     
    108109                            'aclExpressoCalendar' => (isset($config['defaultCalendar']) && ($config['defaultCalendar'] == 'expressoCalendar')) ? '' : 'none', 
    109110                            'aclCalendar' => (isset($config['defaultCalendar']) && ($config['defaultCalendar'] == 'calendar')) ? '' : 'none', 
    110                             'calendarName' => (isset($config['defaultCalendar']) && ($config['defaultCalendar'] == 'calendar')) ? 'Calendar' : 'ExpressoCalendar' 
    111                         ); 
     111                            'calendarName' => (isset($config['defaultCalendar']) && ($config['defaultCalendar'] == 'calendar')) ? 'Calendar' : 'ExpressoCalendar', 
     112                            'sharedAccountsLocation' => isset($davicalConf['sharedAccountsLocation']) ? $davicalConf['sharedAccountsLocation'] : '' 
     113                          ); 
    112114                        $p->set_var($var); 
    113115                        $shared_accounts_modal_tpl = $p->fp('out','shared_accounts_modal'); 
  • trunk/expressoAdmin1_2/js/jscode/shared_accounts.js

    r5850 r5907  
    396396 
    397397                if(!!!sharemailbox.currentPemissions[sharedUser.id]) 
    398                     DataLayer.put('calendarSignature', { 
     398                     DataLayer.put('calendarSignature', { 
    399399                        user: sharedUser.id, 
    400400                        calendar:  { 
    401401                            timezone: 'America/Sao_Paulo', 
    402402                            name: $('#cn').val(), 
    403                             location : $('#cn').val(), 
     403                            location : $('#sharedAccountsLocation').val() + '/' + $('#cn').val(), 
    404404                            description : $('#cn').val() 
    405405                            }, 
     
    409409                        borderColor: 'eddb21' 
    410410                    }); 
    411  
     411                   
    412412                var returns = function(data){ 
    413413                     
  • trunk/expressoAdmin1_2/templates/default/shared_accounts_modal.tpl

    r5850 r5907  
    4747                                                 
    4848                <td width="15%" valign="bottom" align="center" bgcolor="#DDDDDD" style="padding-bottom: 5px;"> 
     49                    <input type="hidden" id="sharedAccountsLocation" value="{sharedAccountsLocation}" /> 
    4950                    <table align="center" style="display: {aclCalendar}"> 
    5051                        <tbody> 
  • trunk/prototype/config/CalDAV.srv

    r5604 r5907  
    11;Url utilizada para acessar o serviço caldav 
    22url = "" 
     3;Conta do caldav onde fica armazenada as agendas de contas compartilhadas 
     4sharedAccountsLocation = "shareds" 
  • trunk/prototype/config/calendarToPermission.ini

    r5812 r5907  
    1111deepnessFindCalendarShared = modules/calendar/interceptors/DBMapping.php 
    1212 
     13[before.create] 
     14createCollectionACL = modules/calendar/interceptors/DAViCalAdapter.php 
     15 
     16[before.update] 
     17updateCollectionACL = modules/calendar/interceptors/DAViCalAdapter.php 
     18 
     19 
    1320[PostgreSQL.mapping] 
    1421id = id 
  • trunk/prototype/modules/calendar/interceptors/DAViCalAdapter.php

    r5481 r5907  
    11<?php 
     2require_once ROOTPATH.'/modules/calendar/constants.php'; 
    23 
    34class DAViCalAdapter {  
     
    2930            if($concept['concept'] === 'calendarToSchedulable') 
    3031            { 
    31                 if(Config::module('useCaldav')) 
     32                if(Config::module('useCaldav' , 'expressoCalendar')) 
    3233                {       
    3334                    ob_start(); 
     
    3839                        $calendar =  Controller::read( array( 'concept' => 'calendar' , 'id' => $calendarToschedulable['calendar'] ),array('timezone','name','location')); 
    3940                        $ical = Controller::format( array( 'service' => 'iCal' ) , array($schedulable) , array('defaultTZI' => $calendar['timezone']));           
    40                         DAViCalAdapter::putIcal($ical , array('uid' => $schedulable['uid'] , 'collection' => $calendar['location'] )); 
     41                        DAViCalAdapter::putIcal($ical , array('uid' => $schedulable['uid'] , 'location' => $calendar['location'] )); 
    4142                    } 
    4243                    ob_end_clean(); 
     
    4748    }  
    4849     
     50    public function createCollectionACL(&$uri ,&$params , &$criteria , $original) 
     51    {       
     52        if( Config::module('useCaldav' , 'expressoCalendar') ) 
     53        { 
     54            $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $params['calendar'] )); 
     55             
     56            if($params['user'] !== '0') 
     57            { 
     58                $user = Controller::read( array( 'concept' => 'user' , 'id' => $params['user'] )); 
     59                $xmUser =   '<D:href>'.Config::service( 'CalDAV' , 'url' ).'/'.$user['uid'].'/</D:href>'; 
     60            } 
     61            else 
     62                $xmUser =   '<D:authenticated/>'; 
     63 
     64            $xml ="<?xml version=\"1.0\" encoding=\"utf-8\" ?> 
     65                   <D:acl xmlns:D=\"DAV:\"> 
     66                     <D:ace> 
     67                       <D:principal> 
     68                        ".$xmUser." 
     69                       </D:principal> 
     70                       <D:grant> 
     71                        ".self::acltToXML($params['acl'])." 
     72                       </D:grant> 
     73                     </D:ace> 
     74                    </D:acl>";   
     75             
     76            ob_start(); 
     77            require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
     78            $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.$calendar['location'].'/', Config::me( 'uid' ), Config::me( 'password' )); 
     79            $cal->DoXMLRequest('ACL', $xml); 
     80            ob_end_clean(); 
     81        } 
     82    } 
     83     
     84    public function updateCollectionACL(&$uri ,&$params , &$criteria , $original) 
     85    {       
     86        if( Config::module('useCaldav' , 'expressoCalendar') ) 
     87        {     
     88            $permision = Controller::read( array( 'concept' => 'calendarToPermission' , 'id' => $params['id'] )); 
     89            $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $permision['calendar'] )); 
     90             
     91            if($permision['user'] !== '0') 
     92            { 
     93                $user = Controller::read( array( 'concept' => 'user' , 'id' => $permision['user'] )); 
     94                $xmUser =   '<D:href>'.Config::service( 'CalDAV' , 'url' ).'/'.$user['uid'].'/</D:href>'; 
     95            } 
     96            else 
     97                $xmUser =   '<D:authenticated/>'; 
     98 
     99                $xml ="<?xml version=\"1.0\" encoding=\"utf-8\" ?> 
     100                       <D:acl xmlns:D=\"DAV:\"> 
     101                         <D:ace> 
     102                           <D:principal> 
     103                            ".$xmUser." 
     104                           </D:principal> 
     105                           <D:grant> 
     106                            ".self::acltToXML($params['acl'])." 
     107                           </D:grant> 
     108                         </D:ace> 
     109                        </D:acl>"; 
     110             
     111            ob_start(); 
     112            require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
     113            $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.$calendar['location'].'/', Config::me( 'uid' ), Config::me( 'password' )); 
     114            $cal->DoXMLRequest('ACL', $xml); 
     115            ob_end_clean(); 
     116             
     117        } 
     118    } 
     119     
     120    private static function acltToXML($acls) 
     121    { 
     122        $array = array(); 
     123        $acls = str_split($acls); 
     124         
     125        foreach ($acls as &$acl) 
     126            switch ($acl)  
     127            { 
     128                case CALENDAR_ACL_WRITE: 
     129                    $array[] = "<D:privilege><D:bind/></D:privilege>"; 
     130                    $array[] = "<D:privilege><D:write-properties/></D:privilege>"; 
     131                    $array[] = "<D:privilege><D:write-content/></D:privilege>"; 
     132                    $array[] = "<D:privilege><D:unlock/></D:privilege>"; 
     133                    $array[] = "<D:privilege><D:schedule-deliver/></D:privilege>"; 
     134                    $array[] = "<D:privilege><D:schedule-send/></D:privilege>"; 
     135                    break; 
     136                case CALENDAR_ACL_READ: 
     137                    $array[] = "<D:privilege><D:read /></D:privilege>"; 
     138                    $array[] = "<D:privilege><D:schedule-query-freebusy /></D:privilege>"; 
     139                    $array[] = "<D:privilege><D:read-free-busy /></D:privilege>"; 
     140                    break; 
     141                case CALENDAR_ACL_REMOVE: 
     142                    $array[] = "<D:privilege><D:unbind/></D:privilege>"; 
     143                    break; 
     144                case CALENDAR_ACL_SHARED: 
     145                    $array[] = "<D:privilege><D:write-acl/></D:privilege>"; 
     146                    $array[] = "<D:privilege><D:read-acl/></D:privilege>"; 
     147                    $array[] = "<D:privilege><D:read-current-user-privilege-set/></D:privilege>"; 
     148                    break; 
     149                case CALENDAR_ACL_BUSY: 
     150                    $array[] = "<D:privilege><D:schedule-query-freebusy/></D:privilege>"; 
     151                    $array[] = "<D:privilege><D:read-free-busy/></D:privilege>"; 
     152                    break; 
     153            }       
     154        return implode("\n", $array); 
     155    } 
    49156     
    50157    static function import($data , $params = false) 
     
    157264             
    158265            if(!is_array(self::$deleted) || !in_array($event['uid'], self::$deleted)) 
    159                 self::deleteIcal($event['uid'] , array('uid' => $event['uid'] , 'collection' => $params['calendar'] )); 
     266                self::deleteIcal($event['uid'] , array('uid' => $event['uid'] , 'location' => $params['location'] )); 
    160267 
    161268    } 
     
    165272      ob_start(); 
    166273      require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
    167       $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/'.$params['collection'].'/', Config::me( 'uid' ), $_SESSION['wallet']['user']['password'] ); 
    168       $cal->DoPUTRequest( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/'.$params['collection'].'/'.$params['uid'].'.ics', $data  );   
     274      $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.$params['location'].'/', Config::me( 'uid' ), Config::me( 'password' ) ); 
     275      $cal->DoPUTRequest( Config::service( 'CalDAV' , 'url' ).'/'.$params['location'].'/'.$params['uid'].'.ics', $data  );   
    169276      ob_end_clean(); 
    170277    } 
     
    174281       ob_start(); 
    175282       require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
    176        $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/'.$params['collection'].'/', Config::me( 'uid' ), $_SESSION['wallet']['user']['password']); 
    177        $cal->DoDELETERequest( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/'.$params['collection'].'/'.$data.'.ics' ); 
     283       $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.$params['location'].'/', Config::me( 'uid' ), Config::me( 'password' )); 
     284       $cal->DoDELETERequest( Config::service( 'CalDAV' , 'url' ).'/'.$params['location'].'/'.$data.'.ics' ); 
    178285       ob_end_clean(); 
    179286    } 
     
    183290       ob_start(); 
    184291       require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php';        
    185        $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/', Config::me( 'uid' ), $_SESSION['wallet']['user']['password']); 
     292       $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/', Config::me( 'uid' ), Config::me( 'password' )); 
    186293       $cal->DoDELETERequest(Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/'.$data.'/'); 
    187294       ob_end_clean(); 
     
    192299       ob_start(); 
    193300       require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
    194        $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/', Config::me( 'uid' ), $_SESSION['wallet']['user']['password']);        
     301       $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/', Config::me( 'uid' ), Config::me( 'password' ));        
    195302       $cal->DoMOVERequest( $origem.'/' , $destination.'/' ); 
    196303       ob_end_clean(); 
     
    201308       ob_start(); 
    202309       require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
    203        $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/', Config::me( 'uid' ), $_SESSION['wallet']['user']['password']);        
     310       $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/', Config::me( 'uid' ), Config::me( 'password' ));        
    204311       ob_end_clean(); 
    205312       return $cal->FindCalendars(); 
     
    207314     
    208315    static function mkcalendar($location , $name, $description ) 
    209     { 
     316    {    
    210317        ob_start(); 
    211318        require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
    212         $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/', Config::me( 'uid' ), $_SESSION['wallet']['user']['password']); 
     319        $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/', Config::me( 'uid' ), Config::me( 'password' )); 
    213320  
    214321        $xml ="<?xml version=\"1.0\" encoding=\"utf-8\" ?> 
     
    227334           
    228335           
    229         $cal->DoXMLRequest('MKCALENDAR', $xml, Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/'.$location.'/'); 
     336        $cal->DoXMLRequest('MKCALENDAR', $xml, Config::service( 'CalDAV' , 'url' ).'/'.$location.'/'); 
    230337        ob_end_clean(); 
    231338    } 
     
    235342        ob_start(); 
    236343        require_once ROOTPATH.'/plugins/davicalCliente/caldav-client-v2.php'; 
    237         $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/'.Config::me( 'uid' ).'/', Config::me( 'uid' ), Config::me( 'password' )); 
     344        $cal = new CalDAVClient( Config::service( 'CalDAV' , 'url' ).'/', Config::me( 'uid' ), Config::me( 'password' )); 
    238345          
    239346        $events = $cal->GetCollectionETags($url) ; 
     
    251358        ob_end_clean(); 
    252359    } 
    253  
     360     
    254361} 
    255362 
  • trunk/prototype/modules/calendar/interceptors/DBMapping.php

    r5863 r5907  
    394394    static function putEvent(&$uri , &$result , &$criteria , $original) 
    395395    {           
    396             if(Config::module('useCaldav')) //Ignorar Put dos eventos ja vindos do caldav 
     396            if(Config::module('useCaldav' , 'expressoCalendar')) //Ignorar Put dos eventos ja vindos do caldav 
    397397            { 
    398398                require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 
     
    419419                if( is_array($calendars) ) 
    420420                    foreach ($calendars as $calendar) 
    421                         DAViCalAdapter::putIcal($ical , array('uid' => $event['uid'] , 'collection' => $calendar['calendar_location'] )); 
     421                        DAViCalAdapter::putIcal($ical , array('uid' => $event['uid'] , 'location' => $calendar['calendar_location'] )); 
    422422            } 
    423423    }  
     
    426426    public function verifyCalendarLocation( &$uri , &$params , &$criteria , $original ){ 
    427427        if(!isset($params['location'])) 
    428             $params['location'] = $params['name']; 
     428            $params['location'] = Config::me('uid').'/'.$params['name']; 
    429429    }  
    430430     
     
    744744    public function deleteSchedulable( &$uri , &$params , &$criteria , $original ){ 
    745745 
    746        if(Config::module('useCaldav')) 
     746       if(Config::module('useCaldav' , 'expressoCalendar')) 
    747747            require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 
    748748 
    749749        $calendarsToSchedulable = self::schedulable2calendarToObject($uri['id']); 
    750750        if( !self::ownerSchedulable($uri['id']) ) 
    751         { 
     751        {            
    752752             foreach ($calendarsToSchedulable as $i => $v) 
    753753             { 
    754754                   Controller::delete(array('concept' => 'calendarToSchedulable' , 'id' => $v['calendar_to_calendar_object'])); 
    755755                    
    756                    if(Config::module('useCaldav')) 
    757                         DAViCalAdapter::deleteEvent($uri['id'], array('calendar' => $v['calendar_name'])); 
     756                   if(Config::module('useCaldav' , 'expressoCalendar')) 
     757                        DAViCalAdapter::deleteEvent($uri['id'], array('location' => $v['calendar_location'])); 
    758758             } 
    759759              
     
    768768            return false; /* Mata o restante da execução */ 
    769769        }  
    770          
    771         if(Config::module('useCaldav')) 
     770                 
     771        if(Config::module('useCaldav' , 'expressoCalendar')) 
    772772            foreach ($calendarsToSchedulable as $i => $v) 
    773                 DAViCalAdapter::deleteEvent($uri['id'], array('calendar' => $v['calendar_name'])); 
     773                DAViCalAdapter::deleteEvent($uri['id'], array('location' => $v['calendar_location'])); 
    774774 
    775775     } 
     
    831831    {         
    832832         
    833         if( Config::module('useCaldav') ) 
     833        if( Config::module('useCaldav' , 'expressoCalendar') ) 
    834834        { 
    835835            require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 
     
    838838        } 
    839839         
    840         if( Config::module('useCaldav') && is_array($calendario) && count($calendario) > 0) 
     840        if( Config::module('useCaldav' , 'expressoCalendar') && is_array($calendario) && count($calendario) > 0) 
    841841        {      
    842842            foreach ($calendario as $i => $v) 
     
    930930 
    931931    public function davcalCreateCollection( &$uri , &$params , &$criteria , $original ){         
    932         if( Config::module('useCaldav') ) 
     932        if( Config::module('useCaldav' , 'expressoCalendar') ) 
    933933        { 
    934934           require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 
    935            DAViCalAdapter::mkcalendar($params['location'] , $params['name'], isset($params['description']) ? $params['description'] : '' ); 
     935           DAViCalAdapter::mkcalendar($params['location'] , $params['name'], isset($params['description']) ? $params['description'] : '' ); 
    936936        } 
    937937    } 
    938938     
    939939   public function davcalDeleteCollection( &$uri , &$params , &$criteria , $original ){  
    940         if( Config::module('useCaldav') &&  Config::module('onRemoveCascadeCalDav')) 
     940        if( Config::module('useCaldav' , 'expressoCalendar') &&  Config::module('onRemoveCascadeCalDav')) 
    941941        { 
    942942           require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 
     
    947947         
    948948   public function davcalUpdateCollection( &$uri , &$params , &$criteria , $original ){  
    949         if( Config::module('useCaldav') ) 
     949        if( Config::module('useCaldav' , 'expressoCalendar') ) 
    950950        { 
    951951           require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 
     
    10201020      return Controller::service('PostgreSQL')->execResultSql('SELECT calendar_to_calendar_object.id as calendar_to_calendar_Object , calendar.name as calendar_name ,calendar.location as calendar_location, calendar.id as calendar_id FROM calendar_to_calendar_object , calendar , calendar_signature'  
    10211021                .' WHERE calendar_signature.user_uidnumber = '.$_SESSION['wallet']['user']['uidNumber'] 
    1022                 .' AND calendar_signature.is_owner = 1' 
     1022          //      .' AND calendar_signature.is_owner = 1' 
    10231023                .' AND calendar_signature.calendar_id = calendar.id' 
    10241024                .' AND calendar_to_calendar_object.calendar_id = calendar.id' 
Note: See TracChangeset for help on using the changeset viewer.