Changeset 7068
- Timestamp:
- 08/20/12 11:15:00 (12 years ago)
- Location:
- trunk/prototype
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/calendar/js/calendar.codecs.js
r7041 r7068 703 703 "class": form["class"], 704 704 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 705 endTime: Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), //+ (!!form.allDay ? 86400000 : 0) , 706 due: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 707 allDay: ( !!form.allDay ? 1 : 0 ), 705 endTime: (form.dueDate == '' ) ? 706 Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00') : 707 Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 708 due: (form.dueDate == '' ) ? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 709 allDay: ( form.dueDate == '' ? 1 : 0 ), 708 710 status: form.taskStatus, 709 711 id: form.idTask, … … 1062 1064 "class": form["class"], 1063 1065 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 1064 endTime: Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), //+ (!!form.allDay ? 86400000 : 0),1066 endTime: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 1065 1067 due: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 1066 1068 allDay: ( !!form.allDay ? 1 : 0 ), … … 1647 1649 1648 1650 if(!(typeof(evt) == 'object') || (evt.id.indexOf('java') >= 0)) 1649 return (null);1651 return (null); 1650 1652 1651 1653 evt.calendar = evt.calendar || "1"; 1652 1654 1653 1655 if( !grouped[ evt.calendar ] ) 1654 grouped[ evt.calendar ] = [];1656 grouped[ evt.calendar ] = []; 1655 1657 1656 1658 var calendar = DataLayer.get('calendar', evt.calendar); 1657 1659 1660 var taskEditable = function(idTask){ 1661 for(var i = 0; i < evt.participants.length; i++){ 1662 attendee = DataLayer.get('participant', evt.participants[i]); 1663 if(attendee.user == User.me.id) 1664 return attendee.isOrganizer == '1' ? 1665 { 1666 editable: true, 1667 disableResizing: false, 1668 disableDragging: false, 1669 className: 'fullcalendar-context-menu event-type-2 event-id-'+idTask+' calendar-id-'+calendar.id 1670 } 1671 : 1672 { 1673 editable: false, 1674 disableResizing: true, 1675 disableDragging: true, 1676 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idTask 1677 }; 1678 } 1679 } 1680 1658 1681 var eventEditable = function(idEvent, isRecurrence, Recurrence){ 1659 if(Calendar.signatureOf[calendar.id].isOwner == "1"){1660 1661 1662 attendee = DataLayer.get('participant', evt.participants[i]);1663 if(attendee.user == User.me.id)1664 1682 if(Calendar.signatureOf[calendar.id].isOwner == "1"){ 1683 var attendee = {}; 1684 for(var i = 0; i < evt.participants.length; i++){ 1685 attendee = DataLayer.get('participant', evt.participants[i]); 1686 if(attendee.user == User.me.id) 1687 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? 1665 1688 { 1666 selectable: true, 1667 className: 'fullcalendar-context-menu event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 1668 } : { 1669 editable: false, 1670 selectable: true , 1671 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent 1689 selectable: true, 1690 className: 'fullcalendar-context-menu event-type-1 event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 1691 } : { 1692 editable: false, 1693 selectable: true , 1694 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent 1695 }; 1696 } 1697 return { 1698 editable: false, 1699 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent+' calendar-id-'+calendar.id, 1700 selectable: true, 1701 disableDragging: isRecurrence 1672 1702 }; 1673 } 1674 return { 1675 editable: false, 1676 className: 'blocked-event-permision fullcalendar-not-context-menu event-id-'+idEvent+' calendar-id-'+calendar.id, 1677 selectable: true, 1678 disableDragging: isRecurrence 1679 }; 1680 } 1681 else{ 1682 var aclSignature = Calendar.signatureOf[calendar.id].permission; 1703 } 1704 else{ 1705 var aclSignature = Calendar.signatureOf[calendar.id].permission; 1706 1707 var mountClass = function(acl){ 1708 var returns = "" 1709 returns += acl['write'] ? "" : 'blocked-event-permision '; 1710 returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read'] ? 'fullcalendar-context-menu '+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') : ''); 1711 returns += 'event-id-'+idEvent+' calendar-id-'+calendar.id; 1712 return returns; 1713 } 1683 1714 1684 var mountClass = function(acl){ 1685 var returns = "" 1686 returns += acl['write'] ? "" : 'blocked-event-permision '; 1687 returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read'] ? 'fullcalendar-context-menu '+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') : ''); 1688 returns += 'event-id-'+idEvent+' calendar-id-'+calendar.id; 1689 return returns; 1690 } 1691 return DataLayer.merge( 1692 { 1693 editable: aclSignature.acl['write'] && !isRecurrence, 1694 disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 1695 disableDragging : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), 1696 className: mountClass(aclSignature.acl) 1697 }, aclSignature.acl['busy'] ? 1698 { 1699 title: 'Ocupado', 1700 selectable: false 1701 } : { 1702 selectable: true 1703 }); 1704 } 1715 return DataLayer.merge({ 1716 editable: aclSignature.acl['write'] && !isRecurrence, 1717 disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 1718 disableDragging : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), 1719 className: mountClass(aclSignature.acl) 1720 }, aclSignature.acl['busy'] ? 1721 { 1722 title: 'Ocupado', 1723 selectable: false 1724 } : { 1725 selectable: true 1726 } 1727 ); 1728 } 1705 1729 } 1730 1731 var duration = parseInt( evt.endTime ) - parseInt( evt.startTime ), isRepeat = false; 1732 1733 var occurrences = []; 1706 1734 1707 var duration = parseInt( evt.endTime ) - parseInt( evt.startTime ), isRepeat = false; 1708 1709 var occurrences = []; 1710 1711 if( evt.occurrences ) 1712 { 1713 isRepeat = true; 1714 occurrences = evt.occurrences; 1735 if( evt.occurrences ) 1736 { 1737 isRepeat = true; 1738 occurrences = evt.occurrences; 1715 1739 }else 1716 occurrences[ occurrences.length ] = evt.startTime;1740 occurrences[ occurrences.length ] = evt.startTime; 1717 1741 1718 1742 //occurrences = DataLayer.unique( occurrences ).sort(); 1719 1743 var typeEvent; 1720 for( var i = 0; i < occurrences.length; i++ ) {1721 1744 for( var i = 0; i < occurrences.length; i++ ) 1745 { 1722 1746 typeEvent = (evt.type == 2 && evt.taskToActivity ? 3 : evt.type) 1723 1747 grouped[ evt.calendar ].push( DataLayer.merge( 1724 1748 { 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 }, (parseInt(typeEvent) == 1 ? eventEditable(evt.id, isRepeat, i ) : (parseInt(typeEvent) == 2 ? {editable: true, disableResizing: false, disableDragging: false} : {editable: false, disableResizing: true, disableDragging: true}) )));1749 id: evt.URI || evt.id+ '-' + i, 1750 title: Encoder.htmlDecode(evt.summary), 1751 start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 1752 end: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 1753 allDay: parseInt( evt.allDay ), 1754 isRepeat: isRepeat, 1755 occurrence: i, 1756 type: typeEvent, 1757 calendar: evt.calendar 1758 }, (parseInt(typeEvent) == 1 ? eventEditable(evt.id, isRepeat, i ) : (parseInt(typeEvent) == 2 ? taskEditable(evt.id) : {editable: false, disableResizing: true, disableDragging: true})))); 1735 1759 } 1736 1760 }); -
trunk/prototype/modules/calendar/js/calendar.contentMenu.js
r6533 r7068 8 8 9 9 var classes = $(this).attr('class').split(" "); 10 var idEvent = false, idRecurrence = false, idCalendar = false;10 var idEvent = false, typeEvent = false,idRecurrence = false, idCalendar = false; 11 11 12 12 //recupera o id do calendar eo id do evento para tratamento 13 13 for(var i = 0; i < classes.length; i++){ 14 if (classes[i].indexOf("event-id-") >= 0 ){ 15 idEvent = classes[i].replace(/[a-zA-Z-]+/g, ''); 16 continue; 17 }else if (classes[i].indexOf("Recurrence-id-") >= 0 ){ 18 idRecurrence = classes[i].replace(/[a-zA-Z-]+/g, ''); 19 continue; 20 }else if (classes[i].indexOf("calendar-id-") >= 0 ){ 21 idCalendar = classes[i].replace(/[a-zA-Z-]+/g, ''); 22 continue; 23 } 24 } 14 if (classes[i].indexOf("event-id-") >= 0 ){ 15 idEvent = classes[i].replace(/[a-zA-Z-]+/g, ''); 16 continue; 17 }else if (classes[i].indexOf("Recurrence-id-") >= 0 ){ 18 idRecurrence = classes[i].replace(/[a-zA-Z-]+/g, ''); 19 continue; 20 }else if (classes[i].indexOf("calendar-id-") >= 0 ){ 21 idCalendar = classes[i].replace(/[a-zA-Z-]+/g, ''); 22 continue; 23 }else if (classes[i].indexOf("event-type-") >= 0 ){ 24 typeEvent = classes[i].replace(/[a-zA-Z-]+/g, ''); 25 continue; 26 } 27 } 25 28 26 var schedulable = DataLayer.get('schedulable', idEvent); 27 29 var schedulable = DataLayer.get('schedulable', idEvent); 28 30 var isRecurrence = DataLayer.get('repeat', schedulable.repeat).frequency || false; 29 31 30 32 var top = $('#divAppbox').scrollTop(); 31 33 32 var template = DataLayer.render( 'templates/menu_context_event.ejs', {event: schedulable.id , 33 top: (event.clientY - 135 + top), left: (event.clientX - 445), 34 var template = DataLayer.render( 'templates/menu_context_event.ejs', 35 { 36 event: schedulable.id , 37 top: (event.clientY - 135 + top), 38 left: (event.clientX - 445), 34 39 signature: Calendar.signatureOf[idCalendar], 35 calendars: Calendar.calendars, isRecurrence: (!isRecurrence || isRecurrence == 'none') ? false : true, 36 idRecurrence: idRecurrence 37 }); 40 calendars: Calendar[parseInt(typeEvent) == 1 ? 'calendars' : 'groups'], 41 isRecurrence: (!isRecurrence || isRecurrence == 'none') ? false : true, 42 idRecurrence: idRecurrence, 43 typeEvent: typeEvent 44 }); 38 45 39 46 $('#context-menu-event').html(template); 40 47 41 42 43 44 45 46 47 48 49 50 51 48 var method = function(value){ 49 switch (value){ 50 case "ocurrency": 51 return '2' 52 case "copy": 53 return '1'; 54 case "move": 55 return '0'; 56 } 57 } 58 52 59 $('#context-menu-event').find('li.menu-item').hover( 53 60 function () { -
trunk/prototype/modules/calendar/js/task.helpers.js
r7065 r7068 3 3 var errors = { 4 4 'emptyInitData': 'Por favor, informe uma data inicial', 5 'emptyEndData': 'Por favor, informe uma data final',6 5 'emptyInitHour': 'Por favor, informe uma hora inicial', 7 'emptyEndHour': 'Por favor, informe uma hora final',8 6 9 7 'invalidInitData' : 'Data inicial inválida', 10 'invalidEndData' : 'Data final inválida', 11 8 12 9 'equalData' : 'Hora inicial igual a final', 13 10 'theirData' : 'Data final menor que a inicial', … … 22 19 23 20 var start_date = $(".new-task-win.active .start-date").val(); 24 var end_date = $(".new-task-win.active .end-date").val();25 21 var start_time = $(".new-task-win.active .start-time").val(); 26 var end_time = $(".new-task-win.active .end-time").val();27 22 var due_date = $(".new-task-win.active .date-prevision").val(); 28 23 var due_time = $.trim($(".new-task-win.active .time-prevision").val()); 29 var isAllDay = $('.new-task-win.active input[name="allDay"]').is(':checked'); 30 var customDate = $(".endRepeat").val() == "customDate"; 31 var occurrences = $(".endRepeat").val() == "occurrences"; 32 var taskInterval = $('.taskInterval').val(); 33 24 34 25 if(start_date == "") 35 26 return errors['emptyInitData']; 36 else if(end_date == "")37 return errors['emptyEndData'];38 else if(!isAllDay && start_time == "")39 return errors['emptyInitHour'];40 else if(!isAllDay && end_time == "")41 return errors['emptyEndHour'];42 27 else if(due_date != "" && due_time == "") 43 28 return errors['dueTime']; 44 29 else if(due_date == "" && due_time != "") 45 30 return errors['dueDate']; 46 31 47 32 var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 48 49 33 var startDate = Date.parseExact( start_date + " " + $.trim(start_time) , formatString ); 50 var endDate = Date.parseExact( end_date + " " + $.trim(end_time) , formatString );51 var dueDate = Date.parseExact( due_date + " " + $.trim(due_time) , formatString );52 34 53 35 if(startDate == null || startDate.getTime() < 0 ) 54 36 return errors['invalidInitData']; 55 if(endDate == null || endDate.getTime() < 0) 56 return errors['invalidEndData']; 57 if(dueDate == null && due_time != "") 58 return errors['invalidDueData']; 59 60 if(isAllDay){ 61 startDate.clearTime(); 62 endDate.clearTime(); 63 if(endDate.compareTo(startDate) == -1) 64 return errors['theirData']; 65 }else{ 66 var condition = endDate.compareTo(startDate); 67 if(condition != 1){ 68 if(condition < 0){ 69 startDate.clearTime(); 70 endDate.clearTime(); 71 condition = endDate.compareTo(startDate); 72 return (errors[ condition == 0 ? 'theirHour' : 'theirData'] ); 73 } 74 else 75 return errors['equalData']; 76 } 77 78 if (dueDate != null && dueDate.compareTo(startDate) == -1) 79 return errors['dueInitDate']; 80 } 81 82 if (customDate) 83 if ( !($('.new-task-win.active .customDateEnd').val().length) ) 84 return errors['emptyEndData']; 37 38 if(due_date != '' && due_time != '') 39 { 40 var dueDate = Date.parseExact( due_date + " " + $.trim(due_time) , formatString ); 41 42 if(dueDate.compareTo(startDate) == -1) 43 return errors['dueInitDate']; 44 } 85 45 86 46 return false; -
trunk/prototype/modules/calendar/templates/activity_add.ejs
r7011 r7068 15 15 </p> 16 16 <p class="input-group date-info"> 17 <span>Inicio</span> 17 18 <input type="text" class="start-date" readonly="readonly" value="<%= (data.activity.startDate) ? data.activity.startDate : '' %>" name="startDate" /> 18 19 <input type="text" class="time start-time<%= (data.activity.allDay) ? ' hidden' : '' %>" readonly="readonly" value="<%= (data.activity.startHour) ? data.activity.startHour : '' %>" name="startHour" /> 19 <span>até</span> 20 <input type="text" class="end-date" readonly="readonly" value="<%= (data.activity.endDate) ? data.activity.endDate : '' %>" name="endDate" /> 21 <input type="text" class="time end-time<%= (data.activity.allDay) ? ' hidden' : '' %>" readonly="readonly" value="<%= (data.activity.endHour) ? data.activity.endHour : '' %>" name="endHour" /> 22 23 <span class="previsao-termino">Previsão término:</span> 20 <span>com previsão de término</span> 24 21 <input type="text" class="date-due" name="dueDate" readonly="readonly"> 25 <input type="text" class="time time-due " name="dueHour" readonly="readonly">22 <input type="text" class="time time-due <%= (data.activity.allDay) ? ' hidden' : '' %>" name="dueHour" readonly="readonly"> 26 23 27 24 <a href="#" class="group_addactivity_details_lnk_timezone">Fuso horário</a> -
trunk/prototype/modules/calendar/templates/task_add.ejs
r7006 r7068 14 14 </p> 15 15 <p class="input-group date-info"> 16 <span>Inicio</span> 16 17 <input type="text" class="date start-date" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= (data.task.startDate) ? data.task.startDate : '' %>" name="startDate" /> 17 <input type="text" class="time start-time<%= (data.task.allDay) ? ' hidden' : '' %>" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= (data.task.startHour) ? data.task.startHour : '' %>" name="startHour" /> 18 <span>até</span> 19 <input type="text" class="date end-date" value="<%= (data.task.endDate) ? data.task.endDate : '' %>" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> name="endDate" /> 20 <input type="text" class="time end-time<%= (data.task.allDay) ? ' hidden' : '' %>" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= (data.task.endHour) ? data.task.endHour : '' %>" name="endHour" /> 21 22 <span class="prevision-termino">Previsão término:</span> 23 <input type="text" name="dueDate" class="date date-prevision" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= data.task.dueDate %>"> 24 <input type="text" name="dueTime" class="time time-prevision" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= data.task.dueTime %>"> 25 26 <a href="#" class="calendar_addtask_details_lnk_timezone" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>>Fuso horário</a> 18 <input type="text" class="time start-time" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= (data.task.startHour) ? data.task.startHour : '' %>" name="startHour" /> 19 <span>com previsão de término</span> 20 <input type="text" name="dueDate" class="date date-prevision" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= data.task.dueDate %>"> 21 <input type="text" name="dueTime" class="time time-prevision" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= data.task.dueTime %>"> 22 23 <a href="#" class="calendar_addtask_details_lnk_timezone" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>>Fuso horário</a> 27 24 28 25 29 <!-- 26 <!-- <input type="text" name="timezone" style="display: none;" />--> 30 27 <select name="timezone" class="hidden calendar-addtask-details-txt-timezone" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>> 31 28 <option value="">- None selected -</option> … … 48 45 </div> 49 46 </div> 50 51 <p class="input-group task-type"> 52 <input type="checkbox" name="allDay" value="true" <%= (data.task.allDay) ? 'checked="checked"' : '' %> <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>/> 53 <label for="allDay">Dia inteiro</label> 54 <!-- 55 <input type="checkbox" class="button-repeat" /> 56 <label for="calendar_addtask_details_chk_repeat">Repetir</label>--> 57 </p> 47 58 48 <div class="subitem"> 59 49 % Conclusão: <input type="text" name="percentage" class="done" value="<%= data.task.percentage %>"> -
trunk/prototype/services/iCal.php
r7028 r7068 58 58 $sTime = new DateTime('@' . (int) ($v['startTime'] / 1000), $timezone); 59 59 $sTime->setTimezone($apTimezoneOBJ); 60 $eTime = new DateTime('@' . (int) ($v['endTime'] / 1000), $timezone);61 $eTime->setTimezone($apTimezoneOBJ);62 60 63 61 if (( isset($v['repeat']) ) && ( isset($v['repeat']['frequency']) && $v['repeat']['frequency'] && $v['repeat']['frequency'] != 'none' )) … … 65 63 66 64 67 if (isset($v['allDay']) && $v['allDay'] == 1) {68 $vevent->setProperty('dtstart', $sTime->format(DATE_RFC822), array("VALUE" => "DATE")); 69 $vevent->setProperty('dtend', $eTime->format(DATE_RFC822), array("VALUE" => "DATE"));70 71 } else {72 $vevent->setProperty('dtstart', $sTime->format(DATE_RFC822), array('TZID' => $apTimezone)); 73 $vevent->setProperty('dtend', $eTime->format(DATE_RFC822), array('TZID' => $apTimezone));74 65 if (isset($v['allDay']) && $v['allDay'] == 1) 66 { 67 $vevent->setProperty('dtstart', $sTime->format(DATE_RFC822), array("VALUE" => "DATE")); 68 $vevent->setProperty('X-MICROSOFT-CDO-ALLDAYEVENT', 'TRUE'); 69 } else 70 { 71 $vevent->setProperty('dtstart', $sTime->format(DATE_RFC822), array('TZID' => $apTimezone)); 72 $vevent->setProperty('X-MICROSOFT-CDO-ALLDAYEVENT', 'FALSE'); 75 73 } 76 74 … … 137 135 } 138 136 137 ob_start(); 138 print_r( "\n dtStart \n"); 139 print_r($sTime->format(DATE_RFC822)); 140 print_r( "\n dtEnd \n"); 141 print_r( $eTime->format(DATE_RFC822)); 142 $output = ob_get_clean(); 143 file_put_contents( "/tmp/acoutinho.log", $output , FILE_APPEND); 144 139 145 if(isset($v['due']) && $v['due'] != '' && (int)$v['due'] > 0){ 140 146 $dueTime = new DateTime('@' . (int) ($v['due'] / 1000), $timezone); … … 182 188 break; 183 189 } 184 } 190 } 191 192 ob_start(); 193 print_r( "\n Ical Gerado \n"); 194 print_r( $ical->createCalendar()); 195 $output = ob_get_clean(); 196 file_put_contents( "/tmp/acoutinho.log", $output , FILE_APPEND); 185 197 186 198 return $ical->createCalendar(); … … 282 294 $sTime = new DateTime('@' . (int) ($v['startTime'] / 1000), $timezone); 283 295 $sTime->setTimezone($apTimezoneOBJ); 284 $eTime = new DateTime('@' . (int) ($v['endTime'] / 1000), $timezone);285 $eTime->setTimezone($apTimezoneOBJ);286 296 287 297 if (isset($v['allDay']) && $v['allDay'] == 1) { 288 298 $todo->setProperty('dtstart', $sTime->format(DATE_RFC822), array("VALUE" => "DATE")); 289 $todo->setProperty('dtend', $eTime->format(DATE_RFC822), array("VALUE" => "DATE"));290 299 //$todo->setProperty('X-MICROSOFT-CDO-ALLDAYEVENT', 'TRUE'); 291 300 } else { 292 301 $todo->setProperty('dtstart', $sTime->format(DATE_RFC822), array('TZID' => $apTimezone)); 293 $todo->setProperty('dtend', $eTime->format(DATE_RFC822), array('TZID' => $apTimezone));294 302 //$todo->setProperty('X-MICROSOFT-CDO-ALLDAYEVENT', 'FALSE'); 295 303 } … … 372 380 public function createAlarms($alarms, &$vevent) 373 381 { 374 foreach ($alarms as $ ia => $va)382 foreach ($alarms as $va) 375 383 { 376 384 $valarm = new valarm(); … … 1741 1749 $interation['schedulable://' . $eventID] = $schedulable; 1742 1750 1743 1744 1745 1746 1747 1751 return $interation; 1748 1752 } … … 1784 1788 1785 1789 /* Data de Termino */ 1786 $endTime = $component->getProperty('dtend', false, true); 1787 1788 $tzid = isset($endTime['params']['TZID']) ? $endTime['params']['TZID'] : $params['X-WR-TIMEZONE']; 1789 1790 if($tzid) 1791 $tzid = self::nomalizeTZID($tzid); 1792 1793 if (isset($endTime['params']['VALUE']) && $endTime['params']['VALUE'] === 'DATE') 1794 $schedulable['endTime'] = self::date2timestamp($endTime['value']) - self::_getTzOffset('UTC', $schedulable['timezone'], '@' . self::date2timestamp($endTime['value'])) . '000'; 1795 else if ($tzid && !isset($endTime['value']['tz'])) /* Caso não tenha um tz na data mais exista um parametro TZID deve ser aplicado o timezone do TZID a data */ 1796 $schedulable['endTime'] = self::date2timestamp($endTime['value']) - self::_getTzOffset('UTC', $tzid, '@' . self::date2timestamp($endTime['value'])) . '000'; 1797 else { 1798 $schedulable['endTime'] = self::date2timestamp($endTime['value']) . '000'; 1799 if (strpos($params['prodid'], 'Outlook') !== false) { 1800 //Se o ics veio em utc não aplicar horario de verão 1801 $eTime = new DateTime('@' . (int) ($schedulable['endTime'] / 1000), new DateTimeZone('UTC')); 1802 $eTime->setTimezone($objTimezone); 1803 if ($eTime->format('I')) 1804 $schedulable['endTime'] = $schedulable['endTime'] - 3600000; 1805 } 1806 } 1790 if($due = $component->getProperty('due', false, true)){ 1791 1792 $tzid = isset($due['params']['TZID']) ? $due['params']['TZID'] : $params['X-WR-TIMEZONE']; 1793 1794 if($tzid) 1795 $tzid = self::nomalizeTZID($tzid); 1796 1797 if (isset($due['params']['VALUE']) && $due['params']['VALUE'] === 'DATE') 1798 $schedulable['due'] = self::date2timestamp($due['value']) - self::_getTzOffset('UTC', $schedulable['timezone'], '@' . self::date2timestamp($due['value'])) . '000'; 1799 else if ($tzid && !isset($endTime['value']['tz'])) /* Caso não tenha um tz na data mais exista um parametro TZID deve ser aplicado o timezone do TZID a data */ 1800 $schedulable['due'] = self::date2timestamp($due['value']) - self::_getTzOffset('UTC', $tzid, '@' . self::date2timestamp($due['value'])) . '000'; 1801 else { 1802 $schedulable['due'] = self::date2timestamp($due['value']) . '000'; 1803 if (strpos($params['prodid'], 'Outlook') !== false) { 1804 //Se o ics veio em utc não aplicar horario de verão 1805 $dueTime = new DateTime('@' . (int) ($schedulable['due'] / 1000), new DateTimeZone('UTC')); 1806 $dueTime->setTimezone($objTimezone); 1807 1808 if ($dueTime->format('I')) 1809 $schedulable['due'] = $schedulable['due'] - 3600000; 1810 } 1811 } 1812 $schedulable['endTime'] = $schedulable['due']; 1813 }else 1814 $schedulable['endTime'] = $schedulable['startTime']; 1807 1815 1808 1816 $schedulable['type'] = '2'; //type schedulable … … 2003 2011 $interation['schedulable://' . $todoID] = $schedulable; 2004 2012 2005 2013 return $interation; 2006 2014 } 2007 2015
Note: See TracChangeset
for help on using the changeset viewer.