Changeset 5592
- Timestamp:
- 03/01/12 03:35:01 (11 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/expressoCalendar/setup/tables_current.inc.php
r5514 r5592 102 102 103 103 104 104 'calendar_object' => array( 105 105 'fd' => array( 106 106 'id' => array( 'type' => 'auto', 'nullable' => False), … … 114 114 'class_id' => array( 'type' => 'int', 'precision' => '8', 'nullable' => True), 115 115 '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), 117 117 '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), 119 119 'allday' => array( 'type' => 'int', 'precision' => '2', 'default' => 0, 'nullable' => True), 120 120 'repeat' => array( 'type' => 'int', 'precision' => '2', 'default' => 0, 'nullable' => True), … … 152 152 'id' => array( 'type' => 'auto', 'nullable' => False), 153 153 '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), 156 156 'unit' => array('type' => 'varchar','precision' => '20','nullable' => True), 157 157 'time' => array('type' => 'varchar','precision' => '50','nullable' => True), … … 203 203 'object_id' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 204 204 'object_type' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 205 'permis ion' => array( 'type' => 'varchar','precision' => '50', 'nullable' => False)205 'permission' => array( 'type' => 'varchar','precision' => '50', 'nullable' => False) 206 206 ), 207 207 'pk' => array('id'), -
trunk/expressoMail1_2/js/draw_api.js
r5588 r5592 2884 2884 var endEvent = function(date){ 2885 2885 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 ? 2888 2888 (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000) : 2889 2889 (User.preferences.defaultDuration * 60000) 2890 ) ;2890 )); 2891 2891 }else 2892 return parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000);2892 return new Date(parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000)); 2893 2893 }; 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 2894 2899 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, 2895 2916 summary : $("#subject_"+ID).text(), 2896 2917 description : $("#body_" + ID).text(), 2897 2918 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 }) 2957 2952 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); 3032 2954 } 3033 2955 subject.appendChild(new_event_logo); -
trunk/expressoMail1_2/templates/default/expressoMail_reset.css
r5389 r5592 58 58 quotes: "" ""; 59 59 } 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 } 61 79 62 80 .new-event-win.active select { -
trunk/prototype/api/datalayer.js
r5539 r5592 1067 1067 1068 1068 var result = false; 1069 1070 /*1071 * TODO - Para correta aplicação de filtros campos com valores de datas1072 * devem ter tratamento diferenciado, sendo que como string os mesmos não serão1073 * corretamente tratados.1074 */1075 1069 1076 1070 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 1079 1077 if( !result && (bothSides || oneSide) ) 1080 1078 { … … 1116 1114 return( filtered ); 1117 1115 }, 1116 1117 converterType: function( filter ){ 1118 1119 return isNaN(parseInt(filter)) ? filter : parseInt(filter); 1120 1121 }, 1122 1118 1123 1119 1124 compare: function( operator, base, test ){ 1120 1125 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 } 1136 1146 1137 1147 }, -
trunk/prototype/config/attachment.ini
r5514 r5592 17 17 name = "name" 18 18 size = "size" 19 19 owner = "owner" -
trunk/prototype/config/calendar.ini
r5514 r5592 4 4 [model.hasMany] 5 5 signatures = calendarSignature.calendar 6 permissions = calendarToPermission.calendar 6 7 7 8 [before.create] … … 15 16 davcalDeleteCollection = modules/calendar/interceptors/DBMapping.php 16 17 17 18 18 [PostgreSQL.mapping] 19 19 id = "id" -
trunk/prototype/config/calendarSignatureAlarm.ini
r5514 r5592 10 10 [before.update] 11 11 encodeSignatureAlarmType = modules/calendar/interceptors/DBMapping.php 12 encodeUpdateConcept = modules/calendar/interceptors/DBMapping.php13 12 14 13 [before.create] 15 14 encodeSignatureAlarmType = modules/calendar/interceptors/DBMapping.php 16 encodeCreateConcept = modules/calendar/interceptors/DBMapping.php17 15 18 16 [before.delete] -
trunk/prototype/config/expressoCalendar.ini
r5438 r5592 1 1 folder = "calendar" 2 2 useCaldav = false 3 onRemoveCascadeCalDav = false 3 4 4 5 ;Utilizar ou não caldav {TRUE or FALSE} 5 6 ;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 11 11 define('STATUS_DELEGATED', 5); 12 12 13 14 13 define('ALARM_ALERT', 1); 15 14 define('ALARM_MAIL', 2); … … 23 22 define('CLASS_CONFIDENTIAL', 3); 24 23 25 26 24 define('ICAL_ACTION_IMPORT', 1); 27 25 define('ICAL_ACTION_UPDATE', 2); … … 31 29 define('ICAL_ACTION_SUGGESTION', 6); 32 30 31 define('ATTENDEE_ACL_ORGANIZATION', 'o'); 32 define('ATTENDEE_ACL_WRITE', 2); 33 define('ATTENDEE_ACL_PARTICIPATION_REQUIRED', 'w'); 34 define('ATTENDEE_ACL_INVITE_GUESTES', 'i'); 35 define('ATTENDEE_ACL_READ', 'r'); 36 37 define('CALENDAR_PRIVATE', 0); 38 define('CALENDAR_PUBLIC', 1); 39 40 define('CALENDAR_ACL_WRITE', 'w'); 41 define('CALENDAR_ACL_READ', 'r'); 42 define('CALENDAR_ACL_REMOVE', 'd'); 43 define('CALENDAR_ACL_BUSY', 'b'); 44 define('CALENDAR_ACL_SHARED', 's'); 33 45 ?> -
trunk/prototype/modules/calendar/css/layout.css
r5515 r5592 34 34 35 35 #wrap .search-field input { 36 width: 150px; 36 width: 160px; 37 padding: 0 0 0 3px; 37 38 } 38 39 … … 88 89 .fg-menu-container { 89 90 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%; 90 101 } 91 102 … … 181 192 display: inline-block; 182 193 border: none; 194 width: 215px; 183 195 } 184 196 185 197 fieldset.search-field span { 186 198 display: inline-block; 187 margin:0 0 -3px 5px; 199 margin:0 0 -3px 0px; 200 cursor: pointer; 188 201 } 189 202 /* #search area definition */ … … 225 238 226 239 fieldset.block-add-attendee .add-attendee-search { max-width: 250px; margin: 5px;} 227 fieldset.block-add-attendee .add-attendee-search input { max-width: 2 15px; width: 215px;}240 fieldset.block-add-attendee .add-attendee-search input { max-width: 220px; width: 220px;} 228 241 fieldset.block-add-attendee .search-result-list { width: 255px; max-height: 215px; overflow: auto;} 229 242 fieldset.block-add-attendee .search-result-list .ui-widget-content { border: none;} … … 409 422 } 410 423 424 .evt-list-options.my-evt-list-options{ 425 position: absolute; 426 width: 110px; 427 display: block; 428 429 } 430 411 431 412 432 .colors-options { padding-left: 5px; } … … 428 448 } 429 449 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 430 483 .my-calendars a.new-calendar .ui-button-text { 431 484 padding: 0; 485 } 486 487 .new-calendar-shared{ 488 float: right; 432 489 } 433 490 … … 436 493 padding-top: 3px; 437 494 padding-bottom: 3px; 495 } 496 497 dl.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 505 dl.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 513 dl.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 521 fieldset.block-add-user, .block-add-user li{ 522 border: none; 523 } 524 525 fieldset.add-user-search{ 526 margin: 0 0 5px 0; 527 } 528 529 dl.block-user-list{ 530 float:left; 531 margin: 0 0 10px 10px; 532 } 533 534 dt.user-list{ 535 width: 117px; 536 margin-right: 5px; 537 } 538 539 dt.calendar-list{ 540 width: 144px; 541 margin-right: 5px; 542 } 543 544 dt.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 552 dd.add-user{height: 240px;} 553 dd.add-user-calendar{height: 192px;} 554 555 dd.calendar-public{height: 23px;} 556 557 dd.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 564 dd.add-user-calendar ul{ 565 width: 250px; 566 max-height: 166px; 567 } 568 569 dd.add-user-calendar, dd.add-user, dd.calendar-public{ 570 width: 250px; 571 } 572 573 div.shared-calendar fieldset.shared-calendar-configure{ 574 margin-top: 10px; 575 } 576 577 .add-user fieldset.block-add-user{ 578 width: 245px; 579 } 580 581 dd.user-list{ 582 height: 193px; 583 } 584 585 dd.calendar-list{ 586 height: 240px; 438 587 } 439 588 -
trunk/prototype/modules/calendar/css/style.css
r5532 r5592 47 47 48 48 .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; } 50 50 .new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 51 51 -
trunk/prototype/modules/calendar/interceptors/DBMapping.php
r5514 r5592 9 9 public function encodeCreateSchedulable( &$uri , &$params , &$criteria , $original ){ 10 10 $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; 13 18 14 19 // if( !isset( $new['repeat'] )) 15 20 // $new['range_end'] = '7287926400'; // 12/12/2200 16 21 // else 17 $params['rangeEnd'] = gmdate( 'd-m-Y' , (int)($params['endTime'] / 1000) ); 22 $params['rangeEnd'] = $params['endTime']; 23 $params['rangeStart'] = $params['startTime']; 24 18 25 /////////////////////////////////////////////////////////////////// 19 26 … … 24 31 25 32 } 33 26 34 public function encodeCreateAlarm( &$uri , &$params , &$criteria , $original ){ 27 35 … … 59 67 $params = $_FILES[$params['source']]; 60 68 61 //$params['source'] = base64_encode( $params['source'] ); 69 if(isset($params['owner'])) 70 $params['owner'] = Config::me('uidNumber'); 62 71 63 72 } … … 112 121 public function encodeUpdateSchedulable( &$uri , &$params , &$criteria , $original ){ 113 122 if(isset($params['startTime'])) 114 $params['rangeStart'] = gmdate( 'd-m-Y' , (int)($params['startTime'] / 1000) );123 $params['rangeStart'] = $params['startTime'] ; 115 124 if(isset($params['endTime'])) 116 $params['rangeEnd'] = gmdate( 'd-m-Y' , (int)($params['endTime'] / 1000) );125 $params['rangeEnd'] = $params['endTime'] ; 117 126 118 127 … … 172 181 } 173 182 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 174 215 //TODO: Remover apos suporte a deepness na api 175 216 public function deepnessFindEvent( &$uri , &$result , &$criteria , $original ){ 176 217 177 218 if(isset($original['criteria']['deepness'])) 178 219 { 220 221 $Time = new DateTime( 'now', new DateTimeZone('UTC') ); 222 $DayLigth = array(); 179 223 foreach ($result as $i => $v) 180 224 { 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 181 252 if(isset($v['id'])) 182 253 { … … 195 266 } 196 267 $result[$i]['participants'] = $participants; 197 268 269 270 198 271 $attachmentRelation = Controller::find( array( 'concept' => 'schedulableToAttachment' ) , false ,array( 'filter' => array('=', 'schedulable' , $v['id']) )); 199 272 if(is_array($attachmentRelation)){ … … 214 287 215 288 } 216 289 217 290 //TODO: Remover apos suporte a deepness na api 218 291 public function deepnessReadEvent( &$uri , &$result , &$criteria , $original ){ … … 295 368 if(isset($v['calendar'])){ 296 369 $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 } 298 395 } 299 396 } … … 627 724 } 628 725 } 629 630 631 726 } 632 727 … … 640 735 641 736 public function davcalDeleteCollection( &$uri , &$params , &$criteria , $original ){ 642 if( Config::module('useCaldav') )737 if( Config::module('useCaldav') && Config::module('onRemoveCascadeCalDav')) 643 738 { 644 739 require_once ROOTPATH.'/modules/calendar/interceptors/DAViCalAdapter.php'; -
trunk/prototype/modules/calendar/js/calendar.codecs.js
r5530 r5592 39 39 } 40 40 41 constantsCalendarShared = { 42 'r' : 'read', 43 'w' : 'write', 44 'd' : 'remove', 45 'b' : 'busy', 46 's' : 'shared' 47 } 48 41 49 UI = { 42 50 dialogs: { 43 51 addEvent: null, 44 52 importCalendar: null, 45 sharedCalendar: null 53 sharedCalendar: null, 54 copyCalendar: null 46 55 } 47 56 } … … 74 83 }); 75 84 85 DataLayer.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 76 140 Calendar = { 77 141 … … 82 146 * quando forçado um get do banco, deverá ser criado uma condição para o mesmo 83 147 */ 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}}); 85 149 this.signatures = DataLayer.get("calendarSignature", {filter: ['=', 'user', User.me.id], criteria: {deepness: 2}}, true); 86 150 … … 104 168 105 169 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); 106 172 this.signatureOf[ this.calendarIds[i] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 107 173 } … … 128 194 Alarms = { 129 195 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()]); 131 197 for(var i = 0; i < eventsDay.length; i++){ 132 198 this.addAlarm( eventsDay[i] ); … … 197 263 if( status === 'serverclient' ){ 198 264 DataLayer.commit( false, false, function(){ 199 if(!!$('#calendar').fullCalendar) 265 if(!!$('#calendar').fullCalendar){ 200 266 Calendar.rerenderView(true); 267 contentMenu(); 268 } 201 269 //Atualiza a listagem de eventos apenas se estiver na aba de listagem 202 270 if((typeof($tabs) != "undefined") && $tabs.tabs('option' ,'selected') != 0) … … 334 402 sendTime: objEvent.sendTime, 335 403 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), 337 405 id: objEvent.schedulable.id, 338 406 summary: objEvent.schedulable.summary, … … 363 431 return { 364 432 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'), 367 435 allDay: ( !!form.allDay ? 1 : 0 ), 368 436 schedulable: form.idEvent … … 450 518 participant: me.id, 451 519 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'), 454 522 allDay: ( !!form.allDay ? 1 : 0 ), 455 523 schedulable: form.idEvent … … 484 552 var res = $.map(evtObj, function( objEvent ){ 485 553 554 if(!(typeof(objEvent) == 'object')) 555 return (null); 556 486 557 var participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy(User.me); 487 558 … … 506 577 timezones: Timezone.timezones, 507 578 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), 509 580 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), 511 582 allDay: !!parseInt( objEvent.allDay ), 512 583 attachments: $.map(objEvent.attachments || [], function( attachment, i ){ … … 566 637 alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 567 638 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}), 570 642 delegatedFrom: delegatedFrom, 571 643 statusParticipants: statusParticipants … … 598 670 return { 599 671 "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) , 602 674 allDay: ( !!form.allDay ? 1 : 0 ), 603 675 id: form.idEvent, … … 837 909 838 910 $.map(filtered, function( evt ){ 911 912 if(!(typeof(evt) == 'object') || (evt.id.indexOf('java') >= 0)) 913 return (null); 839 914 840 915 evt.calendar = evt.calendar || "1"; … … 845 920 var calendar = DataLayer.get('calendar', evt.calendar); 846 921 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}; 853 931 } 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 854 950 } 855 951 856 952 grouped[ evt.calendar ].push( DataLayer.merge({ id: evt.URI || evt.id, 857 953 title: Encoder.htmlDecode(evt.summary), 858 start: Timezone.getDate Timezone(new Date(parseInt( evt.startTime )), calendar.timezone, false),859 end: Timezone.getDate Timezone(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) ) ); 861 957 }); 862 958 … … 871 967 filter.end = new Date( filter.end * 1000 ); 872 968 969 var timezone = {}; 970 for(var i in Calendar.signatureOf) 971 timezone[i] = Calendar.signatureOf[i].calendar.timezone; 972 873 973 return { filter: ["AND", 874 974 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() ], 877 977 [ "IN", "calendar", Calendar.calendarIds ] 878 978 879 979 ], 880 criteria: { deepness: 2 } }980 criteria: { deepness: 2, timezones: timezone } } 881 981 } 882 982 }); -
trunk/prototype/modules/calendar/js/helpers.js
r5530 r5592 59 59 */ 60 60 61 function eventDetails( objEvent, decoded, path )61 function eventDetails( objEvent, decoded, path, isMail) 62 62 { 63 63 if(path == undefined) … … 67 67 objEvent = DataLayer.decode( "schedulable:calendar", objEvent ); 68 68 69 if(!isMail) 69 70 objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 70 71 … … 730 731 if (user){ 731 732 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 733 736 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) 735 738 ) 736 739 .scrollTo('max'); … … 794 797 * Trata a busca de usuários para adição de participantes 795 798 */ 799 blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function(event) { 800 blkAddAtendee.find('.add-attendee-search input').keydown(); 801 }); 802 803 796 804 blkAddAtendee.find('.add-attendee-search input').keydown(function(event) { 797 805 798 if(event.keyCode == '13' ) {806 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') { 799 807 var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 800 808 … … 899 907 sequentialUploads: true, 900 908 add: function (e, data) { 901 if(data.files[0].size < 30000000)909 if(data.files[0].size < 2000000) 902 910 data.submit(); 903 911 }, … … 909 917 attach.fileName = file.name.substr(0, 6) + file.name.substr(file.name.length-4, file.name.length); 910 918 attach.fileSize = formatBytes(file.size); 911 if(file.size > 30000000)919 if(file.size > 2000000) 912 920 attach.error = 'Tamanho de arquivo nao permitido!!' 913 921 914 922 $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', {file : attach})); 915 923 916 if(file.size < 30000000){924 if(file.size < 2000000){ 917 925 $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 918 926 $('.attachments-list').find('[type=file]').addClass('hidden'); … … 1034 1042 canDiscardEventDialog = false; 1035 1043 }); 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'); 1039 1064 } 1040 1065 … … 1368 1393 } 1369 1394 1395 function 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 1370 1410 function remove_calendar(){ 1371 1411 /* Pode ser assim $('.cal-list-options-btn.ui-state-active').attr('class').replace(/[a-zA-Z-]+/g, ''); */ … … 1377 1417 if(clicked == 'Sim'){ 1378 1418 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 1387 1422 if(idCalendar == User.preferences.defaultCalendar) 1388 1423 DataLayer.remove( 'modulePreference', User.preferenceIds['defaultCalendar']); … … 1428 1463 }); 1429 1464 1430 1431 meu_container.find(".button.new").button({ 1465 meu_container.find(".button.new-calendar").button({ 1432 1466 icons: { 1433 1467 primary: "ui-icon-plus" … … 1462 1496 }) 1463 1497 .click(function(){ 1464 meu_container.find(".button.new ").qtip('destroy');1498 meu_container.find(".button.new-calendar").qtip('destroy'); 1465 1499 }); 1466 1500 //TODO emplementar tratamento de duplicação de valores no location … … 1543 1577 }); 1544 1578 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 1545 1599 $('.calendar-view').click(function(evt){ 1546 1600 if($tabs.tabs('option' ,'selected') == 1){ … … 1715 1769 case 'basicDay': 1716 1770 case 'day': 1717 rangeStart = new Date().add({days: page_index}). toString("yyyy-MM-dd");1771 rangeStart = new Date().add({days: page_index}).getTime(); 1718 1772 rangeEnd = rangeStart; 1719 1773 break; … … 1722 1776 var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 1723 1777 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(); 1726 1780 break; 1727 1781 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(); 1731 1785 break; 1732 1786 case 'year': … … 1737 1791 if(dateEnd.getMonth() != 11) 1738 1792 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(); 1741 1795 break; 1742 1796 } … … 1872 1926 }); 1873 1927 } 1928 1929 function 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 97 97 } 98 98 }); 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 100 106 $('.block-horizontal-toolbox .main-config-menu').menu({ 101 107 content: $('.main-config-menu-content').html(), … … 226 232 227 233 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){ 228 246 DataLayer.put( "schedulable:calendar", event ); 229 247 … … 231 249 event.className = "blocked-event"; 232 250 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); 241 253 }, 242 254 243 255 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); 245 258 } 246 259 }, dateCalendar)); 247 260 261 contentMenu(); 262 263 $('body').click(function(){ 264 $('#context-menu-event').html(''); 265 }); 266 248 267 if($(window).height() < $('body').height()){ 249 268 var hei = $('body').height() - $(window).height(); -
trunk/prototype/modules/calendar/js/timezone.js
r5550 r5592 6 6 7 7 var objTime = DataLayer.dispatch( "timezones" ); 8 8 9 Timezone = { 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 ), 11 12 12 13 timezones: objTime.timezones, … … 16 17 17 18 }, 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 },30 19 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){ 54 21 var timezone = this.timezone( tzId ); 55 22 … … 57 24 return date; 58 25 59 var currentTimezone = parseInt((date.getTimezoneOffset()/60)+'00');26 date = this.normalizeDate(date, false, true); 60 27 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) }); 75 29 }, 76 30 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); 78 34 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}); 81 47 }, 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) )}); 99 52 } 100 101 102 103 53 } -
trunk/prototype/modules/calendar/templates/attendee_add.ejs
r5514 r5592 160 160 <fieldset class="block-add-attendee" title="Participantes"> 161 161 <fieldset class="add-attendee-search search-field ui-corner-all"> 162 <input class="search" type="text" /> 162 163 <span class="ui-icon ui-icon-search"></span> 163 <input class="search" type="text" />164 164 </fieldset> 165 165 <ul class="search-result-list ui-corner-all"> -
trunk/prototype/modules/calendar/templates/calendar_list.ejs
r5399 r5592 1 1 <div class="all-list-calendars"> 2 <% var agendas_usuario = data.calendars %>2 <% var signature = data.signatures %> 3 3 <% var external = false %> 4 4 <div class="my-calendars"> … … 7 7 <a href="#" class="button new new-calendar">Nova Agenda</a> 8 8 <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){ 15 11 %> 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 %>"> 17 13 18 14 <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> 21 17 22 18 </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%>;"> 24 20 <img src="../prototype/modules/calendar/img/arrow_down.png" width="10" height="10" class="cal-list-img"/> 25 21 </a> 26 22 27 23 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"> 29 25 <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> 33 30 <li><a href="#" onclick="remove_calendar();">Remover agenda</a></li> 34 31 </ul> … … 44 41 </ul> 45 42 </div> 46 <% if (external) { %> 43 47 44 <div class="signed-calendars"> 48 45 <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) { %> 49 50 <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){ 53 53 %> 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> 57 57 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"> 60 61 <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> 65 66 </ul> 66 </div> 67 68 </div> 67 69 68 70 </li> … … 72 74 %> 73 75 </ul> 76 <% } %> 74 77 </div> 75 <% } %>76 78 </div> -
trunk/prototype/modules/calendar/templates/event_add.ejs
r5515 r5592 123 123 <label>Avisar-me por </label> 124 124 <select name="alarmType[]"> 125 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>--> 127 127 <option value="sms" <%= data.event.alarms[i].type=='sms' ? 'selected="selected"':'' %>>SMS</option> 128 128 </select> 129 129 <input type="text" name="alarmTime[]" class="number input-small" value="<%= data.event.alarms[i].time %>"/> 130 130 <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> 131 133 <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>134 134 </select> 135 135 <input type="hidden" name="alarmId[]" value="<%=data.event.useAlarmDefault ? '' : data.event.alarms[i].id%>" /> -
trunk/prototype/modules/calendar/templates/index.ejs
r5514 r5592 68 68 <script type="text/javascript" src="<?= PLUGINSURL ?>/fgmenu/fg.menu.js"></script> 69 69 <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> 70 71 71 72 <!-- JPicker --> … … 84 85 85 86 <script type='text/javascript' src='<?= MODULESURL ?>/js/helpers.js'></script> 87 <script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.shared.js'></script> 86 88 <script type='text/javascript' src='<?= MODULESURL ?>/js/timezone.js'></script> 87 89 <script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.codecs.js'></script> 88 90 89 91 <script type='text/javascript' src='<?= MODULESURL ?>/js/I18n.js'></script> 92 <script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.contentMenu.js'></script> 90 93 <script type="text/javascript" src="<?= MODULESURL ?>/js/init.js"></script> 91 94 … … 105 108 </div> 106 109 <fieldset class="search-field main-search ui-corner-all"> 110 <input class="search" type="text" /> 107 111 <span class="ui-icon ui-icon-search"></span> 108 <input class="search" type="text" />109 112 </fieldset> 110 113 </div> … … 129 132 <div id="tab_events_list_"> </div> 130 133 <div id="sandbox2"> </div> 134 <div id="calendarShared"> </div> 135 <div id="context-menu-event"> </div> 131 136 </div> 132 137 133 138 <div id="sandbox" class="expresso-calendar-container hidden"> </div> 134 139 <div id="div-import-export-calendar" class="expresso-calendar-container"> </div> 140 <div id="div-copy-move-calendar" class="expresso-calendar-container"> </div> 135 141 <div id="div-alarm" class="expresso-alarm-container"> </div> 136 142 </div> -
trunk/prototype/post.php
r5514 r5592 22 22 } 23 23 24 $_FILES = $files; 24 $_FILES = $files; 25 25 } 26 26 -
trunk/prototype/services/iCal.php
r5528 r5592 511 511 $objTimezone = new DateTimeZone($schedulable['timezone']); 512 512 513 if( $startTime['params']['VALUE'] === 'DATE' && isset($params['calendar_timezone']) )513 if(isset($startTime['params']['VALUE']) && $startTime['params']['VALUE'] === 'DATE' && isset($params['calendar_timezone']) ) 514 514 { 515 515 $schedulable['allDay'] = 1; … … 555 555 556 556 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'); 558 558 559 559 /* Definindo Description */ 560 560 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'); 562 562 563 563 /* Definindo location */ 564 564 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') ; 566 566 567 567 … … 701 701 702 702 /* 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') 704 704 $schedulable['transparent'] = 1; 705 705
Note: See TracChangeset
for help on using the changeset viewer.