Changeset 5715 for trunk/prototype/modules/calendar/js/calendar.codecs.js
- Timestamp:
- 03/13/12 18:23:02 (12 years ago)
- Location:
- trunk/prototype/modules/calendar/js
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/calendar/js
- Property svn:ignore
-
old new 2 2 ._init.js 3 3 ._calendar.date.js 4 .calendar.codecs.js.kate-swp
-
- Property svn:ignore
-
trunk/prototype/modules/calendar/js/calendar.codecs.js
r5652 r5715 2 2 3 3 init: function(){ 4 this.moduleName = 'expressoCalendar'; 4 this.moduleName = 'expressoCalendar'; 5 5 this.me = DataLayer.dispatch( "me" ); 6 6 … … 9 9 this.isDaylightSaving = Timezone.daylightSaving; 10 10 this.load(); 11 }, 11 }, 12 12 13 13 load: function(){ … … 564 564 return returns; 565 565 }; 566 566 567 567 return { 568 568 "class": objEvent["class"], 569 569 id: objEvent.id, 570 repeat: encodeRepeat( objEvent.repeat ), 570 571 location: objEvent.location, 571 572 category: objEvent.category, … … 605 606 receiveNotification : attend.receiveNotification, 606 607 alarms : $.map(attend.alarms || [], function( alarm ){ 607 //TODO - Atualizar cach cliente em conceito aninhados de camada 2 608 var alarmEvent = DataLayer.get('alarm', alarm) 609 return !!alarmEvent ? alarmEvent: (null); 608 return DataLayer.get('alarm', alarm); 610 609 }) 611 610 }; … … 643 642 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}), 644 643 delegatedFrom: delegatedFrom, 644 645 645 statusParticipants: statusParticipants 646 646 }; … … 650 650 }); 651 651 652 652 function decodeRepeat ( form ) { 653 654 var patati = {}; 655 656 if( form.repeatId ) 657 patati['id'] = form.repeatId; 658 659 patati['frequency'] = form.frequency; 660 661 patati['bymonthday'] = patati['byyearday'] = patati['byday'] = ''; 662 663 patati['interval'] = patati['endTime'] = patati['count'] = patati['startTime'] = 0; 664 665 if( form.frequency === 'none' ) 666 return( patati ); 667 668 var day = []; 669 670 $("input[type=checkbox][name='repeatweekly[]']:checked").each(function() { 671 day[ day.length ] = $(this).val(); 672 }); 673 674 patati['byday'] = day.join(','); 675 676 var formatString = ( typeof form.allDay !== "undefined" && !!form.allDay )? User.preferences.dateFormat+" HH:mm" : User.preferences.dateFormat + " " + User.preferences.hourFormat; 677 678 var date = Date.parseExact( form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).add( { days: 1 } ).toString('yyyy-MM-dd HH:mm:00'); 679 680 patati['startTime'] = date.toString('yyyy-MM-dd HH:mm:00'); 681 682 if( !patati['byday'] ) 683 switch(form.frequency) { 684 case 'weekly': 685 break; 686 case 'daily': 687 break; 688 case 'monthly': 689 patati['bymonthday'] = date.getDate(); 690 break; 691 case 'yearly': 692 patati['byyearday'] = date.getDayOfYear(); 693 break; 694 default : 695 return patati; 696 } 697 698 if (($(".endRepeat").val() == 'occurrences')) 699 patati['count'] = $(".occurrencesEnd").val(); 700 701 if (($(".endRepeat").val() == 'customDate')) 702 patati['endTime'] = Date.parseExact( $(".customDateEnd").val() + (!!form.allDay ? " 00:00": " "+$.trim(form.endHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'); 703 704 patati['interval'] = $(".eventInterval").val(); 705 706 /** 707 wkst = [ 'MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU' ] 708 weekno = number 709 minute = number 710 second = number 711 yearday = number 712 monthday = number 713 setpos = number 714 day = number 715 hour = number 716 interval = number 717 frequency = [ 'monthly', 'daily', 'weekly', 'yearly', 'hourly', 'minutely', 'secondly' ] 718 endTime = milliseconds 719 */ 720 return( patati ); 721 722 } 723 724 725 726 function encodeRepeat( repeat ){ 727 728 if( !repeat ) 729 return( false ); 730 731 return DataLayer.get( 'repeat', repeat ); 732 } 653 733 654 734 DataLayer.codec( "schedulable", "detail", { … … 674 754 startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 675 755 endTime: Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'), //+ (!!form.allDay ? 86400000 : 0) , 676 allDay: ( !!form.allDay ? 1 : 0 ), 756 allDay: ( !!form.allDay ? 1 : 0 ), 677 757 id: form.idEvent, 678 758 location: form.location, … … 685 765 return {attachment: attachment} 686 766 }), 767 repeat: this.decodeRepeat( form ), 687 768 participants: $.map( form.attendee || [], function( attendee, i ){ 688 769 … … 722 803 }, 723 804 805 724 806 encoder: function( evtObj ){ 725 807 726 if(!(!!evtObj)) 727 return undefined; 728 729 var notArray = false; 730 731 if( notArray = $.type(evtObj) !== "array" ) 732 evtObj = [ evtObj ]; 733 734 var pref = User.preferences; 735 736 var res = DataLayer.encode('schedulable:preview', evtObj); 737 738 if( !notArray ){ 739 var dates = {}; 740 741 for (var i=0; i < res.length; i++) { 742 743 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 744 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 745 746 var counter = startDate.clone(); 747 748 while (counter.compareTo(startDate) == 0) { 749 750 if (!dates[counter.toString(User.preferences.dateFormat)]) 751 dates[counter.toString(User.preferences.dateFormat)] = { startDate:false, events:[] }; 752 if (!dates[counter.toString(User.preferences.dateFormat)].startDate) 753 dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 754 755 dates[counter.toString(User.preferences.dateFormat)].events.push(res[i]); 756 counter.addDays(-1); 757 } 758 } 759 res = { events_list: dates, 760 count : res.length 761 }; 762 } 763 764 return notArray ? res[0] : res; 808 if(!(!!evtObj)) 809 return undefined; 810 811 var notArray = false; 812 813 if( notArray = $.type(evtObj) !== "array" ) 814 evtObj = [ evtObj ]; 815 816 var pref = User.preferences; 817 818 var res = DataLayer.encode('schedulable:preview', evtObj); 819 820 if( !notArray ){ 821 var dates = {}; 822 823 for (var i=0; i < res.length; i++) { 824 825 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 826 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 827 828 var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 829 830 var occurrences = [ startDate.getTime() ]; 831 832 if( res[i].occurrences ) 833 { 834 occurrences = res[i].occurrences; 835 } 836 837 for( var ii = 0; ii < occurrences.length; ii++ ) 838 { 839 var currentDate = new Date( occurrences[ii] ); 840 var counter = currentDate.clone(); 841 842 var res2 = $.extend( {}, res[i], {'startDate': currentDate.toString( User.preferences.dateFormat ), 'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) } ); 843 844 while (counter.compareTo( currentDate ) == 0) { 845 846 if (!dates[counter.toString(User.preferences.dateFormat)]) 847 dates[counter.toString(User.preferences.dateFormat)] = { startDate:false, events:[] }; 848 if (!dates[counter.toString(User.preferences.dateFormat)].startDate) 849 dates[counter.toString(User.preferences.dateFormat)].startDate = counter.toString(User.preferences.dateFormat); 850 851 dates[counter.toString(User.preferences.dateFormat)].events.push(res2); 852 counter.addDays(-1); 853 } 854 } 855 } 856 res = { events_list: dates, 857 count : res.length 858 }; 859 } 860 861 return notArray ? res[0] : res; 765 862 } 766 863 … … 823 920 return( false ); 824 921 825 // if( notArray = $.type(evtObj) !== "array" )826 // evtObj = [ evtObj ];827 // alert( evtObj );828 922 var filtered = evtObj; 829 830 // repeat:{831 // frequency: "weekly",832 // endTime: Date.parse("+10 days").getTime(),833 // interval: 3,834 // byday: 3,835 // bysecond: 3,836 // byminute: 3,837 // bymonthday: 3,838 // byyearday: 3,839 // byweekno: 3,840 // bysetpos: 3,841 // wkst: "monday"/*,842 // duration: true*/843 // }844 845 // $.each(evtObj, function( index, evt ){846 847 // alert( dump(!!evt.repeat) );848 849 // if( evt && !!evt.repeat && (evt.startTime < filter.end || (evt.repeat.endTime || 0) > filter.start ) )850 // {851 // // var interval = evt.repeat.interval;852 923 // 853 // var current = new Date( evt.startTime );854 // var begin = new Date( filter.start );855 // var end = new Date( filter.end );856 // var offset = evt.endTime - evt.startTime;857 //858 // var ocurrence = [];859 //860 // while( Date.compare( current, begin ) !== 1 )861 // current = current.parse( "+" + evt.repeat.interval + " " + frequency + "s" );862 //863 // while( current.before( end ) && (ocurrence[ ocurrence.length ] = current) )864 // current = current.parse( "+" + evt.repeat.interval + " " + frequency + "s" );865 //866 // for( var i = 0; i < ocurrences.length; i++ )867 // filtered[ filtered.length ] = { URI: evt.URI,868 // summary: evt.summary,869 // start: new Date( ocurrences[i] ),870 // end: new Date( ocurrences[i] + offset ),871 // allDay: evt.allDay };872 //873 // // switch( evt.repeat.frequency )874 // // {875 // // case "yearly": interval *= 12;876 // // case "monthly": interval *= 30; //TODO: get the month variant877 // // case "weekly": interval *= 7;878 // // case "daily": interval *= 24;879 // // case "hourly": interval *= 60;880 // // case "minutely": interval *= 60;881 // // case "secondly": interval *= 1000;882 // // }883 // //884 // // var rest = ( filter.start - evt.startTime ) % interval;885 // //886 // // var offset = evt.endTime - evt.startTime;887 // //888 // // if( rest < offset )889 // // {890 // // var freq = Math.floor( offset - rest / interval );891 // //892 // //893 // //894 // // for( var i = 0; i < freq; i++ )895 // // {896 // // var ocurrence = filter.start + rest + ( interval * i );897 // //898 // //899 // // }900 // //901 // //902 // // }903 // }904 905 // if( parseInt( evt.endTime ) > filter[1][0][2] || parseInt( evt.startTime ) < filter[1][1][2] )906 // filtered[ filtered.length ] = evt;907 //908 // });909 910 924 var grouped = {}; 911 925 … … 922 936 var calendar = DataLayer.get('calendar', evt.calendar); 923 937 924 var eventEditable = function(idEvent ){938 var eventEditable = function(idEvent, isRecurrence){ 925 939 if(Calendar.signatureOf[calendar.id].isOwner == "1"){ 926 940 var attendee = {}; … … 928 942 attendee = DataLayer.get('participant', evt.participants[i]); 929 943 if(attendee.user == User.me.id) 930 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? {selectable: true, className: 'fullcalendar-context-menu event-id-'+idEvent } : {editable: false, selectable: true ,className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent};944 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}; 931 945 } 932 return {editable: false, className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent, selectable: true };946 return {editable: false, className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent, selectable: true, disableDragging: isRecurrence }; 933 947 } 934 948 else{ … … 943 957 } 944 958 return DataLayer.merge({ 945 editable: aclSignature.acl['write'] ,959 editable: aclSignature.acl['write'] && !isRecurrence, 946 960 disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 947 961 disableDragging : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), … … 951 965 952 966 } 967 968 var duration = parseInt( evt.endTime ) - parseInt( evt.startTime ), isRepeat = false; 969 970 var occurrences = [ evt.startTime ]; 971 972 if( evt.occurrences ) 973 { 974 isRepeat = true; 975 occurrences = evt.occurrences; 976 } 953 977 954 grouped[ evt.calendar ].push( DataLayer.merge({ id: evt.URI || evt.id, 955 title: Encoder.htmlDecode(evt.summary), 956 start: Timezone.getDateCalendar(new Date(parseInt( evt.startTime )), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 957 end: Timezone.getDateCalendar(new Date(parseInt( evt.endTime ) - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 958 allDay: parseInt( evt.allDay ) }, eventEditable(evt.id) ) ); 978 for( var i = 0; i < occurrences.length; i++ ) 979 grouped[ evt.calendar ].push( DataLayer.merge({ id: evt.URI || evt.id, 980 title: Encoder.htmlDecode(evt.summary), 981 start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 982 end: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 983 allDay: parseInt( evt.allDay ) }, eventEditable(evt.id, isRepeat ) ) ); 959 984 }); 960 985
Note: See TracChangeset
for help on using the changeset viewer.