Ignore:
Timestamp:
09/17/12 14:30:47 (12 years ago)
Author:
douglas
Message:

Ticket #0000 - Copiadas as alterações do Trunk. Versão final da 2.4.2.

Location:
branches/2.4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2.4

  • branches/2.4/prototype/modules/calendar/interceptors/DBMapping.php

    r7093 r7228  
    11<?php 
    2         /**  
    3     *  
    4     * Copyright (C) 2011 Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)  
    5     *  
    6     * This program is free software; you can redistribute it and/or modify  
    7     * it under the terms of the GNU General Public License as published by  
    8     * the Free Software Foundation; either version 3 of the License, or  
    9     * any later version.  
    10     *  
    11     * This program is distributed in the hope that it will be useful, but WITHOUT  
    12     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS  
    13     * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more  
    14     * details.  
    15     *  
    16     * You should have received a copy of the GNU General Public License  
    17     * along with this program; if not, write to the Free Software Foundation,  
    18     * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA  
    19     *  
    20     * You can contact Prognus Software Livre headquarters at Av. Tancredo Neves,  
    21     * 6731, PTI, Edifício do Saber, 3º floor, room 306, Foz do Iguaçu - PR - Brasil  
    22     * or at e-mail address prognus@prognus.com.br.  
    23     *  
    24     * Neste arquivo são ser implementadas regras de negócio para consistir e normalizar os dados correspondentes às operações do usuário para o ExpressoCalendar.   
    25     *  
    26     * @license    http://www.gnu.org/copyleft/gpl.html GPL  
    27     * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)  
    28     * @version    1.0  
    29     * @sponsor    Caixa Econômica Federal  
    30     * @since      Arquivo disponibilizado na versão Expresso 2.4.0  
    31     */  
    32  
     2        /** 
     3        * 
     4        * Copyright (C) 2011 Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 
     5        * 
     6        * This program is free software; you can redistribute it and/or modify 
     7        * it under the terms of the GNU General Public License as published by 
     8        * the Free Software Foundation; either version 3 of the License, or 
     9        * any later version. 
     10        * 
     11        * This program is distributed in the hope that it will be useful, but WITHOUT 
     12        * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
     13        * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
     14        * details. 
     15        * 
     16        * You should have received a copy of the GNU General Public License 
     17        * along with this program; if not, write to the Free Software Foundation, 
     18        * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA 
     19        * 
     20        * You can contact Prognus Software Livre headquarters at Av. Tancredo Neves, 
     21        * 6731, PTI, Edifício do Saber, 3º floor, room 306, Foz do Iguaçu - PR - Brasil 
     22        * or at e-mail address prognus@prognus.com.br. 
     23        * 
     24        * Neste arquivo são ser implementadas regras de negócio para consistir e normalizar os dados correspondentes às operações do usuário para o ExpressoCalendar.  
     25        * 
     26        * @license    http://www.gnu.org/copyleft/gpl.html GPL 
     27        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 
     28        * @version    1.0 
     29        * @sponsor    Caixa Econômica Federal 
     30        * @since      Arquivo disponibilizado na versão Expresso 2.4.0 
     31        */ 
     32         
     33         
    3334 
    3435//Definindo Constantes 
     
    3940use prototype\api\Config as Config; 
    4041 
    41 /**  
    42 * Classe com implementações das regras de negócio para consistir e normalizar os dados correspondentes às operações do usuário para o ExpressoCalendar.  
    43 *  
    44 * @license    http://www.gnu.org/copyleft/gpl.html GPL  
    45 * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)  
    46 * @sponsor    Caixa Econômica Federal  
    47 * @version    1.0  
    48 * @since      Classe disponibilizada na versão Expresso 2.4.0   
    49 */  
     42/** 
     43* Classe com implementações das regras de negócio para consistir e normalizar os dados correspondentes às operações do usuário para o ExpressoCalendar. 
     44* 
     45* @license    http://www.gnu.org/copyleft/gpl.html GPL 
     46* @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 
     47* @sponsor    Caixa Econômica Federal 
     48* @version    1.0 
     49* @since      Classe disponibilizada na versão Expresso 2.4.0  
     50*/ 
    5051 
    5152class DBMapping extends Helpers { 
    5253 
    53     static function encodeCreateSchedulable(&$uri, &$params, &$criteria, $original) { 
    54         $params['type_id'] = EVENT_ID; 
    55  
    56         if (!is_numeric($params['startTime'])) 
    57             $params['startTime'] = self::parseTimeDate($params['startTime'], $params['timezone']); 
    58  
    59         if (!is_numeric($params['endTime'])) { 
    60             $params['endTime'] = self::parseTimeDate($params['endTime'], $params['timezone']); 
    61  
    62             if ($params['allDay']) 
    63                 $params['endTime'] = $params['endTime'] + 86400000; 
    64         } 
    65  
    66         $params['rangeEnd'] = $params['endTime']; 
    67         $params['rangeStart'] = $params['startTime']; 
    68  
    69         /////////////////////////////////////////////////////////////////// 
    70  
    71         $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] : time() . '000'; 
    72         $params['lastUpdate'] = (isset($params['lastUpdate'])) ? $params['lastUpdate'] : time() . '000'; 
    73         $params['type'] = EVENT_ID; 
    74         $params['uid'] = isset($params['uid']) ? $params['uid'] : self::_makeUid(); 
    75     } 
     54    static function encodeCreateSchedulable(&$uri, &$params, &$criteria, $original)  
     55    { 
     56 
     57        if (isset($params['startTime']) && !is_numeric($params['startTime'])) 
     58            $params['startTime'] = self::parseTimeDate($params['startTime'], $params['timezone']); 
     59         
     60        $params['rangeStart'] = $params['startTime']; 
     61         
     62        if (isset($params['endTime']) && !is_numeric($params['endTime'])) { 
     63            $params['endTime'] = self::parseTimeDate($params['endTime'], $params['timezone']); 
     64 
     65            if ($params['allDay']) 
     66                $params['endTime'] = $params['endTime'] + 86400000; 
     67            } 
     68             
     69        $params['rangeEnd'] = $params['endTime']; 
     70         
     71 
     72        if (isset($params['due']) && $params['due'] != '' && !is_numeric($params['due'])) 
     73            $params['due'] = self::parseTimeDate($params['due'], $params['timezone']); 
     74 
     75        /////////////////////////////////////////////////////////////////// 
     76 
     77        $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] : time() . '000'; 
     78        $params['lastUpdate'] = (isset($params['lastUpdate'])) ? $params['lastUpdate'] : time() . '000'; 
     79        $params['uid'] = isset($params['uid']) ? $params['uid'] : self::_makeUid(); 
     80        } 
    7681 
    7782    static function parseTimeDate($time, $timezone) { 
     
    107112        if (isset($params['type'])) 
    108113            $params['type'] = self::codeAlarmType($params['type']); 
     114        else{ 
     115            $alarm = Controller::read( array('concept' => 'alarm' , 'id' => $params['id'] )); 
     116 
     117            $params['unit'] = $alarm['unit']; 
     118        } 
     119        $params['offset'] = $params['time'] * 1000; 
     120 
     121 
     122        switch( strtolower($params['unit']) ) 
     123        { 
     124            case 'd': $params['offset'] *= 24; 
     125            case 'h': $params['offset'] *= 60; 
     126            case 'm': $params['offset'] *= 60; 
     127        } 
     128         
    109129    } 
    110130 
     
    160180                .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 
    161181                .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 
     182        .'calendar_object.priority as "priority", calendar_object.due as "due", ' 
     183        .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 
    162184                .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 
    163185                .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' 
     
    168190                .'calendar FROM calendar_to_calendar_object , calendar_object ' 
    169191                .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['filter'][2][2]) . '\')) ' 
    170                 .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ';     
     192                .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 
     193        .'AND calendar_object.id NOT IN(select calendar_object_task_id from calendar_task_to_activity_object where owner = \'' . Config::me('uidNumber') . '\') ';       
    171194             
    172195            if(isset($criteria['searchEvent']) && $criteria['searchEvent']){ 
     
    198221                $params = array_merge($params, $occ);            
    199222            } 
     223            $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 
     224            return false; 
     225        } 
     226    } 
     227 
     228    public function findTask(&$uri, &$params, &$criteria, $original) { 
     229 
     230        if (isset($criteria['filterTasks']) && $criteria['filterTasks']) { 
     231 
     232            $sql = ' SELECT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", ' 
     233            .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 
     234            .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 
     235            .'calendar_object.priority as "priority", calendar_object.due as "due", ' 
     236            .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 
     237            .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 
     238            .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' 
     239            .'calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart", ' 
     240            .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 
     241            .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 
     242            .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 
     243            .'calendar FROM calendar_to_calendar_object , calendar_object ' 
     244            .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['filter'][3][2]) . '\')) ' 
     245            .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 
     246        .'AND calendar_to_calendar_object.calendar_object_id NOT IN (select calendar_object_activity_id from calendar_task_to_activity_object where owner =  \'' . Config::me("uidNumber") . '\' ) '     
     247        .'AND calendar_to_calendar_object.calendar_object_id NOT IN (select calendar_object_task_id from calendar_task_to_activity_object where owner =  \'' . Config::me("uidNumber") . '\' ) ';     
     248 
     249        if(isset($criteria['filter'][4])) 
     250            $sql .= 'AND (((upper("summary") like upper(\'%'.$criteria['filter'][4][1][2].'%\') OR upper("description") like upper(\'%'.$criteria['filter'][4][1][2].'%\'))))'; 
     251 
     252            $sql .= 'AND (range_start >= \'' . $criteria['filter'][2][2] . '\' AND type_id <= \'' .  $criteria['filter'][1][2] . '\')'; 
     253 
     254            $params = Controller::service('PostgreSQL')->execResultSql($sql); 
    200255            $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 
    201256            return false; 
     
    442497    } 
    443498 
    444 //Encode Update 
    445  
     499        //Encode Update 
    446500    public function encodeUpdateSchedulable(&$uri, &$params, &$criteria, $original) { 
    447  
    448         $event = Controller::read(array('concept' => 'schedulable', 'id' => $params['id'])); 
    449          
    450         if (isset($params['startTime'])) { 
    451  
    452             if (!is_numeric($params['startTime'])) 
    453                 $params['startTime'] = self::parseTimeDate($params['startTime'], $event['timezone']); 
    454  
    455             $params['rangeStart'] = $params['startTime']; 
    456         }if (isset($params['endTime'])) { 
    457  
    458             if (!is_numeric($params['endTime'])) { 
    459                 $params['endTime'] = self::parseTimeDate($params['endTime'], $event['timezone']); 
    460  
    461             if ((isset($params['allDay']) && $params['allDay']) || ( !isset($params['allDay']) && $event['allDay'])) 
    462                 $params['endTime'] = $params['endTime'] + 86400000; 
    463             } 
    464             $params['rangeEnd'] = $params['endTime']; 
    465         } 
     501        $event = Controller::read(array('concept' => 'schedulable', 'id' => $uri['id'])); 
     502        if (isset($params['startTime'])) { 
     503 
     504            if (!is_numeric($params['startTime'])) 
     505                $params['startTime'] = self::parseTimeDate($params['startTime'], $event['timezone']); 
     506 
     507            $params['rangeStart'] = $params['startTime']; 
     508        } 
     509 
     510        if (isset($params['endTime'])) { 
     511 
     512            if (!is_numeric($params['endTime'])) { 
     513                        $params['endTime'] = self::parseTimeDate($params['endTime'], $event['timezone']); 
     514 
     515                    if ((isset($params['allDay']) && $params['allDay']) || ( !isset($params['allDay']) && $event['allDay'])) 
     516                        $params['endTime'] = $params['endTime'] + 86400000; 
     517            } 
     518            $params['rangeEnd'] = $params['endTime']; 
     519        } 
     520 
     521 
     522        if (isset($params['due']) && $params['due'] != '' && !is_numeric($params['due'])) 
     523            $params['due'] = self::parseTimeDate($params['due'], $event['timezone']); 
     524 
     525        if($event['type'] == '2'){ 
     526            $criteria['historic'] = $params; 
     527            $criteria['beforeValue'] = $event; 
     528 
     529            if(isset($params['startTime']) && $params['startTime'] == $event['startTime']) 
     530                unset($criteria['historic']['startTime']); 
     531            if(isset($params['due']) && $params['due'] == $event['due']) 
     532                unset($criteria['historic']['due']); 
     533 
     534                //necessário para atulizar a atividade de composta pela tarefa aqui sendo atualizada 
     535                if(isset($criteria['historic']['startTime']) || isset($criteria['historic']['endTime'])){ 
     536                        $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'task', $uri['id']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2)); 
     537                        if(!empty($taskToActivity)){ 
     538                                $activity = Controller::read(array('concept' => 'schedulable', 'id' => $taskToActivity[0]['activity']), array('startTime', 'endTime', 'rangeStart', 'rangeEnd', 'allDay')); 
     539                                $isAllDay = 1; 
     540 
     541                                if(!empty($activity)){ 
     542                                        $start = $params['startTime']; 
     543                                        $end = $params['endTime']; 
     544                                        foreach($taskToActivity as $t){ 
     545                                         if($t['task']['id'] != $params['id']){ 
     546                                                $start = $t['task']['startTime'] < $start ? $t['task']['startTime'] : $start; 
     547                                                $end = $t['task']['endTime'] > $end ? $t['task']['endTime'] : $end; 
     548                                                $isAllDay = (($isAllDay == 1) && ($t['task']['allDay'] == '1')) ? 1 : 0;  
     549                                         } 
     550                                        } 
     551 
     552                                        if($event['allDay'] == '0' || (isset($params['allDay']) && $params['allDay'] == '0')) 
     553                                                $isAllDay = 0; 
     554 
     555                                        $toUpdate = array(); 
     556 
     557                                        if($start != $activity['startTime']) 
     558                                                $toUpdate['startTime'] = $start; 
     559 
     560                                        if($end != $activity['endTime']){ 
     561                                                $toUpdate['endTime'] = $end; 
     562                                                $toUpdate['due'] = $end; 
     563                                        } 
     564 
     565                                        if($isAllDay != $activity['allDay']) 
     566                                                $toUpdate['allDay'] = $isAllDay; 
     567 
     568                                        if(!empty($toUpdate)) 
     569                                                Controller::update(array('concept' => 'schedulable', 'id' => $taskToActivity[0]['activity']), $toUpdate); 
     570                                } 
     571                        } 
     572                } 
     573 
     574                unset($criteria['historic']['endTime']); 
     575                unset($criteria['historic']['rangeEnd']); 
     576                unset($criteria['historic']['rangeStart']); 
     577                unset($criteria['historic']['class']); 
     578                unset($criteria['historic']['type']); 
     579                unset($criteria['historic']['allDay']); 
     580                unset($criteria['historic']['id']);             
     581        } 
    466582    } 
    467583 
     
    494610    } 
    495611 
     612 
     613    static function prepareParticipantHistoric(&$uri, &$params, &$criteria, $original){ 
     614       $participant = Controller::read(array('concept' => 'participant', 'id' => $uri['id'])); 
     615       $schedulable = Controller::read(array('concept' => 'schedulable', 'id' => $participant['schedulable'])); 
     616 
     617 
     618       if($schedulable['type'] == '2') 
     619            $criteria['historic']['participant']  = $participant; 
     620    }  
     621 
     622    static function removeParticipantHistoric(&$uri, &$params, &$criteria, $original){ 
     623        if(isset($criteria['historic'])){ 
     624 
     625            $participant = $criteria['historic']['participant']; 
     626 
     627             Controller::create(array('concept' => 'calendarHistoric'),  
     628                array('schedulable' => $participant['schedulable'],  
     629                    'user' => Config::me('uidNumber'), 
     630                    'time' => time() . '000', 
     631                    'attribute' => 'participant', 
     632                    'beforeValue' => $participant['user'], 
     633                    'afterValue' => '' 
     634                    ) 
     635                ); 
     636 
     637        } 
     638 
     639    } 
     640 
     641    static function createParticipantHistoric(&$uri, &$params, &$criteria, $original){ 
     642 
     643        if(isset($original['properties']) && $original['properties']['isOrganizer'] != '1'){ 
     644            if(!isset($criteria['event'])){ 
     645                $event = Controller::read(array('concept' => 'schedulable', 'id' => $original['properties']['schedulable'])); 
     646                $criteria['event'] = $event; 
     647            }else 
     648                $event = $criteria['event']; 
     649 
     650            if($event['type'] == '2'){ 
     651                Controller::create(array('concept' => 'calendarHistoric'),  
     652                    array('schedulable' => $original['properties']['schedulable'],  
     653                        'user' => Config::me('uidNumber'), 
     654                        'time' => time() . '000', 
     655                        'attribute' => 'participant', 
     656                        'beforeValue' => '', 
     657                        'afterValue' => $original['properties']['user'] 
     658                        ) 
     659                    ); 
     660            } 
     661        } 
     662    } 
     663 
     664    static function createHistoric(&$uri, &$result, &$criteria, $original) { 
     665 
     666        if(isset($criteria['historic']) && count($criteria['historic'])){ 
     667            $time =  time() . '000'; 
     668 
     669            foreach($criteria['historic'] as $k => $v){ 
     670                Controller::create(array('concept' => 'calendarHistoric'),  
     671                    array('schedulable' => $uri['id'],  
     672                        'user' => Config::me('uidNumber'), 
     673                        'time' => $time, 
     674                        'attribute' => $k, 
     675                        'beforeValue' => $criteria['beforeValue'][$k], 
     676                        'afterValue' => $v 
     677                        ) 
     678                    ); 
     679            } 
     680        }     
     681    } 
     682 
    496683/////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    497684 
     
    507694    } 
    508695 
    509     public function createCreateSchedulableToAttachment(&$uri, &$params, &$criteria, $original) { 
    510         if (array_key_exists('attachments', $original['properties'])) 
    511             foreach ($original['properties']['attachments'] as $key => $value) { 
    512                 if (isset($params['id'])) 
    513                     Controller::create(array('concept' => 'schedulableToAttachment'), array('attachment' => $value['attachment'], 'schedulable' => $params['id'])); 
    514             } 
     696    //TODO: Remover apos suporte a ManytoMany na api  
     697    public function createTasksToActivity(&$uri, &$result, &$criteria, $original) { 
     698 
     699        if(isset($original['properties']['taskToActivity']) && $original['properties']['taskToActivity']){ 
     700 
     701            foreach($original['properties']['taskToActivity'] as $relational) 
     702 
     703                Controller::create(array('concept' => 'taskToActivity'), array('task' => $relational['task'], 'owner' => $relational['owner'], 'activity' => $result['id'])); 
     704 
     705        } 
     706    } 
     707 
     708    public function removeAttachmentHistoric(&$uri, &$params, &$criteria, $original) { 
     709 
     710        if(isset($criteria['historic'])){ 
     711            $attachment = $criteria['historic']['attachment']; 
     712 
     713            $attachment['attachment'] = Controller::read(array('concept' => 'attachment', 'id' => $attachment['attachment']), array('name')); 
     714            Controller::create(array('concept' => 'calendarHistoric'),  
     715                    array('schedulable' => $attachment['schedulable'],  
     716                        'user' => Config::me('uidNumber'), 
     717                        'time' => time() . '000', 
     718                        'attribute' => 'attachment', 
     719                        'beforeValue' => $attachment['attachment']['name'], 
     720                        'afterValue' => '' 
     721                        ) 
     722                    ); 
     723 
     724        } 
     725     
     726    } 
     727 
     728    public function createAttachmentHistoric(&$uri, &$params, &$criteria, $original) { 
     729        $event = Controller::read(array('concept' => 'schedulable', 'id' => $original['properties']['schedulable'])); 
     730 
     731        if($event['type'] == '2'){ 
     732            $attachment = Controller::read(array('concept' => 'attachment', 'id' => $original['properties']['attachment']), array('name')); 
     733 
     734            Controller::create(array('concept' => 'calendarHistoric'),  
     735                array('schedulable' => $original['properties']['schedulable'],  
     736                    'user' => Config::me('uidNumber'), 
     737                    'time' => time() . '000', 
     738                    'attribute' => 'attachment', 
     739                    'beforeValue' => '', 
     740                    'afterValue' => $attachment['name'] 
     741                    ) 
     742                ); 
     743 
     744        } 
    515745    } 
    516746 
    517747    public function deepnessFindCalendarShared(&$uri, &$result, &$criteria, $original) { 
    518         if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != '0' && count($result) > 0) { 
    519  
    520             $calendarIds = array(); 
    521             foreach ($result as $key => $value) 
    522                 array_push($calendarIds, $value['calendar']); 
    523  
    524             $calendar = Controller::find(array('concept' => 'calendar'), false, array('filter' => array('AND', array('IN', 'id', $calendarIds), $original['criteria']['filter']))); 
    525  
    526             if ($calendar && count($calendar) > 0){ 
    527                 $newResult = array(); 
    528                 foreach ($calendar as $key => $value) { 
    529                     foreach ($result as $k => $r) { 
    530  
    531                         if ($r['calendar'] == $value['id']) { 
    532                             $r['calendar'] = $value; 
    533                             array_push($newResult, $r); 
    534                         } 
    535                     } 
    536                 } 
    537  
    538                 foreach ($newResult as $key => &$value) { 
    539                     if ($value['user'] != 0) { 
    540                         $user = $value['user']; 
    541                         $value['user'] = Controller::read(array('concept' => 'user', 'id' => $user)); 
    542  
    543                         if (!$value['user']) 
    544                             $value['user'] = Controller::read(array('concept' => 'group', 'id' => $user)); 
    545                     } 
    546                 } 
    547  
    548                 $result = $newResult; 
    549             }else 
    550                 $result = ''; 
    551         } 
     748        if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != '0' && count($result) > 0) { 
     749 
     750            $calendarIds = array(); 
     751            foreach ($result as $value) 
     752                    $calendarIds[] = $value['calendar']; 
     753 
     754            $calendar = Controller::find(array('concept' => 'calendar'), false, array('filter' => array('AND', array('IN', 'id', $calendarIds)))); 
     755 
     756            if ($calendar && count($calendar) > 0){ 
     757                $newResult = array(); 
     758                        foreach ($calendar as  $value) { 
     759                            foreach ($result as  $r) { 
     760 
     761                                if ($r['calendar'] == $value['id']) { 
     762                                    $r['calendar'] = $value; 
     763                                    $newResult[] = $r; 
     764                                } 
     765                            } 
     766                        } 
     767 
     768                        foreach ($newResult as &$value) { 
     769                            if ($value['user'] != 0) { 
     770                                $value['user'] = Controller::read(array('concept' => 'user', 'id' => $value['user'])); 
     771 
     772                                if (!$value['user']) 
     773                                    $value['user'] = Controller::read(array('concept' => 'group', 'id' => $value['user'])); 
     774                            } 
     775                    $value['owner'] = Controller::read(array('concept' => 'user', 'id' => $value['owner'])); 
     776                        } 
     777                        $result = $newResult; 
     778            }else 
     779                  $result = ''; 
     780        } 
     781    } 
     782 
     783    //TODO: Remover apos suporte a deepness na api  
     784    public function deepnessFindTask(&$uri, &$result, &$criteria, $original) { 
     785        if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0)  
     786           foreach($result as &$value) 
     787                $value['task'] = Controller::read(array('concept' => 'schedulable', 'id' => $value['task'])); 
     788            
     789         
     790        return $result; 
     791    } 
     792 
     793    //TODO: Remover apos suporte a deepness na api  
     794    public function deepnessFindHistoric(&$uri, &$result, &$criteria, $original) { 
     795        if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { 
     796            foreach($result as &$v){ 
     797                $v['user'] = Controller::read(array('concept' => 'user', 'id' => $v['user'])); 
     798 
     799                if($v['attribute'] == 'participant'){ 
     800                    if($v['beforeValue'] != '') 
     801                        $v['beforeValue'] = Controller::read(array('concept' => 'user', 'id' => $v['beforeValue'])); 
     802 
     803                    if($v['afterValue'] != '') 
     804                        $v['afterValue'] = Controller::read(array('concept' => 'user', 'id' => $v['afterValue'])); 
     805                } 
     806            } 
     807        } 
    552808    } 
    553809 
     
    559815            foreach ($result as $i => $v) { 
    560816 
    561                 if ( isset($v['calendar']) && (!isset($currentTimezone) || $currentTimezone != $original['criteria']['timezones'][$v['calendar']])) { 
     817                if ( isset($v['calendar']) && (!isset($currentTimezone) || $currentTimezone != $original['criteria']['timezones'][$v['calendar']]))  { 
    562818                    $currentTimezone = isset($original['criteria']['timezones'][$v['calendar']]) ? $original['criteria']['timezones'][$v['calendar']] : $v['timezone']; 
    563819                    $Time->setTimezone(new DateTimeZone($currentTimezone)); 
     
    570826                $DayLigth['calendar']['endTime'] = $Time->format('I') ? 1 : 0; 
    571827 
    572                 if ($currentTimezone != $v['timezone']) { 
     828                if (!isset($currentTimezone) || ($currentTimezone != $v['timezone'])) { 
    573829                    $currentTimezone = $v['timezone']; 
    574830                    $Time->setTimezone(new DateTimeZone($v['timezone'])); 
     
    584840 
    585841                $result[$i]['DayLigth'] = $DayLigth; 
     842 
     843        if(((int)$v['type']) == 2){ 
     844 
     845            $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'activity', $v['id']), array('=','owner', Config::me('uidNumber'))) , 'deepness' => 2)); 
     846 
     847            if($taskToActivity) 
     848                $result[$i]['taskToActivity'] = $taskToActivity; 
     849 
     850            $result[$i]['historic'] = Controller::find(array('concept' => 'calendarHistoric'), false, array('filter' => array('=', 'schedulable', $v['id']) , 'deepness' => 2)); 
     851 
     852        } 
    586853 
    587854                if (isset($v['id'])) { 
     
    649916            }  
    650917             
     918       } 
     919        
     920       if(isset($result['id']) && $result['type'] == '2'){ 
     921           $result['historic'] =  Controller::find( array( 'concept' => 'calendarHistoric' ), false, array( 'filter' => array( '=', 'schedulable', $result['id'] ) ) ); 
    651922       } 
    652923   }  
     
    684955                    //Caso não seja o dono da agenda retorna o objeto permission com as acls 
    685956                    if ($result[$i]['isOwner'] == 0) { 
    686                         $permission = Controller::find(array('concept' => 'calendarToPermission'), false, array('filter' => array('AND', array('=', 'calendar', $v['calendar']), array('=', 'user', Config::me('uidNumber'))))); 
     957                        $permission = Controller::find(array('concept' => 'calendarToPermission'), false, array('filter' => array('AND', array('=', 'calendar', $v['calendar']), array('=', 'user', Config::me('uidNumber')), 'deepness' => 2))); 
    687958 
    688959                        if (!is_array($permission) || !$permission) { 
    689960 
    690                             $permission = Controller::find(array('concept' => 'calendarToPermission'), false, array('filter' => array('AND', array('=', 'calendar', $v['calendar']), array('=', 'type', '1')))); 
     961                            $permission = Controller::find(array('concept' => 'calendarToPermission'), false, array('filter' => array('AND', array('=', 'calendar', $v['calendar']), array('=', 'type', '1')), 'deepness' => 2 )); 
    691962                        } 
    692963                        $result[$i]['permission'] = $permission[0]; 
     
    711982            $result = $new; 
    712983        } 
     984    } 
     985 
     986    public function addOwner(&$uri, &$params, &$criteria, $original) { 
     987        $owner = Controller::read( array( 'concept' => 'calendarSignature' ) , array('user') ,array( 'filter' => array('AND', array('=', 'isOwner'  ,  '1'), array('=', 'calendar', $params['calendar'])))); 
     988        $params['owner'] = $owner[0]['user']; 
    713989    } 
    714990 
     
    8321108     
    8331109    static private function countMyCalendarsEvent($id, $owner) { 
    834                 $sig = Controller::find(array('concept' => 'calendarSignature'), array('user', 'calendar', 'isOwner'), array('filter' => array('AND', array('=', 'user', $owner), array('=', 'isOwner', '1')))); 
     1110                $sig = Controller::find(array('concept' => 'calendarSignature'), array('user', 'calendar', 'isOwner'), array('filter' => array('AND', array('=', 'isOwner', '1'), array('=', 'user', $owner)))); 
    8351111                $calendars = array(); 
    8361112                foreach ($sig as $val) 
     
    8481124        if(isset($criteria['filter']) && $criteria['filter'] && isset($criteria['filter'][1][2])){ 
    8491125            $idSchedulable = $criteria['filter'][1][2]; 
    850                         $idCalendar = $criteria['filter'][2][2]; 
     1126            $idCalendar = $criteria['filter'][2][2]; 
    8511127            $owner = $criteria['filter'][3][2]; 
    8521128 
     
    8851161 
    8861162            $uri['id'] = $idSchedulable; 
     1163             
     1164            if(isset($criteria['filter']) && isset($criteria['filter'][4]) && isset($criteria['filter'][4][2])){ 
     1165                Controller::deleteALL(array('concept' => 'taskToActivity'), null, array('filter' => array('=', 'activity', $idSchedulable))); 
     1166            } 
    8871167        } 
    8881168         
     
    9351215            $schedulableAttachment = Controller::read(array('concept' => 'schedulableToAttachment'), false, array('filter' => array( '=', 'attachment' , $original['URI']['id'] ))); 
    9361216            $uri['id'] = $schedulableAttachment[0]['id']; 
     1217 
     1218            $params = $schedulableAttachment[0]; 
     1219 
     1220            $event = Controller::read(array('concept' => 'schedulable', 'id' => $params['schedulable'])); 
     1221            if($event['type'] == '2') 
     1222                $criteria['historic']['attachment'] = $schedulableAttachment[0]; 
     1223 
    9371224        } 
    9381225    } 
    9391226 
    9401227    public function deleteAttachmentDependences(&$uri, &$params, &$criteria, $original) { 
    941         Controller::delete(array('concept' => 'attachment', 'id' => $original['URI']['id'])); 
     1228        Controller::delete(array('concept' => 'attachment', 'id' => (isset($params['attachment']) ? $params['attachment'] : $original['URI']['id']))); 
    9421229    } 
    9431230     
     
    9491236    } 
    9501237 
     1238 
     1239     public function createDefaultGroup(&$uri, &$result, &$criteria, $original) { 
     1240        if( $original['criteria']['filter'][1][0] == '=' && 
     1241        $original['criteria']['filter'][1][1] == 'user' && 
     1242        $original['criteria']['filter'][1][2] == $_SESSION['phpgw_session']['account_id']){ 
     1243 
     1244            $existDefaultGroup = false; 
     1245 
     1246            foreach($result as $v){ 
     1247                if($v['type'] == 1 && $v['calendar']['type'] == 1) 
     1248                    $existDefaultGroup = true; 
     1249            } 
     1250 
     1251            if(!$existDefaultGroup){ 
     1252 
     1253                $cal = array('name' => 'Sem grupo', 
     1254                    'description' => 'Sem grupo', 
     1255                    'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
     1256                    'dtstamp' => time() . '000', 
     1257                    'type' => '1' 
     1258                ); 
     1259 
     1260                $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 
     1261 
     1262                $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 
     1263                    'calendar' => $calCreated['id'], 
     1264                    'isOwner' => '1', 
     1265                    'dtstamp' => time() . '000', 
     1266                    'fontColor' => 'FFFFFF', 
     1267                    'backgroundColor' => '3366CC', 
     1268                    'borderColor' => '3366CC', 
     1269                    'type' => '1' 
     1270                ); 
     1271 
     1272                $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 
     1273                $sigCreated = Controller::read(array('concept' => 'calendarSignature', 'id' => $sigCreated['id']), false, array('deepness' => 2 )); 
     1274 
     1275                array_push($result, $sigCreated); 
     1276            } 
     1277 
     1278        } 
     1279 
     1280     } 
     1281 
    9511282    public function createDefaultSignature(&$uri, &$result, &$criteria, $original) { 
     1283 
     1284    if(count($result) == 0 && isset($criteria['filter'][3]) && isset($criteria['filter'][3]['isRecursion'])){ 
     1285        throw new Exception('It was not possible to find to calendar!'); 
     1286        return false; 
     1287    } 
    9521288 
    9531289        //Caso uma busca não retorne nenhum resultado e foi buscado pelas assinaturas do usuario logado apenas 
     
    9571293        if (count($result) > 0) { 
    9581294            foreach ($result as $value) { 
    959                 if (isset($value['isOwner']) && $value['isOwner'] != 0) 
    960                     $isValidSignature = true; 
     1295                if (isset($value['isOwner']) && $value['isOwner'] != 0 && isset($value['type']) && $value['type'] == 0) 
     1296                    $isValidSignature = true; 
    9611297            } 
    9621298        } 
     
    9691305 
    9701306            if (Config::module('useCaldav', 'expressoCalendar')) { 
    971                 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
    972  
    973                 $calendario = DAViCalAdapter::findCalendars(); 
     1307                require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
     1308                $calendario = DAViCalAdapter::findCalendars(); 
    9741309            } 
    9751310 
    9761311            if (Config::module('useCaldav', 'expressoCalendar') && is_array($calendario) && count($calendario) > 0) { 
    977                 foreach ($calendario as $i => $v) { 
    978  
    979                     $urlA = explode('/', $v->url); 
    980                     $name = isset($v->displayname) ? $v->displayname : $urlA[(count($urlA) - 2)]; 
    981                     $cal = array('name' => $name, 
    982                         'description' => isset($v->description) ? $v->description : $name, 
    983                         'timezone' => isset($v->timezone) ? $v->timezone : (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
    984                         'dtstamp' => time() . '000', 
    985                         'location' => $urlA[(count($urlA) - 3)] . '/' . $urlA[(count($urlA) - 2)] 
    986                     ); 
    987  
    988                     $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 
    989  
    990  
    991  
    992                     $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 
    993                         'calendar' => $calCreated['id'], 
    994                         'isOwner' => '1', 
    995                         'dtstamp' => time() . '000', 
    996                         'fontColor' => 'FFFFFF', 
    997                         'backgroundColor' => '3366CC', 
    998                         'borderColor' => '3366CC', 
    999                     ); 
    1000  
    1001                     $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 
    1002  
    1003  
    1004                     DAViCalAdapter::importCollection($v->url, $calCreated['id']); 
    1005                 } 
     1312                foreach ($calendario as $i => $v) { 
     1313 
     1314                    $urlA = explode('/', $v->url); 
     1315                    $name = isset($v->displayname) ? $v->displayname : $urlA[(count($urlA) - 2)]; 
     1316                    $cal = array('name' => $name, 
     1317                        'description' => isset($v->description) ? $v->description : $name, 
     1318                        'timezone' => isset($v->timezone) ? $v->timezone : (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
     1319                        'dtstamp' => time() . '000', 
     1320                        'location' => $urlA[(count($urlA) - 3)] . '/' . $urlA[(count($urlA) - 2)] 
     1321                    ); 
     1322 
     1323                    $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 
     1324 
     1325                if(!$calCreated){ 
     1326                    throw new Exception('Error to create calendar'); 
     1327                    return false; 
     1328                } 
     1329 
     1330                    $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 
     1331                        'calendar' => $calCreated['id'], 
     1332                        'isOwner' => '1', 
     1333                        'dtstamp' => time() . '000', 
     1334                        'fontColor' => 'FFFFFF', 
     1335                        'backgroundColor' => '3366CC', 
     1336                        'borderColor' => '3366CC', 
     1337                    ); 
     1338 
     1339                    $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 
     1340 
     1341                if(!$sigCreated){ 
     1342                    throw new Exception('Error to create signature'); 
     1343                    return false; 
     1344                } 
     1345 
     1346                    DAViCalAdapter::importCollection($v->url, $calCreated['id']); 
     1347                } 
    10061348            } else { 
    1007                 //Criaremos uma agenda padrão 
    1008                 $cal = array('name' => 'Calendario', 
    1009                     'description' => 'Calendario Padrão', 
    1010                     'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
    1011                     'dtstamp' => time() . '000' 
    1012                 ); 
    1013  
    1014                 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 
    1015  
    1016                 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 
    1017                     'calendar' => $calCreated['id'], 
    1018                     'isOwner' => '1', 
    1019                     'dtstamp' => time() . '000', 
    1020                     'fontColor' => 'FFFFFF', 
    1021                     'backgroundColor' => '3366CC', 
    1022                     'borderColor' => '3366CC', 
    1023                 ); 
    1024  
    1025                 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 
    1026             } 
    1027  
    1028             $result = Controller::find($original['URI'], $original['properties'] ? $original['properties'] : null, $original['criteria']); 
     1349                //Criaremos uma agenda padrão 
     1350                $cal = array('name' => 'Calendario', 
     1351                    'description' => 'Calendario Padrão', 
     1352                    'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
     1353                    'dtstamp' => time() . '000' 
     1354                ); 
     1355 
     1356                $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 
     1357 
     1358                $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 
     1359                    'calendar' => $calCreated['id'], 
     1360                    'isOwner' => '1', 
     1361                    'dtstamp' => time() . '000', 
     1362                    'fontColor' => 'FFFFFF', 
     1363                    'backgroundColor' => '3366CC', 
     1364                    'borderColor' => '3366CC', 
     1365                ); 
     1366 
     1367                $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 
     1368        } 
     1369     
     1370        $original['criteria']['filter'][] = array('isRecursion' => true); 
     1371        $result = Controller::find($original['URI'], $original['properties'] ? $original['properties'] : null, $original['criteria']); 
    10291372            return false; 
    1030         } 
     1373        } 
    10311374    } 
    10321375 
     
    10581401 
    10591402    public function davcalCreateCollection(&$uri, &$params, &$criteria, $original) { 
    1060         if (Config::module('useCaldav', 'expressoCalendar')) { 
    1061             require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
    1062             DAViCalAdapter::mkcalendar($params['location'], $params['name'], isset($params['description']) ? $params['description'] : '' ); 
    1063         } 
     1403        if (Config::module('useCaldav', 'expressoCalendar')) { 
     1404            require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
     1405            DAViCalAdapter::mkcalendar($params['location'], $params['name'], isset($params['description']) ? $params['description'] : '' ); 
     1406           } 
    10641407    } 
    10651408 
    10661409    public function davcalDeleteCollection(&$uri, &$params, &$criteria, $original) { 
    1067         if (Config::module('useCaldav', 'expressoCalendar') && Config::module('onRemoveCascadeCalDav')) { 
    1068             require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
    1069             $calendar = Controller::read($uri); 
    1070             DAViCalAdapter::rmCalendar($calendar['location']); 
    1071         } 
     1410        if (Config::module('useCaldav', 'expressoCalendar') && Config::module('onRemoveCascadeCalDav')) { 
     1411            require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
     1412            $calendar = Controller::read($uri); 
     1413            DAViCalAdapter::rmCalendar($calendar['location']); 
     1414        } 
    10721415    } 
    10731416 
    10741417    public function davcalUpdateCollection(&$uri, &$params, &$criteria, $original) { 
    1075         if (Config::module('useCaldav', 'expressoCalendar')) { 
    1076             require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
    1077             if (isset($params['location'])) { 
    1078                 $calendar = Controller::read($uri); 
    1079                 if ($calendar['location'] !== $params['location']) 
    1080                     DAViCalAdapter::mvcalendar($calendar['location'], $params['location']); 
    1081             } 
    1082         } 
     1418        if (Config::module('useCaldav', 'expressoCalendar')) { 
     1419            require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
     1420            if (isset($params['location'])) { 
     1421                $calendar = Controller::read($uri); 
     1422                if ($calendar['location'] !== $params['location']) 
     1423                    DAViCalAdapter::mvcalendar($calendar['location'], $params['location']); 
     1424            } 
     1425        } 
    10831426    } 
    10841427 
  • branches/2.4/prototype/modules/calendar/interceptors/Notifications.php

    r7175 r7228  
    475475 
    476476            if (count($part) > 0) 
    477                 self::sendMail($data, $ical, implode(',', $part), $subject, 'notify_cancel_body'); 
    478         } 
     477                        self::sendMail($data, $ical, implode(',', $part), $subject, 'notify_cancel_body'); 
     478                } 
    479479    } 
    480480 
     
    521521        foreach ($params as $i => $v) //Verifica se ouve alteração no evento 
    522522            if (isset($schedulableOld[$i]) && $schedulableOld[$i] != $v && $i != 'participants') { 
    523                 $schedulable[$i] = $v; 
    524                 $alt = true; 
     523                $schedulable[$i] = $v; 
     524                $alt = true; 
    525525            } 
    526526 
     
    539539 
    540540    static private function parseTimeDate($time, $timezone) { 
    541         return strtotime($time . ' ' . $timezone) . '000'; 
     541        return strtotime($time . ' ' . $timezone) . '000'; 
    542542    } 
    543543 
Note: See TracChangeset for help on using the changeset viewer.