Changeset 5947


Ignore:
Timestamp:
04/13/12 17:25:00 (12 years ago)
Author:
acoutinho
Message:

Ticket #2626 - Inconsistencia no organizador de um evento quando criado a partir de uma agenda compartilhada

Location:
trunk/prototype
Files:
6 edited

Legend:

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

    r5907 r5947  
    659659            } 
    660660            //TODO - Padronizar retorno do deepness 
    661 //            if(isset($v['user'])) 
    662 //                $result[$i]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $v['user']), false, false);  
     661            if(isset($v['user'])) 
     662                $result[$i]['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $v['user']), false, false);  
    663663          } 
    664664       }        
     
    815815        //Caso uma busca não retorne nenhum resultado e foi buscado pelas assinaturas do usuario logado apenas 
    816816        $isValidSignature = false; 
    817                  
     817 
    818818        //Veirifica pois o usuário pode ter varias assinaturas mas não ser dona de nenhuma 
    819819        if(count($result) > 0){ 
     
    849849                             'timezone' => isset($v->timezone) ? $v->timezone : (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
    850850                             'dtstamp' => time().'000', 
    851                              'location' => $urlA[ (count($urlA)-2) ] 
     851                             'location' => $urlA[ (count($urlA)-3) ].'/'.$urlA[ (count($urlA)-2) ] 
    852852                            ); 
    853853 
  • trunk/prototype/modules/calendar/interceptors/Notifications.php

    r5804 r5947  
    99     
    1010        public function formatNotification(&$uri , &$params , &$data , $original){       
    11                 switch ($params['type']) { 
    12                         case 'suggestion': 
    13                                 self::formatSuggestion($params);     
    14                                 break; 
    15                         case 'suggestionResponse': 
    16                                 self::formatSuggestionResponse($params);     
    17                                 break; 
    18                         }  
     11            switch ($params['type']) { 
     12                case 'suggestion': 
     13                        self::formatSuggestion($params);     
     14                        break; 
     15                case 'suggestionResponse': 
     16                        self::formatSuggestionResponse($params);     
     17                        break; 
     18                }  
    1919        } 
    2020         
     
    7878               $organizer = isset( $organizers[$pCreated['schedulable']] ) ? $organizers[ $pCreated['schedulable'] ] : self::getOrganizer( $pCreated['schedulable'] ); 
    7979                            
    80                                 if($pCreated['delegatedFrom'] != 0){ 
    81                                         self::participantDelegated( $pCreated , $schedulable , $organizer);     
    82                                         continue; 
    83                                 } 
     80                if($pCreated['delegatedFrom'] != 0){ 
     81                        self::participantDelegated( $pCreated , $schedulable , $organizer);     
     82                        continue; 
     83                } 
    8484                            
    8585               switch ($pCreated['status'])  
     
    8989                       break; 
    9090                   case STATUS_UNANSWERED: 
    91                         self::participantCreated( $pCreated['id'] , $schedulable ); 
     91                        self::participantCreated( $pCreated['id'] , $schedulable, false, false, $organizer ); 
    9292                       break; 
    9393               }  
     
    108108                     
    109109                if($pUpdated['delegatedFrom'] != 0){ 
    110                                         self::participantDelegatedStatusChange( $pUpdated , $schedulable , $organizer , $pUpdated['status'] );     
     110                    self::participantDelegatedStatusChange( $pUpdated , $schedulable , $organizer , $pUpdated['status'] );     
    111111                }else if( $pUpdated['status'] != STATUS_UNANSWERED && $pUpdated['status'] != STATUS_DELEGATED) 
    112                                         self::participantStatusChange( $pUpdated['id'] , $schedulable , $organizer , $pUpdated['status'] );     
     112                    self::participantStatusChange( $pUpdated['id'] , $schedulable , $organizer , $pUpdated['status'] );     
    113113            } 
    114114        } 
     
    117117        public function formatSuggestion(&$params){ 
    118118             
    119                 $schedulable =  Controller::read(  array( 'concept' => 'schedulable' , 'id' => $params['schedulable'] ) , null , array('deepness' => '2') ) ; 
    120                  
    121                 foreach ($schedulable['participants'] as $i => $v) //salva em $organizer as informações do organizador       
     119            $schedulable =  Controller::read(  array( 'concept' => 'schedulable' , 'id' => $params['schedulable'] ) , null , array('deepness' => '2') ) ; 
     120 
     121            foreach ($schedulable['participants'] as $i => $v) //salva em $organizer as informações do organizador       
    122122            if(($v['isOrganizer'] === '1') && ($organizer = $v) ) break; 
    123123                 
     
    227227        } 
    228228         
    229         /** 
     229    /** 
    230230    * Monta o email de resposta que sera enviado ao delegatedFrom 
    231231    * 
     
    239239    public static function participantDelegatedStatusChange( &$partID , &$schedulable, $organizer, &$type = false){ 
    240240         
    241                 $delegatedParams = array(); 
    242                                          
    243                 $delegated = self::_getAttendeeById($partID['id'], $schedulable); 
    244                 $delegatedParams['delegated'] = $delegated['user']['uid'];               
    245                  
    246                 switch($partID['status']){ 
     241            $delegatedParams = array(); 
     242 
     243            $delegated = self::_getAttendeeById($partID['id'], $schedulable); 
     244            $delegatedParams['delegated'] = $delegated['user']['uid'];           
     245 
     246            switch($partID['status']){ 
    247247            case STATUS_ACCEPTED: 
    248248                $delegatedParams['status'] = 'aceitou'; 
     
    254254                $delegatedParams['status'] = 'rejeitou'; 
    255255            break; 
    256                         case STATUS_DELEGATED: 
    257                                 $delegatedParams['status'] = 'delegou para um novo participante'; 
     256            case STATUS_DELEGATED: 
     257                    $delegatedParams['status'] = 'delegou para um novo participante'; 
    258258            break; 
    259259                } 
    260                         //notifica o organizador a resposta do delegado 
    261                         self::participantStatusChange( $partID['delegatedFrom'] , $schedulable , $organizer , $type, $delegatedParams ); 
    262          
    263                         $method = 'REQUEST'; 
    264                         $notificationType = 'Resposta Delegação';  
    265                         $part = 'attendees'; 
    266                         self::mountStruture($partID['delegatedFrom'], $schedulable, $type , $data,  $subject, $ical, $part, $method, $notificationType ); 
    267                          
    268                         $data = array_merge($data, $delegatedParams); 
     260            //notifica o organizador a resposta do delegado 
     261            self::participantStatusChange( $partID['delegatedFrom'] , $schedulable , $organizer , $type, $delegatedParams ); 
     262 
     263            $method = 'REQUEST'; 
     264            $notificationType = 'Resposta Delegação';  
     265            $part = 'attendees'; 
     266            self::mountStruture($partID['delegatedFrom'], $schedulable, $type , $data,  $subject, $ical, $part, $method, $notificationType ); 
     267 
     268            $data = array_merge($data, $delegatedParams); 
    269269                         
    270270            self::sendMail($data, $ical , $part['user']['mail'] , $subject , 'notify_response_delegated_status_body'); 
     
    305305                        $temp = $part; 
    306306                        $part = false; 
     307 
    307308                        switch($temp){ 
    308309                                case 'attendees': 
     
    352353    * @access     public 
    353354    */ 
    354     public static function participantCreated( &$partID , &$schedulable, $type = false, $delegatedParams = false) 
     355    public static function participantCreated( &$partID , &$schedulable, $type = false, $delegatedParams = false, $organizer = false) 
    355356    {    
    356                 $method = 'REQUEST'; 
    357                 $notificationType = 'Convite de Calendario';  
    358                 $part = 'attendees'; 
    359                 self::mountStruture($partID, $schedulable, $type , $data,  $subject, $ical, $part, $method, $notificationType, true); 
    360          
    361                 if($delegatedParams) 
    362                         $data = array_merge($data, $delegatedParams); 
    363                                           
    364                  self::sendMail($data, $ical , $part['user']['mail'] , $subject , !$delegatedParams  ? 'notify_create_body' : 'notify_create_delegated_body' ); 
     357        $method = 'REQUEST'; 
     358        $notificationType = 'Convite de Calendario';  
     359        $part = 'attendees'; 
     360        self::mountStruture($partID, $schedulable, $type , $data,  $subject, $ical, $part, $method, $notificationType, true); 
     361 
     362        if($delegatedParams) 
     363                $data = array_merge($data, $delegatedParams); 
     364 
     365            self::sendMail($data, $ical , $part['user']['mail'] , $subject , !$delegatedParams  ? 'notify_create_body' : 'notify_create_delegated_body', $organizer ); 
    365366        
    366367    } 
     
    379380    {    
    380381        $method = 'REPLY'; 
    381                 $notificationType = 'Convite Aceito'; 
    382                 $part = 'me'; 
    383                  
    384                 self::mountStruture($partID, $schedulable, $type , $data,  $subject, $ical, $part, $method, $notificationType, true ); 
    385                         
    386                 if($delegatedParams){ 
    387                         $data = array_merge($data, $delegatedParams); 
    388                         $tplDelegated = 'notify_delegated_status_body'; 
    389                 } 
     382        $notificationType = 'Convite Aceito'; 
     383        $part = 'me'; 
     384 
     385        self::mountStruture($partID, $schedulable, $type , $data,  $subject, $ical, $part, $method, $notificationType, true ); 
     386 
     387        if($delegatedParams){ 
     388                $data = array_merge($data, $delegatedParams); 
     389                $tplDelegated = 'notify_delegated_status_body'; 
     390        } 
    390391 
    391392       switch($type) 
     
    403404                $subject['notificationType'] = 'Convite rejeitado'; 
    404405            break; 
    405                         case STATUS_DELEGATED: 
    406                                 if($delegatedParams) 
    407                                         $data = array_merge($data, $delegatedParams); 
     406                case STATUS_DELEGATED: 
     407                    if($delegatedParams) 
     408                        $data = array_merge($data, $delegatedParams); 
    408409                $tpl =   'notify_delegated_body'; 
    409410                $subject['notificationType'] = 'Convite delegado'; 
     
    412413       } 
    413414         
    414         self::sendMail($data, $ical , $organizer['user']['mail'] , $subject , $tpl); 
     415        self::sendMail($data, $ical , $organizer['user']['mail'] , $subject , $tpl, false); 
    415416    } 
    416417     
     
    425426    * @access     public 
    426427    */ 
    427     private static function sendMail(&$data , &$ical , $to ,  &$subject , $template ) 
     428    private static function sendMail(&$data , &$ical , $to ,  &$subject , $template, $from = false ) 
    428429    {  
    429430       $ical2 = $ical; 
     
    435436       $mail['body'] = parseTPL::load_tpl( $data ,ROOTPATH.'/modules/calendar/templates/'.$template.'.tpl'); 
    436437       $mail['subject'] = parseTPL::load_tpl( $subject ,ROOTPATH.'/modules/calendar/templates/notify_subject.tpl');; 
    437        $mail['from'] = '"'.Config::me('cn').'" <'.Config::me('mail').'>'; 
     438       $mail['from'] = $from ? ('"'.$from['user']['name'].'" <'.$from['user']['mail'].'>') : ('"'.Config::me('cn').'" <'.Config::me('mail').'>'); 
    438439       $mail['to'] = $to; 
    439440       Controller::create( array( 'service' => 'SMTP' ), $mail );  
     
    456457       if((Config::regGet('noAlarm') === false) && (self::futureEvent( $schedulable['startTime'] , $schedulable['rangeEnd']))) 
    457458       { 
    458                         $method = 'CANCEL'; 
    459                         $notificationType = 'Cancelamento de Calendario'; 
    460                         $part = 'othersAttendees'; 
    461                         self::mountStruture($uri['id'], $schedulable, false , $data,  $subject, $ical, $part, $method, $notificationType ); 
     459            $method = 'CANCEL'; 
     460            $notificationType = 'Cancelamento de Calendario'; 
     461            $part = 'othersAttendees'; 
     462            self::mountStruture($uri['id'], $schedulable, false , $data,  $subject, $ical, $part, $method, $notificationType ); 
    462463                 
    463            if(count($part) > 0) 
    464             self::sendMail($data, $ical , implode(',' , $part) ,$subject, 'notify_cancel_body'); 
     464            if(count($part) > 0) 
     465                self::sendMail($data, $ical , implode(',' , $part) ,$subject, 'notify_cancel_body'); 
    465466       } 
    466467    } 
     
    484485       if((Config::regGet('noAlarm') === false) && (self::futureEvent( $schedulable['startTime'] , $schedulable['rangeEnd']))) 
    485486       {   
    486                         $method = 'CANCEL'; 
    487                         $notificationType = 'Cancelamento de Calendario'; 
    488                         $part = 'others'; 
    489                         self::mountStruture(false, $schedulable, false , $data,  $subject, $ical, $part, $method, $notificationType ); 
    490                                              
    491                         self::sendMail($data, $ical , $participant['user']['mail'] , $subject , 'notify_cancel_body');   
     487            $method = 'CANCEL'; 
     488            $notificationType = 'Cancelamento de Calendario'; 
     489            $part = 'others'; 
     490            self::mountStruture(false, $schedulable, false , $data,  $subject, $ical, $part, $method, $notificationType ); 
     491 
     492            self::sendMail($data, $ical , $participant['user']['mail'] , $subject , 'notify_cancel_body');   
    492493        } 
    493494    } 
     
    518519       if ( ($alt === true) && (Config::regGet('noAlarm') === false) && (self::futureEvent($schedulable['startTime'], $schedulable['rangeEnd'])) )  
    519520       {                         
    520                         $method = 'REQUEST'; 
    521                         $notificationType = 'Modificação de Calendario';  
    522                         $part = 'othersAttendees'; 
    523                         self::mountStruture($partID, $schedulable, $type , $data,  $subject, $ical, $part, $method, $notificationType); 
     521            $method = 'REQUEST'; 
     522            $notificationType = 'Modificação de Calendario';  
     523            $part = 'othersAttendees'; 
     524            self::mountStruture($partID, $schedulable, $type , $data,  $subject, $ical, $part, $method, $notificationType); 
    524525 
    525526            if ( isset($part) && count($part) > 0) 
  • trunk/prototype/modules/calendar/js/calendar.codecs.js

    r5938 r5947  
    468468 
    469469                var pref = User.preferences; 
     470                 
     471                var Owner = decodeOwnerCalendar(evtObj.calendar);        
    470472 
    471473                var res = $.map(evtObj, function( form ){ 
     
    476478                                participants : $.map(form.attendee, function( attendee, i ){ 
    477479                                        if(isNaN(attendee)){ 
    478                                                 return{ 
    479                                                         id: attendee, 
    480                                                         acl: form.attendeeAcl[i], 
    481                                                         delegatedFrom: !!form.delegatedFrom[i] ? form.delegatedFrom[i] : 0, 
    482                                                         isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
    483                                                         isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 
    484                                                         acl: form.attendeeAcl[i].replace('o', '') 
    485                                                 }; 
     480                                            return{ 
     481                                                    id: attendee, 
     482                                                    acl: form.attendeeAcl[i], 
     483                                                    delegatedFrom: !!form.delegatedFrom[i] ? form.delegatedFrom[i] : 0, 
     484                                                    isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     485                                                    isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 
     486                                                    acl: form.attendeeAcl[i].replace('o', '') 
     487                                            }; 
    486488                                        }else{ 
    487                                                 if(DataLayer.get('participant', attendee).user == User.me.id){ 
     489                                                if(DataLayer.get('participant', attendee).user == Owner.id){ 
    488490                                                        var me = { 
    489                                                                 user: User.me.id, 
    490                                                                 status: form.status, 
    491                                                                 id: attendee, 
    492                                                                 isOrganizer: 0, 
    493                                                                 receiveNotification : (!!form.receiveNotification ? 1 : 0), 
    494                                                                 alarms: typeof(form.alarmTime) != 'undefined' ?  
    495                                                                         $.map( form.alarmTime || [], function( alarmTime, i ){ 
    496  
    497                                                                                 if( alarmTime === "" ) 
    498                                                                                         return( null ); 
    499  
    500                                                                                 return !!form.alarmId[i] ? 
    501                                                                                         { type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i] } :  
    502                                                                                         { type: form.alarmType[i],unit: form.alarmUnit[i], time: form.alarmTime[i] }; 
    503                                                                         }) : [] 
    504                                                         }; 
     491                                                            user: User.id, 
     492                                                            status: form.status, 
     493                                                            id: attendee, 
     494                                                            isOrganizer: 0, 
     495                                                            receiveNotification : (!!form.receiveNotification ? 1 : 0), 
     496                                                            alarms: typeof(form.alarmTime) != 'undefined' ?  
     497                                                                $.map( form.alarmTime || [], function( alarmTime, i ){ 
     498 
     499                                                                    if( alarmTime === "" ) 
     500                                                                            return( null ); 
     501 
     502                                                                    return !!form.alarmId[i] ? 
     503                                                                            { type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i] } :  
     504                                                                            { type: form.alarmType[i],unit: form.alarmUnit[i], time: form.alarmTime[i] }; 
     505                                                                    }) : [] 
     506                                                    }; 
    505507                                                         
    506508                                                        if(form.startDate){ 
     
    509511                                                                 
    510512                                                                DataLayer.put('notification', { 
    511                                                                         participant: me.id, 
    512                                                                         type: 'suggestion', 
    513                                                                         startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 
    514                                                                         endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'), 
    515                                                                         allDay: ( !!form.allDay ? 1 : 0 ), 
    516                                                                         schedulable: form.idEvent 
     513                                                                    participant: me.id, 
     514                                                                    type: 'suggestion', 
     515                                                                    startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 
     516                                                                    endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'), 
     517                                                                    allDay: ( !!form.allDay ? 1 : 0 ), 
     518                                                                    schedulable: form.idEvent 
    517519                                                                }); 
    518520                                                         
     
    547549                        if(!(typeof(objEvent) == 'object')) 
    548550                                return (null); 
    549                          
    550                         var participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy(User.me); 
     551 
     552                        var Owner = decodeOwnerCalendar(objEvent.calendar); 
     553 
     554                        var participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy( Owner ); 
    551555                         
    552556                        var constantAcl = function(acl){ 
    553                                 var returns = {}; 
    554                                 for (var i in constantsParticipant){ 
    555                                         returns[constantsParticipant[i]] = acl.indexOf(i) >= 0 ? true : false 
    556                                 } 
    557                                 return returns; 
     557                        var returns = {}; 
     558                        for (var i in constantsParticipant){ 
     559                                returns[constantsParticipant[i]] = acl.indexOf(i) >= 0 ? true : false 
     560                        } 
     561                        return returns; 
    558562                        }; 
    559                                                                  
     563 
    560564                    return { 
    561565                            "class": objEvent["class"], 
     
    575579                            endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
    576580                            allDay: !!parseInt( objEvent.allDay ), 
    577                                 attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     581                            attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
    578582                                        var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
    579583                                        var ext = attach.name.split('.'); 
     
    583587                                }),                                              
    584588                            attendee: $.map(objEvent.participants || [], function( participant, i ){                                             
    585                                          
    586                                         if(delegateAttendee[participant]) 
    587                                                 return(null); 
    588                                          
    589                                         var attend = DataLayer.get('participant', (participant.id || participant)); 
    590                                         attend.user = DataLayer.get('user', attend.user); 
    591                                          
    592                                         statusParticipants[ statusLabels[attend.status] ]++;     
    593                                          
    594                                         if( attend.user.id ===  me.id ){ 
    595                                             participantInfo.user = { 
    596                                                         id: attend.id, 
    597                                                         status : attend.status, 
    598                                                         delegatedFrom: attend.delegatedFrom || '0', 
    599                                                         acl: attend.acl, 
    600                                                         receiveNotification : attend.receiveNotification, 
    601                                                         alarms : $.map(attend.alarms || [], function( alarm ){ 
    602                                                                 var alarm = DataLayer.get('alarm', alarm); 
    603                                                                 return (alarm == "" ? (null) : alarm); 
    604                                                         }) 
    605                                                 }; 
    606                                                 me.id = attend.id; 
    607                                                 return(null); 
    608                                         }; 
    609                                          
    610                                         var person = { 
    611                                                 id: attend.id, 
    612                                                 name: attend.user.name != 'false' ? attend.user.name : '', 
    613                                                 mail: attend.user.mail, 
    614                                                 status : attend.status, 
    615                                                 isExternal: attend.isExternal, 
    616                                                 acl: attend.acl, 
    617                                                 delegatedFrom: attend.delegatedFrom 
    618                                         }; 
    619                                          
    620                                         if(!!parseInt(attend.delegatedFrom)){ 
    621                                                 delegatedFrom[attend.delegatedFrom] = DataLayer.copy(person); 
    622                                                 return(null); 
    623                                         } 
    624                                          
    625                                         if( !!parseInt(attend.isOrganizer )){ 
    626                                             participantInfo.organizer = DataLayer.copy(person); 
    627                                                 return(null); 
    628                                         };                                       
    629                                          
    630                                         return (person); 
    631                                 }), 
     589 
     590                                if(delegateAttendee[participant]) 
     591                                        return(null); 
     592 
     593                                var attend = DataLayer.get('participant', (participant.id || participant)); 
     594                                attend.user = DataLayer.get('user', attend.user); 
     595 
     596                                statusParticipants[ statusLabels[attend.status] ]++;     
     597 
     598                                if( attend.user.id ===  me.id ){ 
     599                                    participantInfo.user = { 
     600                                        id: attend.id, 
     601                                        status : attend.status, 
     602                                        delegatedFrom: attend.delegatedFrom || '0', 
     603                                        acl: attend.acl, 
     604                                        receiveNotification : attend.receiveNotification, 
     605                                        alarms : $.map(attend.alarms || [], function( alarm ){ 
     606                                            var alarm = DataLayer.get('alarm', alarm); 
     607                                            return (alarm == "" ? (null) : alarm); 
     608                                        }) 
     609                                    }; 
     610                                    me.id = attend.id; 
     611                                    return(null); 
     612                                }; 
     613 
     614                                var person = { 
     615                                    id: attend.id, 
     616                                    name: attend.user.name != 'false' ? attend.user.name : '', 
     617                                    mail: attend.user.mail, 
     618                                    status : attend.status, 
     619                                    isExternal: attend.isExternal, 
     620                                    acl: attend.acl, 
     621                                    delegatedFrom: attend.delegatedFrom 
     622                                }; 
     623 
     624                                if(!!parseInt(attend.delegatedFrom)){ 
     625                                    delegatedFrom[attend.delegatedFrom] = DataLayer.copy(person); 
     626                                        return(null); 
     627                                } 
     628 
     629                                if( !!parseInt(attend.isOrganizer )){ 
     630                                    participantInfo.organizer = DataLayer.copy(person); 
     631                                        return(null); 
     632                                };                                       
     633 
     634                                return (person); 
     635                            }), 
    632636                            organizer: participantInfo.organizer || me, 
    633637                            alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 
     
    640644                                statusParticipants: statusParticipants 
    641645                        }; 
    642                 });      
    643         return notArray ? res[0] : res; 
     646                }); 
     647        return (notArray ? res[0] : res); 
    644648    } 
    645649}); 
     650 
     651 
     652function decodeOwnerCalendar(calendar){ 
     653    if(calendar && !parseInt(Calendar.signatureOf[calendar].isOwner)){ 
     654        var Owner = DataLayer.get('calendarSignature', {filter: ['AND', ['=','calendar', calendar], ['=','isOwner','1']], criteria: {deepness: 2}}); 
     655 
     656        if($.isArray(Owner)) 
     657            Owner = Owner[0]; 
     658         
     659        return Owner.user; 
     660    } 
     661    return User.me; 
     662 
     663     
     664} 
    646665 
    647666function decodeRepeat ( form ) { 
     
    744763                    var tzId =  form.timezone || Calendar.signatureOf[form.calendar].calendar.timezone || User.preferences.timezone, 
    745764 
    746                     formatString = ( typeof form.allDay !== "undefined" && !!form.allDay )? pref.dateFormat+" HH:mm" : pref.dateFormat + " " + pref.hourFormat, 
    747                          
    748                     participants = [];  
     765                    formatString = ( typeof form.allDay !== "undefined" && !!form.allDay )? pref.dateFormat+" HH:mm" : pref.dateFormat + " " + pref.hourForma; 
     766 
     767                    var Owner = decodeOwnerCalendar(form.calendar); 
     768 
    749769                    return { 
    750                               "class": form["class"], 
    751                                   startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 
    752                                   endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
    753                                   allDay: ( !!form.allDay ? 1 : 0 ),        
    754                               id: form.idEvent, 
    755                               location: form.location, 
    756                               category: form.category, 
    757                               calendar: form.calendar, 
    758                               summary: form.summary, 
    759                               description: form.description, 
    760                               timezone: tzId, 
    761                                   attachments: $.map(form.attachment || [], function( attachment, i ){ 
    762                                                 return {attachment: attachment} 
    763                                   }), 
    764                               repeat: this.decodeRepeat( form ), 
    765                               participants: $.map( form.attendee || [], function( attendee, i ){ 
    766  
    767                                                 if( !attendee || attendee === "" ) 
    768                                                         return( null ); 
    769  
    770                                                 var participant = {}; 
    771                                                 participant.user = (attendee!= User.me.id) ? DataLayer.get('participant', attendee).user : attendee ; 
    772                                                  
    773                                                 if( participant.user === User.me.id ){ 
    774                                                         return DataLayer.merge({ 
    775                                                                 id: attendee, 
    776                                                                 isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
    777                                                                 acl: form.attendee_organizer == attendee ? (form.attendeeAcl[i].indexOf('o') < 0 ? form.attendeeAcl[i]+'o' : form.attendeeAcl[i]) : form.attendeeAcl[i].replace('o', ''), 
    778                                                                 alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 
    779                                                                                 if( alarmTime === "" ) 
    780                                                                                         return( null ); 
    781                                                                                  return !!form.alarmId[i] ? { type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i] }: 
    782                                                                                                                                         { type: form.alarmType[i],unit: form.alarmUnit[i], time: form.alarmTime[i] }; 
    783                                                                         }), 
    784                                                                 status: !!form.status ? form.status : 3 
    785                                                                 }, form.delegatedFrom[i] != '0' ? {delegatedFrom: form.delegatedFrom[i]} : {});                                                  
    786                                                 }else{ 
    787                                                         return DataLayer.merge({ 
    788                                                                 id: attendee, 
    789                                                                 acl: form.attendeeAcl[i], 
    790                                                                 isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
    791                                                                 isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 
    792                                                                 acl: form.attendee_organizer == attendee ? (form.attendeeAcl[i].indexOf('o') < 0 ? form.attendeeAcl[i]+'o' : form.attendeeAcl[i]) : form.attendeeAcl[i].replace('o', '') 
    793                                                         }, form.delegatedFrom[i] != '0' ? {delegatedFrom: form.delegatedFrom[i]} : {});  
    794                                                 }; 
    795                                           }) 
    796                             }; 
     770                            "class": form["class"], 
     771                            startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 
     772                            endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
     773                            allDay: ( !!form.allDay ? 1 : 0 ),        
     774                            id: form.idEvent, 
     775                            location: form.location, 
     776                            category: form.category, 
     777                            calendar: form.calendar, 
     778                            summary: form.summary, 
     779                            description: form.description, 
     780                            timezone: tzId, 
     781                            attachments: $.map(form.attachment || [], function( attachment, i ){ 
     782                                        return {attachment: attachment} 
     783                            }), 
     784                            repeat: this.decodeRepeat( form ), 
     785                            participants: $.map( form.attendee || [], function( attendee, i ){ 
     786 
     787                                if( !attendee || attendee === "" ) 
     788                                    return( null ); 
     789 
     790                                var participant = {}; 
     791                                participant.user = (attendee!= User.me.id) ? DataLayer.get('participant', attendee).user : attendee ; 
     792 
     793                                if( participant.user === Owner.id ){ 
     794                                    return DataLayer.merge({ 
     795                                    id: attendee, 
     796                                    isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     797                                    acl: form.attendee_organizer == attendee ? (form.attendeeAcl[i].indexOf('o') < 0 ? form.attendeeAcl[i]+'o' : form.attendeeAcl[i]) : form.attendeeAcl[i].replace('o', ''), 
     798                                    alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 
     799                                        if( alarmTime === "" ) 
     800                                            return( null ); 
     801                                        return !!form.alarmId[i] ? { type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i] }: 
     802                                            { type: form.alarmType[i],unit: form.alarmUnit[i], time: form.alarmTime[i] }; 
     803                                        }), 
     804                                    status: !!form.status ? form.status : 3 
     805                                    }, form.delegatedFrom[i] != '0' ? {delegatedFrom: form.delegatedFrom[i]} : {}); 
     806                                }else{ 
     807                                    return DataLayer.merge({ 
     808                                        id: attendee, 
     809                                        acl: form.attendeeAcl[i], 
     810                                        isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     811                                        isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 
     812                                        acl: form.attendee_organizer == attendee ? (form.attendeeAcl[i].indexOf('o') < 0 ? form.attendeeAcl[i]+'o' : form.attendeeAcl[i]) : form.attendeeAcl[i].replace('o', '') 
     813                                    }, form.delegatedFrom[i] != '0' ? {delegatedFrom: form.delegatedFrom[i]} : {}); 
     814                                }; 
     815                            }) 
     816                        }; 
    797817                    }); 
    798818 
     
    923943 
    924944    encoder: function( evtObj, filter ){ 
    925          
     945       
    926946        if( !evtObj ) 
    927947            return( false ); 
     
    9931013                    allDay: parseInt( evt.allDay ), 
    9941014                    isRepeat: isRepeat, 
    995                     occurrence: i }, eventEditable(evt.id, isRepeat, i ) ) ); 
     1015                    occurrence: i, 
     1016                    calendar: evt.calendar}, eventEditable(evt.id, isRepeat, i ) ) ); 
    9961017        }); 
    9971018 
  • trunk/prototype/modules/calendar/js/helpers.js

    r5937 r5947  
    7676 
    7777        if(!isMail) 
    78         objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 
     78            objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 
    7979         
    8080        if(typeof(objEvent.id) == 'undefined'){ 
    81                         objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
    82                         objEvent.useAlarmDefault = 1; 
     81            objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
     82            objEvent.useAlarmDefault = 1; 
    8383        } 
    8484         
     
    564564                                } 
    565565                        } 
     566 
     567                        var participant =  UI.dialogs.addEvent.find('dd.me input[name="attendee[]"]').val(); 
     568                        if( !parseInt(Calendar.signatureOf[$(this).val()].isOwner) ){ 
     569                            var signature = Calendar.signatureOf[$(this).val()]; 
     570                            var organizer = DataLayer.get('calendarSignature', {filter: ['AND', ['=','calendar',signature.calendar.id], ['=','isOwner','1']], criteria: {deepness: 2}}); 
     571                             
     572                            if($.isArray(organizer)) 
     573                                organizer = organizer[0]; 
     574                            DataLayer.put('participant', {id: participant, user: organizer.user.id, mail: organizer.user.mail}); 
     575                             
     576                            UI.dialogs.addEvent.find('dt.me').html(organizer.user.name); 
     577                            UI.dialogs.addEvent.find('li.organizer input[name="attendee_organizer"]').val(participant); 
     578                            UI.dialogs.addEvent.find('li.organizer label').filter('.name').html(organizer.user.name).end() 
     579                            .filter('.mail').html(organizer.user.mail).attr('title',organizer.user.mail); 
     580 
     581                        }else{ 
     582                            UI.dialogs.addEvent.find('dt.me').html(User.me.name); 
     583                            DataLayer.put('participant', {id: participant, user: User.me.id, mail: User.me.mail}); 
     584                            UI.dialogs.addEvent.find('li.organizer input[name="attendee_organizer"]').val(participant); 
     585                            UI.dialogs.addEvent.find('li.organizer label').filter('.name').html(User.me.name).end() 
     586                            .filter('.mail').html(User.me.mail).attr('title',User.me.mail); 
     587                        } 
     588                         
     589                         
     590                         
     591                         
    566592            }); 
    567593                 
  • trunk/prototype/modules/calendar/js/init.js

    r5943 r5947  
    320320                                }); 
    321321                                 
    322                             }else 
    323                                 eventDetails( DataLayer.get( "schedulable", evt.id), true); 
     322                            }else{ 
     323                                var schedulable = DataLayer.get( "schedulable", evt.id); 
     324                                schedulable.calendar = evt.calendar; 
     325                                eventDetails( schedulable, true); 
     326                                 
     327                            } 
    324328                                 
    325329                        } 
  • trunk/prototype/services/iCal.php

    r5916 r5947  
    512512                                 if($schedulable ) //Caso o evento exista 
    513513                                 { 
    514                                                                 $isOrganizer = false; 
    515                                                                 $isParticipant = false; 
    516                                                                   
    517                                                                   foreach($schedulable['participants'] as $value) 
    518                                                                         if($value['user']['id'] == Config::me('uidNumber')){ 
    519                                                                                 $isParticipant = true; 
    520                                                                                 if($value['isOrganizer']) 
    521                                                                                         $isOrganizer = true; 
    522  
    523                                                                                 if(!self::_existInMyCalendars($schedulable['id'])){ 
    524                                                                                         $interation = ICAL_ACTION_UPDATE;  
    525                                                                                         $interation = ( strrpos($value['acl'], ATTENDEE_ACL_PARTICIPATION_REQUIRED) ) ? ICAL_ACTION_IMPORT_REQUIRED : ICAL_ACTION_IMPORT; 
    526                                                                                         break; 
    527                                                                                 }                                    
    528                                                                         }else 
     514                                    $isOrganizer = false; 
     515                                    $isParticipant = false; 
     516 
     517                                    foreach($schedulable['participants'] as $value) 
     518                                        if($value['user']['id'] == Config::me('uidNumber')){ 
     519                                                $isParticipant = true; 
     520                                                if($value['isOrganizer']) 
     521                                                        $isOrganizer = true; 
     522 
     523                                                if(!self::_existInMyCalendars($schedulable['id'])){ 
     524                                                        $interation = ICAL_ACTION_UPDATE;  
     525                                                        $interation = ( strrpos($value['acl'], ATTENDEE_ACL_PARTICIPATION_REQUIRED) ) ? ICAL_ACTION_IMPORT_REQUIRED : ICAL_ACTION_IMPORT; 
     526                                                        break; 
     527                                                }                                    
     528                                        }else 
    529529                                    { 
    530530                                        if( self::_getTime($component , 'dtstamp') > $schedulable['dtstamp'] || $component->getProperty( 'sequence' , false , false ) > $schedulable['sequence']) //Organizador esta requisitando que você atualize o evento 
     
    989989        static private function _existInMyCalendars( $id ) 
    990990        { 
    991            $sig = Controller::find(array('concept' => 'calendarSignature'), array('user','calendar'), array('filter' => array( '=' , 'user' , Config::me('uidNumber'))));        
     991           $sig = Controller::find(array('concept' => 'calendarSignature'), array('user','calendar', 'isOwner'), array('filter' => array('AND', array( '=' , 'user' , Config::me('uidNumber') ) , array('=' , 'isOwner' , '1' ))));        
    992992           $calendars = array(); 
    993993           foreach ($sig as $val) 
Note: See TracChangeset for help on using the changeset viewer.