Changeset 5746 for trunk/prototype/modules/calendar/js
- Timestamp:
- 03/18/12 15:07:09 (12 years ago)
- Location:
- trunk/prototype/modules/calendar/js
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/calendar/js/calendar.codecs.js
r5737 r5746 75 75 borderColor: '#' + signature.borderColor || User.preferences.borderColor, 76 76 textColor: '#' + signature.fontColor || User.preferences.fontColor, 77 className: 'calendar-' + signature.calendar.id,78 77 editable: signature.isOwner } 79 78 }); … … 179 178 180 179 if(force){ 181 delete Calendar.currentViewKey; 180 delete Calendar.currentViewKey; 181 182 182 $('#calendar').fullCalendar( 'refetchEvents' ); 183 183 } … … 189 189 190 190 $('#calendar').fullCalendar( 'refetchEvents' ); 191 192 contentMenu(); 191 193 } 192 194 } … … 271 273 DataLayer.commit( false, false, function(){ 272 274 if((typeof($tabs) != "undefined") && $tabs.tabs('option' ,'selected') == 0){ 273 Calendar.rerenderView(true); 274 contentMenu(); 275 Calendar.rerenderView(true); 275 276 }else if((typeof($tabs) != "undefined") && $tabs.tabs('option' ,'selected') != 0) 276 277 pageselectCallback($('.events-list-win.active [name=keyword]').val(), 0); … … 603 604 return(null); 604 605 605 var attend = DataLayer.get('participant', participant);606 var attend = DataLayer.get('participant', (participant.id || participant)); 606 607 attend.user = DataLayer.get('user', attend.user); 607 608 … … 612 613 id: attend.id, 613 614 status : attend.status, 614 delegatedFrom: attend.delegatedFrom ,615 delegatedFrom: attend.delegatedFrom || '0', 615 616 acl: attend.acl, 616 617 receiveNotification : attend.receiveNotification, … … 947 948 var calendar = DataLayer.get('calendar', evt.calendar); 948 949 949 var eventEditable = function(idEvent, isRecurrence ){950 var eventEditable = function(idEvent, isRecurrence, Recurrence){ 950 951 if(Calendar.signatureOf[calendar.id].isOwner == "1"){ 951 952 var attendee = {}; … … 953 954 attendee = DataLayer.get('participant', evt.participants[i]); 954 955 if(attendee.user == User.me.id) 955 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? {selectable: true, className: 'fullcalendar-context-menu event-id-'+idEvent , editable: !isRecurrence} : { editable: false, selectable: true ,className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent};956 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? {selectable: true, className: 'fullcalendar-context-menu event-id-'+idEvent+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '')} : { editable: false, selectable: true ,className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent}; 956 957 } 957 958 return {editable: false, className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent, selectable: true, disableDragging: isRecurrence }; … … 963 964 var returns = "" 964 965 returns += acl['write'] ? "" : 'blocked-event-permision '; 965 returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read'] ? 'fullcalendar-context-menu ' : '');966 returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read'] ? 'fullcalendar-context-menu '+ idEvent + (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') : ''); 966 967 returns += 'event-id-'+idEvent; 967 968 return returns; … … 992 993 993 994 for( var i = 0; i < occurrences.length; i++ ) 994 grouped[ evt.calendar ].push( DataLayer.merge({ id: evt.URI || evt.id, 995 title: Encoder.htmlDecode(evt.summary), 996 start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 997 end: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 998 allDay: parseInt( evt.allDay ) }, eventEditable(evt.id, isRepeat ) ) ); 995 grouped[ evt.calendar ].push( DataLayer.merge({ id: evt.URI || evt.id+ '-' + i, 996 title: Encoder.htmlDecode(evt.summary), 997 start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 998 end: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 999 allDay: parseInt( evt.allDay ), 1000 isRepeat: isRepeat, 1001 occurrence: i }, eventEditable(evt.id, isRepeat, i ) ) ); 999 1002 }); 1000 1003 -
trunk/prototype/modules/calendar/js/calendar.contentMenu.js
r5592 r5746 6 6 $('.fullcalendar-context-menu').bind('contextmenu', function(event){ 7 7 event.preventDefault(); 8 8 9 var classes = $(this).attr('class').split(" "); 9 var idCalendar = false;10 10 var idEvent = false; 11 11 var idRecurrence = false; 12 12 13 //recupera o id do calendar eo id do evento para tratamento 13 14 for(var i = 0; i < classes.length; i++){ 14 if(classes[i].indexOf("calendar-") >= 0 ){ 15 idCalendar = classes[i].replace(/[a-zA-Z-]+/g, ''); 16 }else if (classes[i].indexOf("event-id-") >= 0 ){ 17 idEvent = classes[i].replace(/[a-zA-Z-]+/g, ''); 18 } 19 if(idCalendar && idEvent) 20 break; 21 }; 22 23 var template = DataLayer.render( 'templates/menu_context_event.ejs', {event: idEvent,top: (event.clientY - 135), left: (event.clientX - 445), signature: Calendar.signatureOf[idCalendar], calendars: Calendar.calendars}); 15 if (classes[i].indexOf("event-id-") >= 0 ){ 16 idEvent = classes[i].replace(/[a-zA-Z-]+/g, ''); 17 continue; 18 }else if (classes[i].indexOf("Recurrence-id-") >= 0 ){ 19 idRecurrence = classes[i].replace(/[a-zA-Z-]+/g, ''); 20 continue; 21 } 22 } 23 24 var schedulable = DataLayer.get('schedulable', idEvent); 25 26 var template = DataLayer.render( 'templates/menu_context_event.ejs', {event: schedulable.id , 27 top: (event.clientY - 135), left: (event.clientX - 445), 28 signature: Calendar.signatureOf[schedulable.calendar], 29 calendars: Calendar.calendars, isRecurrence: (!!parseInt(schedulable.repeat)), 30 idRecurrence: idRecurrence 31 }); 24 32 25 33 $('#context-menu-event').html(template); 34 35 var method = function(value){ 36 switch (value){ 37 case "ocurrency": 38 return '2' 39 case "copy": 40 return '1'; 41 case "move": 42 return '0'; 43 } 44 } 26 45 27 46 $('#context-menu-event').find('li.menu-item').hover( … … 30 49 if($(this).hasClass('copy') || $(this).hasClass('move')) { 31 50 32 $(this).parents().find('.calendar-copy-move input[name="typeEvent"]').val( ($(this).hasClass('copy') ? '0' : '1'));51 $(this).parents().find('.calendar-copy-move input[name="typeEvent"]').val( method($(this).attr('class').split(" ")[0])); 33 52 $(this).parents().find('.calendar-copy-move').show(); 34 53 -
trunk/prototype/modules/calendar/js/helpers.js
r5720 r5746 59 59 */ 60 60 61 function eventDetails( objEvent, decoded, path, isMail) 61 /* 62 * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do 63 *DataLayer, repeat somente é usado quando se trata da criação de um evento 64 *pela edição de uma ocorrência. 65 */ 66 67 function eventDetails( objEvent, decoded, path, isMail, repeat) 62 68 { 63 69 attendees = {}; … … 318 324 */ 319 325 var ids = []; 320 $.each($('.attachment-list input'), function (i, input) { ids.push(input.value);});326 $.each($('.attachment-list input'), function (i, input) {ids.push(input.value);}); 321 327 if(ids.length > 0) 322 328 DataLayer.remove('attachment', {filter: ['IN', 'id', ids]}); 323 329 330 DataLayer.rollback(); 331 324 332 UI.dialogs.addEvent.dialog('close'); 325 333 }else{ … … 649 657 canDiscardEventDialog = true; 650 658 651 UI.dialogs.addEvent.children().find('form.form-addevent').submit(); 652 UI.dialogs.addEvent.dialog("close"); 659 var exit = function(){ 660 UI.dialogs.addEvent.children().find('form.form-addevent').submit(); 661 UI.dialogs.addEvent.dialog("close"); 662 } 663 664 if(repeat){ 665 DataLayer.remove('repeat', false); 666 DataLayer.put('repeat', repeat); 667 DataLayer.commit('repeat', false, exit); 668 }else 669 exit(); 653 670 }).end() 654 671 … … 703 720 }); 704 721 705 if(objEvent.me.id == User.me.id){ 706 objEvent.me.id = DataLayer.put('participant', {user: objEvent.me.id, mail: objEvent.me.mail }); 707 objEvent.organizer.id = objEvent.me.id; 708 } 722 723 if(!repeat) 724 if(objEvent.me.id == User.me.id){ 725 objEvent.me.id = DataLayer.put('participant', {user: objEvent.me.id, mail: objEvent.me.mail}); 726 objEvent.organizer.id = objEvent.me.id; 727 } 709 728 710 729 var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', {event:objEvent}); … … 783 802 var user = DataLayer.get('user', ["=", "mail", $(this).val()]); 784 803 if(!!user && user[0].id) 785 attendees[user[0].id] = { name: user[0].name};804 attendees[user[0].id] = {name: user[0].name}; 786 805 787 806 /** … … 1069 1088 1070 1089 var ids = []; 1071 $.each($('.attachment-list input'), function (i, input) { ids.push(input.value);});1090 $.each($('.attachment-list input'), function (i, input) {ids.push(input.value);}); 1072 1091 if(ids.length > 0){ 1073 1092 DataLayer.remove('attachment', {filter: ['IN', 'id', ids]}); … … 1597 1616 if(clicked == 'Sim'){ 1598 1617 DataLayer.remove('schedulable', ''+eventId); 1599 window.setTimeout(function() {DataLayer.commit();}, 500); 1618 DataLayer.commit(); 1619 } 1620 } 1621 }); 1622 } 1623 1624 function mount_exception(eventID, idException){ 1625 1626 var schedulable = DataLayer.get('schedulable', ''+eventID); 1627 var edit = {repeat: (DataLayer.get('repeat', schedulable.repeat))}; 1628 1629 edit.repeat.startTime = new Date(parseInt(edit.repeat.startTime)).toString('yyyy-MM-dd HH:mm:00'); 1630 edit.repeat.endTime = new Date(parseInt(edit.repeat.endTime)).toString('yyyy-MM-dd HH:mm:00'); 1631 1632 edit.repeat.exceptions = (schedulable.occurrences[idException]); 1633 1634 return edit.repeat; 1635 1636 } 1637 1638 function remove_ocurrence(eventId, idRecurrence){ 1639 $.Zebra_Dialog('Tem certeza que deseja excluir esta ocorrência?', { 1640 'type': 'question', 1641 'overlay_opacity': '0.5', 1642 'buttons': ['Sim', 'Não'], 1643 'onClose': function(clicked) { 1644 if(clicked == 'Sim'){ 1645 var repeat = mount_exception(eventId, idRecurrence); 1646 DataLayer.remove('repeat', false); 1647 DataLayer.put('repeat', repeat); 1648 DataLayer.commit(false, false, function(data){ 1649 Calendar.rerenderView(true); 1650 }); 1600 1651 } 1601 1652 } … … 2139 2190 } 2140 2191 2141 function copyAndMoveTo(calendar, eventId){ 2142 2143 var type = $('.calendar-copy-move input[name="typeEvent"]').val(); 2144 2145 var schedulable = DataLayer.get('schedulable' , ''+eventId); 2146 2192 function copyAndMoveTo(calendar, event, idRecurrence, type, evt){ 2193 /* 2194 * Types 2195 * 0 = Move 2196 * 1 = Copy Event end Repet 2197 * 2 = Copy Ocurrence 2198 * 3 = Copy to edit ocurrence 2199 * 2200 **/ 2201 if(!type) 2202 type = $('.calendar-copy-move input[name="typeEvent"]').val(); 2203 2204 var schedulable = DataLayer.get('schedulable', event+''); 2205 2206 calendar = !!calendar ? calendar : schedulable.calendar; 2207 2147 2208 if(typeof(schedulable) == "array") 2148 2209 schedulable = schedulable[0]; 2149 2210 2150 2211 //Move eventos entre agendas 2151 if( !!parseInt(type)){2212 if(parseInt(type) == 0){ 2152 2213 2153 2214 schedulable.calendar = calendar; … … 2164 2225 delete newSchedulable.sequence; 2165 2226 delete newSchedulable.dtstamp; 2166 delete schedulable.calendar;2227 2167 2228 delete schedulable.DayLigth; 2168 2229 delete schedulable.rangeStart 2169 2230 delete schedulable.rangeEnd; 2170 2231 delete schedulable.lastUpdate; 2171 delete schedulable.repeat; 2172 2173 2232 2233 delete schedulable.calendar; 2234 2235 if(schedulable.repeat && type == "1" ){ 2236 var repeat = DataLayer.get('repeat', schedulable.repeat); 2237 delete repeat.schedulable; 2238 delete repeat.id; 2239 repeat.startTime = new Date(parseInt(repeat.startTime)).toString('yyyy-MM-dd HH:mm:00'); 2240 repeat.endTime = new Date(parseInt(repeat.endTime)).toString('yyyy-MM-dd HH:mm:00'); 2241 2242 var exceptions = DataLayer.get('repeatOccurrence', {filter: ['AND', ['=','repeat', schedulable.repeat], ['=','exception','1']]}, true); 2243 if(exceptions){ 2244 repeat.exceptions = ''; 2245 for(var i in exceptions ) 2246 repeat.exceptions += exceptions[i].occurrence + ((exceptions.length -1) == parseInt(i) ? '' : ','); 2247 2248 } 2249 2250 2251 schedulable.repeat = repeat; 2252 }else{ 2253 if(!!idRecurrence){ 2254 newSchedulable.endTime = parseInt(schedulable.occurrences[idRecurrence]) + (parseInt(newSchedulable.endTime) - parseInt(newSchedulable.startTime)); 2255 newSchedulable.startTime = schedulable.occurrences[idRecurrence]; 2256 } 2257 delete schedulable.repeat; 2258 } 2259 delete schedulable.occurrences; 2260 2174 2261 schedulable.calendar = DataLayer.copy(calendar); 2175 2176 newSchedulable.endTime = new Date(parseInt(newSchedulable.endTime) - (newSchedulable.allDay ? 86400000 : 0)).toString('yyyy-MM-dd hh:mm:00');2177 newSchedulable.startTime = new Date(parseInt(newSchedulable.startTime)).toString('yyyy-MM-dd hh:mm:00');2178 2262 2179 2263 var participants = DataLayer.copy(schedulable.participants); … … 2182 2266 schedulable.participants = $.map( participants, function( attendee, i ){ 2183 2267 2184 var participant = DataLayer.get('participant', attendee );2268 var participant = DataLayer.get('participant', attendee, false); 2185 2269 2186 2270 if(typeof(participant) == 'array') 2187 participant = participant[0]; 2188 2271 participant = participant[0]; 2272 2273 delete participant.delegatedFrom; 2189 2274 delete participant.id; 2275 delete participant.schedulable; 2276 2277 participant.id = DataLayer.put('participant', participant); 2190 2278 2191 2279 return participant ; 2192 }); 2193 2194 2280 }); 2281 //Edit ocurrence 2282 if(parseInt(type) == 3){ 2283 newSchedulable.endTime = !!evt.end ? evt.end.getTime() : ((evt.start).getTime() + 86400000); 2284 newSchedulable.startTime = evt.start.getTime(); 2285 2286 return newSchedulable; 2287 } 2288 newSchedulable.endTime = new Date(parseInt(newSchedulable.endTime) - (newSchedulable.allDay ? 86400000 : 0)).toString('yyyy-MM-dd hh:mm:00'); 2289 newSchedulable.startTime = new Date(parseInt(newSchedulable.startTime)).toString('yyyy-MM-dd hh:mm:00'); 2195 2290 2196 2291 DataLayer.put('schedulable', newSchedulable); -
trunk/prototype/modules/calendar/js/init.js
r5592 r5746 231 231 }, 232 232 233 eventDrop: function( event ){ 234 if(!event.disableDragging){ 235 DataLayer.put( "schedulable:calendar", event ); 233 eventDrop: function( evt, event, view ){ 234 evt.id = evt.id.split('-')[0]; 235 if(!evt.disableDragging){ 236 237 if(evt.isRepeat){ 238 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt); 239 240 var repeat = mount_exception(evt.id, evt.occurrence); 241 DataLayer.remove('repeat', false); 242 DataLayer.put('repeat', repeat); 243 DataLayer.commit('repeat', false, function(data){ 244 245 DataLayer.put('schedulable', schedulable); 246 247 }); 248 249 }else{ 250 DataLayer.put( "schedulable:calendar", evt ); 236 251 237 252 event.editable = false; 238 253 event.className = "blocked-event"; 239 calendar.fullCalendar( 'updateEvent', event ); 254 calendar.fullCalendar( 'updateEvent', evt ); 255 } 256 257 }else 258 Calendar.rerenderView(true); 259 }, 260 261 eventResize: function( evt, event, view ){ 262 evt.id = evt.id.split('-')[0]; 263 if(!evt.disableDragging){ 264 if(evt.isRepeat){ 265 var schedulable = copyAndMoveTo(false , evt.id , false, "3", evt); 266 267 //Normaliza a data para o backend 268 schedulable.startTime = new Date(parseInt(schedulable.startTime)).toString('yyyy-MM-dd hh:mm:00'); 269 schedulable.endTime = new Date(parseInt(schedulable.endTime)).toString('yyyy-MM-dd hh:mm:00'); 270 271 var repeat = mount_exception(evt.id, evt.occurrence); 272 273 DataLayer.remove('repeat', false); 274 DataLayer.put('repeat', repeat); 275 DataLayer.commit('repeat', false, function(data){ 276 277 DataLayer.put('schedulable', schedulable); 278 279 }); 280 }else{ 281 DataLayer.put( "schedulable:calendar", evt ); 282 evt.editable = false; 283 evt.className = "blocked-event"; 284 calendar.fullCalendar( 'updateEvent', evt ); 285 } 286 240 287 }else 241 288 Calendar.rerenderView(true); 242 289 }, 243 290 244 eventResize: function( event ){245 if(!event.disableDragging){246 DataLayer.put( "schedulable:calendar", event );247 248 event.editable = false;249 event.className = "blocked-event";250 calendar.fullCalendar( 'updateEvent', event );251 }else252 Calendar.rerenderView(true);253 },254 255 291 eventClick: function( evt, event, view ){ 256 if(evt.selectable) 257 eventDetails( DataLayer.get( "schedulable", evt.id), true); 292 evt.id = evt.id.split('-')[0]; 293 if(evt.selectable){ 294 if(evt.isRepeat){ 295 $.Zebra_Dialog(evt.title + ' é um evento com repetição.', { 296 'type': 'question', 297 'overlay_opacity': '0.5', 298 'buttons': ['Editar todas ocorrências', 'Editar essa ocorrência'], 299 'onClose': function(clicked) { 300 if(clicked == 'Editar todas ocorrências') { 301 eventDetails( DataLayer.get( "schedulable", evt.id), true); 302 }else{ 303 /* 304 * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do 305 *DataLayer, repeat somente é usado quando se trata da criação de um evento 306 *pela edição de uma ocorrência. 307 */ 308 var repeat = mount_exception(evt.id, evt.occurrence); 309 310 $('.calendar-copy-move input[name="typeEvent"]').val("3"); 311 312 eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat); 313 } 314 } 315 }); 316 317 }else 318 eventDetails( DataLayer.get( "schedulable", evt.id), true); 319 320 } 258 321 } 259 322 }, dateCalendar));
Note: See TracChangeset
for help on using the changeset viewer.