Ignore:
Timestamp:
05/28/12 21:17:51 (12 years ago)
Author:
acoutinho
Message:

Ticket #2795 - Problema ao tentar aceitar convite da agenda para a conta compartilhada

Location:
trunk/prototype/modules/calendar
Files:
5 edited

Legend:

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

    r6299 r6331  
    373373/////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
    374374 
    375     public function updateCalendar(&$uri, &$params, &$criteria, $original) { 
    376         if (isset($params['calendar'])) { 
    377             $calendarObjects = self::schedulable2calendarToObject($uri['id']); 
    378             $params2['calendar'] = $params['calendar']; 
    379  
    380             foreach ($calendarObjects as $calendarObject) 
     375    public function updateCalendar(&$uri, &$params, &$criteria, $original) {        
     376        if (isset($params['calendar'])) { 
     377            if(isset($params['lastCalendar'])){ 
     378                $calendarObjects = self::referenceCalendarToObject($uri['id'], $params['lastCalendar']); 
     379                $params2['calendar'] = $params['calendar']; 
     380            }else{ 
     381                $calendarObjects = self::schedulable2calendarToObject($uri['id']); 
     382                $params2['calendar'] = $params['calendar']; 
     383            } 
     384             
     385            foreach ($calendarObjects as $calendarObject) 
    381386                Controller::update(array('concept' => 'calendarToSchedulable', 'id' => $calendarObject['calendar_to_calendar_object']), $params2); 
    382387 
     
    717722            $idCalendar = $criteria['filter'][2][2]; 
    718723             
    719             if(!self::ownerSchedulable($idSchedulable)){ 
     724            if(!self::ownerSchedulable($idSchedulable, $criteria['filter'][3][2])){ 
    720725                $isPermissionFromOwner = self::permissionFromCalendarSignature($idCalendar, $idSchedulable); 
    721726                 
     
    727732 
    728733                    foreach($calendarsToSchedulable as $value) 
    729                         if($value['calendar_id'] == $idCalendar){ 
     734                        if($value['calendar_id'] == $idCalendar){     
     735 
     736                            $participant = Controller::read(array('concept' => 'participant'), array('id'), array('filter' => 
     737                                array('AND', 
     738                                    array('=', 'user', $criteria['filter'][3][2]), 
     739                                    array('=', 'schedulable', $idSchedulable) 
     740                                ))); 
     741 
     742                            Controller::call(('update'), array('concept' => 'participant', 'id' => $participant[0]['id']), array('status' => STATUS_CANCELLED)); 
    730743                            Controller::delete(array('concept' => 'calendarToSchedulable', 'id' => $value['calendar_to_calendar_object'])); 
    731744                            break; 
     
    740753        $calendarsToSchedulable = self::schedulable2calendarToObject($uri['id']); 
    741754 
    742         if (!self::ownerSchedulable($uri['id']) && !self::isAllowDeleteInCalendar($calendarsToSchedulable[0]['calendar_id'])) { 
     755        if (!self::ownerSchedulable($uri['id'], Config::me('uidNumber')) && !self::isAllowDeleteInCalendar($calendarsToSchedulable[0]['calendar_id'])) { 
    743756 
    744757            foreach ($calendarsToSchedulable as $i => $v) { 
     
    750763 
    751764            /* Seta o participante como rejeitado */ 
    752             Controller::update(array('concept' => 'participant'), array('status' => STATUS_CANCELLED), array('filter' => 
     765            $participant = Controller::read(array('concept' => 'participant'), array('id'), array('filter' => 
    753766                array('AND', 
    754767                    array('=', 'user', Config::me('uidNumber')), 
    755                     array('=', 'schedulable', $uri['id']) 
    756                     ))); 
     768                    array('=', 'schedulable', $idSchedulable) 
     769                ))); 
     770 
     771            Controller::call(('update'), array('concept' => 'participant', 'id' => $participant[0]['id']), array('status' => STATUS_CANCELLED)); 
    757772 
    758773            return false; /* Mata o restante da execução */ 
     
    10171032     
    10181033     
    1019     private static function ownerSchedulable($id) { 
     1034    private static function ownerSchedulable($id, $me) { 
    10201035 
    10211036        $isOwner = Controller::find(array('concept' => 'participant'), array('id'), array('filter' => 
    10221037                    array('AND', 
    10231038                        array('=', 'isOrganizer', '1'), 
    1024                         array('=', 'user', $_SESSION['wallet']['user']['uidNumber']), 
     1039                        array('=', 'user', $me), 
    10251040                        array('=', 'schedulable', $id) 
    10261041                        ))); 
     
    10281043        return ( isset($isOwner[0]['id']) ) ? true : false; 
    10291044    } 
    1030  
     1045     
     1046     
     1047    private static function referenceCalendarToObject($schedulable, $calendar) { 
     1048        return Controller::service('PostgreSQL')->execResultSql('SELECT calendar_to_calendar_object.id as calendar_to_calendar_Object FROM calendar_to_calendar_object' 
     1049            . ' WHERE calendar_to_calendar_object.calendar_id = '. $calendar 
     1050            . ' AND calendar_to_calendar_object.calendar_object_id = ' . addslashes($schedulable)); 
     1051    } 
     1052     
    10311053    private static function schedulable2calendarToObject($Schedulable) { 
    10321054        return Controller::service('PostgreSQL')->execResultSql('SELECT calendar_to_calendar_object.id as calendar_to_calendar_Object , calendar.name as calendar_name ,calendar.location as calendar_location, calendar.id as calendar_id FROM calendar_to_calendar_object , calendar , calendar_signature' 
  • trunk/prototype/modules/calendar/interceptors/Notifications.php

    r6190 r6331  
    9292        if (isset($updated)) { 
    9393            $psUpdated = Controller::find(array('concept' => 'participant'), false, array('deepness' => '1', 'filter' => array('IN', 'id', $updated))); 
     94 
    9495            foreach ($psUpdated as $i => $pUpdated) { 
    9596                if ($pUpdated['isOrganizer'] == '1') 
     
    237238     */ 
    238239    public static function participantDelegatedStatusChange(&$partID, &$schedulable, $organizer, &$type = false) { 
    239  
    240240        $delegatedParams = array(); 
    241241 
     
    270270    } 
    271271 
    272     public static function mountStruture($partID, &$schedulable, $type = false, &$data, &$subject, &$ical, &$part = false, &$method, &$notificationType, $regSet = false) { 
     272    public static function mountStruture(&$partID, &$schedulable, $type = false, &$data, &$subject, &$ical, &$part = false, &$method, &$notificationType, $regSet = false) { 
    273273 
    274274        if ((Config::regGet('ical://' . $schedulable['id'] . '/' . $method) === false) || ($method == 'CANCEL')) { //Verifica se o ical ja não esta no reg 
     
    327327                $part = self::_getAttendeeById($partID, $schedulable); 
    328328                $data['participant'] = isset($part['user']['name']) ? $part['user']['name'] : $part['user']['mail']; 
     329                $partID = $part; 
    329330                break; 
    330331            case 'othersAttendees': 
     
    344345        $subject['endDate'] = date_format($eTime, 'd/m/Y'); 
    345346        $subject['endTime'] = ($schedulable['allDay']) ? '' : date_format($eTime, 'H:i'); 
    346         $subject['participant'] = Config::me('uid'); 
     347        $subject['participant'] = (is_array($partID) && isset($partID['user']) )? $partID['user']['uid'] : Config::me('uid'); 
    347348    } 
    348349 
     
    379380     * @access     public 
    380381     */ 
    381     public static function participantStatusChange(&$partID, &$schedulable, &$organizer, $type, $delegatedParams = false) { 
     382    public static function participantStatusChange(&$partID, &$schedulable, &$organizer, $type, $delegatedParams = false) {      
    382383        $method = 'REPLY'; 
    383384        $notificationType = 'Convite Aceito'; 
     
    412413        } 
    413414 
    414         self::sendMail($data, $ical, $organizer['user']['mail'], $subject, $tpl, false); 
     415        self::sendMail($data, $ical, $organizer['user']['mail'], $subject, $tpl, $partID); 
    415416    } 
    416417 
  • trunk/prototype/modules/calendar/js/calendar.codecs.js

    r6300 r6331  
    153153        delete DataLayer.tasks[this.clookRefresh]; 
    154154         
    155         this.clookRefresh = (parseInt(($.now()) / 1000) + this.timeRefresh); 
    156          
    157         DataLayer.task( this.clookRefresh , function(){ 
    158             Calendar.rerenderView(true); 
    159         }); 
    160  
     155        //Realiza agendamentos de atualização de view somente se o módulo aberto for expressoCalendar 
     156        if(User.moduleName == "expressoCalendar"){ 
     157            this.clookRefresh = (parseInt(($.now()) / 1000) + this.timeRefresh); 
     158 
     159            DataLayer.task( this.clookRefresh , function(){ 
     160                Calendar.rerenderView(true); 
     161            }); 
     162        } 
    161163    } 
    162164} 
     
    516518        var pref = User.preferences; 
    517519                 
    518         var Owner = decodeOwnerCalendar(evtObj.calendar);        
     520        var Owner = decodeOwnerCalendar(evtObj[0].calendar);     
    519521 
    520522        var res = $.map(evtObj, function( form ){ 
    521523                         
    522             return { 
     524            return DataLayer.merge({ 
    523525                id: form.idEvent, 
    524                 calendar: form.calendar, 
    525526                participants : $.map(form.attendee, function( attendee, i ){ 
    526527                    if(isNaN(attendee)){ 
     
    536537                        if(DataLayer.get('participant', attendee).user == Owner.id){ 
    537538                            var me = { 
    538                                 user: User.id, 
     539                                user: Owner.id, 
    539540                                status: form.status, 
    540541                                id: attendee, 
     
    580581                    }; 
    581582                }) 
    582             } 
     583            }, (Owner.id == User.me.id) ? (form.calendar != form.lastCalendar ? {calendar: form.calendar, lastCalendar: form.lastCalendar} : {}) : {}) 
    583584        }); 
    584585        return notArray ? res[0] : res; 
     
    641642                attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
    642643                    var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
    643                     //TODO - Verificar na API retorno de id sobre os conceitos em que são utilizados tabelas de ligação 
     644                    //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 
    644645                    if(!attach.name) return(null);  
    645646                     
     
    838839            var Owner = decodeOwnerCalendar(form.calendar); 
    839840 
    840             return { 
     841            return DataLayer.merge({ 
    841842                "class": form["class"], 
    842843                startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 
     
    846847                location: form.location, 
    847848                category: form.category, 
    848                 calendar: form.calendar, 
    849849                summary: form.summary, 
    850850                description: form.description, 
     
    901901                    }; 
    902902                }) 
    903             }; 
     903            }, form.lastCalendar ? (( form.lastCalendar == form.calendar ) ? {} : {calendar: form.calendar, lastCalendar: form.lastCalendar}) : {calendar: form.calendar}); 
    904904        }); 
    905905 
  • trunk/prototype/modules/calendar/js/helpers.js

    r6286 r6331  
    623623    $(this).parent().remove().find('li').is(':empty'); 
    624624}); 
    625                  
    626 /*Seleciona a agenda padrão para criação de um evento*/ 
    627  
    628 if(objEvent.calendar != undefined) 
    629     var selectedCalendar = objEvent.calendar; 
    630 else 
    631     var selectedCalendar = User.preferences.defaultCalendar; 
    632  
    633 UI.dialogs.addEvent.find('option[value="'+selectedCalendar+'"]').attr('selected','selected').trigger('change'); 
     625 
     626var myCalendar = function(){ 
     627        for(var i in Calendar.signatures) 
     628            if(Calendar.signatures[i].isOwner == "1") 
     629                return Calendar.signatures[i].calendar.id; 
     630} 
    634631                 
    635632/*Adicionar alarms padrões, quando alterado a agenda do usuário*/                
     
    691688    .filter('.mail').html(User.me.mail).attr('title',User.me.mail); 
    692689} 
    693                          
    694                          
    695                          
    696                          
    697690}); 
    698                  
     691 
    699692/*Checkbox adicionar alarms padrões*/ 
    700693UI.dialogs.addEvent.find('input[name="defaultAlarm"]').click(function(){ 
     
    781774                canDiscardEventDialog = true; 
    782775                /* Remove por filtro */ 
    783                 DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objEvent.id], ['=', 'calendar', objEvent.calendar]]}); 
     776                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objEvent.id], ['=', 'calendar', objEvent.calendar], ['=','user',(objEvent.me.user ? objEvent.me.user.id : objEvent.me.id)]]}); 
    784777                Calendar.rerenderView(true); 
    785778                /********************/ 
     
    15101503 
    15111504disponibily(objEvent, path, attendees); 
    1512           
     1505 
     1506/*Seleciona a agenda padrão para criação de um evento*/ 
     1507var selectedCalendar = (objEvent.calendar != undefined) ? objEvent.calendar : (User.preferences.defaultCalendar ? User.preferences.defaultCalendar : myCalendar()); 
     1508UI.dialogs.addEvent.find('option[value="'+selectedCalendar+'"]').attr('selected','selected').trigger('change'); 
     1509 
    15131510UI.dialogs.addEvent.find(':input').change(function(event){ 
    15141511    if (event.keyCode != '27' && event.keyCode != '13') 
     
    19151912        'onClose':  function(clicked) { 
    19161913            if(clicked == 'Sim'){ 
    1917                 DataLayer.removeFilter('schedulable', {filter: ['AND', ['=','id',eventId], ['=','calendar',idCalendar]]}) 
     1914 
     1915                var schedulable = DataLayer.get('schedulable', '88'); 
     1916                 
     1917                schedulable.calendar = idCalendar; 
     1918                 
     1919                var schudableDecode = DataLayer.encode( "schedulable:preview", schedulable); 
     1920                var me = schudableDecode.me.user ? schudableDecode.me.user.id : schudableDecode.me.id; 
     1921 
     1922                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=','id',eventId], ['=','calendar',idCalendar], ['=','user', me]]}) 
    19181923                Calendar.rerenderView(true); 
    19191924            } 
     
    26352640 
    26362641    var schedulable = DataLayer.get('schedulable', event+''); 
    2637          
     2642         
    26382643    calendar = !!calendar ? calendar : schedulable.calendar; 
    26392644         
     
    26442649    if(parseInt(type) == 0){ 
    26452650                 
    2646         schedulable.calendar = calendar;         
     2651        schedulable.lastCalendar = schedulable.calendar; 
     2652        schedulable.calendar = calendar;         
    26472653        DataLayer.put('schedulable', schedulable); 
    26482654         
  • trunk/prototype/modules/calendar/templates/event_add.ejs

    r6302 r6331  
    88                        <% if( data.event.id ){ %> 
    99                                <input type="hidden" class="id-event" name="idEvent" value="<%= data.event.id %>"/> 
     10                        <% } %> 
     11                        <% if( data.event.calendar ){ %> 
     12                                <input type="hidden" class="last-calendar" name="lastCalendar" value="<%= data.event.calendar %>"/> 
    1013                        <% } %> 
    1114                </p> 
Note: See TracChangeset for help on using the changeset viewer.