Changeset 5592


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

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

Location:
trunk
Files:
6 added
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoCalendar/setup/tables_current.inc.php

    r5514 r5592  
    102102             
    103103             
    104             'calendar_object' => array( 
     104        'calendar_object' => array( 
    105105            'fd' => array( 
    106106                'id' => array( 'type' => 'auto', 'nullable' => False), 
     
    114114                'class_id' => array( 'type' => 'int', 'precision' => '8', 'nullable' => True), 
    115115                'last_update' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 
    116                 'range_end' => array( 'type' => 'date', 'nullable' => True), 
     116                'range_end' => array( 'type' => 'bigint', 'precision' => '16', 'nullable' => True), 
    117117                'summary' => array( 'type' => 'varchar', 'precision' => '255', 'nullable' => True), 
    118                 'range_start' => array( 'type' => 'date', 'nullable' => False), 
     118                'range_start' => array( 'type' => 'bigint', 'precision' => '16', 'nullable' => True), 
    119119                'allday' => array( 'type' => 'int', 'precision' => '2', 'default' => 0, 'nullable' => True), 
    120120                'repeat' => array( 'type' => 'int', 'precision' => '2', 'default' => 0, 'nullable' => True), 
     
    152152                'id' => array( 'type' => 'auto', 'nullable' => False), 
    153153                'action_id' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 
    154                 'range_end' => array('type' => 'date', 'nullable' => False), 
    155                 'range_start' => array('type' => 'date', 'nullable' => False), 
     154                'range_end' => array( 'type' => 'bigint', 'precision' => '16', 'nullable' => True), 
     155                'range_start' => array( 'type' => 'bigint', 'precision' => '16', 'nullable' => True), 
    156156                'unit' => array('type' => 'varchar','precision' => '20','nullable' => True), 
    157157                'time' => array('type' => 'varchar','precision' => '50','nullable' => True), 
     
    203203                'object_id' => array(  'type' => 'int', 'precision' => '8', 'nullable' => False), 
    204204                'object_type' => array(  'type' => 'int', 'precision' => '8', 'nullable' => False), 
    205                 'permision' => array(  'type' => 'varchar','precision' => '50', 'nullable' => False) 
     205                'permission' => array(  'type' => 'varchar','precision' => '50', 'nullable' => False) 
    206206            ), 
    207207            'pk' => array('id'), 
  • trunk/expressoMail1_2/js/draw_api.js

    r5588 r5592  
    28842884                        var endEvent = function(date){  
    28852885                                if(!!User.preferences.defaultCalendar){  
    2886                                         return  parseInt(date.getTime()) +  
    2887                                                 (       !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?   
     2886                                        return  new Date(parseInt(date.getTime()) +  
     2887                                                    (!!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?   
    28882888                                                        (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000) : 
    28892889                                                        (User.preferences.defaultDuration * 60000) 
    2890                                                 ); 
     2890                                                )); 
    28912891                                }else  
    2892                                         return parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000);  
     2892                                        return new Date(parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000));  
    28932893                        };        
     2894 
     2895                        var emails = $("#to_values_"+ID).val().split(','); 
     2896                         
     2897                         
     2898                        //Normalização dos dados evita ter que reemplementar toda as funcionalidades do calendar 
    28942899                        eventDetails({  
     2900                                         
     2901                                        acl: {inviteGuests: true, organization: true ,participationRequired: false, read: true, write: true}, 
     2902                                        alarms: [], 
     2903                                        allDay: false, 
     2904                                        attachments: [], 
     2905                                        attendee: '',//TODOOOOOO, 
     2906                                        calendar: User.preferences.defaultCalendar ? User.preferences.defaultCalendar : Calendar.calendars[0], 
     2907                                        calendars: Calendar.calendars, 
     2908                                        category: '', 
     2909                                        class: '1', 
     2910                                        delegatedFrom: {}, 
     2911                                        endDate: startEvent.toString(User.preferences.dateFormat), 
     2912                                        startDate: endEvent(startEvent).toString(User.preferences.dateFormat), 
     2913                                        startHour: startEvent.toString(User.preferences.hourFormat), 
     2914                                        endHour: endEvent(startEvent).toString(User.preferences.hourFormat), 
     2915                                        timezone: User.preferences.defaultCalendar ? Calendar.calendarOf[User.preferences.defaultCalendar].timezone : User.preferences.timezone, 
    28952916                                        summary : $("#subject_"+ID).text(), 
    28962917                                        description : $("#body_" + ID).text(), 
    28972918                                        startTime: startEvent.getTime(), 
    2898                                         endTime: endEvent(startEvent) 
    2899                         }, true, path); 
    2900                          
    2901                         //TimePicker Não está funcionando corretamente, o motivo ainda é desconhecido. 
    2902                         /* 
    2903                         $(".new-event-win").find('input.time').timepicker({  
    2904                                 closeText: 'Ok', 
    2905                                 hourGrid: 4, 
    2906                                 minuteGrid: 10, 
    2907                                 //ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 
    2908                                 timeFormat: "hh:mm tt", 
    2909                                 onSelect: function (selectedDateTime){ 
    2910                                         if(!(User.preferences.hourFormat.length == 5)) 
    2911                                                 $(this).val(selectedDateTime.replace(/[\.]/gi, ""));                                                             
    2912                                 }, 
    2913                                 onClose : function (selectedDateTime){ 
    2914                                         if(!(User.preferences.hourFormat.length == 5)) 
    2915                                                 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
    2916                                 } 
    2917                         }); 
    2918                         */ 
    2919                          
    2920                         var emails = $("#to_values_"+ID).val(); 
    2921                         emails = emails.split(","); 
    2922                         var blkAddAtendee = UI.dialogs.addEvent.find('#calendar_addevent_details6'); 
    2923                         var onShowToolTip = function(arg0) { 
    2924                                 $('.qtip-active .button.close').button({ 
    2925                                         icons: {primary: "ui-icon-close"}, 
    2926                                         text: false 
    2927                                 }); 
    2928                                 $('.qtip-active .button').button() 
    2929                                 .filter('.save').click(function(event, ui) { 
    2930                                         if (saveContact()) {                                             
    2931                                                 lastEditAttendeeToolTip.qtip("destroy"); 
    2932                                         } else { 
    2933                                                 return false; 
    2934                                         } 
    2935                                 }).end() 
    2936                                 .filter('.cancel').click(function(event, ui) { 
    2937                                         lastEditAttendeeToolTip.qtip("destroy"); 
    2938                                 }) 
    2939  
    2940                                 /**  
    2941                                  * Trata o ENTER no campo da tooltip, equivalente a salvar  
    2942                                  * o novo convidado. 
    2943                                  */ 
    2944                                 $('.qtip-active input').keydown(function(event) { 
    2945                                         if (event.keyCode == '13') {                                             
    2946                                                 if (saveContact()) {                                             
    2947                                                         lastEditAttendeeToolTip.qtip("destroy"); 
    2948                                                 } 
    2949  
    2950                                                 lastEditAttendeeToolTip.qtip("destroy"); 
    2951                                                 event.preventDefault(); 
    2952                                         } 
    2953                                 }) 
    2954                                 .filter('[name="name"]').Watermark("informe o nome do contato").end() 
    2955                                 .filter('[name="mail"]').Watermark("informe o email do contato"); 
    2956                         } 
     2919                                        endTime: endEvent(startEvent), 
     2920                                        timezones: Timezone.timezones, 
     2921                                        me: {name: User.me.name, mail: User.me.mail, acl: 'rowi', status: '1', delegatedFrom: '0', id: User.me.id}, 
     2922                                        organizer: {name: User.me.name, mail: User.me.mail, acl: 'rowi', status: '1', delegatedFrom: '0' , id: User.me.id}, 
     2923                                        statusParticipants: {accepted: 0, cancelled: 0, tentative: 0, unanswered:emails.length}, 
     2924                                        location: '', 
     2925                                        attendee: $.map(emails, function( mail ){                        
     2926                                                 
     2927                                                var decoded =  Encoder.htmlDecode(mail); 
     2928                                                var newAttendeeName = ""; 
     2929 
     2930                                                var user = DataLayer.get('user', ["=", "mail", decoded.match(/<([^<]*)>[\s]*$/) ? decoded.match(/<([^<]*)>[\s]*$/)[1].toLowerCase() : decoded], true); 
     2931                                                 
     2932                                                if( $.type(user) == "array") 
     2933                                                                user = user[0]; 
     2934 
     2935                                                if(!user) 
     2936                                                        user = {name : decoded.match(/"([^"]*)"/)[1] , mail : decoded.match(/[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])/)[1]}; 
     2937 
     2938                                                if(User.me.mail == user.mail) 
     2939                                                        return(null); 
     2940                                                         
     2941                                                user.isExternal = (!!user && !(!!user.isExternal)) ? 0 : 1; 
     2942 
     2943                                                return  DataLayer.merge({ 
     2944                                                        name: user.name, 
     2945                                                        mail: user.mail, 
     2946                                                        acl:  'r', 
     2947                                                        delegatedFrom: '0', 
     2948                                                        status: '4' 
     2949                                                }, !!user.id ? {id : DataLayer.put('participant', {user: user.id, isExternal: user.isExternal}) } : {id: DataLayer.put('participant', {user: user})});  
     2950                                 
     2951                                        })       
    29572952                                         
    2958                         $.each(emails, function(index, value) {  
    2959                                 var decoded =  Encoder.htmlDecode(value); 
    2960                                 var newAttendeeName = ""; 
    2961                                 if(decoded.match(/<([^<]*)>[\s]*$/)){ 
    2962                                         var user = DataLayer.get('user', ["=", "mail", decoded.match(/<([^<]*)>[\s]*$/)[1].toLowerCase()], true); 
    2963                                         if(!(!!user)){ 
    2964                                                 newAttendeeName = decoded.match(/"([^"]*)"/)[1]; 
    2965                                                 var newAttendeeEmail = decoded.match(/<([^<]*)>[\s]*$/)[1]; 
    2966                                         } 
    2967                                 } 
    2968                                 else{ 
    2969                                         var user = DataLayer.get('user', ["=", "mail", decoded], true); 
    2970                                         if(!(!!user)){ 
    2971                                                 if(decoded.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/)) 
    2972                                                         var newAttendeeEmail = decoded; 
    2973                                                 else{ 
    2974                                                         var newAttendeeEmail = ""; 
    2975                                                         newAttendeeName = decoded; 
    2976                                                 } 
    2977                                         } 
    2978                                 } 
    2979                                          
    2980                                 var isExternal = (!!user && !(!!user.isExternal)) ? 0 : 1; 
    2981                                 var add = false; 
    2982                                 if(user){ 
    2983                                         if(!(blkAddAtendee.find('label.mail[title="' + user[0].mail + '"]').length)){ 
    2984                                                 user[0].id =  DataLayer.put('participant', {user: user[0].id, isExternal: isExternal}); 
    2985                                                 blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 
    2986                                                         DataLayer.render(path+'templates/participants_add_itemlist.ejs', user) 
    2987                                                 ) 
    2988                                                 .find('.button.close').addClass('small').button({text:false, icons:{primary:'ui-icon-close'}}).click(function() { 
    2989                                                         DataLayer.remove('participant', $(this).parent().find('[type=checkbox]').val()); 
    2990                                                         $(this).parent().remove(); 
    2991                                                 }).end() 
    2992                                                 .scrollTo('max'); 
    2993                                                 add = true; 
    2994                                         } 
    2995                                 }else{ 
    2996                                         userId = DataLayer.put('user', {name: newAttendeeName, mail: newAttendeeEmail, isExternal: isExternal}); 
    2997                                         newAttendeeId = DataLayer.put('participant', {user: userId, isExternal: isExternal}); 
    2998                                          
    2999                                         blkAddAtendee.find('dd.attendee-list ul.attendee-list').append( 
    3000                                                 DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{id:newAttendeeId, name: newAttendeeName, mail: newAttendeeEmail, isExternal: 1}]) 
    3001                                         ).find('.button.close').addClass('small').button({text:false, icons:{primary:'ui-icon-close'}}).click(function() { 
    3002                                                 DataLayer.remove('participant', $(this).parent().find('[type=checkbox]').val()); 
    3003                                                 $(this).parent().remove(); 
    3004                                         }).end() 
    3005                                         .scrollTo('max'); 
    3006                                         add = true; 
    3007                                 } 
    3008                                 if(add){ 
    3009                                         lastEditAttendeeToolTip = blkAddAtendee.find('dd.attendee-list li:last'); 
    3010                                         lastEditAttendeeToolTip.qtip({ 
    3011                                                 show: {ready: false, solo: true, when: {event: 'click'}}, 
    3012                                                 hide: false, 
    3013                                                 content: { 
    3014                                                         text: $('<div></div>').html( DataLayer.render( path+'templates/attendee_quick_edit.ejs', {attendee:{name:( (!!user ? (!!user[0] ? (!!user[0].name ? user[0].name : newAttendeeName): newAttendeeName) : newAttendeeName)), mail:(!!user ? (!!user[0] ? (!!user[0].mail ? user[0].mail : newAttendeeEmail): newAttendeeEmail) : newAttendeeEmail)}} ) ),  
    3015                                                         title: { 
    3016                                                                 text:'Detalhes do participante',  
    3017                                                                 button: '<a class="button close" href="#">close</a>' 
    3018                                                         } 
    3019                                                 }, 
    3020                                                 style: {name: 'blue', tip: {corner: 'leftMiddle'}, border: {width: 4, radius: 8}, width: {min: 230, max:230}}, 
    3021                                                 position: { 
    3022                                                         corner: { 
    3023                                                                 target: 'rightMiddle', 
    3024                                                                 tooltip: 'leftMiddle' 
    3025                                                         }, 
    3026                                                         adjust: {x:0, y:0} 
    3027                                                 } 
    3028                                         }); 
    3029                                         lastEditAttendeeToolTip.qtip("api").onShow = onShowToolTip; 
    3030                                 } 
    3031                         });                                              
     2953                        }, true, path, true); 
    30322954                } 
    30332955                subject.appendChild(new_event_logo); 
  • trunk/expressoMail1_2/templates/default/expressoMail_reset.css

    r5389 r5592  
    5858        quotes: "" ""; 
    5959} 
    60  
     60.new-event-win.active .mail.name-special, .new-event-win.active .name.name-special{ 
     61  padding: 0 0 0 35px; 
     62} 
     63 
     64.new-event-win.active .add-attendee-search.search-field { 
     65  width: 249px; 
     66 } 
     67  
     68 .new-event-win.active #calendar_addevent_details4 { 
     69  margin: 10px 0 0 0; 
     70 }  
     71  
     72 .new-event-win.active input{ 
     73  color: #000; 
     74 }  
     75  
     76 .new-event-win.active #calendar_addevent_details5 { 
     77  margin: 10px 0 11px 0; 
     78 } 
    6179 
    6280.new-event-win.active select { 
  • trunk/prototype/api/datalayer.js

    r5539 r5592  
    10671067         
    10681068        var result = false; 
    1069  
    1070         /* 
    1071         *  TODO - Para correta aplicação de filtros campos com valores de datas 
    1072         * devem ter tratamento diferenciado, sendo que como string os mesmos não serão  
    1073         * corretamente tratados.  
    1074         */ 
    10751069         
    10761070        if( bothSides || !oneSide ) 
    1077             //result = this.check( concept, id || filter ); 
    1078                 result = concept == 'schedulable' ? false : this.check( concept, id || filter ); 
     1071            result = this.check( concept, id || filter ); 
     1072         
     1073        if (bothSides && filter.filter && filter.criteria) 
     1074                result = false; 
     1075 
     1076                 
    10791077        if( !result && (bothSides || oneSide) ) 
    10801078        { 
     
    11161114        return( filtered ); 
    11171115    }, 
     1116 
     1117        converterType: function( filter ){ 
     1118 
     1119                        return isNaN(parseInt(filter)) ? filter : parseInt(filter); 
     1120                 
     1121        }, 
     1122 
    11181123     
    11191124    compare: function( operator, base, test ){ 
    11201125       
    1121       switch( operator ) 
    1122       { 
    1123           case '*':  return RegExp( ".*" + test + ".*" ).test( base ); 
    1124           case '^':  return RegExp( "^" + test +  ".*" ).test( base ); 
    1125           case '$':  return RegExp( ".*"  + test + "$" ).test( base ); 
    1126  
    1127           case '&':  return ( base && test ); 
    1128           case '|':  return ( base || test ); 
    1129  
    1130           case '=':  return ( base == test ); 
    1131           case '<=': return ( base <= test ); 
    1132           case '>=': return ( base >= test ); 
    1133           case '>':  return ( base <  test ); 
    1134           case '<':  return ( base >  test ); 
    1135       } 
     1126        base = this.converterType(base); 
     1127        test = this.converterType(test); 
     1128          
     1129    switch( operator ){ 
     1130         
     1131        case '*':  return RegExp( ".*" + test + ".*" ).test( base ); 
     1132        case '^':  return RegExp( "^" + test +  ".*" ).test( base ); 
     1133        case '$':  return RegExp( ".*"  + test + "$" ).test( base ); 
     1134 
     1135        case '&':  return ( base && test ); 
     1136        case '|':  return ( base || test ); 
     1137 
     1138        case '=':  return ( base == test ); 
     1139        case '<=': return ( base <= test ); 
     1140        case '>=': return ( base >= test ); 
     1141        case '>':  return ( base <  test ); 
     1142        case '<':  return ( base >  test ); 
     1143         
     1144        default: return true; 
     1145        } 
    11361146       
    11371147    }, 
  • trunk/prototype/config/attachment.ini

    r5514 r5592  
    1717name = "name" 
    1818size = "size" 
    19  
     19owner = "owner" 
  • trunk/prototype/config/calendar.ini

    r5514 r5592  
    44[model.hasMany] 
    55signatures = calendarSignature.calendar 
     6permissions = calendarToPermission.calendar 
    67 
    78[before.create] 
     
    1516davcalDeleteCollection = modules/calendar/interceptors/DBMapping.php 
    1617 
    17  
    1818[PostgreSQL.mapping] 
    1919id = "id" 
  • trunk/prototype/config/calendarSignatureAlarm.ini

    r5514 r5592  
    1010[before.update] 
    1111encodeSignatureAlarmType = modules/calendar/interceptors/DBMapping.php 
    12 encodeUpdateConcept = modules/calendar/interceptors/DBMapping.php 
    1312 
    1413[before.create] 
    1514encodeSignatureAlarmType = modules/calendar/interceptors/DBMapping.php 
    16 encodeCreateConcept = modules/calendar/interceptors/DBMapping.php 
    1715 
    1816[before.delete] 
  • trunk/prototype/config/expressoCalendar.ini

    r5438 r5592  
    11folder = "calendar" 
    22useCaldav = false 
     3onRemoveCascadeCalDav = false 
    34 
    45;Utilizar ou não caldav {TRUE or FALSE} 
    56;useCaldav = TRUE 
     7 
     8; onRemoveCascadeCalDav Remover agenda no caldav automaticamente ao remover no expresso (TRUE or FALSE) 
     9;onRemoveCascadeCalDav = true 
  • trunk/prototype/modules/calendar/constants.php

    r5514 r5592  
    1111define('STATUS_DELEGATED', 5); 
    1212 
    13  
    1413define('ALARM_ALERT', 1); 
    1514define('ALARM_MAIL', 2); 
     
    2322define('CLASS_CONFIDENTIAL', 3); 
    2423 
    25  
    2624define('ICAL_ACTION_IMPORT', 1); 
    2725define('ICAL_ACTION_UPDATE', 2); 
     
    3129define('ICAL_ACTION_SUGGESTION', 6); 
    3230 
     31define('ATTENDEE_ACL_ORGANIZATION', 'o'); 
     32define('ATTENDEE_ACL_WRITE', 2); 
     33define('ATTENDEE_ACL_PARTICIPATION_REQUIRED', 'w'); 
     34define('ATTENDEE_ACL_INVITE_GUESTES', 'i'); 
     35define('ATTENDEE_ACL_READ', 'r'); 
     36 
     37define('CALENDAR_PRIVATE', 0); 
     38define('CALENDAR_PUBLIC', 1); 
     39 
     40define('CALENDAR_ACL_WRITE', 'w'); 
     41define('CALENDAR_ACL_READ', 'r'); 
     42define('CALENDAR_ACL_REMOVE', 'd'); 
     43define('CALENDAR_ACL_BUSY', 'b'); 
     44define('CALENDAR_ACL_SHARED', 's'); 
    3345?> 
  • trunk/prototype/modules/calendar/css/layout.css

    r5515 r5592  
    3434 
    3535#wrap .search-field input {  
    36         width: 150px;  
     36        width: 160px;  
     37        padding: 0 0 0 3px; 
    3738} 
    3839 
     
    8889.fg-menu-container { 
    8990        z-index: 999; 
     91        min-width: 134px !important; 
     92} 
     93 
     94.fg-menu-container.evt-option{ 
     95        min-width: 85px !important; 
     96        padding: 0; 
     97} 
     98 
     99.fg-menu-container.evt-option a{ 
     100        padding: 0.1em 3%; 
    90101} 
    91102 
     
    181192        display: inline-block; 
    182193        border: none; 
     194        width: 215px; 
    183195} 
    184196 
    185197fieldset.search-field span { 
    186198        display: inline-block; 
    187         margin:0 0 -3px 5px; 
     199        margin:0 0 -3px 0px; 
     200        cursor: pointer; 
    188201} 
    189202/* #search area definition */ 
     
    225238 
    226239fieldset.block-add-attendee .add-attendee-search { max-width: 250px; margin: 5px;} 
    227 fieldset.block-add-attendee .add-attendee-search input { max-width: 215px; width: 215px;} 
     240fieldset.block-add-attendee .add-attendee-search input { max-width: 220px; width: 220px;} 
    228241fieldset.block-add-attendee .search-result-list { width: 255px; max-height: 215px; overflow: auto;} 
    229242fieldset.block-add-attendee .search-result-list .ui-widget-content { border: none;} 
     
    409422} 
    410423 
     424.evt-list-options.my-evt-list-options{ 
     425        position: absolute; 
     426        width: 110px; 
     427        display: block; 
     428         
     429} 
     430 
    411431 
    412432.colors-options { padding-left: 5px; } 
     
    428448} 
    429449 
     450.user-list .hover-user { background-color: #DFEFFC;} 
     451 
     452.user-acls-shared-calendar{ 
     453        width: 130px; 
     454        float: right; 
     455        margin-right: 20px; 
     456} 
     457 
     458.user-acls-shared-calendar.calendar{ 
     459        text-align: right; 
     460} 
     461 
     462 
     463.calendars-list .search-field.calendar-shared-search { 
     464        max-width: 193px !important; 
     465        width: 193px !important; 
     466        float: right; 
     467} 
     468 
     469.calendars-list .search-field input.search{ 
     470        width:165px !important; 
     471} 
     472 
     473.calendars-list .status-list-shared{ 
     474        display: inline-block; 
     475        margin: 0 0 -4px -5px; 
     476        cursor: pointer; 
     477} 
     478 
     479.calendars-list .title-signed-calendars{ 
     480        cursor: pointer; 
     481} 
     482 
    430483.my-calendars a.new-calendar .ui-button-text { 
    431484    padding: 0; 
     485} 
     486 
     487.new-calendar-shared{ 
     488        float: right; 
    432489} 
    433490 
     
    436493        padding-top: 3px; 
    437494        padding-bottom: 3px; 
     495} 
     496 
     497dl.block-add-user { 
     498        max-width: 290px; 
     499        min-height: 260px; 
     500        display: block; 
     501        float:right; 
     502        margin: 0 10px 10px 0; 
     503} 
     504 
     505dl.block-add-calendar { 
     506        max-width: 290px; 
     507        min-height: 185px; 
     508        display: block; 
     509        float:right; 
     510        margin: 0 10px 10px 0; 
     511} 
     512 
     513dl.block-public-calendar { 
     514        max-width: 290px; 
     515        min-height: 30px; 
     516        display: block; 
     517        float:right; 
     518        margin: 0 10px 1px 0; 
     519} 
     520 
     521fieldset.block-add-user, .block-add-user li{ 
     522        border: none; 
     523} 
     524 
     525fieldset.add-user-search{ 
     526        margin: 0 0 5px 0; 
     527} 
     528 
     529dl.block-user-list{ 
     530        float:left; 
     531        margin: 0 0 10px 10px; 
     532} 
     533 
     534dt.user-list{ 
     535        width: 117px; 
     536        margin-right: 5px; 
     537} 
     538 
     539dt.calendar-list{ 
     540        width: 144px; 
     541        margin-right: 5px; 
     542} 
     543 
     544dt.calendar-shared, dt.user-list, dt.add-user, dt.calendar-list, dt.calendar-public{ 
     545        background-color: white; 
     546        margin: 5px 0 -6px 5px; 
     547        font-weight: bold; 
     548        display: table; 
     549        position: relative; 
     550} 
     551 
     552dd.add-user{height: 240px;} 
     553dd.add-user-calendar{height: 192px;} 
     554 
     555dd.calendar-public{height: 23px;} 
     556 
     557dd.add-user-calendar, dd.calendar, dd.user-list, dd.add-user, dd.calendar-list, dd.calendar-public{ 
     558        border: 1px solid #BFBFBF; 
     559        border-image: initial; 
     560        width: 330px; 
     561        padding: 7px 0px 4px 4px; 
     562} 
     563 
     564dd.add-user-calendar ul{ 
     565        width: 250px; 
     566        max-height: 166px; 
     567} 
     568 
     569dd.add-user-calendar, dd.add-user,  dd.calendar-public{ 
     570        width: 250px; 
     571} 
     572 
     573div.shared-calendar fieldset.shared-calendar-configure{ 
     574        margin-top: 10px; 
     575} 
     576 
     577.add-user fieldset.block-add-user{ 
     578        width: 245px; 
     579} 
     580 
     581dd.user-list{ 
     582        height: 193px; 
     583} 
     584 
     585dd.calendar-list{ 
     586        height: 240px; 
    438587} 
    439588 
  • trunk/prototype/modules/calendar/css/style.css

    r5532 r5592  
    4747 
    4848.new-event-win fieldset { border: none; margin: 0; padding: 0; } 
    49 .new-event-win fieldset.tab-level2 { padding: 15px 5px; } 
     49.new-event-win fieldset.tab-level2 { padding: 0px 5px; } 
    5050.new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 
    5151 
  • trunk/prototype/modules/calendar/interceptors/DBMapping.php

    r5514 r5592  
    99    public function encodeCreateSchedulable( &$uri , &$params , &$criteria , $original ){                        
    1010        $params['type_id'] = EVENT_ID; 
    11                
    12         $params['rangeStart'] = gmdate( 'd-m-Y' , (int)($params['startTime'] / 1000) ); 
     11         
     12                $params['startTime'] =  strtotime( $params['startTime'] . ' ' .$params['timezone']).'000'; 
     13         
     14                $params['endTime'] =   strtotime( $params['endTime'] . ' ' .$params['timezone']).'000'; 
     15                 
     16                if($params['allDay']) 
     17                        $params['endTime'] =  $params['endTime']  + 86400000; 
    1318 
    1419    //        if( !isset( $new['repeat'] )) 
    1520    //            $new['range_end'] = '7287926400'; // 12/12/2200 
    1621    //        else 
    17             $params['rangeEnd'] = gmdate( 'd-m-Y' , (int)($params['endTime'] / 1000) ); 
     22            $params['rangeEnd'] = $params['endTime']; 
     23                        $params['rangeStart'] =  $params['startTime']; 
     24 
    1825            /////////////////////////////////////////////////////////////////// 
    1926 
     
    2431             
    2532        }        
     33                 
    2634    public function encodeCreateAlarm( &$uri , &$params , &$criteria , $original ){ 
    2735         
     
    5967                                $params =  $_FILES[$params['source']]; 
    6068                 
    61                 //$params['source'] = base64_encode( $params['source'] );        
     69                if(isset($params['owner'])) 
     70                        $params['owner'] = Config::me('uidNumber'); 
    6271                 
    6372        } 
     
    112121    public function encodeUpdateSchedulable( &$uri , &$params , &$criteria , $original ){        
    113122        if(isset($params['startTime'])) 
    114                 $params['rangeStart'] = gmdate( 'd-m-Y' , (int)($params['startTime'] / 1000) ); 
     123                $params['rangeStart'] = $params['startTime'] ; 
    115124        if(isset($params['endTime'])) 
    116                 $params['rangeEnd'] = gmdate( 'd-m-Y' , (int)($params['endTime'] / 1000) );        
     125                $params['rangeEnd'] = $params['endTime'] ;        
    117126                 
    118127                 
     
    172181        } 
    173182      
     183         public function deepnessFindCalendarShared( &$uri , &$result , &$criteria , $original ){                                
     184                if(isset($original['criteria']['deepness']) && count($result) > 0){ 
     185                        $calendarIds = array(); 
     186                        foreach($result as $key => $value) 
     187                                array_push($calendarIds, $value['calendar']); 
     188                         
     189                        $calendar = Controller::find( array( 'concept' => 'calendar' ) , false ,array( 'filter' => array('AND', array('IN','id', $calendarIds), $original['criteria']['filter'])));  
     190                         
     191                        if(!is_array($calendar)) 
     192                                $result = ''; 
     193 
     194                        $newResult = array(); 
     195                        foreach($calendar as $key => $value){ 
     196                                foreach($result as $k => $r){ 
     197 
     198                                        if($r['calendar'] == $value['id']){ 
     199                                                $r['calendar'] = $value; 
     200                                                array_push($newResult, $r); 
     201                                        } 
     202                                } 
     203                        } 
     204                         
     205                        foreach($newResult as $key => &$value){ 
     206                                if($value['user']  != 0) 
     207                                        $value['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $value['user'] )); 
     208                        } 
     209 
     210 
     211                $result = $newResult; 
     212                } 
     213    }    
     214  
    174215    //TODO: Remover apos suporte a deepness na api  
    175216    public function deepnessFindEvent( &$uri , &$result , &$criteria , $original ){              
    176         
     217 
    177218       if(isset($original['criteria']['deepness'])) 
    178219       { 
     220                         
     221                        $Time = new DateTime( 'now', new DateTimeZone('UTC') ); 
     222                        $DayLigth = array(); 
    179223           foreach ($result as $i => $v) 
    180224           { 
     225 
     226                                if(!isset($currentTimezone) || $currentTimezone  != $original['criteria']['timezones'][$v['calendar']]){ 
     227                                        $currentTimezone = $original['criteria']['timezones'][$v['calendar']]; 
     228                                        $Time->setTimezone(new DateTimeZone($currentTimezone)); 
     229                                } 
     230 
     231                                $Time->setTimestamp( (int)($v['startTime'] / 1000)); 
     232                                $DayLigth['calendar']['startTime'] =  $Time->format('I') ? 1 : 0; 
     233                                 
     234                                $Time->setTimestamp( (int)($v['endTime'] / 1000)); 
     235                                $DayLigth['calendar']['endTime'] =  $Time->format('I') ? 1 : 0; 
     236                                 
     237                                if($currentTimezone != $v['timezone']){ 
     238                                        $currentTimezone = $v['timezone']; 
     239                                        $Time->setTimezone(new DateTimeZone($v['timezone'])); 
     240                                 
     241                                        $Time->setTimestamp( (int)($v['startTime'] / 1000)); 
     242                                        $DayLigth['event']['startTime'] =  $Time->format('I') ? 1 : 0; 
     243 
     244                                        $Time->setTimestamp( (int)($v['endTime'] / 1000)); 
     245                                        $DayLigth['event']['endTime'] =  $Time->format('I') ? 1 : 0; 
     246                                }else 
     247                                        $DayLigth['event'] = $DayLigth['calendar']; 
     248                                         
     249                                 
     250                                $result[$i]['DayLigth'] = $DayLigth; 
     251                                 
    181252                if(isset($v['id'])) 
    182253                { 
     
    195266                    }        
    196267                    $result[$i]['participants'] = $participants; 
    197                  
     268                                         
     269                                         
     270                                         
    198271                                        $attachmentRelation = Controller::find( array( 'concept' => 'schedulableToAttachment' ) , false ,array( 'filter' => array('=', 'schedulable'  ,  $v['id']) ));  
    199272                                        if(is_array($attachmentRelation)){ 
     
    214287        
    215288   }  
    216     
     289 
    217290    //TODO: Remover apos suporte a deepness na api  
    218291    public function deepnessReadEvent( &$uri , &$result , &$criteria , $original ){              
     
    295368                if(isset($v['calendar'])){ 
    296369                    $result[$i]['calendar'] = Controller::read( array( 'concept' => 'calendar' , 'id' => $v['calendar']));  
    297                                         $result[$i]['defaultAlarms'] = Controller::find( array( 'concept' => 'calendarSignatureAlarm' ) , false ,array( 'filter' => array('=', 'calendarSignature'  ,  $v['id']) ));      
     370                                        $result[$i]['defaultAlarms'] = Controller::find( array( 'concept' => 'calendarSignatureAlarm' ) , false ,array( 'filter' => array('=', 'calendarSignature'  ,  $v['id']) ));     
     371                                        //Caso não seja o dono da agenda retorna o objeto permission com as acls 
     372                                        if($result[$i]['isOwner'] == 0){ 
     373                                                $permission = Controller::find( array( 'concept' => 'calendarToPermission'), false ,array( 'filter' => array('AND', array('=', 'calendar' ,  $v['calendar']), array('=', 'user', Config::me('uidNumber') ) ) ) );  
     374 
     375                                                 
     376         
     377                                                 
     378                                                if(!is_array($permission) || !$permission  ){ 
     379                                                        ob_start(); 
     380                                                        var_dump($permission); 
     381                                                         
     382                                                        $output = ob_get_clean(); 
     383                                                        file_put_contents( "/tmp/acoutinho.log",  $output , FILE_APPEND); 
     384                                                        $permission = Controller::find( array( 'concept' => 'calendarToPermission'), false ,array( 'filter' => array('AND', array('=', 'calendar' ,  $v['calendar']), array('=', 'type', '1' ) ) ) );     
     385                                                         
     386                                                        ob_start(); 
     387                                                var_dump($permission); 
     388                                                 
     389                                                $output = ob_get_clean(); 
     390                                                file_put_contents( "/tmp/acoutinho.log",  $output , FILE_APPEND); 
     391                                                         
     392                                                } 
     393                                                $result[$i]['permission'] = $permission[0]; 
     394                                        } 
    298395                                } 
    299396           } 
     
    627724                        }          
    628725        } 
    629   
    630                  
    631726        } 
    632727 
     
    640735     
    641736   public function davcalDeleteCollection( &$uri , &$params , &$criteria , $original ){  
    642         if( Config::module('useCaldav') ) 
     737        if( Config::module('useCaldav') &&  Config::module('onRemoveCascadeCalDav')) 
    643738        { 
    644739           require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; 
  • trunk/prototype/modules/calendar/js/calendar.codecs.js

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

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

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

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

    r5514 r5592  
    160160                <fieldset class="block-add-attendee" title="Participantes"> 
    161161                        <fieldset class="add-attendee-search search-field ui-corner-all"> 
     162                                <input class="search" type="text" /> 
    162163                                <span class="ui-icon ui-icon-search"></span> 
    163                                 <input class="search" type="text" /> 
    164164                        </fieldset> 
    165165                        <ul class="search-result-list ui-corner-all"> 
  • trunk/prototype/modules/calendar/templates/calendar_list.ejs

    r5399 r5592  
    11<div class="all-list-calendars"> 
    2 <% var agendas_usuario = data.calendars %> 
     2<% var signature = data.signatures %> 
    33<% var external = false %> 
    44<div class="my-calendars"> 
     
    77        <a href="#" class="button new new-calendar">Nova Agenda</a> 
    88        <ul class="list-calendars my-list-calendars"> 
    9                                 <% for (var i=0; i < agendas_usuario.length; i++) { 
    10  
    11                                         if(data.signatureOf[agendas_usuario[i].id].isOwner == 1){ 
    12                                          
    13                                                 var assinatures = data.signatureOf[agendas_usuario[i].id]; 
    14  
     9                                <% for (var i=0; i < signature.length; i++) { 
     10                                        if(signature[i].isOwner == 1){ 
    1511                                %> 
    16                                         <li class="list-calendars-item list-calendars-item-<%= agendas_usuario[i].id %>"> 
     12                                        <li class="list-calendars-item list-calendars-item-<%= signature[i].calendar.id %>"> 
    1713                                                 
    1814                                                <div> 
    19                                                         <input class="calendar-view" type="checkbox" name="" value="<%= agendas_usuario[i].id %>" checked="checked"/> 
    20                                                         <label><%= agendas_usuario[i].name %></label> 
     15                                                        <input class="calendar-view" type="checkbox" name="" value="<%= signature[i].calendar.id %>" checked="checked"/> 
     16                                                        <label><%= signature[i].calendar.name %></label> 
    2117                                                         
    2218                                                </div>  
    23                                                         <a class="cal-list-options-btn my-cal-list-options-btn-<%= agendas_usuario[i].id %>" style="background-color:#<%=assinatures.backgroundColor%>; border-color:#<%= assinatures.borderColor%>;"> 
     19                                                        <a class="cal-list-options-btn my-cal-list-options-btn-<%= signature[i].calendar.id %>" style="background-color:#<%=signature[i].backgroundColor%>; border-color:#<%= signature[i].borderColor%>;"> 
    2420                                                                <img src="../prototype/modules/calendar/img/arrow_down.png" width="10" height="10" class="cal-list-img"/> 
    2521                                                        </a> 
    2622                                                         
    2723                                                         
    28                                                 <div class="cal-list-options my-cal-list-options-<%= agendas_usuario[i].id %> hidden"> 
     24                                                <div class="cal-list-options my-cal-list-options-<%= signature[i].calendar.id %> hidden"> 
    2925                                                        <ul> 
    30                                                                 <li><a href="#" onclick="add_tab_configure_calendar(<%= agendas_usuario[i].id%>);">Configurações</a></li> 
    31                                                                 <li><a href="#" onclick="show_modal_import_export(0, <%= agendas_usuario[i].id%>);">Importar</a></li> 
    32                                                                 <li><a href="#" onclick="show_modal_import_export(1, <%= agendas_usuario[i].id%>);">Exportar</a></li> 
     26                                                                <li><a href="#" onclick="add_tab_configure_calendar(<%= signature[i].calendar.id%>);">Configurações</a></li> 
     27                                                                <li><a href="#" onclick="show_modal_import_export(0, <%= signature[i].calendar.id%>);">Importar</a></li> 
     28                                                                <li><a href="#" onclick="show_modal_import_export(1, <%= signature[i].calendar.id%>);">Exportar</a></li> 
     29                                                                <li><a href="#" onclick="show_modal_shared(<%= signature[i].calendar.id%>);">Compartilhar agenda</a></li> 
    3330                                <li><a href="#" onclick="remove_calendar();">Remover agenda</a></li> 
    3431                                                        </ul> 
     
    4441        </ul> 
    4542</div> 
    46 <% if (external) { %> 
     43 
    4744<div class="signed-calendars"> 
    4845        <a title='Agendas assinadas' class="title-signed-calendars" aria-expanded='false' role='button' tabindex='0'>Agendas assinadas</a>                       
     46        <span class="status-list-shared ui-icon ui-icon-triangle-1-s"></span> 
     47        <a href="#" class="button new new-calendar-shared tiny">Nova Agenda</a> 
     48         
     49        <% if (external) { %>    
    4950                <ul class="list-calendars signed-list-calendars"> 
    50                          
    51                                         <% for (var i=0; i < agendas_usuario.length; i++) { 
    52                                                 if(data.signatureOf[agendas_usuario[i].id].isOwner == 0){ 
     51                                <% for (var i=0; i < signature.length; i++) { 
     52                                                if(signature[i].isOwner == 0){ 
    5353                                        %> 
    54                                                 <li class="list-calendars-item list-calendars-item-<%= agendas_usuario[i].id %>"> 
    55                                                         <input class="calendar-view" type="checkbox" name="" value="<%= agendas_usuario[i].id %>" checked="checked"/> 
    56                                                         <label><%= agendas_usuario[i].name %></label> 
     54                                                <li class="list-calendars-item list-calendars-item-<%= signature[i].calendar.id %>"> 
     55                                                        <input class="calendar-view" type="checkbox" name="" value="<%= signature[i].calendar.id %>" checked="checked"/> 
     56                                                        <label><%= signature[i].calendar.name %></label> 
    5757 
    58                                                         <a class="cal-list-options-btn signed-cal-list-options-btn-<%= agendas_usuario[i].id %>" onclick="show_cal_list_options('signed-cal-list-options-', <%= agendas_usuario[i].id %>)"  style="background-color:#<%=assinatures.backgroundColor%>; border-color:#<%= assinatures.borderColor%>"><img src="img/arrow_down.png" width="10" height="10" class="cal-list-img"></a> 
    59                                                         <div class="cal-list-options signed-cal-list-options-<%= agendas_usuario[i].id %> hidden"> 
     58                                                        <a class="cal-list-options-btn my-cal-list-options-btn-<%= signature[i].calendar.id %>" style="background-color:#<%=signature[i].backgroundColor%>; border-color:#<%= signature[i].borderColor%>;"> 
     59                                                        <img src="../prototype/modules/calendar/img/arrow_down.png" width="10" height="10" class="cal-list-img"/></a> 
     60                                                        <div class="cal-list-options my-cal-list-options-<%= signature[i].calendar.id  %> hidden"> 
    6061                                                                <ul> 
    61                                                                         <li><a href="#">Configurações</a></li> 
    62                                                                         <li><a href="#">Importar</a></li> 
    63                                                                         <li><a href="#">Exportar</a></li> 
    64                                     <li><a href="#">Cancelar assinatura</a></li> 
     62                                                                        <li><a href="#" onclick="add_tab_configure_calendar(<%= signature[i].calendar.id %>);">Configurações</a></li> 
     63                                                                        <li><a href="#" onclick="show_modal_import_export(0, <%= signature[i].calendar.id %>);">Importar</a></li> 
     64                                                                        <li><a href="#" onclick="show_modal_import_export(1, <%= signature[i].calendar.id %>);">Exportar</a></li> 
     65                                                                        <li><a href="#" onclick="cancel_signature(<%= signature[i].id %>);">Cancelar assinatura</a></li> 
    6566                                                                </ul> 
    66                                                         </div> 
     67 
     68                                                </div> 
    6769 
    6870                                                </li> 
     
    7274                                        %> 
    7375                </ul> 
     76        <% } %> 
    7477        </div> 
    75 <% } %> 
    7678</div> 
  • trunk/prototype/modules/calendar/templates/event_add.ejs

    r5515 r5592  
    123123                                <label>Avisar-me por </label> 
    124124                                <select name="alarmType[]"> 
    125                                         <option value="alert" <%= data.event.alarms[i].type=='alert' ? 'selected="selected"':'' %>>Alerta</option> 
    126                                         <option value="mail" <%= data.event.alarms[i].type=='mail' ? 'selected="selected"':'' %>>E-mail</option> 
     125                                <!--<option value="alert" <%= data.event.alarms[i].type=='alert' ? 'selected="selected"':'' %>>Alerta</option> 
     126                                        <option value="mail" <%= data.event.alarms[i].type=='mail' ? 'selected="selected"':'' %>>E-mail</option>--> 
    127127                                        <option value="sms" <%= data.event.alarms[i].type=='sms' ? 'selected="selected"':'' %>>SMS</option> 
    128128                                </select> 
    129129                                <input type="text" name="alarmTime[]" class="number input-small" value="<%= data.event.alarms[i].time %>"/> 
    130130                                <select name="alarmUnit[]"> 
     131                                        <option value="m" <%= data.event.alarms[i].unit=='m' ? 'selected="selected"':'' %>>Minutos</option> 
     132                                        <option value="h" <%= data.event.alarms[i].unit=='h' ? 'selected="selected"':'' %>>Horas</option> 
    131133                                        <option value="d" <%= data.event.alarms[i].unit=='d' ? 'selected="selected"':'' %>>Dias</option> 
    132                                         <option value="h" <%= data.event.alarms[i].unit=='h' ? 'selected="selected"':'' %>>Horas</option> 
    133                                         <option value="m" <%= data.event.alarms[i].unit=='m' ? 'selected="selected"':'' %>>Minutos</option> 
    134134                                </select> 
    135135                                <input type="hidden" name="alarmId[]" value="<%=data.event.useAlarmDefault ? '' : data.event.alarms[i].id%>" /> 
  • trunk/prototype/modules/calendar/templates/index.ejs

    r5514 r5592  
    6868<script type="text/javascript" src="<?= PLUGINSURL ?>/fgmenu/fg.menu.js"></script> 
    6969<script type="text/javascript" src="<?= PLUGINSURL ?>/qtip/jquery.qtip-1.0.0-rc3.min.js"></script> 
     70<script type="text/javascript" src="<?= PLUGINSURL ?>/contextmenu/jquery.contextMenu.js"></script> 
    7071 
    7172<!-- JPicker --> 
     
    8485 
    8586<script type='text/javascript' src='<?= MODULESURL ?>/js/helpers.js'></script> 
     87<script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.shared.js'></script> 
    8688<script type='text/javascript' src='<?= MODULESURL ?>/js/timezone.js'></script> 
    8789<script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.codecs.js'></script> 
    8890 
    8991<script type='text/javascript' src='<?= MODULESURL ?>/js/I18n.js'></script> 
     92<script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.contentMenu.js'></script> 
    9093<script type="text/javascript" src="<?= MODULESURL ?>/js/init.js"></script> 
    9194 
     
    105108                        </div>           
    106109                        <fieldset class="search-field main-search ui-corner-all"> 
     110                                <input class="search" type="text" /> 
    107111                                <span class="ui-icon ui-icon-search"></span> 
    108                                 <input class="search" type="text" /> 
    109112                        </fieldset> 
    110113                </div> 
     
    129132                        <div id="tab_events_list_"> </div> 
    130133                        <div id="sandbox2">     </div> 
     134                        <div id="calendarShared">       </div> 
     135                        <div id="context-menu-event">   </div> 
    131136                </div> 
    132137                 
    133138                <div id="sandbox" class="expresso-calendar-container hidden"> </div> 
    134139                <div id="div-import-export-calendar" class="expresso-calendar-container"> </div> 
     140                <div id="div-copy-move-calendar" class="expresso-calendar-container"> </div> 
    135141                <div id="div-alarm" class="expresso-alarm-container"> </div> 
    136142        </div> 
  • trunk/prototype/post.php

    r5514 r5592  
    2222        }  
    2323         
    24         $_FILES = $files; 
     24        $_FILES = $files;        
    2525} 
    2626 
  • trunk/prototype/services/iCal.php

    r5528 r5592  
    511511                $objTimezone =  new DateTimeZone($schedulable['timezone']);   
    512512                 
    513                 if($startTime['params']['VALUE'] === 'DATE' && isset($params['calendar_timezone']) ) 
     513                if(isset($startTime['params']['VALUE']) &&  $startTime['params']['VALUE'] === 'DATE' && isset($params['calendar_timezone']) ) 
    514514                { 
    515515                    $schedulable['allDay'] = 1; 
     
    555555         
    556556 
    557             $schedulable['summary'] = mb_convert_encoding ( $component->getProperty( 'summary' , false , false ) , 'UTF-8' , 'UTF-8,ISO-8859-1'); 
     557            $schedulable['summary'] = mb_convert_encoding ( $component->getProperty( 'summary' , false , false ) , 'ISO-8859-1' , 'UTF-8,ISO-8859-1'); 
    558558 
    559559            /* Definindo Description */ 
    560560                if($desc = $component->getProperty( 'description' , false , false )) 
    561                     $schedulable['description'] = mb_convert_encoding (str_ireplace (array('\n','\t'), array("\n","\t"), $desc) ,'UTF-8' , 'UTF-8,ISO-8859-1'); 
     561                    $schedulable['description'] = mb_convert_encoding (str_ireplace (array('\n','\t'), array("\n","\t"), $desc) ,'ISO-8859-1' , 'UTF-8,ISO-8859-1'); 
    562562 
    563563             /* Definindo location */ 
    564564                if($location = $component->getProperty( 'location' , false , false )) 
    565                     $schedulable['location'] = mb_convert_encoding ( $location , 'UTF-8' , 'UTF-8,ISO-8859-1') ; 
     565                    $schedulable['location'] = mb_convert_encoding ( $location , 'ISO-8859-1' , 'UTF-8,ISO-8859-1') ; 
    566566 
    567567 
     
    701701       
    702702            /* Definindo TRANSP */ 
    703             if(($tranp = $component->getProperty( 'transp', false , true )) && strtoupper($tranp) == 'OPAQUE') 
     703            if(($tranp = $component->getProperty( 'transp', false , true )) && $tranp && strtoupper($tranp) == 'OPAQUE') 
    704704                $schedulable['transparent'] = 1; 
    705705 
Note: See TracChangeset for help on using the changeset viewer.