Ignore:
Timestamp:
03/01/12 03:35:01 (13 years ago)
Author:
acoutinho
Message:

Ticket #2434 - Implementacao de compartilhamento de agendas (agendas usuario e agendas publicas)

Location:
trunk/prototype/modules/calendar/js
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/prototype/modules/calendar/js/calendar.codecs.js

    r5530 r5592  
    3939} 
    4040 
     41constantsCalendarShared = { 
     42        'r' : 'read', 
     43        'w' : 'write', 
     44        'd' : 'remove', 
     45        'b' : 'busy', 
     46        's' : 'shared' 
     47} 
     48 
    4149UI = { 
    4250        dialogs: { 
    4351                addEvent: null, 
    4452                importCalendar: null, 
    45                 sharedCalendar: null 
     53                sharedCalendar: null, 
     54                copyCalendar: null 
    4655        } 
    4756} 
     
    7483}); 
    7584 
     85DataLayer.codec( "calendarToPermission", "detail", { 
     86        decoder: function( evtObj ){ 
     87/*              Encoder.EncodeType = "entity"; 
     88                 
     89                if( notArray = $.type(evtObj) !== "array" ) 
     90                        evtObj = [ evtObj ]; 
     91                 
     92                var res = $.map(evtObj, function( form){ 
     93                        return [$.map(form.user , function( user, i){ 
     94                                return {  
     95                                        calendar: form.calendar, 
     96                                        user: user, 
     97                                        acl: form.attendeeAcl[i], 
     98                                        type: 0 
     99                                }; 
     100                        })]; 
     101                }); 
     102         
     103        return notArray ? res[0] : res; 
     104        */ 
     105        }, 
     106 
     107    encoder: function( evtObj ){ 
     108         
     109                if(evtObj == "") 
     110                        return ""; 
     111                         
     112                var notArray = false; 
     113                   
     114                if( notArray = $.type(evtObj) !== "array" ) 
     115                        evtObj = [ evtObj ]; 
     116                 
     117                var constantAcl = function(acl){ 
     118                        var returns = {}; 
     119                        for (var i in constantsCalendarShared){ 
     120                                returns[constantsCalendarShared[i]] = acl.indexOf(i) >= 0 ? true : false 
     121                        } 
     122                        return returns; 
     123                }; 
     124 
     125                var res = $.map(evtObj, function( objEvent ){                    
     126                        return { 
     127                            id: objEvent.id, 
     128                            type: objEvent.type, 
     129                            calendar: objEvent.calendar, 
     130                            user: objEvent.user, 
     131                                acl: constantAcl(objEvent.acl)  , 
     132                                aclValues: objEvent.acl 
     133                        }; 
     134                });      
     135        return notArray ? res[0] : res; 
     136        } 
     137}); 
     138 
     139 
    76140Calendar = { 
    77141   
     
    82146                *  quando forçado um get do banco, deverá ser criado uma condição para o mesmo 
    83147                */ 
    84                 var descart = DataLayer.get("calendarSignature", {filter: ['=', 'user', User.me.id], criteria: {deepness: 2}}) 
     148                var descart = DataLayer.get("calendarSignature", {filter: ['=', 'user', User.me.id], criteria: {deepness: 2}}); 
    85149                this.signatures  = DataLayer.get("calendarSignature", {filter: ['=', 'user', User.me.id], criteria: {deepness: 2}}, true); 
    86150           
     
    104168 
    105169                for( var i = 0; i < this.signatures.length; i++ ){ 
     170                        if(this.signatures[i].isOwner == "0") 
     171                                this.signatures[i].permission =  DataLayer.encode('calendarToPermission:detail', this.signatures[i].permission); 
    106172                        this.signatureOf[ this.calendarIds[i] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
    107173                } 
     
    128194Alarms = { 
    129195        load: function(){ 
    130                 var eventsDay = DataLayer.get('alarm:schedulable',['=', 'date', new Date().toString("yyyy-MM-dd")]); 
     196                var eventsDay = DataLayer.get('alarm:schedulable',['=', 'date', Date.today().getTime()]); 
    131197                for(var i = 0; i < eventsDay.length; i++){ 
    132198                        this.addAlarm( eventsDay[i] ); 
     
    197263    if( status === 'serverclient' ){ 
    198264                DataLayer.commit( false, false, function(){      
    199                         if(!!$('#calendar').fullCalendar) 
     265                        if(!!$('#calendar').fullCalendar){ 
    200266                                Calendar.rerenderView(true); 
     267                                contentMenu(); 
     268                        } 
    201269                        //Atualiza a listagem de eventos apenas se estiver na aba de listagem 
    202270                        if((typeof($tabs) != "undefined") && $tabs.tabs('option' ,'selected') != 0) 
     
    334402                                        sendTime: objEvent.sendTime, 
    335403                                        schedulable: { 
    336                                                 startTime: dateCalendar.formatDate(Timezone.setDateTimezone(new Date(time), objEvent.schedulable.timezone, true), User.preferences.hourFormat), 
     404                                                startTime: dateCalendar.formatDate(Timezone.getDateEvent(new Date(time), objEvent.schedulable.timezone, objEvent.schedulable.DayLigth, 'startTime'), User.preferences.hourFormat), 
    337405                                                id: objEvent.schedulable.id, 
    338406                                                summary: objEvent.schedulable.summary, 
     
    363431                        return { 
    364432                                participant : meAttendee(form.attendee),  
    365                                 startTime: Timezone.getDateUTC(Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ), tzId).getTime(), 
    366                                 endTime:  parseInt(Timezone.getDateUTC(Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ), tzId).getTime()) + (!!form.allDay ? 86400000 : 0) , 
     433                                startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd hh:mm:00'), 
     434                                endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd hh:mm:00'), 
    367435                                allDay: ( !!form.allDay ? 1 : 0 ), 
    368436                                schedulable: form.idEvent 
     
    450518                                                                        participant: me.id, 
    451519                                                                        type: 'suggestion', 
    452                                                                         startTime: Timezone.getDateUTC(Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ), tzId).getTime(), 
    453                                                                         endTime:  parseInt(Timezone.getDateUTC(Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ), tzId).getTime()) + (!!form.allDay ? 86400000 : 0) , 
     520                                                                        startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd hh:mm:00'), 
     521                                                                        endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd hh:mm:00'), 
    454522                                                                        allDay: ( !!form.allDay ? 1 : 0 ), 
    455523                                                                        schedulable: form.idEvent 
     
    484552        var res = $.map(evtObj, function( objEvent ){                    
    485553                     
     554                        if(!(typeof(objEvent) == 'object')) 
     555                                return (null); 
     556                         
    486557                        var participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy(User.me); 
    487558                         
     
    506577                            timezones: Timezone.timezones, 
    507578                            startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
    508                             startHour: dateCalendar.formatDate(Timezone.setDateTimezone(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar), User.preferences.hourFormat), 
     579                            startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
    509580                            endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
    510                             endHour: dateCalendar.formatDate(Timezone.setDateTimezone(new Date(parseInt(objEvent.endTime)), objEvent.timezone, objEvent.calendar), User.preferences.hourFormat), 
     581                            endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
    511582                            allDay: !!parseInt( objEvent.allDay ), 
    512583                                attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     
    566637                            alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 
    567638                            status: !!participantInfo.user ? participantInfo.user.status : 1, 
    568                                 acl: !!participantInfo.user ? constantAcl(participantInfo.user.acl) : constantAcl('rowi'), 
    569                             me: !!participantInfo.user ? DataLayer.merge(participantInfo.user, me) : DataLayer.merge(me, {acl: 'rowi', delegatedFrom: 0, receiveNotification: 1}), 
     639                                acl: !!participantInfo.user ? constantAcl(participantInfo.user.acl) : constantAcl( 'rowi' ), 
     640                                isShared: objEvent.calendar && Calendar.signatureOf[objEvent.calendar].isOwner ? true : false, 
     641                            me: !!participantInfo.user ? DataLayer.merge(participantInfo.user, me) : DataLayer.merge(this.isShared ? this.organizer :  me, {acl:  this.isShared ? 'rowi' : Calendar.signatureOf[objEvent.calendar].permission.aclValues, delegatedFrom: 0, receiveNotification: 1}), 
    570642                                delegatedFrom: delegatedFrom, 
    571643                                statusParticipants: statusParticipants 
     
    598670                    return { 
    599671                              "class": form["class"], 
    600                                   startTime: Timezone.getDateUTC(Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ), tzId).getTime(), 
    601                                   endTime:  parseInt(Timezone.getDateUTC(Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ), tzId).getTime()) + (!!form.allDay ? 86400000 : 0) , 
     672                                  startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd hh:mm:00'), 
     673                                  endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd hh:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
    602674                                  allDay: ( !!form.allDay ? 1 : 0 ), 
    603675                              id: form.idEvent, 
     
    837909 
    838910        $.map(filtered, function( evt ){ 
     911                 
     912                if(!(typeof(evt) == 'object') || (evt.id.indexOf('java') >= 0)) 
     913                        return (null); 
    839914 
    840915                evt.calendar = evt.calendar || "1"; 
     
    845920                var calendar = DataLayer.get('calendar', evt.calendar); 
    846921                 
    847                 var eventEditable = function(){ 
    848                         var attendee = {}; 
    849                         for(var i = 0; i < evt.participants.length; i++){ 
    850                                 attendee = DataLayer.get('participant', evt.participants[i]); 
    851                                         if(attendee.user == User.me.id) 
    852                                                 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? true : false; 
     922                var eventEditable = function(idEvent){ 
     923                        if(Calendar.signatureOf[calendar.id].isOwner == "1"){ 
     924                                var attendee = {}; 
     925                                for(var i = 0; i < evt.participants.length; i++){ 
     926                                        attendee = DataLayer.get('participant', evt.participants[i]); 
     927                                                if(attendee.user == User.me.id) 
     928                                                        return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? {selectable: true, className: 'fullcalendar-context-menu  event-id-'+idEvent} : {editable: false, className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idEvent}; 
     929                                } 
     930                                return {editable: false, className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idEvent,  selectable: true}; 
    853931                        } 
     932                        else{ 
     933                                var aclSignature = Calendar.signatureOf[calendar.id].permission; 
     934                                 
     935                                var mountClass =  function(acl){ 
     936                                        var returns = "" 
     937                                        returns += acl['write'] ? "" :  'blocked-event-permision '; 
     938                                        returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read']  ?  'fullcalendar-context-menu ' : ''); 
     939                                        returns += 'event-id-'+idEvent; 
     940                                        return returns; 
     941                                }                                
     942                                return DataLayer.merge({ 
     943                                        editable: aclSignature.acl['write'], 
     944                                        disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 
     945                                        disableDragging  : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), 
     946                                        className: mountClass(aclSignature.acl) 
     947                                }, aclSignature.acl['busy'] ? {title: 'Ocupado', selectable: false } : {selectable: true}); 
     948                        } 
     949                         
    854950                } 
    855951                   
    856952                grouped[ evt.calendar ].push( DataLayer.merge({ id: evt.URI || evt.id, 
    857953                                                title: Encoder.htmlDecode(evt.summary), 
    858                                                 start: Timezone.getDateTimezone(new Date(parseInt( evt.startTime )), calendar.timezone, false), 
    859                                                 end:   Timezone.getDateTimezone(new Date(parseInt( evt.endTime ) - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, false ), 
    860                                                 allDay: parseInt( evt.allDay ) }, eventEditable() ? {} : {editable: false, className: 'blocked-event-permision'}) ); 
     954                                                start: Timezone.getDateCalendar(new Date(parseInt( evt.startTime )), calendar.timezone,  !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
     955                                                end:   Timezone.getDateCalendar(new Date(parseInt( evt.endTime ) - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 
     956                                                allDay: parseInt( evt.allDay ) }, eventEditable(evt.id) ) ); 
    861957        }); 
    862958 
     
    871967                        filter.end = new Date( filter.end * 1000 ); 
    872968 
     969                var timezone = {}; 
     970                for(var i in Calendar.signatureOf) 
     971                        timezone[i] = Calendar.signatureOf[i].calendar.timezone; 
     972                 
    873973                return { filter: ["AND",  
    874974 
    875                                         [ ">=", "rangeStart", filter.start.toString( "dd-MM-yyyy" ) ], 
    876                                         [ "<=", "rangeEnd", filter.end.toString( "dd-MM-yyyy" ) ], 
     975                                        [ ">=", "rangeStart", filter.start.getTime() ], 
     976                                        [ "<=", "rangeEnd", filter.end.getTime() ], 
    877977                                        [ "IN", "calendar", Calendar.calendarIds ] 
    878978 
    879979                                  ],  
    880                  criteria: { deepness: 2 } } 
     980                 criteria: { deepness: 2, timezones: timezone } } 
    881981    } 
    882982}); 
  • trunk/prototype/modules/calendar/js/helpers.js

    r5530 r5592  
    5959*/ 
    6060 
    61 function eventDetails( objEvent, decoded, path) 
     61function eventDetails( objEvent, decoded, path, isMail) 
    6262{ 
    6363        if(path == undefined) 
     
    6767            objEvent = DataLayer.decode( "schedulable:calendar", objEvent ); 
    6868 
     69        if(!isMail) 
    6970        objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 
    7071         
     
    730731                                        if (user){ 
    731732                                                if (!skipAddNewLine) { 
    732                                                         user[0].id =  DataLayer.put('participant', {user: user[0].id, isExternal: isExternal}); 
     733                                                        user[0].id =  DataLayer.put('participant', {user: user[0].id, isExternal: isExternal, acl: 'r'}); 
     734                                                        user[0].acl = objEvent.acl 
     735 
    733736                                                        blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 
    734                                                                 DataLayer.render(path+'templates/participants_add_itemlist.ejs', {user:user, acl: objEvent.acl}) 
     737                                                                DataLayer.render(path+'templates/participants_add_itemlist.ejs', user) 
    735738                                                        ) 
    736739                                                        .scrollTo('max'); 
     
    794797                        * Trata a busca de usuários para adição de participantes 
    795798                        */ 
     799                        blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function(event) { 
     800                                blkAddAtendee.find('.add-attendee-search input').keydown(); 
     801                        }); 
     802                         
     803                         
    796804                        blkAddAtendee.find('.add-attendee-search input').keydown(function(event) { 
    797805 
    798                                 if(event.keyCode == '13') {                      
     806                                if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {                      
    799807                                        var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 
    800808 
     
    899907                sequentialUploads: true, 
    900908                add: function (e, data) { 
    901                         if(data.files[0].size < 30000000) 
     909                        if(data.files[0].size < 2000000) 
    902910                                data.submit(); 
    903911                }, 
     
    909917                                        attach.fileName = file.name.substr(0, 6) + file.name.substr(file.name.length-4, file.name.length); 
    910918                                attach.fileSize = formatBytes(file.size); 
    911                                 if(file.size > 30000000) 
     919                                if(file.size > 2000000) 
    912920                                        attach.error = 'Tamanho de arquivo nao permitido!!' 
    913921                                 
    914922                                $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', {file : attach})); 
    915923                                 
    916                                 if(file.size < 30000000){ 
     924                                if(file.size < 2000000){ 
    917925                                        $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 
    918926                                        $('.attachments-list').find('[type=file]').addClass('hidden'); 
     
    10341042                        canDiscardEventDialog = false; 
    10351043        });      
    1036                  
    1037                  
    1038                 UI.dialogs.addEvent.dialog('open'); 
     1044         
     1045        if(objEvent.isShared){ 
     1046                 
     1047                var acls = Calendar.signatureOf[objEvent.calendar].permission.acl; 
     1048                 
     1049                if(!acls.write){ 
     1050                        UI.dialogs.addEvent.find(':input').attr('disabled', 'disabled'); 
     1051                        UI.dialogs.addEvent.find('.button').hide(); 
     1052                } 
     1053                 
     1054                if(acls.remove) 
     1055                        UI.dialogs.addEvent.find('.button.remove').show(); 
     1056                 
     1057                UI.dialogs.addEvent.find('.button.cancel').show(); 
     1058                 
     1059         
     1060        } 
     1061         
     1062                 
     1063        UI.dialogs.addEvent.dialog('open'); 
    10391064} 
    10401065 
     
    13681393} 
    13691394 
     1395function remove_event(eventId){ 
     1396        $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 
     1397                'type':     'question', 
     1398                'overlay_opacity': '0.5', 
     1399                'buttons':  ['Sim', 'Não'], 
     1400                'onClose':  function(clicked) { 
     1401                        if(clicked == 'Sim'){ 
     1402                                DataLayer.remove('schedulable', ''+eventId); 
     1403                                window.setTimeout(function() {DataLayer.commit();}, 500); 
     1404                        } 
     1405                } 
     1406        });      
     1407} 
     1408 
     1409 
    13701410function remove_calendar(){ 
    13711411        /* Pode ser assim $('.cal-list-options-btn.ui-state-active').attr('class').replace(/[a-zA-Z-]+/g, ''); */ 
     
    13771417                        if(clicked == 'Sim'){ 
    13781418                                var idCalendar =  $('.cal-list-options-btn.ui-state-active').attr('class').match(/[0-9]+/g); 
    1379                                 var signature = ''; 
    1380                                 for(var i =0; i < Calendar.signatures.length; i++){ 
    1381                                         if(idCalendar[0] == Calendar.signatures[i].calendar.id){ 
    1382                                                 signature = Calendar.signatures[i].id; 
    1383                                                 break; 
    1384                                         } 
    1385                                 } 
    1386                                 DataLayer.remove('calendarSignature', signature); 
     1419                                 
     1420                                DataLayer.remove('calendarSignature', Calendar.signatureOf[idCalendar[0]].id ); 
     1421                                 
    13871422                                if(idCalendar == User.preferences.defaultCalendar) 
    13881423                                        DataLayer.remove( 'modulePreference', User.preferenceIds['defaultCalendar']); 
     
    14281463        });          
    14291464         
    1430          
    1431         meu_container.find(".button.new").button({ 
     1465        meu_container.find(".button.new-calendar").button({ 
    14321466                icons: { 
    14331467            primary: "ui-icon-plus" 
     
    14621496                        }) 
    14631497                        .click(function(){ 
    1464                                 meu_container.find(".button.new").qtip('destroy'); 
     1498                                meu_container.find(".button.new-calendar").qtip('destroy'); 
    14651499                        }); 
    14661500                        //TODO emplementar tratamento de duplicação de valores no location 
     
    15431577            });    
    15441578         
     1579                meu_container.find(".button.new-calendar-shared").button({ 
     1580                icons: { 
     1581            primary: "ui-icon-plus" 
     1582        }, 
     1583        text: false 
     1584                }).click(function (event) { 
     1585                        show_modal_search_shared(); 
     1586                }); 
     1587                 
     1588                 
     1589                //TODO Implementar ocultar agendas. 
     1590                meu_container.find('.title-signed-calendars').click(function(evt){ 
     1591                        var status = $(this).parent().find('.status-list-shared'); 
     1592                         
     1593                        if(status.hasClass('ui-icon-triangle-1-s')) 
     1594                                status.removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e'); 
     1595                        else 
     1596                                status.removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s'); 
     1597                }); 
     1598                 
    15451599            $('.calendar-view').click(function(evt){ 
    15461600                        if($tabs.tabs('option' ,'selected') == 1){ 
     
    17151769                case 'basicDay': 
    17161770                case 'day': 
    1717                         rangeStart = new Date().add({days: page_index}).toString("yyyy-MM-dd"); 
     1771                        rangeStart = new Date().add({days: page_index}).getTime(); 
    17181772                        rangeEnd = rangeStart; 
    17191773                         break; 
     
    17221776                        var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]);  
    17231777                        var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]);  
    1724                         rangeStart = dateStart.add({days: (7 * page_index)}).toString("yyyy-MM-dd"); 
    1725                         rangeEnd = dateEnd.add({days: (7 * page_index)+7}).toString("yyyy-MM-dd"); 
     1778                        rangeStart = dateStart.add({days: (7 * page_index)}).getTime(); 
     1779                        rangeEnd = dateEnd.add({days: (7 * page_index)+7}).getTime(); 
    17261780                        break; 
    17271781                case 'month': 
    1728                         var date = new Date().add({months: page_index})  
    1729                         rangeStart = date.moveToFirstDayOfMonth().toString("yyyy-MM-dd"); 
    1730                         rangeEnd = date.moveToLastDayOfMonth().toString("yyyy-MM-dd"); 
     1782                        var date = Date.today().add({months: page_index})  
     1783                        rangeStart = date.moveToFirstDayOfMonth().getTime(); 
     1784                        rangeEnd = date.moveToLastDayOfMonth().getTime(); 
    17311785                         break; 
    17321786                case 'year': 
     
    17371791                        if(dateEnd.getMonth() != 11) 
    17381792                                dateEnd.moveToMonth(11)  
    1739                          rangeStart =    dateStart.moveToFirstDayOfMonth().toString("yyyy-MM-dd"); 
    1740                          rangeEnd = dateEnd.moveToLastDayOfMonth().toString("yyyy-MM-dd"); 
     1793                         rangeStart =    dateStart.moveToFirstDayOfMonth().getTime(); 
     1794                         rangeEnd = dateEnd.moveToLastDayOfMonth().getTime(); 
    17411795                           break;   
    17421796                        } 
     
    18721926    }); 
    18731927} 
     1928 
     1929function copyAndMoveTo(calendar, eventId){ 
     1930 
     1931    var type = $('.calendar-copy-move input[name="typeEvent"]').val(); 
     1932 
     1933        var schedulable = DataLayer.get('schedulable' , ''+eventId); 
     1934         
     1935        if(typeof(schedulable) == "array") 
     1936                schedulable = schedulable[0]; 
     1937         
     1938        //Move eventos entre agendas 
     1939        if(!!parseInt(type)){ 
     1940                 
     1941                schedulable.calendar = calendar;         
     1942                DataLayer.put('schedulable', schedulable); 
     1943         
     1944                DataLayer.commit(); 
     1945        //copia eventos entre agendas 
     1946        }else{ 
     1947         
     1948                var newSchedulable = schedulable; 
     1949         
     1950                delete newSchedulable.id; 
     1951                delete newSchedulable.uid; 
     1952                delete newSchedulable.sequence; 
     1953                delete newSchedulable.dtstamp; 
     1954                delete schedulable.calendar; 
     1955                 
     1956                schedulable.calendar = calendar;         
     1957         
     1958                newSchedulable.endTime = new Date(parseInt(newSchedulable.endTime) - (newSchedulable.allDay ? 86400000 : 0)).toString('yyyy-MM-dd hh:mm:00'); 
     1959                newSchedulable.startTime = new Date(parseInt(newSchedulable.startTime)).toString('yyyy-MM-dd hh:mm:00');  
     1960                 
     1961                var participants = DataLayer.copy(schedulable.participants); 
     1962                delete schedulable.participants; 
     1963                 
     1964                schedulable.participants =  $.map( participants, function( attendee, i ){ 
     1965                         
     1966                        var participant = DataLayer.get('participant', attendee); 
     1967                         
     1968                        if(typeof(participant) == 'array') 
     1969                                participant = participant[0]; 
     1970         
     1971                        delete participant.id; 
     1972                         
     1973                        return participant ; 
     1974        }); 
     1975         
     1976         
     1977         
     1978                DataLayer.put('schedulable', newSchedulable); 
     1979 
     1980        } 
     1981         
     1982 
     1983} 
  • trunk/prototype/modules/calendar/js/init.js

    r5510 r5592  
    9797                } 
    9898        }); 
    99                                  
     99         
     100        //efetua pesquisas pelo click na lupa de pesquisa 
     101        $('.main-search span.ui-icon-search').click(function(event){ 
     102                        add_events_list($(this).parent().find('input.search').val()); 
     103                        $(this).parent().find('input.search').val(); 
     104        }); 
     105         
    100106        $('.block-horizontal-toolbox .main-config-menu').menu({ 
    101107                content: $('.main-config-menu-content').html(), 
     
    226232 
    227233                eventDrop: function( event ){ 
     234                        if(!event.disableDragging){ 
     235                                DataLayer.put( "schedulable:calendar", event ); 
     236 
     237                                event.editable = false; 
     238                                event.className = "blocked-event"; 
     239                                calendar.fullCalendar( 'updateEvent', event ); 
     240                        }else 
     241                                Calendar.rerenderView(true); 
     242                }, 
     243 
     244                eventResize: function( event ){ 
     245                        if(!event.disableDragging){ 
    228246                        DataLayer.put( "schedulable:calendar", event ); 
    229247 
     
    231249                        event.className = "blocked-event"; 
    232250                        calendar.fullCalendar( 'updateEvent', event ); 
    233                 }, 
    234  
    235                 eventResize: function( event ){ 
    236                         DataLayer.put( "schedulable:calendar", event ); 
    237  
    238                         event.editable = false; 
    239                         event.className = "blocked-event"; 
    240                         calendar.fullCalendar( 'updateEvent', event ); 
     251                        }else 
     252                                Calendar.rerenderView(true); 
    241253                }, 
    242254 
    243255                eventClick: function( evt, event, view ){ 
    244                         eventDetails( DataLayer.get( "schedulable", evt.id), true); 
     256                        if(evt.selectable) 
     257                                eventDetails( DataLayer.get( "schedulable", evt.id), true); 
    245258                } 
    246259        }, dateCalendar)); 
    247            
     260  
     261        contentMenu(); 
     262          
     263         $('body').click(function(){ 
     264                $('#context-menu-event').html(''); 
     265         }); 
     266          
    248267        if($(window).height() < $('body').height()){ 
    249268                var hei = $('body').height() - $(window).height(); 
  • trunk/prototype/modules/calendar/js/timezone.js

    r5550 r5592  
    66 
    77var objTime = DataLayer.dispatch( "timezones" ); 
     8 
    89Timezone = { 
    9    
    10         daylightSaving:  isNaN(objTime.isDaylightSaving) ? parseInt( objTime.isDaylightSaving ) : 0, 
     10        currentOffset : new Date().getUTCOffset(), 
     11        daylightSaving: isNaN(parseInt( objTime.isDaylightSaving )) ? 0 : parseInt( objTime.isDaylightSaving ), 
    1112 
    1213        timezones: objTime.timezones,      
     
    1617 
    1718        }, 
    18  
    19         compareTZID: function( fromTZID, toTZID ){ 
    20  
    21                 return( this.timezones[ fromTZID ] === this.timezones[ toTZID ] ); 
    22  
    23         }, 
    24  
    25         checkTimezoneCalendar: function(idCalendar, tzId){ 
    26  
    27                 return idCalendar && this.compareTZID( DataLayer.get('calendar', idCalendar).timezone, tzId ); 
    28  
    29         }, 
    3019         
    31         setDateTimezone: function (date, tzId, idCalendar){ 
    32          
    33                 if( !!!tzId || this.checkTimezoneCalendar(idCalendar, tzId) ) 
    34                         return date; 
    35  
    36                 var timezone = this.timezone( tzId ); 
    37  
    38                 var timezoneOffset = parseInt(timezone.substr(2)) - this.daylightSaving * 100; 
    39  
    40                 var timeCurrent = parseInt((date.getTimezoneOffset()/60)+'00') * ( ( timezone.charAt(0) != date.getUTCOffset().charAt(0) )? 1 : -1 ); 
    41  
    42                 var times = timezoneOffset + timeCurrent; 
    43  
    44                 if(times == 0) 
    45                         return date;             
    46                 else if(times > 0) 
    47                         return date.setTimezoneOffset('-0'+(times)); 
    48                 else 
    49                         return date.setTimezoneOffset('+0'+((times * -1))); 
    50         }, 
    51  
    52         getDateTimezone: function(date, tzId, recursive){ 
    53  
     20        getDateCalendar: function(date, tzId, isDay){ 
    5421                var timezone = this.timezone( tzId ); 
    5522 
     
    5724                        return date; 
    5825 
    59                 var currentTimezone = parseInt((date.getTimezoneOffset()/60)+'00'); 
     26                date = this.normalizeDate(date, false, true); 
    6027 
    61                 var timezoneOffset = parseInt(timezone.substr(2)) - this.daylightSaving * 100; 
    62  
    63                 var times =  timezoneOffset - currentTimezone; 
    64  
    65                 if(times == 0){ 
    66                         if((timezone.charAt(0) == date.getUTCOffset().charAt(0)) && recursive) 
    67                                 return date.setTimezoneOffset( timezone.charAt(0)+'0'+(currentTimezone)); 
    68  
    69                         return  date; 
    70                 }else if (times > 0) 
    71                         return date.setTimezoneOffset('+0'+(times)); 
    72                 else{ 
    73                         return date.setTimezoneOffset('-0'+((times * -1) + (currentTimezone * 2))); 
    74                 } 
     28                return date.add({hours: parseInt(timezone.charAt(0) + timezone.charAt(2))  +  parseInt(isDay) }); 
    7529        }, 
    7630         
    77         getDateUTC: function (date, tzId){ 
     31        getDateEvent: function(date, tzId, idCalendar, isDay, type){ 
     32                var timezone = this.timezone( tzId ); 
     33                var timezoneCurrent = this.timezone(DataLayer.get('calendar', idCalendar).timezone); 
    7834 
    79                         var timezone = this.timezone( tzId ), currentTimezone = parseInt(timezone.substr(2)) - this.daylightSaving * 100; 
    80                         return(date.setTimezoneOffset(timezone.charAt(0)+'0'+currentTimezone)); 
     35                if(timezone == timezoneCurrent) 
     36                        return date; 
     37                 
     38                var to = parseInt(timezone.charAt(0) + timezone.charAt(2)) + parseInt(isDay.event[type]); 
     39                var current = parseInt(timezoneCurrent.charAt(0) + timezoneCurrent.charAt(2)) + parseInt(isDay.calendar[type]); 
     40                 
     41                if(timezone.charAt(0) == timezoneCurrent.charAt(0)) 
     42                        hours =   (  to + (current * - 1)) ; 
     43                else 
     44                        hours =  to + (( current ) * (timezone.charAt(0) ==  '+'  ? -1 : 1)) ; 
     45                 
     46                return date.add({hours: hours}); 
    8147        }, 
    82  
    83         createDateTimezone: function(date, tzId, idCalendar){                    
    84                 if(this.checkTimezoneCalendar(idCalendar, tzId)) 
    85                         return this.getDateTimezone(date, tzId, true); 
    86  
    87                 var times = 0, timezone = this.timezone( tzId ); 
    88                  
    89                 if(timezone.charAt(0) == '+') 
    90                         times = parseInt(timezone.substr(2)) - parseInt((date.getTimezoneOffset()/60)+'00'); 
    91                 else 
    92                         times = (parseInt(timezone.substr(2)) + parseInt((date.getTimezoneOffset()/60)+'00')) * (-1); 
    93                 if(times == 0) 
    94                         return date.setTimezoneOffset('0000'); 
    95                 else if (times > 0) 
    96                         return date.setTimezoneOffset('+0'+times); 
    97                 else 
    98                         return date.setTimezoneOffset('-0'+(times * -1)); 
     48         
     49        normalizeDate: function(date, current, inverse){ 
     50                var offsetDate = !!current ? this.currentOffset : date.getUTCOffset(); 
     51                return date.add({hours: (parseInt(offsetDate.charAt(0) + offsetDate.charAt(2)) * (!!inverse ? -1 : 1) )}); 
    9952        } 
    100  
    101  
    102  
    10353} 
Note: See TracChangeset for help on using the changeset viewer.