Ignore:
Timestamp:
06/02/12 17:33:39 (12 years ago)
Author:
acoutinho
Message:

Ticket #2831 - Implementação ao suporte a repetição de eventos

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoCalendar/inc/class.ui_migration.inc.php

    r6210 r6393  
    2020                function __construct() 
    2121                { 
    22                     include_once dirname(__FILE__ ).'/../../header.inc.php'; 
    23                  
    24                     if (is_array($_SESSION['phpgw_info']['expresso']['server'])) 
    25                         $GLOBALS['phpgw_info']['server'] = $_SESSION['phpgw_info']['expresso']['server']; 
    26                     else 
    27                     $_SESSION['phpgw_info']['expresso']['server'] = $GLOBALS['phpgw_info']['server']; 
     22                        include_once dirname(__FILE__ ).'/../../header.inc.php'; 
     23 
     24                        if (is_array($_SESSION['phpgw_info']['expresso']['server'])) 
     25                                $GLOBALS['phpgw_info']['server'] = $_SESSION['phpgw_info']['expresso']['server']; 
     26                        else 
     27                        $_SESSION['phpgw_info']['expresso']['server'] = $GLOBALS['phpgw_info']['server']; 
    2828                                         
    2929                        $local = $_SESSION['phpgw_info']['expresso']['server']['db_host']; 
     
    9393                        } 
    9494                } 
     95 
     96                function decode_days_repeat($hex){ 
     97                    $bin = str_split( decbin($hex) ); 
     98 
     99                    $decoded = array('SU','MO','TU','WE','TH','FR','SA'); 
     100                    $returns = array(); 
     101                     
     102                    foreach($bin as $key => $value) 
     103                        if((int)$value == 1) 
     104                            $returns[] = $decoded[$key]; 
     105 
     106                    return implode(',', $returns); 
     107                } 
     108                 
     109                //Repetição de um evento 
     110                function as_repeat($cal_id, $calendar_object ,$startTime){ 
     111                        $sql_select_repeat = "select * from phpgw_cal_repeats where cal_id = ".$cal_id;                  
     112                        $result = pg_query($this->current_base ,$sql_select_repeat); 
     113                                 
     114                        while($repeat = pg_fetch_array($result)){ 
     115                                $sql_insert = "insert into calendar_repeat (frequency, dtstart, object_id, until, byday, bymonthday, byyearday, interval) values ( "; 
     116                                $type = ''; 
     117                                $weeklyDays = ''; 
     118                                $byMonthDay = ''; 
     119                                $byYearDay = ''; 
     120                                switch($repeat['recur_type']){ 
     121                                        case 1: 
     122                                                $type = 'daily'; 
     123                                        break; 
     124                                        case 2: 
     125                                                $type = 'weekly'; 
     126                                                $weeklyDays = $this->decode_days_repeat($repeat['recur_data']); 
     127                                        break; 
     128                                        case 3: 
     129                                        case 4: 
     130                                                $type = 'monthly'; 
     131                                                $day = new DateTime('@' . (int)$startTime, new DateTimeZone('UTC')); 
     132                                                $byMonthDay = date_format($day, 'j');         
     133                                        break; 
     134                                        case 5: 
     135                                                $type = 'yearly'; 
     136                                                $day = new DateTime('@' . (int)$startTime, new DateTimeZone('UTC')); 
     137                                                $byYearDay = (1 + date_format($day, 'z'));     
     138                                        break; 
     139                                } 
     140                                 
     141                                $sql_insert .= "'".$type."', "; 
     142                                $sql_insert .= "'".$startTime."000', "; 
     143                                $sql_insert .= "'".$calendar_object."', ";   
     144                                 
     145                                $sql_insert .= ($repeat['recur_enddate']) == 0 ? ("'', ") : ("'".$repeat['recur_enddate']."000',"); 
     146                                $sql_insert .= "'".$weeklyDays."', "; 
     147                                $sql_insert .= "'".$byMonthDay."', "; 
     148                                $sql_insert .= "'".$byYearDay."', "; 
     149                                $sql_insert .= "'".$repeat['recur_interval']."') RETURNING id"; 
     150                                         
     151                                $result = pg_query($this->new_base ,$sql_insert); 
     152                                $repeatEvent = pg_fetch_assoc($result); 
     153 
     154                                if($repeat['recur_exception'] != ''){ 
     155 
     156                                        $ocurrences = explode(',', $repeat['recur_exception']); 
     157 
     158                                        foreach($ocurrences as $value){ 
     159                                                $sql_insert_excepetions = 'insert into calendar_repeat_ocurrence (ocurrence, exception, repeat_id) values ( '; 
     160                                                $sql_insert_excepetions .= "'".$value."', "; 
     161                                                $sql_insert_excepetions .= "'1', "; 
     162                                                $sql_insert_excepetions .= "'".$repeatEvent['id']."' )"; 
     163                                                pg_query($this->new_base ,$sql_insert_excepetions); 
     164                                        } 
     165                                } 
     166 
     167                                 
     168                                 
     169                        } 
     170                } 
     171                 
    95172                //Alarmes de um evento 
    96                 function as_alarm($cal_id, $date_ini, $date_end){ 
     173                function as_alarm($cal_id, $event_id, $date_ini){ 
    97174                        $sql_select_evento = "select * from phpgw_async where id like '%".$cal_id."%'";                  
    98175                        $result = pg_query($this->current_base ,$sql_select_evento); 
    99176                                 
    100                         while($evento = pg_fetch_array($result)){                        
    101                                 if(!$result['account_id']) 
    102                                         continue; 
    103                                 $sql_insert = "insert into calendar_alarm (action_id, time, range_end, range_start, unit, participant_id, object_id,sent) values ( "; 
     177                        while($evento = pg_fetch_array($result)){ 
     178                                 
     179                                $data = unserialize($evento['data']); 
     180                             
     181                                $attendee = pg_query($this->new_base , "select id from calendar_participant where (user_info_id = '".$data['owner']."' AND object_id = '".$event_id."' )"); 
     182                                $attendee = pg_fetch_array($attendee); 
     183 
     184                                $offset = ($date_ini - $evento['next']); 
     185 
     186                                $sql_insert = "insert into calendar_alarm (action_id, unit, alarm_offset, time, participant_id, object_id, sent) values ( "; 
    104187                                //action_id 
    105188                                $sql_insert .= "1, "; 
    106                                  
     189                                //unit 
     190                                $sql_insert .= "'m', "; 
     191                                //offset 
     192                                $sql_insert .= "'".$offset."', "; 
    107193                                //time 
    108                                 $time =  preg_split('/:/', $result['times']); 
    109                                 $sql_insert .= substr($time, -1).", "; 
    110                                 //range_end 
    111                                 $sql_insert .= "'".$date_end."', "; 
    112                                 //range_start 
    113                                 $sql_insert .= "'".$date_ini."', "; 
    114                                 //arrumar unit 
    115                                 $sql_insert .= "1, "; 
    116                                 //participant_id 
    117                                 $sql_insert .= $result['account_id'].", "; 
     194                                $sql_insert .= "'".($offset / 60)."', "; 
     195                                //participant 
     196                                $sql_insert .= $attendee['id'] .", "; 
    118197                                //object_id 
    119                                 $sql_insert .= $cal_id.", "; 
     198                                $sql_insert .= $event_id.", "; 
    120199                                //sent 
    121200                                if($date_ini > time()) 
     
    188267                        //Todo 
    189268                        //Implementar Repetição 
    190                                                  
     269 
    191270                        $result = pg_query($this->current_base, $sql); 
    192271                        while($evento = pg_fetch_array($result)){ 
     
    272351                                        $this->as_user_external($evento['cal_id'] ,$calendar['id'], $evento['owner'], $evento['ex_participants']);       
    273352                                 
    274                                 //Por equanto desativado 
    275                                 //$this->as_alarm($evento['cal_id'], $evento['datetime'],$evento['edatetime']) ;         
     353                                //Alarmes de eventos 
     354                                $this->as_alarm($evento['cal_id'], $calendar['id'], $evento['datetime']) ; 
     355                                 
     356                                //Repetição de um evento 
     357                                $this->as_repeat($evento['cal_id'] ,$calendar['id'], $evento['datetime']); 
    276358                                 
    277359                        } 
Note: See TracChangeset for help on using the changeset viewer.