Changeset 6951 for sandbox


Ignore:
Timestamp:
08/06/12 18:17:24 (9 years ago)
Author:
acoutinho
Message:

Ticket #2966 - Suporte a importacao e exportacao de tarefas / correcoes de bugs

Location:
sandbox/2.4.2-expresso1/prototype
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/export.php

    r5863 r6951  
    4646{     
    4747    $event = Controller::read(array('concept' => 'schedulable' , 'id' => $params['event'])); 
    48         $attachmentRelation = Controller::find( array( 'concept' => 'schedulableToAttachment' ) , false ,array( 'filter' => array('=', 'schedulable'  ,  $event['id']) ));  
    49         if(is_array($attachmentRelation)){ 
    50                 $attachments = array(); 
    51                 foreach($attachmentRelation as $key => $value) 
    52                         if(isset($value['attachment']) || !!$value['attachment']) 
    53                                 $attachments[$key]  = $value['attachment']; 
    54                 //Pega os anexos sem source 
    55                 $event['attachments'] = Controller::find( array( 'concept' => 'attachment' ) , false ,array( 'filter' => array('IN', 'id' , $attachments) ));  
    56         } 
     48    $attachmentRelation = Controller::find( array( 'concept' => 'schedulableToAttachment' ) , false ,array( 'filter' => array('=', 'schedulable'  ,  $event['id']) ));  
     49    if(is_array($attachmentRelation)){ 
     50            $attachments = array(); 
     51            foreach($attachmentRelation as $key => $value) 
     52                    if(isset($value['attachment']) || !!$value['attachment']) 
     53                            $attachments[$key]  = $value['attachment']; 
     54            //Pega os anexos sem source 
     55            $event['attachments'] = Controller::find( array( 'concept' => 'attachment' ) , false ,array( 'filter' => array('IN', 'id' , $attachments) ));  
     56    } 
    5757         
    5858    $repeat = Controller::find( array( 'concept' => 'repeat' ) , false ,array( 'filter' => array('=', 'schedulable'  ,  $event['id']) ));     
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/activity.helpers.js

    r6945 r6951  
    138138                        } ) ), 
    139139                        title: { 
    140                             text:'Informações', 
     140                            text:'Informações', 
    141141                            button: '<a class="button close" href="#">close</a>' 
    142142                        } 
     
    206206 
    207207    /** 
    208          * canDiscardEventDialog deve ser true se não houver alterações no evento 
     208         * canDiscardActivityDialog deve ser true se não houver alterações no evento 
    209209         */ 
    210     canDiscardEventDialog = true; 
     210    canDiscardActivityDialog = true; 
    211211    /** 
    212          * zebraDiscardEventDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 
    213          * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 
     212         * zebraDiscardActivityDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 
     213         * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 
    214214         */ 
    215     zebraDiscardEventDialog = false; 
     215    zebraDiscardActivityDialog = false; 
    216216         
    217217        var html = DataLayer.render( path+'templates/activity_add.ejs', { 
     
    238238                beforeClose: function(event, ui) { 
    239239                 
    240                     if (!canDiscardEventDialog && !zebraDiscardEventDialog) { 
    241                                 zebraDiscardEventDialog = true; 
     240                    if (!canDiscardActivityDialog && !zebraDiscardActivityDialog) { 
     241                                zebraDiscardActivityDialog = true; 
    242242                                window.setTimeout(function() { 
    243                                     $.Zebra_Dialog('Suas alterações na atividade não foram salvas. Deseja descartar as alterações?', { 
     243                                    $.Zebra_Dialog('Suas alterações na atividade não foram salvas. Deseja descartar as alterações?', { 
    244244                                        'type':     'question', 
    245245                                        'overlay_opacity': '0.5', 
    246                                         'buttons':  ['Descartar alterações', 'Continuar editando'], 
     246                                        'buttons':  ['Descartar alterações', 'Continuar editando'], 
    247247                                        'onClose':  function(clicked) { 
    248                                             if(clicked == 'Descartar alterações') { 
    249                                                 canDiscardEventDialog = true; 
     248                                            if(clicked == 'Descartar alterações') { 
     249                                                canDiscardActivityDialog = true; 
    250250                                                /** 
    251                                                 *Remoção dos anexos do eventos caso seja cancelado a edição 
     251                                                *Remoção dos anexos do eventos caso seja cancelado a edição 
    252252                                                */ 
    253253                                                DataLayer.rollback(); 
     
    264264                                                UI.dialogs.addActivity.dialog('close'); 
    265265                                            }else{ 
    266                                                    zebraDiscardEventDialog = false; 
     266                                                   zebraDiscardActivityDialog = false; 
    267267                                            } 
    268268                                                                                         
    269269                                            /** 
    270                                             * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
    271                                             * com ESC, para que o evento ESC não seja propagado para fechamento da 
    272                                             * janela de edição de eventos, deve ser setada uma flag indicando que 
    273                                             * já existe uma janela de confirmação aberta. 
     270                                            * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
     271                                            * com ESC, para que o evento ESC não seja propagado para fechamento da 
     272                                            * janela de edição de eventos, deve ser setada uma flag indicando que 
     273                                            * já existe uma janela de confirmação aberta. 
    274274                                            */ 
    275275                                            if (!clicked) { 
    276276                                                window.setTimeout(function() { 
    277                                                     zebraDiscardEventDialog = false; 
     277                                                    zebraDiscardActivityDialog = false; 
    278278                                                }, 200); 
    279279                                            } 
     
    284284            } 
    285285            //DataLayer.rollback(); 
    286             return canDiscardEventDialog; 
     286            return canDiscardActivityDialog; 
    287287        }, 
    288288        dragStart: function(event, ui) { 
     
    353353        }); 
    354354 
    355 /*Seleciona a agenda padrão para visualização/edição de um evento*/ 
     355/*Seleciona a agenda padrão para visualização/edição de um evento*/ 
    356356if(objActivity.id) 
    357357    UI.dialogs.addActivity.find('option[value="'+objActivity.group+'"]').attr('selected','selected').trigger('change'); 
     
    387387        'type':     'question', 
    388388        'overlay_opacity': '0.5', 
    389         'buttons':  ['Sim', 'Não'], 
     389        'buttons':  ['Sim', 'Não'], 
    390390        'onClose':  function(clicked) { 
    391391            if(clicked == 'Sim'){ 
    392                 canDiscardEventDialog = true; 
     392                canDiscardActivityDialog = true; 
    393393                /* Remove por filtro */ 
    394394                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objActivity.id], ['=', 'group', objActivity.group], ['=','user',(objActivity.me.user ? objActivity.me.user.id : objActivity.me.id)]]}); 
     
    406406             
    407407.children(".save").click(function(){ 
    408     /* Validação  
     408    /* Validação  
    409409    var msg = false;                     
    410410    if(msg = validDateEvent()){ 
     
    413413    } 
    414414    */ 
    415     canDiscardEventDialog = true; 
     415    canDiscardActivityDialog = true; 
    416416                         
    417417        UI.dialogs.addActivity.children().find('form.form-addactivity').submit(); 
     
    463463    var result = DataLayer.get('schedulable:taskSearch', filter, true) 
    464464        /** 
    465     * TODO: trocar por template 
    466     */ 
     465        * TODO: trocar por template 
     466        */ 
    467467        blkAddTask.find('ul.search-result-list').empty().css('overflow', 'hidden'); 
    468468        if (!result) { 
     
    487487                    dueTime: old_item.find('[name="taskDueTime"]').val(), 
    488488                    allDay: old_item.find('[name="taskAllDay"]').val(), 
    489                     percentage: old_item.find('[name="taskPercentage"]').val(), 
     489                    percentage: old_item.find('[name="taskPercentage"]').val() 
    490490                }; 
    491491 
    492492                tasks.length += 1; 
    493  
    494     /* 
    495                         newTaskToActivity = DataLayer.put('taskToActivity', { 
    496                             owner: User.me.id, 
    497                     task: old_item.find('.id').html(),  
    498                             activity: 'VER ISSO AQUI' 
    499                         }); 
    500     */                                                           
    501                         //attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 
    502493                                                                 
    503                         blkAddTask.find('dd.task-activity-list ul.task-activity-list') 
    504                         .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{ 
    505                     idTask: old_item.find('[name="id"]').val(), 
     494                blkAddTask.find('dd.task-activity-list ul.task-activity-list') 
     495                    .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{ 
     496                        idTask: old_item.find('[name="id"]').val(), 
    506497                            description: old_item.find('.description').html() 
    507                          }])) 
     498                        }])) 
    508499                        .scrollTo('max'); 
    509  
    510                     callbackTask(); 
     500                callbackTask(); 
    511501                registerStatus(); 
    512502                blkAddTask.find('.not-activity').addClass('hidden'); 
     
    514504            } 
    515505        }); 
    516  
    517     } 
    518         event.preventDefault(); 
    519     } 
    520 }); 
    521  
    522 /*Carrega as tarefas já existentes em uma atividade*/ 
     506    } 
     507    event.preventDefault(); 
     508    } 
     509}); 
     510 
     511/*Carrega as tarefas já existentes em uma atividade*/ 
    523512if(objActivity.tasks.length){ 
    524513    tasks = objActivity.tasks; 
     
    549538        'type':     'question', 
    550539        'overlay_opacity': '0.5', 
    551         'buttons':  ['Sim', 'Não'], 
     540        'buttons':  ['Sim', 'Não'], 
    552541        'onClose':  function(clicked) { 
    553542            if(clicked == 'Sim'){ 
     
    706695}); 
    707696 
     697UI.dialogs.addActivity.find(':input').change(function(event){ 
     698    if (event.keyCode != '27' && event.keyCode != '13') 
     699        canDiscardActivityDialog = false; 
     700}).keydown(function(event){ 
     701    if (event.keyCode != '27' && event.keyCode != '13') 
     702        canDiscardActivityDialog = false; 
     703}); 
     704 
    708705UI.dialogs.addActivity.dialog('open'); 
    709706} 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/calendar.codecs.js

    r6945 r6951  
    946946                    startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(task.startTime)), task.timezone, task.calendar, obj.DayLigth, 'startTime'), User.preferences.hourFormat), 
    947947                    endDate: new Date( parseInt(task.endTime) - (!!parseInt(task.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 
    948                     endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(task.endTime)),  task.timezone, obj.calendar, obj.DayLigth, 'endTime'), User.preferences.hourFormat), 
     948                    endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(task.endTime)),  task.timezone, obj.calendar, obj.DayLigth, 'endTime'), User.preferences.hourFormat) 
    949949                } 
    950950 
     
    10051005                }) 
    10061006            }; 
    1007         }), 
     1007        }) 
    10081008 
    10091009        }; 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js

    r6945 r6951  
    27412741} 
    27422742 
    2743 function show_modal_import_export(tab, calendarId) { 
     2743function show_modal_import_export(tab, calendarId, typeView){ 
    27442744    $('.qtip.qtip-blue').remove(); 
    27452745    DataLayer.render( 'templates/import_export.ejs', { 
    2746         calendars: Calendar.calendars,  
     2746        calendars: typeView == 0 ? Calendar.calendars : Calendar.groups,  
    27472747        owner: User.me.id 
    27482748        }, function( html ){ 
     
    27502750        if (!UI.dialogs.importCalendar) { 
    27512751            UI.dialogs.importCalendar = jQuery('#div-import-export-calendar') 
    2752             .append('<div title="Importar e Exportar Eventos" class="import-export import-export-win active"> <div>') 
     2752            .append('<div title="Importar e Exportar "' + (typeView == 0 ? 'Eventos' : 'Tarefas') + '" class="import-export import-export-win active"> <div>') 
    27532753            .find('.import-export-win.active').html(html).dialog({ 
    27542754                resizable: false,  
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/init.js

    r6945 r6951  
    239239                                        startTime: new Date().toString('yyyy-MM-dd 00:00:00'), 
    240240                                        endTime: new Date().toString('yyyy-MM-dd 00:00:00'), 
    241                                         allDay: '1' 
     241                                        allDay: '1', 
     242                                        participants:  
     243                                        [{   
     244                                            user: User.me.id,  
     245                                            isOrganizer: 1, 
     246                                            acl: 'row' 
     247                                        }] 
    242248                                }); 
    243249                                 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/task.helpers.js

    r6946 r6951  
    804804    }); 
    805805 
     806    UI.dialogs.addTask.find(':input').change(function(event){ 
     807        if (event.keyCode != '27' && event.keyCode != '13') 
     808            canDiscardTaskDialog = false; 
     809    }).keydown(function(event){ 
     810        if (event.keyCode != '27' && event.keyCode != '13') 
     811            canDiscardTaskDialog = false; 
     812    }); 
    806813 
    807814    UI.dialogs.addTask.dialog('open'); 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/calendar_list.ejs

    r6820 r6951  
    3434                    <ul> 
    3535                        <li><a href="#" onclick="add_tab_configure_calendar(<%= signatures['taskGroup'][i].calendar.id%>, 1);">Configurações</a></li> 
    36                         <li><a href="#" onclick="remove_calendar(1);">Remover Grupo</a></li> 
     36                        <li><a href="#" onclick="show_modal_import_export(0,<%= signatures['taskGroup'][i].calendar.id%>, 1);">Importar</a></li> 
     37                        <li><a href="#" onclick="show_modal_import_export(1,<%= signatures['taskGroup'][i].calendar.id%>, 1);">Exportar</a></li> 
     38                        <%if(signatures['taskGroup'][i].type == '0'){%> 
     39                            <li><a href="#" onclick="remove_calendar(1);">Remover Grupo</a></li> 
     40                        <%}%> 
    3741                    </ul> 
    3842 
     
    6569                    <ul> 
    6670                        <li><a href="#" onclick="add_tab_configure_calendar(<%= signatures['calendar'][i].calendar.id%>, 0);">Configurações</a></li> 
    67                         <li><a href="#" onclick="show_modal_import_export(0, <%= signatures['calendar'][i].calendar.id%>);">Importar</a></li> 
    68                         <li><a href="#" onclick="show_modal_import_export(1, <%= signatures['calendar'][i].calendar.id%>);">Exportar</a></li> 
     71                        <li><a href="#" onclick="show_modal_import_export(0, <%= signatures['calendar'][i].calendar.id%>, 0);">Importar</a></li> 
     72                        <li><a href="#" onclick="show_modal_import_export(1, <%= signatures['calendar'][i].calendar.id%>, 0);">Exportar</a></li> 
    6973                        <li><a href="#" onclick="show_modal_shared(<%= signatures['calendar'][i].calendar.id%>);">Compartilhar agenda</a></li> 
    7074                        <li><a href="#" onclick="remove_calendar(0);">Remover agenda</a></li> 
     
    9599                    <ul> 
    96100                        <li><a href="#" onclick="add_tab_configure_calendar(<%= signatures['sharedCalendar'][i].calendar.id %>, 0);">Configurações</a></li> 
    97                         <li><a href="#" onclick="show_modal_import_export(0, <%= signatures['sharedCalendar'][i].calendar.id %>);">Importar</a></li> 
    98                         <li><a href="#" onclick="show_modal_import_export(1, <%= signatures['sharedCalendar'][i].calendar.id %>);">Exportar</a></li> 
     101                        <li><a href="#" onclick="show_modal_import_export(0, <%= signatures['sharedCalendar'][i].calendar.id%>, 0);">Importar</a></li> 
     102                        <li><a href="#" onclick="show_modal_import_export(1, <%= signatures['sharedCalendar'][i].calendar.id%>, 0);">Exportar</a></li> 
    99103                        <%if(!signatures['sharedCalendar'][i].permission.acl['required']){%> 
    100104                            <li><a href="#" onclick="cancel_signatures['sharedCalendar'](<%= signatures['sharedCalendar'][i].id %>);">Cancelar assinatura</a></li> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add.ejs

    r6946 r6951  
    237237</div> 
    238238        <form action="../prototype/modules/calendar/export.php" method="GET" class="form-export content"> 
    239                 <input type="hidden" class="id-task" name="task" value="<%= data.task.id %>"/> 
     239                <input type="hidden" class="id-task" name="event" value="<%= data.task.id %>"/> 
    240240        </form> 
    241241<!--    <div id="calendar_addtask_addattendee"></div>--> 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add_itemlist.ejs

    r6945 r6951  
    1 <%console.log(data)%> 
    21<li class="task">  
    3         <div style="overflow:hidden; width:100%; display:table;">        
    4                 <div class="activity-options" style="float: right; margin: 0 10px 0 0;"> 
    5                         <a class="button info activity-options-button-edit new ui-icon-notice">Informações</a> 
    6                         <a class="button close new">Remover</a> 
    7                 </div>   
    8                 <input class="new" type="checkbox" value="<%= data[0].idTask %>"> 
     2    <div style="overflow:hidden; width:100%; display:table;">    
     3        <div class="activity-options" style="float: right; margin: 0 10px 0 0;"> 
     4            <a class="button info activity-options-button-edit new ui-icon-notice">Informaçõess</a> 
     5            <a class="button close new">Remover</a> 
     6        </div>   
     7        <input class="new" type="checkbox" value="<%= data[0].idTask %>"> 
    98        <input type="hidden" name="idtask[]" value="<%= data[0].idTask %>"> 
    10                 <input type="hidden" name="idTaskToActivity[]" value="<%= data[0].idTaskToActivity %>"> 
    11                 <label title="<%= data[0].description %>" class="name"><%= data[0].description %></label> 
     9        <input type="hidden" name="idTaskToActivity[]" value="<%= data[0].idTaskToActivity %>"> 
     10        <label title="<%= data[0].description %>" class="name"><%= data[0].description %></label> 
    1211</li> 
  • sandbox/2.4.2-expresso1/prototype/services/iCal.php

    r6891 r6951  
    184184                 
    185185                } 
    186              
    187186 
    188187            if (isset($v['participants']) && is_array($v['participants']) && count($v['participants']) > 0) 
     
    617616        switch ($method) { 
    618617            case 'PUBLISH': 
    619                 //Caso a tarefa não exista o mesmo cria um novo evento, se já existir o mesmo referencia o evento com agenda 
     618                //Caso a tarefa não exista o mesmo cria um novo evento, se já existir o mesmo referencia o evento com agenda 
    620619                if (!$schedulable = self::_getSchedulable($uid)) 
    621                     $interation = self::_makeVEVENT($schedulable, $component, $params); 
     620                    $interation = self::_makeVTODO($schedulable, $component, $params); 
    622621                else{ 
    623622                    $links = Controller::read(array('concept' => 'calendarToSchedulable'), array('id'), array('filter' => 
     
    12911290    } 
    12921291 
    1293     static private function _makeVEVENT($schedulable, $component, $params) { 
     1292        static private function _makeVEVENT($schedulable, $component, $params) { 
    12941293        $interation = array(); 
    12951294        $eventID = isset($schedulable['id']) ? $schedulable['id'] : mt_rand() . '(Formatter)'; 
     
    13121311            $schedulable['allDay'] = 1; 
    13131312            $schedulable['startTime'] = self::date2timestamp($startTime['value']) - self::_getTzOffset('UTC', $schedulable['timezone'], '@' . self::date2timestamp($startTime['value'])) . '000'; 
    1314         } elseif ($tzid && !isset($startTime['value']['tz'])) {/* Caso não tenha um tz na data mais exista um parametro TZID deve ser aplicado o timezone do TZID a data */ 
     1313        } elseif ($tzid && !isset($startTime['value']['tz'])) {/* Caso não tenha um tz na data mais exista um parametro TZID deve ser aplicado o timezone do TZID a data */ 
    13151314            $schedulable['startTime'] = self::date2timestamp($startTime['value']) - self::_getTzOffset('UTC', $tzid, '@' . self::date2timestamp($startTime['value'])) . '000'; 
    13161315            $schedulable['allDay'] = 0; 
     
    13921391        $participantsInEvent = array(); 
    13931392 
    1394         //TODO: Participants com delegated não estao sendo levados em conta 
     1393        //TODO: Participants com delegated nao estao sendo levados em conta 
    13951394        while ($property = $component->getProperty('attendee', FALSE, TRUE)) { 
    13961395            $participant = array(); 
     
    15701569 
    15711570        $interation['schedulable://' . $eventID] = $schedulable; 
     1571 
     1572        return $interation; 
     1573    } 
     1574     
     1575    static private function _makeVTODO($schedulable, $component, $params) { 
     1576        $interation = array(); 
     1577        $todoID = isset($schedulable['id']) ? $schedulable['id'] : mt_rand() . '(Formatter)'; 
     1578 
     1579        /* Data de Inicio */ 
     1580        $startTime = $component->getProperty('dtstart', false, true); 
     1581 
     1582        $tzid = (isset($startTime['params']['TZID']) ? $startTime['params']['TZID'] : $params['X-WR-TIMEZONE']); 
     1583 
     1584        /* Tiem zone do evento */ 
     1585        if ($tzid){ 
     1586            $tzid = self::nomalizeTZID($tzid); 
     1587            $schedulable['timezone'] = $tzid; 
     1588        }else 
     1589            $schedulable['timezone'] = isset($params['calendar_timezone']) ? $params['calendar_timezone'] : 'America/Sao_Paulo'; 
     1590 
     1591        $objTimezone = new DateTimeZone($schedulable['timezone']); 
     1592 
     1593        if (isset($startTime['params']['VALUE']) && $startTime['params']['VALUE'] === 'DATE' && isset($params['calendar_timezone'])) { 
     1594            $schedulable['allDay'] = 1; 
     1595            $schedulable['startTime'] = self::date2timestamp($startTime['value']) - self::_getTzOffset('UTC', $schedulable['timezone'], '@' . self::date2timestamp($startTime['value'])) . '000'; 
     1596        } elseif ($tzid && !isset($startTime['value']['tz'])) {/* Caso não tenha um tz na data mais exista um parametro TZID deve ser aplicado o timezone do TZID a data */ 
     1597            $schedulable['startTime'] = self::date2timestamp($startTime['value']) - self::_getTzOffset('UTC', $tzid, '@' . self::date2timestamp($startTime['value'])) . '000'; 
     1598            $schedulable['allDay'] = 0; 
     1599        } else { 
     1600            $schedulable['startTime'] = self::date2timestamp($startTime['value']) . '000'; 
     1601            if (strpos($params['prodid'], 'Outlook') !== false) { 
     1602                //Se o ics veio em utc não aplicar horario de verão 
     1603                $sTime = new DateTime('@' . (int) ($schedulable['startTime'] / 1000), new DateTimeZone('UTC')); 
     1604                $sTime->setTimezone($objTimezone); 
     1605                if ($sTime->format('I')) //Se o ics veio em utc não aplicar horario de verão 
     1606                    $schedulable['startTime'] = $schedulable['startTime'] - 3600000; 
     1607            } 
     1608        } 
     1609 
     1610        /* Data de Termino */ 
     1611        $endTime = $component->getProperty('dtend', false, true); 
     1612 
     1613        $tzid = isset($endTime['params']['TZID']) ? $endTime['params']['TZID'] : $params['X-WR-TIMEZONE']; 
     1614         
     1615        if($tzid) 
     1616            $tzid = self::nomalizeTZID($tzid); 
     1617 
     1618        if (isset($endTime['params']['VALUE']) && $endTime['params']['VALUE'] === 'DATE') 
     1619            $schedulable['endTime'] = self::date2timestamp($endTime['value']) - self::_getTzOffset('UTC', $schedulable['timezone'], '@' . self::date2timestamp($endTime['value'])) . '000'; 
     1620        else if ($tzid && !isset($endTime['value']['tz'])) /* Caso não tenha um tz na data mais exista um parametro TZID deve ser aplicado o timezone do TZID a data */ 
     1621            $schedulable['endTime'] = self::date2timestamp($endTime['value']) - self::_getTzOffset('UTC', $tzid, '@' . self::date2timestamp($endTime['value'])) . '000'; 
     1622        else { 
     1623            $schedulable['endTime'] = self::date2timestamp($endTime['value']) . '000'; 
     1624            if (strpos($params['prodid'], 'Outlook') !== false) { 
     1625                //Se o ics veio em utc não aplicar horario de verão 
     1626                $eTime = new DateTime('@' . (int) ($schedulable['endTime'] / 1000), new DateTimeZone('UTC')); 
     1627                $eTime->setTimezone($objTimezone); 
     1628                if ($eTime->format('I')) 
     1629                    $schedulable['endTime'] = $schedulable['endTime'] - 3600000; 
     1630            } 
     1631        } 
     1632 
     1633        $schedulable['type'] = '2'; //type schedulable 
     1634        $schedulable['summary'] = mb_convert_encoding($component->getProperty('summary', false, false), 'ISO-8859-1', 'UTF-8,ISO-8859-1'); 
     1635 
     1636        /* Definindo Description */ 
     1637        if ($desc = $component->getProperty('description', false, false)) 
     1638            $schedulable['description'] = mb_convert_encoding(str_ireplace(array('\n', '\t'), array("\n", "\t"), $desc), 'ISO-8859-1', 'UTF-8,ISO-8859-1'); 
     1639 
     1640        /* Definindo Class */ 
     1641        $class = $component->getProperty('class', false, false); 
     1642        if ($class && defined(constant(strtoupper('CLASS_' . $class)))) 
     1643            $schedulable['class'] = constant(strtoupper('CLASS_' . $class)); 
     1644        else if (!isset($schedulable['class'])) 
     1645            $schedulable['class'] = CLASS_PRIVATE; // padrão classe private 
     1646 
     1647        $schedulable['calendar'] = $params['calendar']; 
     1648 
     1649        $participantsInTodo = array(); 
     1650 
     1651        //TODO: Participants com delegated nao estao sendo levados em conta 
     1652        while ($property = $component->getProperty('attendee', FALSE, TRUE)) { 
     1653            $participant = array(); 
     1654 
     1655            $mailUser = trim(str_replace('MAILTO:', '', $property['value'])); 
     1656 
     1657            $participantID = ($tpID = self::_getParticipantByMail($mailUser, $schedulable['participants'])) ? $tpID : mt_rand() . '2(Formatter)'; 
     1658            $participant['schedulable'] = $eventID; 
     1659 
     1660            if (isset($params['status']) && $mailUser == Config::me('mail')) 
     1661                $participant['status'] = $params['status']; 
     1662            else 
     1663                $participant['status'] = (isset($property['params']['PARTSTAT']) && constant('STATUS_' . $property['params']['PARTSTAT']) !== null ) ? constant('STATUS_' . $property['params']['PARTSTAT']) : STATUS_UNANSWERED; 
     1664 
     1665 
     1666            $participant['isOrganizer'] = '0'; 
     1667 
     1668            /* Verifica se este usuario é um usuario interno do ldap */ 
     1669            $intUser = Controller::find(array('concept' => 'user'), array('id', 'isExternal'), array('filter' => array('OR', array('=', 'mail', $mailUser), array('=', 'mailAlternateAddress', $mailUser)))); 
     1670 
     1671            $user = null; 
     1672            if ($intUser && count($intUser) > 0) { 
     1673                $participant['isExternal'] = isset($intUser[0]['isExternal']) ? $intUser[0]['isExternal'] : 0; 
     1674                $participant['user'] = $intUser[0]['id']; 
     1675            } else { 
     1676                $participant['isExternal'] = 1; 
     1677                /* Gera um randon id para o contexto formater */ 
     1678                $userID = mt_rand() . '4(Formatter)'; 
     1679 
     1680                $user['mail'] = $mailUser; 
     1681                $user['isExternal'] = '1'; 
     1682                $user['name'] = ( isset($property['params']['CN']) ) ? $property['params']['CN'] : ''; 
     1683                $user['participants'] = array($participantID); 
     1684                $participant['user'] = $userID; 
     1685                $interation['user://' . $userID] = $user; 
     1686            } 
     1687 
     1688            $interation['participant://' . $participantID] = $participant; 
     1689            $schedulable['participants'][] = $participantID; 
     1690        }; 
     1691 
     1692        if ($property = $component->getProperty('organizer', FALSE, TRUE)) { 
     1693            $participant = array(); 
     1694            $mailUser = trim(str_replace('MAILTO:', '', $property['value'])); 
     1695 
     1696            $participantID = mt_rand() . '2(Formatter)'; 
     1697 
     1698            $participant['schedulable'] = $eventID; 
     1699            $participant['status'] = (isset($property['params']['PARTSTAT']) && constant('STATUS_' . $property['params']['PARTSTAT']) !== null ) ? constant('STATUS_' . $property['params']['PARTSTAT']) : STATUS_UNANSWERED; 
     1700            $participant['isOrganizer'] = '1'; 
     1701            $participant['acl'] = 'rowi'; 
     1702 
     1703            /* Verifica se este usuario é um usuario interno do ldap */ 
     1704            $intUser = Controller::find(array('concept' => 'user'), array('id', 'isExternal'), array('filter' => array('OR', array('=', 'mail', $mailUser), array('=', 'mailAlternateAddress', $mailUser)))); 
     1705 
     1706            $user = null; 
     1707            if ($intUser && count($intUser) > 0) { 
     1708                $participant['isExternal'] = isset($intUser[0]['isExternal']) ? $intUser[0]['isExternal'] : 0; 
     1709                $participant['user'] = $intUser[0]['id']; 
     1710            } else { 
     1711                $participant['isExternal'] = 1; 
     1712                /* Gera um randon id para o contexto formater */ 
     1713                $userID = mt_rand() . '4(Formatter)'; 
     1714 
     1715                $user['mail'] = $mailUser; 
     1716                $user['name'] = ( isset($property['params']['CN']) ) ? $property['params']['CN'] : ''; 
     1717                $user['participants'] = array($participantID); 
     1718                $user['isExternal'] = '1'; 
     1719                $participant['user'] = $userID; 
     1720                $interation['user://' . $userID] = $user; 
     1721            } 
     1722 
     1723            $interation['participant://' . $participantID] = $participant; 
     1724            $schedulable['participants'][] = $participantID; 
     1725            } else if (!isset($schedulable['participants']) || !is_array($schedulable['participants']) || count($schedulable['participants']) < 1) {//caso não tenha organizador o usuario se torna organizador 
     1726            $user = Controller::read(array('concept' => 'user', 'id' => $params['owner']), array('mail')); 
     1727 
     1728            if (!self::_getParticipantByMail($user['mail'], $schedulable['participants'])) { 
     1729                $participantID = mt_rand() . '2(Formatter)'; 
     1730 
     1731                $participant['schedulable'] = $todoID; 
     1732                $participant['status'] = STATUS_CONFIRMED; 
     1733                $participant['isOrganizer'] = '1'; 
     1734                $participant['acl'] = 'rowi'; 
     1735                $participant['isExternal'] = 0; 
     1736                $participant['user'] = $params['owner']; 
     1737                $interation['participant://' . $participantID] = $participant; 
     1738                $schedulable['participants'][] = $participantID; 
     1739            } 
     1740        } 
     1741         
     1742        $alarms = array(); 
     1743         
     1744        /* Definindo ALARMES */ 
     1745        while ($alarmComp = $component->getComponent('valarm')) 
     1746        { 
     1747                $alarm = array(); 
     1748                $alarmID = mt_rand() . '6(Formatter)'; 
     1749                $action =  $alarmComp->getProperty('action', false, true); 
     1750                $trygger = $alarmComp->getProperty('trigger', false, true); 
     1751                $alarm['type'] = self::decodeAlarmAction($action['value']); 
     1752 
     1753                 if(isset($trygger['value']['day'])) 
     1754                { 
     1755                        $alarm['time'] = $trygger['value']['day']; 
     1756                        $alarm['unit'] = 'd'; 
     1757                } 
     1758                else if(isset($trygger['value']['hour'])) 
     1759                { 
     1760                        $alarm['time'] = $trygger['value']['hour']; 
     1761                        $alarm['unit'] = 'h'; 
     1762                } 
     1763                else if(isset($trygger['value']['min'])) 
     1764                { 
     1765                        $alarm['time'] = $trygger['value']['min']; 
     1766                        $alarm['unit'] = 'm'; 
     1767                } 
     1768                 
     1769                foreach ($interation as $iint => &$vint) 
     1770                { 
     1771                        if(isset($vint['user']) && $vint['user'] == Config::me('uidNumber')) 
     1772                        { 
     1773                                $alarm['participant'] = str_replace('participant://', '', $iint);        
     1774                                $vint['alarms'][] = $alarmID; 
     1775                        } 
     1776                } 
     1777                $alarm['schedulable'] = $eventID; 
     1778                                 
     1779                $interation['alarm://' . $alarmID ] = $alarm; 
     1780                 
     1781        } 
     1782         
     1783         
     1784        /* Definindo DTSTAMP */ 
     1785        if ($dtstamp = self::_getTime($component, 'dtstamp')) 
     1786            $schedulable['dtstamp'] = $dtstamp; 
     1787 
     1788        /* Definindo TRANSP */ 
     1789        if (($tranp = $component->getProperty('transp', false, true)) && $tranp && is_string($tranp) && strtoupper($tranp) == 'OPAQUE') 
     1790            $schedulable['transparent'] = 1; 
     1791 
     1792        /* Definindo last_update */ 
     1793        if ($lastUpdate = self::_getTime($component, 'LAST-MODIFIED')) 
     1794            $schedulable['lastUpdate'] = $lastUpdate; 
     1795 
     1796 
     1797        if ($sequence = $component->getProperty('SEQUENCE', false, false)) 
     1798            $schedulable['sequence'] = $sequence; 
     1799 
     1800        if ($uid = $component->getProperty('uid', false, false)) 
     1801            ; 
     1802        $schedulable['uid'] = $uid; 
     1803 
     1804        while ($attach = $component->getProperty('ATTACH', FALSE, TRUE)) { 
     1805 
     1806            $attachCurrent = array('name' => $attach['params']['X-FILENAME'], 
     1807                'size' => strlen($attach['value']), 
     1808                'type' => self::_getContentType($attach['params']['X-FILENAME']) 
     1809            ); 
     1810 
     1811            $ids = Controller::find(array('concept' => 'attachment'), array('id'), array('filter' => array('AND', array('=', 'name', $attachCurrent['name']), array('=', 'size', $attachCurrent['size']), array('=', 'type', $attachCurrent['type'])))); 
     1812 
     1813            if (!is_array($ids)) { 
     1814                $attachCurrent['source'] = $attach['value']; 
     1815                //insere o anexo no banco e pega id para colcar no relacionamento                                
     1816                $idAttachment = Controller::create(array('concept' => 'attachment'), $attachCurrent); 
     1817            }else 
     1818                $idAttachment = array('id' => $ids[0]['id']); 
     1819 
     1820            $calendarToAttachmentId = mt_rand() . '2(Formatter)'; 
     1821            $calendarToAttachment['attachment'] = $idAttachment['id']; 
     1822            $calendarToAttachment['schedulable'] = $eventID; 
     1823            $interation['schedulableToAttachment://' . $calendarToAttachmentId] = $calendarToAttachment; 
     1824 
     1825            $schedulable['attachments'][] = $calendarToAttachmentId; 
     1826        } 
     1827 
     1828        $interation['schedulable://' . $todoID] = $schedulable; 
    15721829 
    15731830        return $interation; 
Note: See TracChangeset for help on using the changeset viewer.