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/modules/calendar/js
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • 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                        } 
Note: See TracChangeset for help on using the changeset viewer.