Changeset 5409


Ignore:
Timestamp:
01/21/12 00:18:54 (12 years ago)
Author:
acoutinho
Message:

Ticket #2434 - Limpeza, melhorias e correcoes na camada javascript do novo modulo

Location:
trunk
Files:
2 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/inc/class.db_functions.inc.php

    r5394 r5409  
    410410                                        { 
    411411                                                $return = false; 
    412                                                 $output = unserialize($output); 
    413                                          
    414                                                 ob_start(); 
    415                                                 var_dump($output[0]);                                            
    416                                                 $l = ob_get_clean(); 
    417                                                 file_put_contents( "/tmp/acoutinho.log",  $l , FILE_APPEND); 
    418  
    419                                                  
    420                                                  
     412                                                $output = unserialize($output);                                                                          
    421413                                                foreach($output[0] as $key => &$value){ 
    422414                                                 
  • trunk/expressoMail1_2/index.php

    r5399 r5409  
    4545                                        <script type='text/javascript' src='../prototype/plugins/alphanumeric/jquery.alphanumeric.js'></script> 
    4646                                        <script type='text/javascript' src='../prototype/plugins/timepicker/localization/jquery-ui-timepicker-pt-BR.js'></script> 
     47                                        <script type='text/javascript' src='../prototype/modules/calendar/js/calendar.date.js'></script> 
    4748                                        <script type='text/javascript' src='../prototype/modules/calendar/js/helpers.js'></script> 
    4849                                        <script type='text/javascript' src='../prototype/modules/calendar/js/calendar.codecs.js'></script> 
     50                                        <script type='text/javascript' src='../prototype/modules/calendar/js/timezone.js'></script> 
    4951                                        <script type='text/javascript' src='../prototype/plugins/encoder/encoder.js'></script> 
    5052                                        <script type='text/javascript' src='../prototype/plugins/qtip/jquery.qtip-1.0.0-rc3.min.js'></script> 
  • trunk/expressoMail1_2/js/draw_api.js

    r5392 r5409  
    26092609                        DataLayer.dispatchPath = "../prototype/"; 
    26102610                        var path = "../prototype/modules/calendar/"; 
     2611                         
     2612                        var startEvent = new Date();   
     2613                        if(startEvent.toString('mm') < 30)  
     2614                                startEvent.add({minutes: (30 - parseInt(startEvent.toString('mm')))});  
     2615                        else  
     2616                                startEvent.add({hours: 1, minutes: '-'+startEvent.toString('mm')});  
     2617                        var endEvent = function(date){  
     2618                                if(!!User.preferences.defaultCalendar){  
     2619                                        return  parseInt(date.getTime()) +  
     2620                                                (       !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?   
     2621                                                        (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000) : 
     2622                                                        (User.preferences.defaultDuration * 60000) 
     2623                                                ); 
     2624                                }else  
     2625                                        return parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000);  
     2626                        };        
    26112627                        eventDetails({  
    26122628                                        summary : $("#subject_"+ID).text(), 
    26132629                                        description : $("#body_" + ID).text(), 
    2614                                         startTime: $.now(), 
    2615                                         endTime:!!User.preferences.defaultCalendar ? Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration != "" ? ($.now() + Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000) : (User.preferences.defaultDuration * 60000) 
    2616                                         : $.now() + (User.preferences.defaultDuration * 60000) 
     2630                                        startTime: startEvent.getTime(), 
     2631                                        endTime: endEvent(startEvent) 
    26172632                        }, true, path); 
    26182633                         
  • trunk/expressoMail1_2/js/main.js

    r5408 r5409  
    33883388 
    33893389 
    3390                                 var createDialog = function(isCorrentEvent){ 
     3390                                var createDialog = function(isCorrentEvent, propaget){ 
    33913391 
    33923392                                        if(!(!!isCorrentEvent)){ 
     
    34103410                                                                     success: function(msg){ 
    34113411 
    3412                                                                             msg = connector.unserialize(msg) == "ok" ? "Importado com sucesso para " : "Ocorreu um erro ao importar o evento para a agenda "; 
    3413  
    3414                                                                             alert( msg + $("#select-agenda option:selected").text() ); 
    3415                                                                              
    3416                                                                             $( this ).dialog( "close" ); 
     3412                                                                            var alt = ( (msg = connector.unserialize(msg)) == "ok") ? "Importado com sucesso para " : "Ocorreu um erro ao importar o evento para a agenda "; 
     3413                                                                            alert( alt + $("#select-agenda option:selected").text() ); 
    34173414                                                                    } 
    34183415                                                                }); 
    3419                                                         } 
     3416                                                         
     3417                                                                                                                        $( this ).dialog( "close" ); 
     3418                                                                                                                } 
    34203419                                                    } 
    34213420                                                 });                                     
     
    34353434                                                           if ($(".ui-dialog-buttonpane").find(".ui-button:last").children().html() == 'Atualizar'){ 
    34363435                                                                
    3437                                                                var isOk = DataLayer.put('participant', { id: ( DataLayer.get('participant', ['AND', ['=', 'user', User.me.id], ['=', 'schedulable', isCorrentEvent[0].schedulable]] ) )[0].id,  
     3436                                                                                                                            
     3437                                                                                                                            
     3438                                                               var isOk = propaget || DataLayer.put('participant', { id: ( DataLayer.get('participant', ['AND', ['=', 'user', User.me.id], ['=', 'schedulable', isCorrentEvent[0].schedulable]] ) )[0].id,  
    34383439                                                                                                         status: $("#select-status option:selected").val() }); 
    34393440 
     
    34653466                                        }, createDialog); 
    34663467                                }else{ 
    3467                                         createDialog(false); 
     3468                                        createDialog(true, true); 
    34683469                                } 
    34693470                }}); 
  • trunk/prototype/modules/calendar/css/layout.css

    r5399 r5409  
    433433} 
    434434.details-event-list p.input-group { margin: 7px 0 0 0; text-align: justify; } 
    435 .details-event-list p.input-group label { font-weight: bold; width: 13% } 
     435.details-event-list p.input-group label { font-weight: bold; width: 14% } 
    436436.details-event-list p.input-group .large { width: 85%; } 
    437437.fields-details-event-list { 
  • trunk/prototype/modules/calendar/js/calendar.codecs.js

    r5384 r5409  
    1 //TODO: recuperar esses valores no init do Calendar 
    21User = { 
    32   
    43    init: function(){ 
    5        
    6     this.moduleName = 'expressoCalendar'; 
    7         this.me = DataLayer.dispatch( "me" ); 
    8          
    9         var objTime = DataLayer.dispatch( "timezones" ); 
    10         this.timezones = objTime.timezones; 
    11         this.isDaylightSaving = objTime.isDaylightSaving; 
    12     this.lastView = 0; 
    13         this.load();       
     4                this.moduleName = 'expressoCalendar'; 
     5                this.me = DataLayer.dispatch( "me" ); 
     6                 
     7                var objTime = DataLayer.dispatch( "timezones" ); 
     8                this.timezones = objTime.timezones; 
     9                this.isDaylightSaving = objTime.isDaylightSaving; 
     10                this.load();       
    1411    }, 
    1512   
    1613    load: function(){ 
    1714 
    18         var defaultPreferences = { dateFormat: "dd/MM/yyyy", 
    19                 hourFormat: "HH:mm", 
    20                 defaultCalView: "month", 
    21                 defaultDuration: 30, 
    22                 backgroundColor: "36C", 
    23                 borderColor: "36C", 
    24                 fontColor: "fff", 
    25                 timezone: 'America/Sao_Paulo', 
    26                 weekStart: 'SUN' 
    27           }; 
    28  
    29         var pref = DataLayer.get( "modulePreference:detail", ['and',[ "=", "user", this.me.id ], [ "=", "module", this.moduleName ]] ); 
    30          
    31         this.preferences = $.isEmptyObject( pref.values ) ? defaultPreferences : pref.values; 
    32         this.preferenceIds = pref.ids; 
     15                var defaultPreferences = { dateFormat: "dd/MM/yyyy", 
     16                        hourFormat: "HH:mm", 
     17                        defaultCalView: "month", 
     18                        defaultDuration: 30, 
     19                        backgroundColor: "36C", 
     20                        borderColor: "36C", 
     21                        fontColor: "fff", 
     22                        timezone: 'America/Sao_Paulo', 
     23                        weekStart: 'SUN' 
     24                  }; 
     25 
     26                var pref = DataLayer.get( "modulePreference:detail", ['and',[ "=", "user", this.me.id ], [ "=", "module", this.moduleName ]] ); 
     27 
     28                this.preferences = DataLayer.merge( defaultPreferences, pref.values || {} ); 
     29                this.preferenceIds = pref.ids; 
    3330    } 
    3431} 
     
    4340DataLayer.codec( "calendarSignature", "calendar", { 
    4441   
    45       decoder: function(){ 
    46  
    47            
    48  
    49       }, 
     42        decoder: function(){}, 
    5043       
    51       encoder: function( signatures ){ 
    52  
    53         return $.map( signatures, function( signature ){ 
    54                
    55                   return { events: function( start, end, callback ){ 
    56                          
     44        encoder: function( signatures ){ 
     45 
     46                return $.map( signatures, function( signature ){ 
     47                        return { events: function( start, end, callback ){ 
    5748                                var viewKey = start + ':' + end; 
    58  
    59                                 if( Calendar.currentViewKey !== viewKey ) 
    60                                 { 
     49                                if( Calendar.currentViewKey !== viewKey ){ 
    6150                                    Calendar.currentViewKey = viewKey; 
    62  
    6351                                    Calendar.currentView = DataLayer.get( 'schedulable:calendar', { start: start, end: end } ); 
    6452                                } 
    65                                  
    6653                                var view = Calendar.currentView[ signature.calendar.id ]; 
    67                                  
    6854                                callback( view && !view.hidden ? view : [] ); 
    69  
    7055                           }, 
    7156 
     
    8368Calendar = { 
    8469   
    85       load: function(){ 
    86  
    87           this.signatures  = DataLayer.get("calendarSignature", {filter: ['=', 'user', User.me.id], criteria: {deepness: 2}}); 
    88           //this.signatures  = DataLayer.get( "calendarSignature", [ "=", "user", User.me.id ] ); 
     70        load: function(){ 
     71                this.lastView = 0; 
     72                this.signatures  = DataLayer.get("calendarSignature", {filter: ['=', 'user', User.me.id], criteria: {deepness: 2}}); 
    8973           
    90           var prevSources = this.sources; 
    91  
    92           this.sources = DataLayer.encode( "calendarSignature:calendar", this.signatures ); 
    93  
    94           if( prevSources ) 
    95           {      
    96               var newSources = DataLayer.diff( { 'diff': prevSources }, { 'diff': this.sources } ).diff; 
    97   
    98                for( var i = 0; i < newSources.length; i++ ) 
    99                   $('#calendar').fullCalendar( 'addEventSource', newSources[i] ); 
    100              
    101               var removeSources = DataLayer.diff( { 'diff': newSources }, { 'diff': prevSources } ).diff; 
    102  
    103               for( var i = 0; i < removeSources.length; i++ ) 
    104                   $('#calendar').fullCalendar( 'removeEventSource', removeSources[i] ); 
    105           } 
    106  
    107           this.calendarIds = [], this.signatureOf = {}, this.calendars = []; 
    108  
    109           for( var i = 0; i < this.signatures.length; i++ ) 
    110           { 
    111               this.signatureOf[ this.calendarIds[i] = ( this.calendars[ this.calendars.length ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
    112           } 
    113           this.rerenderView = function(){ 
     74                var prevSources = this.sources; 
     75 
     76                this.sources = DataLayer.encode( "calendarSignature:calendar", this.signatures ); 
     77 
     78                if( prevSources ){      
     79                        var newSources = DataLayer.diff( { 'diff': prevSources }, { 'diff': this.sources } ).diff; 
     80 
     81                        for( var i = 0; i < newSources.length; i++ ) 
     82                                $('#calendar').fullCalendar( 'addEventSource', newSources[i] ); 
     83 
     84                        var removeSources = DataLayer.diff( { 'diff': newSources }, { 'diff': prevSources } ).diff; 
     85 
     86                        for( var i = 0; i < removeSources.length; i++ ) 
     87                                $('#calendar').fullCalendar( 'removeEventSource', removeSources[i] ); 
     88                } 
     89 
     90                this.calendarIds = [], this.signatureOf = {}, this.calendars = [], this.calendarOf= {}; 
     91 
     92                for( var i = 0; i < this.signatures.length; i++ ){ 
     93                        this.signatureOf[ ( this.calendarOf[ this.calendarIds[i] = ( this.calendars[ this.calendars.length ] = this.signatures[i].calendar ).id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
     94                } 
     95 
    11496                delete Calendar.currentViewKey; 
    115                 $('#calendar').fullCalendar( 'refetchEvents' ); 
    116                  
    117                 var calendarNotSelected = getNotSelectedCalendars(); 
     97        }, 
     98 
     99        rerenderView: function(force){ 
     100 
     101                if(force){ 
     102                        delete Calendar.currentViewKey; 
     103                        $('#calendar').fullCalendar( 'refetchEvents' ); 
     104                } 
     105 
     106                var calendarNotSelected = getSelectedCalendars( true ); 
    118107                for(var i = 0; i < calendarNotSelected.length; i++) 
    119108                        if(!!Calendar.currentView[ calendarNotSelected[i] ]) 
    120109                                Calendar.currentView[ calendarNotSelected[i] ].hidden = true; 
    121          
    122                 //Necessita ser chamado novamente para atualizar os eventos na tela para o usuário 
    123                 //de acordo com as a agendas selecionadas 
     110 
    124111                $('#calendar').fullCalendar( 'refetchEvents' );  
    125           }; 
    126            
    127           delete Calendar.currentViewKey; 
    128       } 
     112        } 
    129113} 
    130114 
     
    132116        load: function(){ 
    133117                var eventsDay = DataLayer.get('alarm:schedulable',['=', 'date', new Date().toString("yyyy-MM-dd")]); 
    134  
    135118                for(var i = 0; i < eventsDay.length; i++){ 
    136119                        this.addAlarm( eventsDay[i] ); 
     
    155138                 
    156139                var res = $.map(evtObj, function( form ){ 
     140 
    157141                        var returns = []; 
    158                         var cont = 0; 
    159                         for (var name in form){ 
    160                                 returns[cont] = { 
     142 
     143                        for (var name in form) 
     144                                returns[ returns.length ] = { 
    161145                                        name: name, 
    162146                                        user: User.me.id, 
    163147                                        value: form[name], 
    164                                         module: User.moduleName 
     148                                        module: User.moduleName, 
     149                                        id: User.preferenceIds[ name ] || undefined 
    165150                                }; 
    166                                 if(typeof(User.preferenceIds[ name ]) != 'undefined') 
    167                                         returns[cont].id = User.preferenceIds[ name ]; 
    168                                 cont++; 
    169                         } 
    170                 return [returns]; 
     151 
     152                        return [returns]; 
    171153                }); 
    172154         
     
    175157 
    176158    encoder: function( evtObj ){ 
    177                 var val = {}; 
    178                 var id = {} 
     159                var val = {}, id = {}; 
    179160                for (var i in evtObj){ 
    180                         val[evtObj[i].name] = evtObj[i].value;  
    181                         id[evtObj[i].name] = evtObj[i].id;  
     161                         
     162                        if( evtObj[i].value && evtObj[i].id ) 
     163                        { 
     164                            val[evtObj[i].name] = evtObj[i].value; 
     165                            id[evtObj[i].name] = evtObj[i].id; 
     166                        } 
    182167                } 
    183168                return {values: val,ids: id}; 
     
    192177isValidCalback = false; 
    193178 
    194  
     179/*Todo Melhorias serão feitas na API*/ 
    195180//DataLayer.poll( "schedulable" ); 
    196181 
     
    199184    if( status === 'serverclient' ){ 
    200185                DataLayer.commit( false, false, function(){      
    201                         Calendar.rerenderView(); 
     186                        if(!!$('#calendar').fullCalendar) 
     187                                Calendar.rerenderView(true); 
    202188                        //Atualiza a listagem de eventos apenas se estiver na aba de listagem 
    203                         if($tabs.tabs('option' ,'selected') == 1) 
    204                                 pageselectCallback("", 0); 
     189                        if((typeof($tabs) != "undefined") && $tabs.tabs('option' ,'selected') != 0) 
     190                                pageselectCallback($('.events-list-win.active [name=keyword]').val(), 0); 
     191                         
    205192                }); 
    206193    } 
     
    218205                                } 
    219206                        }); 
    220                         isValidCalback = false; 
    221207                }else if(updateData == false){ 
    222208                        $.Zebra_Dialog('Erro ao importar evento(s)!', { 
     
    229215DataLayer.listen( "calendarSignature", function( status ){ 
    230216 
    231     switch( status ) 
    232     { 
    233       case 'serverclient':  DataLayer.commit( false, false, function( received ){ 
    234  
    235           delete Calendar.currentViewKey; 
    236  
    237           Calendar.load(); 
    238           refresh_calendars(); 
    239       }); 
    240       break; 
    241       case 'client':   
    242       break; 
     217    switch( status ){ 
     218                case 'serverclient':  DataLayer.commit( false, false, function( received ){ 
     219                        delete Calendar.currentViewKey; 
     220                        Calendar.load(); 
     221                        refresh_calendars(); 
     222                }); 
     223                break; 
     224                case 'client':   
     225                break; 
    243226    } 
    244227}); 
     
    246229DataLayer.listen( "modulePreference", function( status ){ 
    247230 
    248     switch( status ) 
    249     { 
    250         case 'serverclient':  DataLayer.commit( false, false, function(){ 
    251  
    252             User.load(); 
    253  
    254         }); 
    255         break; 
    256         case 'client':   
    257         break; 
    258     } 
    259  
    260 }); 
    261  
    262 // DataLayer.listen( "calendar", function( status ){ 
    263 //  
    264 //     if( status === 'serverclient' ) 
    265 //     { 
    266 //      DataLayer.commit( false, false, function(){  
    267 //  
    268 //        $('#calendar').fullCalendar( 'refetchEvents' ); 
    269 //  
    270 //      }); 
    271 //     } 
    272 //  
    273 // }); 
     231    switch( status ){ 
     232                case 'serverclient':  DataLayer.commit( false, false, function(){ 
     233                        User.load(); 
     234                }); 
     235                break; 
     236                case 'client':   
     237                break; 
     238    } 
     239 
     240}); 
    274241 
    275242DataLayer.listen( "alarm", function( created, updated, deleted ){ 
     
    277244}); 
    278245 
    279 DataLayer.listen( "calendar", function( status, updateData ){ 
    280  
    281       if (updateData === false) 
    282         switch( status ) 
    283         { 
    284           case 'serverclient':  DataLayer.commit( false, false, function(){ 
     246/*DataLayer.listen( "calendar", function( status, updateData ){ 
     247 
     248    if (updateData === false) 
     249        switch( status ){ 
     250                case 'serverclient':  DataLayer.commit( false, false, function(){ 
    285251             
    286               Calendar.load(); 
    287               refresh_calendars(); 
     252                        Calendar.load(); 
     253                        refresh_calendars(); 
    288254             
    289           }); 
    290           break; 
    291           case 'client':   
    292           break; 
    293     } 
    294 }); 
     255                }); 
     256                break; 
     257                case 'client':   
     258                break; 
     259    } 
     260});*/ 
    295261 
    296262DataLayer.codec( "calendarSignature", "configure", { 
     
    306272                                user: User.me.id,        
    307273                                calendar: { 
    308                                         id: DataLayer.get('calendarSignature', form.signature).calendar, 
     274                                        id: Calendar.signatureOf[form.signature].calendar.id, 
    309275                                        name: Encoder.htmlEncode(form.name), 
    310276                                        description: Encoder.htmlEncode(form.description), 
     
    323289                                msgAlarm: Encoder.htmlEncode(form.msgAlarm), 
    324290                                calendarSignatureAlarms: $.map( form.alarmTime || [], function( alarmTime, i ){ 
    325                                         if(form.alarmId[i] === "") 
    326                                                 return{type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i]}; 
    327                                         else 
    328                                                 return{type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i]}; 
     291                                        return (!!form.alarmId[i] ? 
     292                                                        {type: form.alarmType[i],       unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i]} : 
     293                                                        {type: form.alarmType[i],       unit: form.alarmUnit[i], time: form.alarmTime[i]}); 
    329294                                }) 
    330295                        }; 
     
    335300        }, 
    336301 
    337     encoder: function( evtObj ){ 
    338          
    339         } 
     302    encoder: function( evtObj ){} 
    340303}); 
    341304 
    342305DataLayer.codec( "alarm", "schedulable", { 
    343306 
    344     decoder: function( evtObj ){ 
    345                 return false; 
    346     }, 
     307    decoder: function( evtObj ){}, 
    347308         
    348309        encoder: function (evtObjt){ 
     
    352313                         
    353314                        var res = $.map(evtObjt, function( objEvent ){   
    354                                 var timezone = User.timezones[objEvent.schedulable.timezone]; 
    355                                 var timeEvent = function(time, idCalendar){ 
    356                                         var data =  new Date(); 
    357                                         data.setTime(time); 
    358                                         return dateFormat(setDateTimezone(data, timezone, true, idCalendar), User.preferences.hourFormat.replace(/m/g,'M'))                      
    359                                 } 
    360                                  
    361                                 var dateEvent = function( time){ 
    362                                         return new Date( parseInt(time) ).setTimezoneOffset(timezone).toString( User.preferences.dateFormat);  
    363                                 } 
    364                                  
    365                                 var unitTemp = function(unit, time){ 
    366                                         switch (unit.toLowerCase()){ 
    367                                                 case 'h': 
    368                                                         if(parseInt(time) > 1) 
    369                                                                 return 'horas'; 
    370                                                         return 'hora'; 
    371                                                 case 'd': 
    372                                                         if(parseInt(time) > 1) 
    373                                                                 return 'dias'; 
    374                                                         return 'dia'; 
    375                                                 case 'm': 
    376                                                         if(parseInt(time) > 1) 
    377                                                                 return 'minutos'; 
    378                                                         return 'minuto'; 
    379                                         } 
    380                                 } 
    381                          
     315 
     316                                var time = parseInt(objEvent.schedulable.startTime); 
     317                                                                                         
    382318                                return{ 
    383319                                        id: objEvent.id, 
    384                                         event_start: dateEvent(objEvent.schedulable.startTime), 
     320                                        event_start: new Date( time ).setTimezoneOffset(Timezone.timezones[objEvent.schedulable.timezone]).toString( User.preferences.dateFormat), 
    385321                                        sendTime: objEvent.sendTime, 
    386322                                        schedulable: { 
    387                                                 startTime: timeEvent(objEvent.schedulable.startTime), 
     323                                                startTime: dateCalendar.formatDate(Timezone.setDateTimezone(new Date(time), objEvent.schedulable.timezone, true), User.preferences.hourFormat), 
    388324                                                id: objEvent.schedulable.id, 
    389325                                                summary: objEvent.schedulable.summary, 
    390326                                                time: objEvent.time,     
    391                                                 unit: unitTemp(objEvent.unit ,objEvent.time) 
     327                                                unit: dateCalendar.timeunit[objEvent.unit.toLowerCase()] + ( parseInt(objEvent.time) > 1 ? 's' : '' ) 
    392328                                        } 
    393329                                } 
     
    423359                                                                return( null ); 
    424360 
    425                                                         if(form.alarmId[i] === "") 
    426                                                                 return { type: form.alarmType[i],unit: form.alarmUnit[i], time: form.alarmTime[i] }; 
    427                                                         else 
    428                                                                 return { type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i] }; 
     361                                                        return !!form.alarmId[i] ? 
     362                                                                { type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i] } :  
     363                                                                { type: form.alarmType[i],unit: form.alarmUnit[i], time: form.alarmTime[i] }; 
    429364                                                }) : [] 
    430365                                        }] 
     
    442377            evtObj = [ evtObj ]; 
    443378 
    444         var pref = User.preferences; 
    445         var statusParticipants = []; 
    446         for (var i = 1; i <= 5; i++) 
    447                 statusParticipants[i] = 0; 
    448                  
    449         var statusObject = function(status){ 
    450                 return{ 
    451                         accepted: status[1], 
    452                         tentative: status[2], 
    453                         cancelled: status[3], 
    454                         unanswered: status[4], 
    455                         delegated: status[5]             
    456                 } 
    457         };       
    458  
    459         var isOrganizer = !!evtObj[0].id ? 0 : 1; 
     379        var statusParticipants = {}, 
     380         
     381        statusLabels = [ '', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ]; 
     382         
     383        for( var i = 0; i < statusLabels.length; i++ ) 
     384                statusParticipants[ statusLabels[i] ] = 0; 
     385 
     386        var isOrganizer = 1; 
    460387         
    461388        var res = $.map(evtObj, function( objEvent ){                    
    462389                     
    463                         var existsTimezone = false; 
    464                         var participantInfo = {}, me = { uid: User.me.id, name: User.me.name, mail: User.me.mail}; 
    465                         var timezone = ''; 
    466                         if(objEvent.timezone){ 
    467                                 timezone = User.timezones[objEvent.timezone]; 
    468                                 existsTimezone = true; 
    469                         }else{ 
    470                                 var tzId = pref.timezone; 
    471                                 timezone = User.timezones[ tzId ]; 
    472                         } 
    473                          
    474                     var dateEvent = function( time, allDayEnd){ 
    475                          
    476                         return new Date( parseInt(time) - ((allDayEnd) ? 86400000 : 0)  ).setTimezoneOffset(timezone).toString( User.preferences.dateFormat); } 
    477  
    478                         var timeEvent = function(time, idCalendar){ 
    479                                 var data =  new Date(); 
    480                                 data.setTime(time); 
    481                                 return dateFormat(setDateTimezone(data, timezone, existsTimezone, idCalendar), User.preferences.hourFormat.replace(/m/g,'M'))                    
    482                         }                                                
    483                         var alarmParticipant = function(obj){ 
    484                                 var alarms = []; 
    485                                 for(var i = 0; i < obj.length; i++){  
    486                                         alarms.push(DataLayer.get('alarm', obj[i])); 
    487                                 } 
    488                                 return alarms; 
    489                         } 
     390                        var participantInfo = {}, me = DataLayer.copy(User.me); 
     391                                                 
    490392                    return { 
    491                               "class": objEvent["class"], 
    492                               id: objEvent.id, 
    493                               location: objEvent.location, 
    494                               category: objEvent.category, 
    495                               calendars: Calendar.calendars, 
    496                               calendar: objEvent.calendar, 
    497                               summary: objEvent.summary, 
    498                               description: objEvent.description, 
    499                               timezone: objEvent.timezone, 
    500                               timezones: User.timezones, 
    501                               startDate: dateEvent( objEvent.startTime, false ), 
    502                               startHour: timeEvent(objEvent.startTime, objEvent.calendar ), 
    503                               endDate: dateEvent( objEvent.endTime, (!!parseInt(objEvent.allDay)) ? true : false ), 
    504                               endHour: timeEvent(objEvent.endTime, objEvent.calendar), 
    505                               allDay: !!parseInt( objEvent.allDay ), 
     393                            "class": objEvent["class"], 
     394                            id: objEvent.id, 
     395                            location: objEvent.location, 
     396                            category: objEvent.category, 
     397                            calendars: Calendar.calendars, 
     398                            calendar: objEvent.calendar, 
     399                            summary: objEvent.summary, 
     400                            description: objEvent.description, 
     401                            timezone: objEvent.timezone, 
     402                            timezones: Timezone.timezones, 
     403                            startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     404                            startHour: dateCalendar.formatDate(Timezone.setDateTimezone(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar), User.preferences.hourFormat), 
     405                            endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     406                            endHour: dateCalendar.formatDate(Timezone.setDateTimezone(new Date(parseInt(objEvent.endTime)), objEvent.timezone, objEvent.calendar), User.preferences.hourFormat), 
     407                            allDay: !!parseInt( objEvent.allDay ), 
    506408          //                            attachments: this.decode( "attachment:detail", form ), 
    507                               attendee: $.map(objEvent.participants || [], function( participant, i ){                                           
     409                            attendee: $.map(objEvent.participants || [], function( participant, i ){                                             
    508410                                         
    509411                                        var attend = DataLayer.get('participant', participant); 
    510                                         attend.user = DataLayer.get('user', attend.user) 
     412                                        attend.user = DataLayer.get('user', attend.user); 
    511413                                         
    512                                         statusParticipants[attend.status]++;     
    513                                           
    514                                           var person = { uid: attend.id, 
    515                                                  name: attend.user.name != 'false' ? attend.user.name : '', 
    516                                                  mail: attend.user.mail, 
    517                                                  isExternal: attend.isExternal 
     414                                        statusParticipants[ statusLabels[attend.status] ]++;     
     415                                         
     416                                        if( attend.user.id ===  me.id ){ 
     417                                            participantInfo = { 
     418                                                        status : attend.status, 
     419                                                        alarms : $.map(attend.alarms || [], function( alarm ){ 
     420                                                                return DataLayer.get('alarm', alarm); 
     421                                                        }) 
    518422                                                }; 
    519  
    520                                           if( attend.user.id ===  me.uid ) 
    521                                           { 
    522                                               participantInfo.status = attend.status; 
    523                                               participantInfo.alarms = alarmParticipant(attend.alarms); 
    524                                                   me.uid = attend.id; 
    525                                           } 
    526                                           if( parseInt( attend.isOrganizer ) ) 
    527                                           { 
    528                                                  isOrganizer = ((attend.user.id == User.me.id) || (!!!attend.user)) ? 1 : 0; 
    529                                               participantInfo.organizer = person; 
    530                                                   return(null); 
    531                                           } 
    532  
    533                                           return( person ); 
    534  
    535                                       }), 
    536                               organizer: participantInfo.organizer || me, 
    537                               alarms: participantInfo.alarms || [], 
    538                               status: participantInfo.status || 1, 
    539                               me: me 
    540                             }; 
    541                 }); 
    542         res[0].isOrganizer = isOrganizer; 
    543         res[0].statusParticipants = statusObject(statusParticipants); 
    544         if( !notArray ) 
    545         { 
    546             var dates = {}; 
    547  
    548             for (var i=0; i<res.length; i++) { 
    549  
    550                     var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 
    551                     var endDate   = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 
    552  
    553                     var counter   = startDate.clone(); 
    554  
    555                     while (counter.compareTo(startDate) == 0) { 
    556  
    557                             if (!dates[counter.toString(User.preferences.dateFormat)])  
    558                                 dates[counter.toString(User.preferences.dateFormat)] = { startDate:false, events:[] }; 
    559                             if (!dates[counter.toString(User.preferences.dateFormat)].startDate)  
    560                                 dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 
    561  
    562                             dates[counter.toString(User.preferences.dateFormat)].events.push(res[i]); 
    563                             counter.addDays(-1); 
    564                     }  
    565             } 
    566  
    567             res = { events_list: dates }; 
    568         } 
     423                                                me.id = attend.id; 
     424                                        }; 
     425                                         
     426                                        var person = { 
     427                                                id: attend.id, 
     428                                                name: attend.user.name != 'false' ? attend.user.name : '', 
     429                                                mail: attend.user.mail, 
     430                                                isExternal: attend.isExternal 
     431                                        }; 
     432                                         
     433                                        if( !!parseInt(attend.isOrganizer )){ 
     434                                                isOrganizer = ((attend.user.id == User.me.id) || (!!!attend.user)) ? 1 : 0; 
     435                                            participantInfo.organizer = person; 
     436                                                return(null); 
     437                                        };                                       
     438                                         
     439                                        return (person); 
     440                                }), 
     441                            organizer: participantInfo.organizer || me, 
     442                            alarms: participantInfo.alarms || [], 
     443                            status: participantInfo.status || 1, 
     444                            me: me, 
     445                                isOrganizer: isOrganizer, 
     446                                statusParticipants: statusParticipants 
     447                        }; 
     448                }); 
    569449 
    570450        return notArray ? res[0] : res; 
     
    577457 
    578458    decoder: function( evtObj ){ 
    579  
     459                 
    580460        Encoder.EncodeType = "entity"; 
    581461         
     
    586466 
    587467        var res = $.map(evtObj, function( form ){ 
    588                         var tzId = ''; 
    589                     if(form.timezone == ''){ 
    590                                 calendar = DataLayer.get('calendar', form.calendar); 
    591                                 tzId = calendar.timezone || User.preferences.timezone; 
    592                         }else 
    593                                 tzId = form.timezone; 
    594                     timezone = User.timezones[ tzId ]; 
    595  
    596                     opposites = { '-':'+', '+':'-' }, 
    597  
    598                     formatString = ( typeof form.allDay !== "undefined" && !!form.allDay )? pref.dateFormat+" HH:mm" : pref.dateFormat + " " + pref.hourFormat; 
     468     
     469                    var tzId =  form.timezone || Calendar.calendarOf[form.calendar].timezone || User.preferences.timezone, 
     470 
     471                    formatString = ( typeof form.allDay !== "undefined" && !!form.allDay )? pref.dateFormat+" HH:mm" : pref.dateFormat + " " + pref.hourFormat, 
    599472                         
    600473                    participants = [];  
    601  
    602                     //if( form.idEvent ) 
    603                         //      participants = DataLayer.get( "participant:detail", [ "=", "schedulable", form.idEvent ] ); 
    604                          
    605                         var spaces = function(hours){ 
    606                                 return hours.replace(/\s$/, ""); 
    607                         }; 
    608                          
    609                         var startDate = Date.parseExact( !!form.allDay ? form.startDate+ " 00:00": form.startDate + " " + spaces(form.startHour) , formatString ); 
    610                         startDate = getDateUTC(startDate, timezone); 
    611                          
    612                         var endDate = Date.parseExact( !!form.allDay ? form.endDate + " 00:00": form.endDate + " " + spaces(form.endHour), formatString ); 
    613                         endDate = getDateUTC(endDate, timezone); 
    614474                    return { 
    615475                              "class": form["class"], 
    616                                   startTime: startDate.getTime(), 
    617                                   endTime: !!form.allDay ? (new Date(endDate.getTime() + (86400000)).getTime()) : endDate.getTime(), 
     476                                  startTime: Timezone.getDateUTC(Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ), tzId).getTime(), 
     477                                  endTime:  parseInt(Timezone.getDateUTC(Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ), tzId).getTime()) + (!!form.allDay ? 86400000 : 0) , 
    618478                                  allDay: ( !!form.allDay ? 1 : 0 ), 
    619479                              id: form.idEvent, 
     
    633493                                                 
    634494                                                if( participant.user === User.me.id ){ 
    635                                                         if(!!form.idEvent ) 
    636                                                                 participant.id = attendee; 
    637                                                         participant.isOrganizer = ( !i ? 1 : 0 ); 
    638                                                         var obj = form.alarmTime ? form : pref; 
    639                                                         participant.alarms = $.map( obj.alarmTime || [], function( alarmTime, i ){ 
    640  
    641                                                                 if( alarmTime === "" ) 
    642                                                                         return( null ); 
    643  
    644                                                                 if(obj.alarmId[i] === "") 
    645                                                                         return { type: obj.alarmType[i],unit: obj.alarmUnit[i], time: obj.alarmTime[i] }; 
    646                                                                 else 
    647                                                                         return { type: obj.alarmType[i], unit: obj.alarmUnit[i], time: obj.alarmTime[i], id: obj.alarmId[i] }; 
    648                                                         }); 
    649                                                         participant.status = form.status; 
     495                                                        return DataLayer.merge({ 
     496                                                                isOrganizer: ( !i ? 1 : 0 ), 
     497                                                                alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 
     498                                                                                if( alarmTime === "" ) 
     499                                                                                        return( null ); 
     500                                                                                 return !!form.alarmId[i] ? { type: form.alarmType[i], unit: form.alarmUnit[i], time: form.alarmTime[i], id: form.alarmId[i] }: 
     501                                                                                                                                        { type: form.alarmType[i],unit: form.alarmUnit[i], time: form.alarmTime[i] }; 
     502                                                                        }), 
     503                                                                status: form.status 
     504                                                        }, !!form.idEvent ? {id: attendee} : {user: participant.user});                                                  
    650505                                                }else{ 
    651                                                         participant.id = attendee; 
    652                                                         participant.isOrganizer = ( !i ? 1 : 0 ); 
    653                                                         if(!!parseInt(form.attendeeType[i])) 
    654                                                                 participant.isExternal= 1; 
    655                                                 } 
    656                                                 if( participants[ attendee ] ){ 
    657                                                         participant.id = participants[ attendee ].id; 
    658                                                 } 
    659                                                 return( participant ); 
     506                                                        return { 
     507                                                                id: attendee, 
     508                                                                isOrganizer: ( !i ? 1 : 0 ), 
     509                                                                isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0 
     510                                                        }; 
     511                                                }; 
    660512                                          }) 
    661513                            }; 
     
    666518 
    667519    encoder: function( evtObj ){ 
     520         
     521        if(!(!!evtObj)) 
     522                return undefined; 
    668523 
    669524        var notArray = false; 
     
    674529        var pref = User.preferences; 
    675530 
    676         var res = $.map(evtObj, function( objEvent ){                    
    677                      
    678                         var participantInfo = {}, me = { uid: User.me.id, name: User.me.name }; 
    679  
    680                         var timezone = User.timezones[ (!!objEvent && !!objEvent.timezone) ? objEvent.timezone : User.preferences.timezone ]; 
    681                          
    682                     var dateEvent = function( time){ 
    683                         return new Date( parseInt(time) ).setTimezoneOffset( User.timezones[ pref.timezone] ).toString( User.preferences.dateFormat); } 
    684  
    685                         var timeEvent = function(time){ 
    686                                 if(time){ 
    687                                         var data =  new Date(); 
    688                                         data.setTime(time); 
    689                                         data = getDateTimezone(data, timezone); 
    690                                         return dateFormat(data, User.preferences.hourFormat.replace(/m/g,'M'))                   
    691                                 } 
    692                         } 
    693                         if(!!objEvent) 
    694                     return { 
    695                               "class": objEvent["class"], 
    696                               id: objEvent.id, 
    697                               location: objEvent.location, 
    698                               category: objEvent.category, 
    699                               calendars: Calendar.calendars, 
    700                               calendar: objEvent.calendar, 
    701                               summary: Encoder.htmlEncode(objEvent.summary), 
    702                               description: objEvent.description, 
    703                               timezone: objEvent.timezone, 
    704                               timezones: User.timezones, 
    705                               startDate: dateEvent( objEvent.startTime ), 
    706                               startHour: timeEvent(objEvent.startTime ), 
    707                               endDate: dateEvent( objEvent.endTime ), 
    708                               endHour: timeEvent(objEvent.endTime), 
    709                               allDay: !!parseInt( objEvent.allDay ), 
    710           //                            attachments: this.decode( "attachment:detail", form ), 
    711                               attendee: $.map(objEvent.participants || [], function( participant ){ 
    712  
    713                                           participant = DataLayer.get( "participant", participant ); 
    714  
    715                                           var user = DataLayer.get( "user", participant.user.id || participant.user ); 
    716  
    717                                           var person = { uid: user.id, 
    718                                                          name: user.name }; 
    719  
    720                                           if( person.uid ===  me.uid ) 
    721                                           { 
    722                                               participantInfo.status = participant.status; 
    723                                               participantInfo.alarms = participant.alarms; 
    724                                           } 
    725  
    726                                           if( parseInt( participant.isOrganizer ) ) 
    727                                           { 
    728                                               participantInfo.organizer = person; 
    729                                                   return(null); 
    730                                           } 
    731  
    732                                           return( person ); 
    733  
    734                                       }), 
    735                               organizer: participantInfo.organizer || me, 
    736                               alarms: participantInfo.alarms || [], 
    737                               status: participantInfo.status || 1, 
    738                               me: me 
    739                             }; 
    740                 }); 
    741  
    742         if( !notArray ) 
    743         { 
     531        var res =  DataLayer.encode('schedulable:preview', evtObj); 
     532 
     533        if( !notArray ){ 
    744534            var dates = {}; 
    745535 
    746             for (var i=0; i<res.length; i++) { 
     536            for (var i=0; i < res.length; i++) { 
    747537 
    748538                    var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 
     
    754544 
    755545                            if (!dates[counter.toString(User.preferences.dateFormat)])  
    756                                 dates[counter.toString(User.preferences.dateFormat)] = { startDate:false, events:[] }; 
     546                                        dates[counter.toString(User.preferences.dateFormat)] = { startDate:false, events:[] }; 
    757547                            if (!dates[counter.toString(User.preferences.dateFormat)].startDate)  
    758                                 dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 
     548                                        dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 
    759549 
    760550                            dates[counter.toString(User.preferences.dateFormat)].events.push(res[i]); 
     
    776566    encoder: function( participants ){ 
    777567 
    778           var result = {}; 
    779        
    780           for( var i = 0; i< participants.length; i++ ) 
    781           { 
    782               result[ participants[i].user.id || participants[i].user ] = participants[i]; 
    783           } 
    784  
    785           return( result ); 
     568                var result = {}; 
     569                for( var i = 0; i< participants.length; i++ ){ 
     570                        result[ participants[i].user.id || participants[i].user ] = participants[i]; 
     571                } 
     572                return( result ); 
    786573    } 
    787574}); 
     
    791578    encoder: function( calendars ){ 
    792579 
    793         var result = { my_calendars: [], others_calendars: [] }; 
    794  
    795         for( var i = 0; i < calendars.length; i++ ) 
    796         { 
    797             if( Calendar.signatureOf[ calendars[i].id ].isOwner ) 
    798                 result.my_calendars.push( calendars[i] ); 
    799             else 
    800                 result.others_calendars.push( calendars[i] ); 
    801         } 
    802  
    803         return { agendas_usuario: result }; 
     580                var result = { my_calendars: [], others_calendars: [] }; 
     581 
     582                for( var i = 0; i < calendars.length; i++ ) 
     583                { 
     584                        !!Calendar.signatureOf[ calendars[i].id ].isOwner ? 
     585                                result.my_calendars.push( calendars[i] ) : 
     586                                result.others_calendars.push( calendars[i] ); 
     587                } 
     588 
     589                return { agendas_usuario: result }; 
    804590 
    805591    } 
     
    927713                         
    928714                var calendar = DataLayer.get('calendar', evt.calendar); 
    929                  
    930                 var timesEvent = function(time, timezone){ 
    931                         return getDateTimezone(time, User.timezones[timezone], false ) 
    932                 }; 
    933            
     715                   
    934716                grouped[ evt.calendar ].push( { id: evt.URI || evt.id, 
    935717                                                title: Encoder.htmlDecode(evt.summary), 
    936                                                 start: timesEvent(new Date( parseInt( evt.startTime )), calendar.timezone), 
    937                                                 end: !!parseInt(evt.allDay) ? timesEvent(new Date( (parseInt( evt.endTime ) - 86400000) )) : timesEvent(new Date( parseInt( evt.endTime ) ), calendar.timezone), 
    938                                                 allDay: !!parseInt( evt.allDay ) } ); 
     718                                                start: Timezone.getDateTimezone(new Date(parseInt( evt.startTime )), calendar.timezone, false), 
     719                                                end:   Timezone.getDateTimezone(new Date(parseInt( evt.endTime ) - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, false ), 
     720                                                allDay: parseInt( evt.allDay ) } ); 
    939721        }); 
    940722 
     
    944726    criteria: function( filter ){ 
    945727       
    946         if( $.type(filter.start) !== 'date' ) 
    947             filter.start = new Date( filter.start * 1000 ); 
    948         if( $.type(filter.end) !== 'date' ) 
    949             filter.end = new Date( filter.end * 1000 ); 
    950  
    951         return { filter: ["AND",  
    952  
    953                             [ ">=", "rangeStart", filter.start.toString( "dd-MM-yyyy" ) ], 
    954                             [ "<=", "rangeEnd", filter.end.toString( "dd-MM-yyyy" ) ], 
    955                             [ "IN", "calendar", Calendar.calendarIds ] 
    956  
    957                           ],  
     728                if( $.type(filter.start) !== 'date' ) 
     729                        filter.start = new Date( filter.start * 1000 ); 
     730                if( $.type(filter.end) !== 'date' ) 
     731                        filter.end = new Date( filter.end * 1000 ); 
     732 
     733                return { filter: ["AND",  
     734 
     735                                        [ ">=", "rangeStart", filter.start.toString( "dd-MM-yyyy" ) ], 
     736                                        [ "<=", "rangeEnd", filter.end.toString( "dd-MM-yyyy" ) ], 
     737                                        [ "IN", "calendar", Calendar.calendarIds ] 
     738 
     739                                  ],  
    958740                 criteria: { deepness: 2 } } 
    959741    } 
     
    963745DataLayer.codec( "preference", "detail", { 
    964746   
    965   decoder:function( pref ){ 
    966          
    967         var res = []; 
    968  
    969       pref.defaultAlarm = $.map( pref.alarmTime || [], function( alarmTime, i ){ 
    970                
    971             return { type: pref.alarmType[i],  
    972                      time: alarmTime, 
    973                      unit: pref.alarmUnit[i] }; 
    974          
    975       }); 
    976  
    977       $.each( pref, function( i, el ){ 
    978          
    979           res[ res.length ] = { name: i, value: el }; 
    980          
    981       }); 
    982      
    983       return( res ); 
     747        decoder:function( pref ){ 
     748         
     749                var res = []; 
     750 
     751                pref.defaultAlarm = $.map( pref.alarmTime || [], function( alarmTime, i ){ 
     752                   
     753                        return { type: pref.alarmType[i],  
     754                                time: alarmTime, 
     755                                unit: pref.alarmUnit[i] }; 
     756                        }); 
     757 
     758                $.each( pref, function( i, el ){ 
     759 
     760                        res[ res.length ] = { name: i, value: el }; 
     761 
     762                }); 
     763                 
     764                return( res ); 
    984765       
    985   }, 
    986  
    987   encoder:function( pref ){ 
    988  
    989       return( pref ); 
    990  
    991   } 
     766        }, 
     767 
     768        encoder:function( pref ){ 
     769                return( pref ); 
     770        } 
    992771 
    993772}); 
     
    995774DataLayer.codec( "schedulable", "export", { 
    996775   
    997       decoder: function(){ 
    998  
    999            
    1000  
    1001       }, 
     776        decoder: function(){}, 
    1002777       
    1003       encoder: function( signatures ){ 
    1004  
    1005            
    1006  
    1007       }, 
     778    encoder: function( signatures ){}, 
    1008779       
    1009       criteria: function( filter ){ 
    1010          
    1011           if( isCal  = filter && filter.calendar ) 
    1012               filter = filter.calendar; 
    1013  
    1014             return { 
    1015  
    1016                       filter: filter ? [  "=", ( isCal ? "calendar" : "id" ), filter ] : false, 
    1017  
    1018                       criteria: { format: 'iCal', deepness: 2 } 
    1019             }; 
    1020       } 
    1021  
    1022  
     780    criteria: function( filter ){ 
     781         
     782                if( isCal  = filter && filter.calendar ) 
     783                        filter = filter.calendar; 
     784                        return { 
     785                                filter: filter ? [  "=", ( isCal ? "calendar" : "id" ), filter ] : false, 
     786                                criteria: { format: 'iCal', deepness: 2 } 
     787                        }; 
     788                } 
    1023789}); 
    1024790 
  • trunk/prototype/modules/calendar/js/helpers.js

    r5392 r5409  
    1 /* 
    2         Todo Otimizar caulculo de timezone 
    3         Objeto Date.toString() retorna a data com inserção do offset 
    4         Objeto Date.getTime() retorna a data sem inserção do offset 
    5 */ 
    6 function checkTimezoneCalendar(idCalendar, timezone){ 
    7         var obj = DataLayer.get('calendar', idCalendar); 
    8         if(User.timezones[obj.timezone] ==  timezone) 
    9                 return true; 
    10         else 
    11                 return false; 
    12 } 
    13  
    14 function setDateTimezone(date, timezone, existsTimezone, idCalendar){ 
    15          
    16 if(!existsTimezone) 
    17                 return date; 
    18         if(idCalendar) 
    19                 if(checkTimezoneCalendar(idCalendar, timezone)) 
    20                         return getDateTimezone(date, timezone, false); 
    21          
    22         var timezoneOffset = ''; 
    23         if(User.isDaylightSaving == '1') 
    24                 timezoneOffset = parseInt(timezone.substr(2)) - 100; 
    25         else 
    26                 timezoneOffset = parseInt(timezone.substr(2)); 
    27                  
    28         var timeCurrent = parseInt((date.getTimezoneOffset()/60)+'00') 
    29         var times = 0; 
    30         if(timezone.charAt(0) != date.getUTCOffset().charAt(0)) 
    31                 times = timeCurrent + timezoneOffset ; 
    32         else 
    33                 times = timezoneOffset - timeCurrent  ; 
    34          
    35         if(times == 0) 
    36                 return date;             
    37         else if(times > 0) 
    38                 return date.setTimezoneOffset('-0'+(times)); 
    39         else 
    40                 return date.setTimezoneOffset('+0'+((times * -1))); 
    41 } 
    42  
    43  
    44 function getDateTimezone(date, timezone, recursive){             
    45         if(!timezone) 
    46                 return date; 
    47          
    48         var times = 0; 
    49         currentTimezone = parseInt((date.getTimezoneOffset()/60)+'00'); 
    50         var timezoneOffset = 0; 
    51         if(User.isDaylightSaving == '1') 
    52                 timezoneOffset = parseInt(timezone.substr(2)) - 100; 
    53         else 
    54                 timezoneOffset = parseInt(timezone.substr(2)); 
    55                  
    56         var times =  timezoneOffset - currentTimezone; 
    57         if(times == 0){ 
    58                 if((timezone.charAt(0) == date.getUTCOffset().charAt(0)) && recursive) 
    59                         return date.setTimezoneOffset( timezone.charAt(0)+'0'+(currentTimezone)); 
    60                 else 
    61                         return  date; 
    62         }else if (times > 0) 
    63                 return date.setTimezoneOffset('+0'+(times)); 
    64         else{ 
    65                 return date.setTimezoneOffset('-0'+((times * -1) + (currentTimezone * 2))); 
    66         } 
    67 } 
    68  
    69 function getDateUTC(date, timezone){ 
    70         currentTimezone = parseInt(timezone.substr(2)); 
    71         if(User.isDaylightSaving == '1') 
    72                 currentTimezone = currentTimezone - 100; 
    73                 return(date.setTimezoneOffset(timezone.charAt(0)+'0'+currentTimezone)); 
    74 }                
    75  
    76 function createDateTimezone(date, timezone, idCalendar){                 
    77          
    78         if(checkTimezoneCalendar(idCalendar, timezone)) 
    79                 return getDateTimezone(date, timezone, true); 
    80  
    81         var times = 0; 
    82          
    83         if(timezone.charAt(0) == '+') 
    84                 times = parseInt(timezone.substr(2)) - parseInt((date.getTimezoneOffset()/60)+'00'); 
    85         else 
    86                 times = (parseInt(timezone.substr(2)) + parseInt((date.getTimezoneOffset()/60)+'00')) * (-1); 
    87         if(times == 0) 
    88                 return date.setTimezoneOffset('0000'); 
    89         else if (times > 0) 
    90                 return date.setTimezoneOffset('+0'+times); 
    91         else 
    92                 return date.setTimezoneOffset('-0'+(times * -1)); 
    93 } 
    94     
    95 function defaultToAmPm( Hour ) 
    96 { 
    97         var HourAmPm = Hour.split(":"); 
    98         if(HourAmPm[0] == 0) 
    99                 HourAmPm[0] = 12;        
    100         if(HourAmPm[0] < 12){ 
    101                 Hour += (Hour.length == 5) ? " am" : ""; 
    102         }else if(HourAmPm[0] == 12){ 
    103                 Hour += (Hour.length == 5) ? " pm" : ""; 
    104         }else 
    105                 Hour = "0"+(HourAmPm[0]-12)+":"+HourAmPm[1]+ ((Hour.length == 5) ? " pm" : ""); 
    106         return Hour; 
    107 } 
    108  
    1091function validDateEvent(){ 
    1102        var start_date = $(".new-event-win.active .start-date").val(); 
     
    1124        var start_time = $(".new-event-win.active .start-time").val(); 
    1135        var end_time   = $(".new-event-win.active .end-time").val(); 
    114         var isAllDay = $('.new-event-win.active input[name="allDay"]').is(':checked'); 
     6        var isAllDay   = $('.new-event-win.active input[name="allDay"]').is(':checked'); 
    1157         
    1168        if(start_date == "") 
     
    12416         
    12517        var formatString = (isAllDay)? User.preferences.dateFormat+" HH:mm" : User.preferences.dateFormat + " " + User.preferences.hourFormat; 
    126          
    127         var spaces = function(hours){ 
    128                 return hours.replace(/\s$/, ""); 
    129         }; 
    130          
    131         var startDate = Date.parseExact( isAllDay ? start_date+ " 00:00": start_date + " " + spaces(start_time) , formatString ); 
    132         var endDate = Date.parseExact( isAllDay ? end_date+ " 00:00": end_date + " " + spaces(end_time) , formatString ); 
     18                 
     19        var startDate = Date.parseExact( isAllDay ? start_date+ " 00:00": start_date + " " + $.trim(start_time) , formatString ); 
     20        var endDate = Date.parseExact( isAllDay ? end_date+ " 00:00": end_date + " " + $.trim(end_time) , formatString ); 
    13321         
    13422        if(startDate == null || startDate.getTime() < 0 ) 
     
    13826         
    13927        if((endDate.compareTo(startDate) != 1) && !((endDate.compareTo(startDate) == 0) && (isAllDay))){ 
    140                 if(start_date == end_date){ 
    141                         if(end_time == start_time) 
    142                                 return 'Hora inicial igual a final'; 
    143                         else 
    144                                 return 'Hora final menor que a inicial'; 
    145                  
    146                 }else 
    147                         return 'Data final menor que a inicial'; 
     28                return (start_date == end_date) ?  
     29                        ((end_time == start_time) ? 'Hora inicial igual a final' : 'Hora final menor que a inicial') : 
     30                        'Data final menor que a inicial'; 
    14831        } 
    14932        return false; 
     
    17356         
    17457        if(typeof(objEvent.id) == 'undefined'){ 
    175                         objEvent.alarms = Calendar.signatureOf[!!User.preferences.defaultCalendar ? User.preferences.defaultCalendar : Calendar.calendarIds[0]].defaultAlarms; 
     58                        objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
    17659                        objEvent.useAlarmDefault = 1; 
    17760        } 
     
    259142                    $(this).addClass('hidden'); 
    260143                    $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 
    261  
    262144                    e.preventDefault(); 
    263145            }); 
     
    267149                        if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 
    268150                                DataLayer.remove('alarm', id); 
    269                         if( $(this).parent().remove().find('li').is(':empty') ) { 
    270                                 //alert('nao tem'); 
    271                         } 
     151                        $(this).parent().remove().find('li').is(':empty'); 
    272152                }); 
    273153                 
     
    277157                /*Adicionar alarms padrões, quando alterado a agenda do usuário*/                
    278158                UI.dialogs.addEvent.find('select[name="calendar"]').change(function(){ 
    279                         if((typeof($('input[name = "idEvent"]').val()) == 'undefined') || ($('input[name = "idEvent"]').val() == '')) { 
     159                        if((typeof($('input[name = "idEvent"]').val()) == 'undefined') || (!!!$('input[name = "idEvent"]').val())) { 
    280160                                $('input[name = "isDefaultAlarm[]"]').parent().remove(); 
    281161                                UI.dialogs.addEvent.find('input[name="defaultAlarm"]').parent().removeClass('hidden'); 
     
    285165                                        var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {alarm:calendarSelected}); 
    286166                                                jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { 
    287                                                         if( $(this).parent().remove().find('li').is(':empty') ) { 
    288                                                                 //alert('nao tem'); 
    289                                                         } 
    290  
     167                                                        $(this).parent().remove().find('li').is(':empty'); 
    291168                                                }); 
    292169                                }else{ 
     
    308185                                                        if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 
    309186                                                                DataLayer.remove('alarm', id); 
    310                                                         if( $(this).parent().remove().find('li').is(':empty') ) { 
    311                                                                 //alert('nao tem'); 
    312                                                         } 
    313  
     187                                                        $(this).parent().remove().find('li').is(':empty')  
    314188                                                }); 
    315189                                } 
     
    320194            /* Checkbox allday */ 
    321195            UI.dialogs.addEvent.find('input[name="allDay"]').click(function(){ 
    322                     if($(this).attr("checked")) 
    323                                 UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden');    
    324                     else 
     196                    $(this).attr("checked") ?  
     197                                UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden') : 
    325198                            UI.dialogs.addEvent.find('.start-time, .end-time').removeClass('hidden');  
    326199            }); 
     
    342215                        UI.dialogs.addEvent.find(".end-time, .start-time").mask("99:99 {}", { 
    343216                                completed:function(){ 
    344                                         $(this).val(defaultToAmPm($(this).val())); 
     217                                        $(this).val(date.Calendar.defaultToAmPm($(this).val())); 
    345218                                        $(this).timepicker("refresh"); 
    346219                                        $(this).val($(this).val().replace(/[\.]/gi, "")); 
     
    349222                } 
    350223                UI.dialogs.addEvent.find(".number").numeric(); 
    351                 if(User.preferences.dateFormat.indexOf('-') > 0) 
    352                         UI.dialogs.addEvent.find(".date").mask("99-99-9999"); 
    353                 else 
     224                User.preferences.dateFormat.indexOf('-') > 0 ?  
     225                        UI.dialogs.addEvent.find(".date").mask("99-99-9999") : 
    354226                        UI.dialogs.addEvent.find(".date").mask("99/99/9999"); 
    355227 
     
    415287 
    416288                        jQuery('.event-alarms-list').append(li_attach).find('.button.remove').button({text:false, icons:{primary:'ui-icon-close'}}).click(function(el) { 
    417                                 if( $(this).parent().remove().find('li').is(':empty') ) { 
    418                                         //alert('nao tem'); 
    419                                 } 
    420  
    421                         }); 
    422  
     289                                $(this).parent().remove().find('li').is(':empty') 
     290                        }); 
    423291                        // valicacao de campos numericos 
    424292                        $('.number').numeric(); 
     
    496364                                                newAttendeeEmail = currentTip.find('input[name="mail"]').val(); 
    497365 
    498                                                 var isValidMail = newAttendeeEmail.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/); 
    499                                                 if (!isValidMail) { 
     366                                                if (!(!!newAttendeeEmail.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/))) { 
    500367                                                        currentTip.find('.messages').removeClass('hidden').find('.message label').html('Email inválido.'); 
    501368                                                        return false; 
     
    522389                                                $('.qtip-active .button').button() 
    523390                                                .filter('.save').click(function(event, ui) { 
    524                                                         if (saveContact()) {                                             
     391                                                        if(saveContact()) 
    525392                                                                lastEditAttendeeToolTip.qtip("destroy"); 
    526                                                         } else { 
     393                                                        else 
    527394                                                                return false; 
    528                                                         } 
    529395                                                }).end() 
    530396                                                .filter('.cancel').click(function(event, ui) { 
     
    538404                                                $('.qtip-active input').keydown(function(event) { 
    539405                                                        if (event.keyCode == '13') {                                             
    540                                                                 if (saveContact()) {                                             
     406                                                                if (saveContact())                                               
    541407                                                                        lastEditAttendeeToolTip.qtip("destroy"); 
    542                                                                 } 
    543  
     408                         
    544409                                                                lastEditAttendeeToolTip.qtip("destroy"); 
    545410                                                                event.preventDefault(); 
     
    549414                                                .filter('[name="mail"]').Watermark("informe o email do contato"); 
    550415                                        } 
    551  
    552416                                         
    553417                                        /** 
     
    726590                        }); 
    727591 
    728  
     592/* 
    729593                        UI.dialogs.addEvent.find('.attendees-list li').hover( 
    730594                                function () { 
     
    735599                                } 
    736600                        ); 
    737  
     601*/ 
    738602                        //$('.block-add-attendee .search-result-list').selectable(); 
    739603 
     
    1010874} 
    1011875 
    1012 function getNotSelectedCalendars(){ 
     876function getSelectedCalendars( reverse ){ 
    1013877        var selecteds = {}; 
    1014878        var cont = 0;  
     
    1016880            jQuery(".my-calendars .calendar-view").each(function(i, obj) {  
    1017881                var check_box = obj; 
    1018                         if(!check_box.checked) { 
    1019                                 selecteds[cont] = obj.value; 
    1020                                 cont++; 
    1021                         }; 
    1022             });                
    1023         }); 
    1024         if (!cont) 
    1025                 return false; 
    1026          
    1027         selecteds.length = cont; 
    1028         return $.makeArray( selecteds ); 
    1029 } 
    1030  
    1031 function getSelectedCalendars(){ 
    1032         var selecteds = {}; 
    1033         var cont = 0;  
    1034         jQuery(function() { 
    1035             jQuery(".my-calendars .calendar-view").each(function(i, obj) {  
    1036                 var check_box = obj; 
    1037                         if(check_box.checked) { 
     882                        if( reverse ? !check_box.checked : check_box.checked ) { 
    1038883                                selecteds[cont] = obj.value; 
    1039884                                cont++; 
     
    1080925                                if(idCalendar == User.preferences.defaultCalendar) 
    1081926                                        DataLayer.remove( 'modulePreference', User.preferenceIds['defaultCalendar']); 
     927                        } 
    1082928                                $('.positionHelper').css('display', 'none'); 
    1083                         }else{ 
    1084                                 $('.positionHelper').css('display', 'none'); 
    1085                         }        
     929         
    1086930                } 
    1087931        });      
     
    13091153                case 'basicDay': 
    13101154                        var date = new Date().add({days: page_index}); 
    1311                         return (weekOfDay(date.getDay()))+", "+(date.toString('dd MMM yyyy')); 
     1155                        return (dateCalendar.dayNames[date.getDay()])+", "+(date.toString('dd MMM yyyy')); 
    13121156                case 'agendaWeek': 
    13131157                case 'week': 
    1314                         var dateStart = new Date().moveToDayOfWeek(dayOfWeek(User.preferences.weekDefault)); 
     1158                        var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 
    13151159                        dateStart.add({days: (7 * page_index)}); 
    1316                         var dateEnd = new Date().moveToDayOfWeek(dayOfWeek(User.preferences.weekDefault)); 
     1160                        var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 
    13171161                        dateEnd.add({days: (page_index * 7)+7}); 
    13181162                        if(dateStart.toString('MM') != dateEnd.toString('MM')) 
    1319                                         return dateStart.toString('dd')+' de '+sortMonthOfNumber(dateStart.getMonth())+' a '+dateEnd.toString('dd')+' de '+monthOfNumber(dateEnd.getMonth())+' - '+dateEnd.toString('yyyy'); 
    1320                         return +dateStart.toString("dd")+" a "+dateEnd.toString("dd")+" de "+monthOfNumber(dateEnd.getMonth())+" - "+dateEnd.toString('yyyy'); 
     1163                                        return dateStart.toString('dd')+' de '+dateCalendar.monthNamesShort[dateStart.getMonth()]+' a '+dateEnd.toString('dd')+' de '+dateCalendar.monthNames[dateEnd.getMonth()]+' - '+dateEnd.toString('yyyy'); 
     1164                        return +dateStart.toString("dd")+" a "+dateEnd.toString("dd")+" de "+dateCalendar.monthNames[dateEnd.getMonth()]+" - "+dateEnd.toString('yyyy'); 
    13211165                case 'month': 
    13221166                        var date = new Date().add({months: page_index})  
    1323                         return monthOfNumber(date.getMonth())+" "+date.toString("yyyy"); 
     1167                        return dateCalendar.monthNames[date.getMonth()]+" "+date.toString("yyyy"); 
    13241168                case 'year': 
    13251169                        var date = new Date().add({years: page_index}); 
     
    14051249 
    14061250function mountCriteriaList(view, page_index, calerdars_selecteds){ 
     1251        var criteria = {deepness: 2, order: 'startTime'} 
    14071252        switch (view){ 
    14081253                case 'basicDay': 
    14091254                case 'day': 
    1410                         return {filter: ['AND', ['IN', 'calendar',  calerdars_selecteds], ['=', 'rangeEnd', new Date().add({days: page_index}).toString("yyyy-MM-dd")]], criteria: {order: 'startTime'}};  
     1255                        return {filter: ['AND', ['IN', 'calendar',  calerdars_selecteds], ['=', 'rangeEnd', new Date().add({days: page_index}).toString("yyyy-MM-dd")]], criteria: criteria};  
    14111256                case 'agendaWeek': 
    14121257                case 'week': 
    1413                         var dateStart = new Date().moveToDayOfWeek(dayOfWeek(User.preferences.weekDefault));  
    1414                         var dateEnd = new Date().moveToDayOfWeek(dayOfWeek(User.preferences.weekDefault));  
    1415                         return {filter: ['AND', ['IN', 'calendar',  calerdars_selecteds], ['AND',['>=', 'rangeEnd', dateStart.add({days: (7 * page_index)}).toString("yyyy-MM-dd")], ['<=', 'rangeEnd', dateEnd.add({days: (7 * page_index)+7}).toString("yyyy-MM-dd")]]], criteria: {order: 'startTime'}};  
     1258                        var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekDefault]);  
     1259                        var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekDefault]);  
     1260                        return {filter: ['AND', ['IN', 'calendar',  calerdars_selecteds], ['AND',['>=', 'rangeEnd', dateStart.add({days: (7 * page_index)}).toString("yyyy-MM-dd")], ['<=', 'rangeEnd', dateEnd.add({days: (7 * page_index)+7}).toString("yyyy-MM-dd")]]], criteria: criteria};  
    14161261                case 'month': 
    14171262                        var date = new Date().add({months: page_index})  
    1418                         return {filter: ['AND',['IN', 'calendar',  calerdars_selecteds], ['AND',['>=', 'rangeEnd', date.moveToFirstDayOfMonth().toString("yyyy-MM-dd")], ['<=', 'rangeEnd', date.moveToLastDayOfMonth().toString("yyyy-MM-dd")]]], criteria: {order: 'startTime'}};  
     1263                        return {filter: ['AND',['IN', 'calendar',  calerdars_selecteds], ['AND',['>=', 'rangeEnd', date.moveToFirstDayOfMonth().toString("yyyy-MM-dd")], ['<=', 'rangeEnd', date.moveToLastDayOfMonth().toString("yyyy-MM-dd")]]], criteria: criteria};  
    14191264                case 'year': 
    14201265                        var dateStart = new Date().add({years: page_index});     
     
    14241269                        if(dateEnd.getMonth() != 11) 
    14251270                                dateEnd.moveToMonth(11)  
    1426                         return {filter: ['AND', ['IN', 'calendar',  calerdars_selecteds], ['AND',['>=', 'rangeEnd', dateStart.moveToFirstDayOfMonth().toString("yyyy-MM-dd")], ['<=', 'rangeEnd', dateEnd.moveToLastDayOfMonth().toString("yyyy-MM-dd")]]], criteria: {order: 'startTime'}};  
     1271                        return {filter: ['AND', ['IN', 'calendar',  calerdars_selecteds], ['AND',['>=', 'rangeEnd', dateStart.moveToFirstDayOfMonth().toString("yyyy-MM-dd")], ['<=', 'rangeEnd', dateEnd.moveToLastDayOfMonth().toString("yyyy-MM-dd")]]], criteria: criteria};  
    14271272        } 
    14281273} 
     
    14421287                        criteria = mountCriteriaList(!!view ? view : User.preferences.defaultCalView, page_index, selecteds) 
    14431288                else 
    1444                         criteria =  {filter: ['AND', ['OR', ["i*", "summary", keyword], ["i*", "description", keyword]], ['IN', 'calendar',  selecteds]], criteria: {order: 'startTime', offset: (25 * page_index), limit: (((25 * page_index) + 25) + 1)}}; 
     1289                        criteria =  {filter: ['AND', ['OR', ["i*", "summary", keyword], ["i*", "description", keyword]], ['IN', 'calendar',  selecteds]], criteria: {order: 'startTime', offset: (25 * page_index), limit: (((25 * page_index) + 25) + 1), deepness: 2}}; 
    14451290                var results = DataLayer.get('schedulable:detail', criteria); 
    14461291                keyword = ( keyword || '' ).replace( /\s+/g, "_" );      
     
    15551400    }); 
    15561401} 
    1557  
    1558 function dayOfWeek(day) { 
    1559         switch (day) { 
    1560                 case 'SUN': 
    1561                         return 0; 
    1562                         break; 
    1563                 case 'MON': 
    1564                         return 1; 
    1565                         break; 
    1566                 case 'TUE': 
    1567                         return 2; 
    1568                         break; 
    1569                 case 'WED': 
    1570                         return 3; 
    1571                         break; 
    1572                 case 'THU': 
    1573                         return 4; 
    1574                         break; 
    1575                 case 'FRI': 
    1576                         return 5; 
    1577                         break; 
    1578                 case 'SAT': 
    1579                         return 6; 
    1580                         break; 
    1581                 default: 
    1582                         return false; 
    1583                         break; 
    1584         } 
    1585 } 
    1586  
    1587 function weekOfDay(week) { 
    1588         switch (week) { 
    1589                 case 0: 
    1590                         return 'Domingo'; 
    1591                 case 1: 
    1592                         return 'Segunda'; 
    1593                 case 2: 
    1594                         return 'Terça'; 
    1595                 case 3: 
    1596                         return 'Quarta'; 
    1597                 case 4: 
    1598                         return 'Quinta'; 
    1599                 case 5: 
    1600                         return 'Sexta'; 
    1601                 case 6: 
    1602                         return 'Sábado'; 
    1603                 default: 
    1604                         return false; 
    1605         } 
    1606 } 
    1607  
    1608 function monthOfNumber(number) { 
    1609         switch (number) { 
    1610                 case 0: 
    1611                         return 'Janeiro'; 
    1612                 case 1: 
    1613                         return 'Fevereiro'; 
    1614                 case 2: 
    1615                         return 'Março'; 
    1616                 case 3: 
    1617                         return 'Abril'; 
    1618                 case 4: 
    1619                         return 'Maio'; 
    1620                 case 5: 
    1621                         return 'Junho'; 
    1622                 case 6: 
    1623                         return 'Julho'; 
    1624                 case 7: 
    1625                         return 'Agosto'; 
    1626                 case 8: 
    1627                         return 'Setembro'; 
    1628                 case 9: 
    1629                         return 'Outubro'; 
    1630                 case 10: 
    1631                         return 'Novembro'; 
    1632                 case 11: 
    1633                         return 'Dezembro'; 
    1634                 default: 
    1635                         return false; 
    1636         } 
    1637 } 
    1638  
    1639 function sortMonthOfNumber(number) { 
    1640         switch (number) { 
    1641                 case 0: 
    1642                         return 'Jan'; 
    1643                 case 1: 
    1644                         return 'Fev'; 
    1645                 case 2: 
    1646                         return 'Mar'; 
    1647                 case 3: 
    1648                         return 'Abr'; 
    1649                 case 4: 
    1650                         return 'Mai'; 
    1651                 case 5: 
    1652                         return 'Jun'; 
    1653                 case 6: 
    1654                         return 'Jul'; 
    1655                 case 7: 
    1656                         return 'Ago'; 
    1657                 case 8: 
    1658                         return 'Set'; 
    1659                 case 9: 
    1660                         return 'Out'; 
    1661                 case 10: 
    1662                         return 'Nov'; 
    1663                 case 11: 
    1664                         return 'Dez'; 
    1665                 default: 
    1666                         return false; 
    1667         } 
    1668 } 
  • trunk/prototype/modules/calendar/js/init.js

    r5401 r5409  
    44        $tabs = $('#tabs').tabs({ 
    55            add: function( event, ui ) { 
    6                         User.lastView = $tabs.tabs('option' ,'selected'); 
     6                        Calendar.lastView = $tabs.tabs('option' ,'selected'); 
     7                        $('#tabs .events-list-win.active').removeClass('active'); 
    78                        $tabs.tabs('select', '#' + ui.panel.id); 
    89                }, 
    910                remove: function( event, ui ) { 
    10                         $tabs.tabs('select', User.lastView); 
     11                        $tabs.tabs('select', Calendar.lastView); 
    1112                }, 
    1213                show: function( event, ui ){ 
     
    2324                var index = $( "li", $tabs ).index( $( this ).parent() ); 
    2425                if($tabs.tabs('option' ,'selected') == index){ 
    25                         if($tabs.tabs("length") == 2 && User.lastView != 1) 
     26                        if($tabs.tabs("length") == 2 && Calendar.lastView != 1) 
    2627                                $tabs.tabs( "select", 0); 
    27                         $tabs.tabs( "select", User.lastView); 
     28                        $tabs.tabs( "select", Calendar.lastView); 
    2829                } 
    2930                if($tabs.tabs('option' ,'selected') == 0 || $tabs.tabs('option' ,'selected') == 1) 
    30                         User.lastView = $tabs.tabs('option' ,'selected'); 
     31                        Calendar.lastView = $tabs.tabs('option' ,'selected'); 
    3132                if(index != -1) 
    3233                  $tabs.tabs( "remove", index );         
     
    5152                        //dateFormat: 'DD, d MM, yy', 
    5253                        //inline: true, 
    53                         firstDay: dayOfWeek(User.preferences.weekStart), 
     54                        firstDay: dateCalendar.dayOfWeek[User.preferences.weekStart], 
    5455                        onSelect: function(dateText, inst) 
    5556                        {        
    5657                                $tabs.tabs("select", "#calendar"); 
    57                                 var date = dateText.split('-'); 
    58                                 var dateFullCalendar = $.fullCalendar.formatDate($('#calendar').fullCalendar('getDate'), "yyyy-MM-dd").split('-'); 
    59                                 $('#calendar').fullCalendar('gotoDate',date[0],date[1]-1,date[2]); 
     58                                $('#calendar').fullCalendar('gotoDate',$(this).siblings('span').html(), Date.getMonthNumberFromName($(this).html() == 'Março' ? 'Mar' : $(this).html()),'01'); 
    6059                                $('#calendar').fullCalendar( 'changeView', 'agendaDay' ); 
    6160                        }                        
     
    6766                $('.ui-datepicker-title .ui-datepicker-month').live('click',function(){ 
    6867                        $tabs.tabs("select", "#calendar"); 
    69                         var currentDate = $.fullCalendar.formatDate($('#calendar').fullCalendar('getDate'), "yyyy-MM-dd").split('-'); 
    70                         $('#calendar').fullCalendar('gotoDate',$('.ui-datepicker-title .ui-datepicker-year').html(), Date.getMonthNumberFromName($('.ui-datepicker-title .ui-datepicker-month').html()),currentDate[2]); 
     68                        $('#calendar').fullCalendar('gotoDate',$(this).html(), '0', '01'); 
    7169                        $('#calendar').fullCalendar( 'changeView', 'month'); 
    7270                }); 
     
    131129      -----------------------------------------------------------------*/ 
    132130                $(".button.add.add-event").click(function(event){ 
     131                        var startEvent = new Date();   
     132                        if(startEvent.toString('mm') < 30)  
     133                                        startEvent.add({minutes: (30 - parseInt(startEvent.toString('mm')))});  
     134                        else  
     135                                        startEvent.add({hours: 1, minutes: '-'+startEvent.toString('mm')});  
     136                        var endEvent = function(date){  
     137                                        if(!!User.preferences.defaultCalendar){  
     138                                                        return  parseInt(date.getTime()) +  
     139                                                                (       !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?   
     140                                                                        (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000) : 
     141                                                                        (User.preferences.defaultDuration * 60000) 
     142                                                                ); 
     143                                        }else  
     144                                                        return parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000);  
     145                        };        
     146                         
    133147                        eventDetails({  
    134                                 startTime: $.now(), 
    135                                 endTime:!!User.preferences.defaultCalendar ? Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration != "" ? ($.now() + Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000) : (User.preferences.defaultDuration * 60000) 
    136                                 : $.now() + (User.preferences.defaultDuration * 60000) 
     148                                startTime: startEvent.getTime(), 
     149                                endTime: endEvent(startEvent) 
    137150                        }, true ); 
    138151                }); 
    139152 
    140         var calendar = $('#calendar').fullCalendar({ 
     153        var calendar = $('#calendar').fullCalendar(DataLayer.merge({  
    141154 
    142155                defaultView: User.preferences.defaultCalView, 
     
    150163                        right: 'agendaDay,agendaWeek,month,year' 
    151164                }, 
    152                 firstDay: dayOfWeek(!!User.preferences.weekStart), 
     165                firstDay: dateCalendar.dayOfWeek[User.preferences.weekStart], 
    153166                editable: true, 
    154167                selectable: true, 
     
    169182                        day: 'dddd dd/MM'   
    170183                }, 
    171                 monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ],  
    172                 monthNamesShort: ['Jan','Fev','Mar','Abr','Maio','Jun','Jul','Ago','Set','Out','Nov','Dez'], 
    173                 dayNames: [ 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'], 
    174                 dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], 
    175                 dayNamesShortest: ['D','S','T','Q','Q','S','S'], 
     184                 
    176185                allDayText: 'Dia todo', 
    177186                buttonText: { 
     
    182191                        year: 'ano' 
    183192                }, 
    184                  
     193                /* 
    185194                eventRender: function( event, element, view ){ 
    186195                        $(element).attr( 'event-id', event.id ); 
    187196                }, 
    188  
     197                */ 
    189198                select: function( start, end, allDay, event, view ){ 
    190199                        eventDetails( { 'start': start, 
     
    204213                        eventDetails( DataLayer.get( "schedulable", evt.id), true); 
    205214                } 
    206         }); 
     215        }, dateCalendar)); 
    207216           
    208217        if($(window).height() < $('body').height()){ 
  • trunk/prototype/modules/calendar/templates/attendee_add.ejs

    r5358 r5409  
    1919                                <li class="organizer">  
    2020                                        <div style="overflow:hidden; width:100%; display:table;"> 
    21                                                 <input type="checkbox" value="<%= data.event.organizer.uid %>" disabled="disabled"> 
    22                                                 <input type="hidden" name="attendee[]" value="<%=data.event.organizer.uid%>"> 
     21                                                <input type="checkbox" value="<%= data.event.organizer.id %>" disabled="disabled"> 
     22                                                <input type="hidden" name="attendee[]" value="<%=data.event.organizer.id%>"> 
    2323                                                <input type="hidden" name="attendeeType[]" value="0"> 
    24                                                 <input type="hidden" name="attendee_organizer[]" value="<%=data.event.organizer.uid%>"> 
     24                                                <input type="hidden" name="attendee_organizer[]" value="<%=data.event.organizer.id%>"> 
    2525                                                <label for="attendee_organizer" title="<%= data.event.organizer.name ? data.event.organizer.name: '' %>" class="name"><%= data.event.organizer.name ? data.event.organizer.name : '' %></label> 
    2626                                                <label for="attendee_organizer" title="<%= data.event.organizer.mail ? data.event.organizer.mail: '' %>" class="mail"><%= data.event.organizer.mail ? data.event.organizer.mail : '' %></label> 
    27                                                 <% if (data.event.me.uid == data.event.organizer.uid && false) { %> 
     27                                                <% if (data.event.me.id == data.event.organizer.id && false) { %> 
    2828                                                <span class="button small swap">Mudar organizador</span> 
    2929                                                <% } %> 
     
    3636                                <li class="attendee">  
    3737                                        <div style="overflow:hidden; width:100%; display:table;"> 
    38                                                 <input type="checkbox" value="<%= data.event.attendee[i].uid %>" disabled="disabled"> 
    39                                                 <input type="hidden" name="attendee[]" value="<%=data.event.attendee[i].uid%>"> 
     38                                                <input type="checkbox" value="<%= data.event.attendee[i].id %>" disabled="disabled"> 
     39                                                <input type="hidden" name="attendee[]" value="<%=data.event.attendee[i].id%>"> 
    4040                                                <input type="hidden" name="attendeeType[]" value="<%=data.event.attendee[i].isExternal%>"> 
    4141                                                <label title="<%= data.event.attendee[i].name ? data.event.attendee[i].name: '' %>" class="name"><%= data.event.attendee[i].name ? data.event.attendee[i].name : '' %></label> 
  • trunk/prototype/modules/calendar/templates/event_add.ejs

    r5376 r5409  
    107107        <fieldset id="calendar_addevent_details4" class="tab-level2"> 
    108108                <legend class="hidden">Lembretes</legend> 
    109                 <%if(!data.event.id && data.event.alarms.length){%> 
    110                         <p class="default-alarm-event"> 
    111                                 <input type="checkbox" name="defaultAlarm" value="true" checked="checked"/> 
    112                                 <label class="input-default-alarm" for="defautAlarm">Usar alarmes padrões</label> 
    113                         </p> 
    114                 <%}%> 
     109                 
     110                <p class="default-alarm-event <%= (!data.event.id && data.event.alarms) ? '' : 'hidden'%>"> 
     111                        <input type="checkbox" name="defaultAlarm" value="true" checked="checked"/> 
     112                        <label class="input-default-alarm" for="defautAlarm">Usar alarmes padrões</label> 
     113                </p> 
     114         
    115115                <ul class="event-alarms-list"> 
    116116                        <% if (data.event && data.event.alarms) { 
  • trunk/prototype/modules/calendar/templates/event_list.ejs

    r5341 r5409  
    8888                                                <div class="details-event-list hidden"> 
    8989                                                        <fieldset class="fields-details-event-list">                                                     
    90                                                                 <p class="input-group date-info"> 
    91                                                                         <label>Início:</label> 
    92                                                                         <span class="date start-date"><%= _event.startDate %> às </span> 
    93                                                                         <span class="time start-time"><%= _event.startHour %></span>  
    94                                                                          
    95                                                                 </p> 
    96                                                                 <p class="input-group"> 
    97                                                                         <label>Término:</label> 
    98                                                                         <span class="date end-date"><%= _event.endDate %> às </span> 
    99                                                                         <span class="time end-time"><%= _event.endHour %></span> 
    100                                                                         <span><%= _event.timeZone %></span> 
    101                                                                 </p> 
     90                                                                <%if(_event.allDay){%> 
     91                                                                        <p class="input-group date-info"> 
     92                                                                                <label>Duração</label> 
     93                                                                                <span class="date start-date">Dia inteiro</span> 
     94                                                                        </p> 
     95                                                                <%}else{%> 
     96                                                                 
     97                                                                        <p class="input-group date-info"> 
     98                                                                                <label>Início:</label> 
     99                                                                                <span class="date start-date"><%= _event.startDate %> às </span> 
     100                                                                                <span class="time start-time"><%= _event.startHour %></span>  
     101                                                                                 
     102                                                                        </p> 
     103                                                                        <p class="input-group"> 
     104                                                                                <label>Término:</label> 
     105                                                                                <span class="date end-date"><%= _event.endDate %> às </span> 
     106                                                                                <span class="time end-time"><%= _event.endHour %></span> 
     107                                                                                <span><%= _event.timeZone %></span> 
     108                                                                        </p> 
     109                                                                <%}%> 
    102110                                                                <p class="input-group"> 
    103111                                                                        <label>Repete em</label> 
     
    108116                                                                        <% if(_event.alarms) { %> 
    109117                                                                                <span class="large" > 
    110                                                                                 <% for (var l=0; l < _event.alarms.length; l++) { %> 
    111                                                                                         Você será notificado por <%= _event.alarms[l].typee %> <%= _event.alarms[l].time %> <%= _event.alarms[l].unit %> antes do evento<br /> <!-- Tirar esse br --> 
    112                                                                                  
    113                                                                                 <% } %> 
     118                                                                                        <% for (var l=0; l < _event.alarms.length; l++) { %> 
     119                                                                                                <span class="large" >Você será notificado por um <%=dateCalendar.alarmtype[_event.alarms[l].type]%> <%= _event.alarms[l].time %> <%= dateCalendar.timeunit[_event.alarms[l].unit]%><%=_event.alarms[l].time > 1 ? 's' : '' %> antes do evento</span> 
     120                                                                                        <% } %> 
    114121                                                                                </span> 
    115                                                                                 <% } %> 
     122                                                                        <% } %> 
    116123                                                                </p> 
    117124                                                                <p class="input-group"> 
     
    128135                                                                </p> 
    129136                                                                <p class="input-group"> 
     137                                                                        <label>Organizador</label> 
     138                                                                        <span class="large"><%=_event.organizer.name%>  (<%= _event.organizer.mail %>)</span> 
     139                                                                </p> 
     140                                                                <p class="input-group"> 
    130141                                                                        <label>Participantes</label> 
    131                                                                         <span> 
    132                                                                         <% if(_event.participants) { %> 
     142                                                                        <% if(_event.attendee) { %> 
    133143                                                                                <span class="large" > 
    134                                                                                 <% for (var m=0; m < _event.participants.length; m++) { %> 
    135                                                                                         <%= _event.participants[m].name %> (<%= _event.participants[m].email %>) <br /> 
    136                                                                                  
    137                                                                                 <% } %> 
     144                                                                                        <% for (var m=0; m < _event.attendee.length; m++) { %> 
     145                                                                                                <span class="large"><%=_event.attendee[m].name%>  (<%= _event.attendee[m].mail %>)</span> 
     146                                                                                        <%}%> 
    138147                                                                                </span> 
    139                                                                                 <% } %> 
     148                                                                        <% } %> 
    140149                                                                </p> 
    141150                                                                <p class="input-group"> 
     
    156165                                                        <div class="menu-container footer-container"> 
    157166                                                                <input name="eventid" type="hidden" value="<%=_event.id%>"></input> 
     167                                                                <a class="button delete" href="#">Excluir</a> 
    158168                                                                <a class="button edit" href="#">Editar</a> 
    159                                                                 <a class="button delete" href="#">Excluir</a> 
    160169                                                        </div> 
    161170                                                </div> 
  • trunk/prototype/modules/calendar/templates/import_export.ejs

    r5341 r5409  
    1111     
    1212    <div id="tab-import"> 
    13         <form method="POST" action="../../converter.php" class="import-event-form"> 
     13        <form method="POST" action="../prototype/converter.php" class="import-event-form"> 
    1414        <fieldset class="import-calendar">  
    1515                <input type="hidden" name="type" value="iCal"> 
     
    3131        </form> 
    3232                <div class="menu-container footer-container menu-import-event"> 
    33                         <a class="button import calendar-import-btn-import" href="#">Importar</a> 
    3433                        <a class="button cancel calendar-import-btn-cancel" href="#">Cancelar</a> 
     34                                                <a class="button import calendar-import-btn-import" href="#">Importar</a> 
    3535                </div> 
    3636     </div> 
    3737     
    3838    <div id="tab-export"> 
    39         <form method="GET" action="export.php" class="export-event-form"> 
     39        <form method="GET" action="../prototype/modules/calendar/export.php" class="export-event-form"> 
    4040        <fieldset class="export_calendar"> 
    4141                <legend class="hidden">Exportar agenda</legend> 
     
    5353        </form> 
    5454                <div class="menu-container footer-container menu-export-event"> 
    55                         <a class="button export calendar-export-btn-export" href="#">Exportar</a> 
    5655                        <a class="button cancel calendar-export-btn-cancel" href="#">Cancelar</a> 
     56                                                <a class="button export calendar-export-btn-export" href="#">Exportar</a> 
    5757                </div> 
    5858    </div> 
  • trunk/prototype/modules/calendar/templates/index.ejs

    r5399 r5409  
    8181 
    8282<script type='text/javascript' src='<?= MODULESURL ?>/js/base64.js'></script> 
     83<script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.date.js'></script> 
     84 
    8385<script type='text/javascript' src='<?= MODULESURL ?>/js/helpers.js'></script> 
    8486<script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.codecs.js'></script> 
     87<script type='text/javascript' src='<?= MODULESURL ?>/js/timezone.js'></script> 
    8588<script type='text/javascript' src='<?= MODULESURL ?>/js/I18n.js'></script> 
    8689<script type="text/javascript" src="<?= MODULESURL ?>/js/init.js"></script> 
  • trunk/prototype/timezones.php

    r5341 r5409  
    457457"UTC":"+0000" 
    458458}, 
    459 "isDaylightSaving":"<?php 
    460                 $time = time(); 
    461                 $hora = localtime($time, true); 
    462                 if($hora['tm_isdst']){ 
    463                         echo true; 
    464                 }else{ 
    465                         echo false; 
    466                 }  
    467 ?>" 
     459"isDaylightSaving":"<?php $localtime = localtime(time(), true); echo !!$localtime['tm_isdst']; ?>" 
    468460} 
Note: See TracChangeset for help on using the changeset viewer.