/* CalDavZAP - the open source CalDAV Web Client Copyright (C) 2011-2015 Jan Mate Andrej Lezo Matej Mihalik This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ String.prototype.parseComnpactISO8601=function(uid) { if(this.length>=15) var formattedString=this.substring(0, 4)+'/'+this.substring(4, 6)+'/'+this.substring(6, 8)+' '+this.substring(9, 11)+':'+this.substring(11, 13)+':'+this.substring(13, 15); else var formattedString=this.substring(0, 4)+'/'+this.substring(4, 6)+'/'+this.substring(6, 8)+' '+'00:00:00'; var value=Date.parse(formattedString); if(isNaN(value)) return false else return new Date(value); } function repeatStartCompare(objA,objB) { var startA='',startB=''; if(objA.rec_id!='') startA=objA.rec_id.parseComnpactISO8601(); else if(objA.start) startA=new Date(objA.start.getTime()); else if(objA.end) startA=new Date(objA.end.getTime()); else startA=Infinity; if(objB.rec_id!='') startB=objB.rec_id.parseComnpactISO8601(); else if(objB.start) startB=new Date(objB.start.getTime()); else if(objB.end) startB=new Date(objB.end.getTime()); else startB=Infinity; if(startAstartB) return 1; return 0; } function findWeek(weekNo,inDate,day) { var distance = (day + 7 - inDate.getDay()) % 7; var date = new Date(inDate.getTime()); date.setDate(date.getDate() + distance); if(date.getWeekNo() <= weekNo) date.setDate(date.getDate() + 7*(weekNo-date.getWeekNo())); else { var actualYearWeeks = new Date(date.getFullYear(),11,31,1,1,1).getWeekNo(); date.setDate(date.getDate() + 7*(actualYearWeeks-date.getWeekNo())); } } String.prototype.getSecondsFromOffset=function() { if(this.length>=5) { var hours=this.substring(1,3); var minutes=this.substring(3,5); var seconds='00'; if(this.length>=7) seconds=this.substring(5,7); var value=parseInt(hours,10)*60*60+parseInt(minutes,10)*60+parseInt(seconds,10); if(this.charAt(0)=='-') value=value*-1; if(!isNaN(value)) return value else return 0; } else return 0; } Array.prototype.indexElementOf=function(value) { for(var i=0;i0) { for(var v=0;vnow) { var delay=aTime-now; if(maxAlarmValue0) { for(var ir=0;ir0 && eventsArray[collections[i].uid][j].id!=eventsArray[collections[i].uid][j-1].id) if(calEvent.alertTime.length>0) { for(var k=0; know) { var delay=aTime-now; if(maxAlarmValue0 && todosArray[todoCollections[i].uid][j].id!=todosArray[todoCollections[i].uid][j-1].id) if(todoEvent.alertTime.length>0) { if(todoEvent.end) var showDate= new Date(todoEvent.end.getTime()); else if(todoEvent.start) var showDate= new Date(todoEvent.start.getTime()); else var showDate=new Date(); for(var k=0; know) { var delay=aTime-now; if(maxAlarmValuedate) continue; if(checkRule && daylightComponents[i].startMonth) // is RRULE SET { objDayLight=daylightComponents[i]; actualDaylightComponent=getDateFromDay(objDayLight, date,false,uid); break; } else { for(var j=0;jdate) continue; if(checkRule && standardComponents[i].startMonth) // is RRULE SET { objDayLight=standardComponents[i]; actualStandardComponent=getDateFromDay(objDayLight, date); break; } else { for(var j=0;jactualStandardComponent.startDate) offset=actualDaylightComponent.offsetTo; else offset=actualStandardComponent.offsetTo; } else if(actualDaylightComponent) offset=actualDaylightComponent.offsetTo; else if(actualStandardComponent) offset=actualStandardComponent.offsetTo; } else if(tZone == 'local') offset = getStringLocalOffset(date); return offset; } function getStringLocalOffset(date) { var offset = '+0000'; var localOffset = date.getTimezoneOffset(); if(localOffset>0) { var hours = Math.floor(localOffset/60); var minutes = localOffset - hours*60; offset = '-' + (hours<10 ? '0'+hours : hours); offset += (minutes<10 ? '0'+minutes : minutes); } else if(localOffset<0) { localOffset = localOffset*-1; var hours = Math.floor(localOffset/60); var minutes = localOffset - hours*60; offset = '+' + (hours<10 ? '0'+hours : hours); offset += (minutes<10 ? '0'+minutes : minutes); } return offset; } function getDayLightObject(tzObject,t) { var dayLightStartDate, dayLightEndDate, myDate=t; dayLightStartDate=getDateFromDay(tzObject, t); dayLightEndDate=getDateFromDay(tzObject, t); for(var i=0;idayLightEndDate) { if(myDate>dayLightStartDate) dayLightEndDate.setFullYear(dayLightEndDate.getFullYear()+1); else dayLightStartDate.setFullYear(dayLightStartDate.getFullYear()-1); } return {dayLightStartDate : dayLightStartDate, dayLightEndDate: dayLightEndDate}; } function deleteEventFromArray(uid) { var rid=uid.substring(0, uid.lastIndexOf('/')+1); var count=0; if(globalEventList.displayEventsArray[rid]!=null && typeof globalEventList.displayEventsArray[rid] != 'undefined') for(var i=globalEventList.displayEventsArray[rid].length-1;i>=0;i--) if(globalEventList.displayEventsArray[rid][i].id==uid) { count++; for(var o=0;o=0;i--) if(globalEventList.displayTodosArray[rid][i].id==uid) { for(var o=0;o0) { var rid=$('#uid').val().substring(0, $('#uid').val().lastIndexOf('/')+1); if(rid) if(globalEventList.events[rid][$('#uid').val()].uid!=undefined) origVcalendarString=globalEventList.events[rid][$('#uid').val()].vcalendar; while(origVcalendarString.match(vCalendar.pre['vevent'])!=null) { if(origVcalendarString.substring(origVcalendarString.indexOf('BEGIN:VEVENT')-2, origVcalendarString.indexOf('BEGIN:VEVENT'))=='\r\n') { var partEvent=origVcalendarString.substring(origVcalendarString.indexOf('BEGIN:VEVENT')-2,origVcalendarString.indexOf('END:VEVENT')+'END:VEVENT'.length); origVcalendarString=origVcalendarString.replace(partEvent, ''); } else { var partEvent=origVcalendarString.substring(origVcalendarString.indexOf('BEGIN:VEVENT'),origVcalendarString.indexOf('END:VEVENT')+'END:VEVENT'.length); origVcalendarString=origVcalendarString.replace(partEvent, ''); partEvent+='\r\n'; } eventStringArray[eventStringArray.length]=partEvent; } } var origTimezone = ''; for(var iE=0;iE1 && $('#vcalendarHash').val()==hex_sha256(inputEvents[j].vcalendar)) inputEvents[j].vcalendar=changeRuleForFuture(inputEvents[j], $('#futureStart').val().split(';')[0]); if(inputEvents[j].vcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) vCalendarText+=inputEvents[j].vcalendar.substring(2,inputEvents[j].vcalendar.length); else if((inputEvents[j].vcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2)) || (inputEvents[j].vcalendar.indexOf('\r\n')!=0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) ) vCalendarText+=inputEvents[j].vcalendar; else vCalendarText+='\r\n'+inputEvents[j].vcalendar; futureMode=true; } else if(deleteMode && $('#futureStart').val().split(';')[0]!='' && $('#futureStart').val().split(';')[1]==inputEvents[j].start) { if($('#vcalendarHash').val()==hex_sha256(inputEvents[j].vcalendar)) { inputEvents[j].vcalendar=changeRuleForFuture(inputEvents[j], 2); } if(inputEvents[j].vcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) vCalendarText+=inputEvents[j].vcalendar.substring(2,inputEvents[j].vcalendar.length); else if((inputEvents[j].vcalendar.indexOf('\r\n')==0 && vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2)) || (inputEvents[j].vcalendar.indexOf('\r\n')!=0 && vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) ) vCalendarText+=inputEvents[j].vcalendar; else vCalendarText+='\r\n'+inputEvents[j].vcalendar; } else { realEvent=inputEvents[j]; } } vCalendarText=vCalendarText.replace(realEvent.vcalendar,''); for(var ip=0; ip0) // sel_option=inputEvents[0].timeZone; //} if(sel_option=='UTC') { isUTC=true; timeZoneAttr=''; } else if(sel_option=='local') timeZoneAttr=''; else if(sel_option=='custom') timeZoneAttr=';'+vcalendarEscapeValue('TZID='+realEvent.timeZone); else timeZoneAttr=';'+vcalendarEscapeValue('TZID='+sel_option); var timezoneComponent=''; if(globalSettings.rewritetimezonecomponent.value || !vCalendar.tplM['unprocessedVTIMEZONE']) { if(tzArray.indexOf(sel_option)==-1) timezoneComponent=buildTimezoneComponent(sel_option); } else timezoneComponent=vCalendar.tplM['unprocessedVTIMEZONE']; if(vCalendarText.lastIndexOf('\r\n')!=(vCalendarText.length-2)) vCalendarText+='\r\n'; vCalendarText+=timezoneComponent; } // ---------------------------------- EVENT ---------------------------------- // if(vCalendar.tplM['beginVEVENT']!=null && (process_elem=vCalendar.tplM['beginVEVENT'][0])!=undefined) { if(vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) vCalendarText+=vCalendar.tplM['beginVEVENT'][0]; else vCalendarText+='\r\n'+vCalendar.tplM['beginVEVENT'][0]; vevent=true; } else { process_elem=vCalendar.tplC['beginVEVENT']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); if(vCalendarText.lastIndexOf('\r\n')==(vCalendarText.length-2)) vCalendarText+=process_elem; else vCalendarText+='\r\n'+process_elem; vevent=true; } var d, utc, d=new Date(); utc=d.getUTCFullYear()+(d.getUTCMonth()+1<10 ? '0' : '')+(d.getUTCMonth()+1)+(d.getUTCDate()<10 ? '0' : '')+d.getUTCDate()+'T'+(d.getUTCHours()<10 ? '0' : '')+d.getUTCHours()+(d.getUTCMinutes()<10 ? '0' : '')+d.getUTCMinutes()+(d.getUTCSeconds()<10 ? '0' : '')+d.getUTCSeconds()+'Z'; var create=true; if($('#recurrenceID').val()=='') var checkVal='orig'; else var checkVal=$('#recurrenceID').val(); var created=''; for(vev in vCalendar.tplM['contentline_CREATED']) { if(vev==checkVal) created=vCalendar.tplM['contentline_CREATED'][vev]; } if(created!='') { process_elem=created; // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_CREATED']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc)); } vCalendarText+=process_elem; if(vCalendar.tplM['contentline_LM']!=null && (process_elem=vCalendar.tplM['contentline_LM'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_LM']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc)); vCalendarText+=process_elem; if(vCalendar.tplM['contentline_DTSTAMP']!=null && (process_elem=vCalendar.tplM['contentline_DTSTAMP'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_DTSTAMP']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(utc)); vCalendarText+=process_elem; // UID (required by RFC) if($('#futureStart').val()=='' && (operation!='MOVE_IN'&& operation!='MOVE_OTHER') && (vCalendar.tplM['contentline_UID']!=null && (process_elem=vCalendar.tplM['contentline_UID'][0])!=undefined)) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_UID']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); // it is VERY small probability, that for 2 newly created vevents/vtodos the same UID is generated (but not impossible :( ...) var newUID=globalEventList.getNewUID(); process_elem=process_elem.replace('##:::##uid##:::##', newUID); } vCalendarText+=process_elem; if(vCalendar.tplM['contentline_SUMMARY']!=null && (process_elem=vCalendar.tplM['contentline_SUMMARY'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_SUMMARY']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#name').val())); //process_elem=process_elem.replace('##:::##value##:::##',vcalendarEscapeValue('zmena')); vCalendarText+=process_elem; if($('#priority').val()!='0') { if(vCalendar.tplM['contentline_PRIORITY']!=null && (process_elem=vCalendar.tplM['contentline_PRIORITY'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_PRIORITY']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#priority').val())); vCalendarText+=process_elem; } if(vevent) { if($('#repeat').val()!='no-repeat') { var interval=$("#repeat_interval_detail").val(); var byDay=''; var monthDay=''; var bymonth=''; var wkst=''; var isCustom=false; if(interval==1 || interval=='') interval=''; else interval=";INTERVAL="+$("#repeat_interval_detail").val(); var frequency=$('#repeat').val(); if(frequency=='TWO_WEEKLY') { frequency='WEEKLY'; interval=";INTERVAL="+2; } else if(frequency=='BUSINESS') { frequency='WEEKLY'; byDay=';BYDAY='; if(globalSettings.weekenddays.value.length>0) { for(var i=0;i<7;i++) if(globalSettings.weekenddays.value.indexOf(i)==-1) byDay+=i+','; byDay=byDay.substring(0,byDay.length-1); byDay=byDay.replace(1,'MO').replace(2,'TU').replace(3,'WE').replace(4,'TH').replace(5,'FR').replace(6,'SA').replace(0,'SU'); } else { byDay='SA,SU'; } interval=''; } else if(frequency=='WEEKEND') { frequency='WEEKLY'; byDay=';BYDAY='; if(globalSettings.weekenddays.value.length>0) { for(var i=0;i0) { byDay=';BYDAY='; for(var ri=0;ri0) { monthDay=';BYMONTHDAY='; for(var ri=0;ri0) { bymonth=';BYMONTH='; for(var ri=0;ri0) { monthDay=';BYMONTHDAY='; for(var ri=0;ri0) { var alarmText = ''; if($(".alert[data-id="+(t+1)+"]").val()!='none') { if(vCalendar.tplM['beginVALARM']!=null && (process_elem=vCalendar.tplM['beginVALARM'][0])!=undefined) alarmText+=vCalendar.tplM['beginVALARM'][0]; else { process_elem=vCalendar.tplC['beginVALARM']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); alarmText+=process_elem; vevent=true; } if($(".alert[data-id="+(t+1)+"]").val()=='message') { if($(".alert_message_details[data-id="+(t+1)+"]").val()=='on_date') { if(vCalendar.tplM['contentline_TRIGGER']!=null && (process_elem=vCalendar.tplM['contentline_TRIGGER'][0])!=undefined) { parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_TRIGGER']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } var dateTo=$.datepicker.parseDate(globalSettings.datepickerformat.value, $(".message_date_input[data-id="+(t+1)+"]").val()); var datetime_to=$.fullCalendar.formatDate(dateTo, 'yyyy-MM-dd'); var aDate=new Date(Date.parse("01/02/1990, "+$(".message_time_input[data-id="+(t+1)+"]").val() )); var time_to=$.fullCalendar.formatDate(aDate, 'HH:mm:ss'); var alarmDT=$.fullCalendar.parseDate(datetime_to+'T'+time_to); if(globalSettings.timezonesupport.value) sel_option=$('#timezone').val(); if($('.timezone_row').css('display')=='none') sel_option='local'; if(sel_option!='local') { var origValOffset=getOffsetByTZ(sel_option, alarmDT); var origIntOffset = origValOffset.getSecondsFromOffset()*-1; alarmDT = new Date(alarmDT.setSeconds(origIntOffset)); } var newValue=$.fullCalendar.formatDate(alarmDT, "yyyyMMdd'T'HHmmss")+(sel_option!='local' ? 'Z' : ''); process_elem=process_elem.replace('##:::##VALUE=DATE-TIME##:::##', ';VALUE=DATE-TIME'); process_elem=process_elem.replace('##:::##VALUE=DURATION##:::##', ''); process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(newValue)); alarmText+=process_elem; } else { var duration=''; var before_after=$(".before_after_input[data-id="+(t+1)+"]").val(); if($(".alert_message_details[data-id="+(t+1)+"]").val()=='minutes_before') duration="-PT"+before_after+"M"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='hours_before') duration="-PT"+before_after+"H"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='days_before') duration="-P"+before_after+"D"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='weeks_before') duration="-P"+before_after+"W"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='seconds_before') duration="-PT"+before_after+"S"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='minutes_after') duration="PT"+before_after+"M"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='hours_after') duration="PT"+before_after+"H"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='days_after') duration="P"+before_after+"D"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='weeks_after') duration="P"+before_after+"W"; if($(".alert_message_details[data-id="+(t+1)+"]").val()=='seconds_after') duration="PT"+before_after+"S"; if(vCalendar.tplM['contentline_TRIGGER']!=null && (process_elem=vCalendar.tplM['contentline_TRIGGER'][0])!=undefined) { parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_TRIGGER']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##VALUE=DATE-TIME##:::##', ''); process_elem=process_elem.replace('##:::##VALUE=DURATION##:::##', ';VALUE=DURATION'); process_elem=process_elem.replace('##:::##value##:::##', duration); alarmText+=process_elem; } if(vCalendar.tplM['contentline_ACTION']!=null && (process_elem=vCalendar.tplM['contentline_ACTION'][0])!=undefined) { parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_ACTION']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue('DISPLAY')); alarmText+=process_elem; var a=new Date(); if(vCalendar.tplM['contentline_DESCRIPTION']!=null && (process_elem=vCalendar.tplM['contentline_DESCRIPTION'][0])!=undefined) { parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_DESCRIPTION']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue('Reminder')); alarmText+=process_elem; } if((typeof vCalendar.tplM['unprocessedVALARM']!='undefined' && typeof vCalendar.tplM['unprocessedVALARM'][t]!='undefined') && (vCalendar.tplM['unprocessedVALARM'][t]!='') && (vCalendar.tplM['unprocessedVALARM'][t]!=null)) { tmp=vCalendar.tplM['unprocessedVALARM'][t].replace(RegExp('^\r\n'), '').replace(RegExp('\r\n$'), ''); if(tmp.indexOf('\r\n')==0) tmp=tmp.substring(2, tmp.length); if(tmp.lastIndexOf('\r\n')!=(tmp.length-2)) tmp+='\r\n'; alarmText+=tmp; } if(vCalendar.tplM['endVALARM']!=null && (process_elem=vCalendar.tplM['endVALARM'][0])!=undefined) alarmText+=vCalendar.tplM['endVALARM'][0]; else { process_elem=vCalendar.tplC['endVALARM']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); alarmText+=process_elem; } if(alarmUniqueArray.indexOf(alarmText)==-1) { alarmUniqueArray.push(alarmText); vCalendarText+=alarmText; } } } } vCalendar.tplM['unprocessedVALARM']=new Array(); if($('#avail').val()!='none') { if(vCalendar.tplM['contentline_TRANSP']!=null && (process_elem=vCalendar.tplM['contentline_TRANSP'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_TRANSP']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } if($('#avail').val()=='busy') process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue('OPAQUE')); else process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue('TRANSPARENT')); vCalendarText+=process_elem; } if($('#url_EVENT').val()!='') { if(vCalendar.tplM['contentline_URL']!=null && (process_elem=vCalendar.tplM['contentline_URL'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_URL']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#url_EVENT').val())); vCalendarText+=process_elem; } } //DESCRIPTION if($('#note').val()!='') { // NOTE if(vCalendar.tplM['contentline_NOTE']!=null && (process_elem=vCalendar.tplM['contentline_NOTE'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_NOTE']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#note').val())); vCalendarText+=process_elem; } if($('#status').val()!='NONE') { //if((value=$('[id="vcalendar_editor"] [data-type="\\%note"]').find('textarea').val())!='') //{ if(vCalendar.tplM['contentline_STATUS']!=null && (process_elem=vCalendar.tplM['contentline_STATUS'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_STATUS']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#status').val())); vCalendarText+=process_elem; } //CLASS if($('#type').val()!='') { // CLASS if(vCalendar.tplM['contentline_CLASS']!=null && (process_elem=vCalendar.tplM['contentline_CLASS'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_CLASS']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); if(typeof vCalendar.tplM['contentline_CLASS'] =='undefined' || vCalendar.tplM['contentline_CLASS']==null || vCalendar.tplM['contentline_CLASS'].length==0) process_elem=''; } if($('.row_type').css('display')!='none') { process_elem=vCalendar.tplC['contentline_CLASS']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue($('#type').val().toUpperCase())); } vCalendarText+=process_elem; } //RECURRENCE-ID if($('#recurrenceID').val()) { if(vCalendar.tplM['contentline_REC_ID']!=null && (process_elem=vCalendar.tplM['contentline_REC_ID'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_REC_ID']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } var rec_id=$('#recurrenceID').val() if(rec_id.indexOf('T')==-1) { process_elem=process_elem.replace('##:::##AllDay##:::##', ';'+vcalendarEscapeValue('VALUE=DATE')); process_elem=process_elem.replace('##:::##TZID##:::##', vcalendarEscapeValue('')); process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(rec_id)); } else { process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue('')); /*if((typeof vCalendar.tplM['unprocessed']!='undefined') && (vCalendar.tplM['unprocessed']!='') && (vCalendar.tplM['unprocessed']!=null)) { var checkTZID=vCalendar.tplM['unprocessed'].match(vCalendar.pre['contentline_TZID']); if(checkTZID!=null) { parsed=checkTZID[0].match(vCalendar.pre['contentline_parse']); process_elem=process_elem.replace('##:::##TZID##:::##', ';'+vcalendarEscapeValue("TZID="+parsed[4])); } else process_elem=process_elem.replace('##:::##TZID##:::##', ';'+vcalendarEscapeValue("TZID="+ sel_option)); } else*/ process_elem=process_elem.replace('##:::##TZID##:::##',timeZoneAttr); if(isUTC && rec_id.charAt(rec_id.length-1)!='Z') rec_id+='Z'; process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(rec_id)); } vCalendarText+=process_elem; } if(vCalendar.tplM['contentline_E_DTSTART']!=null && (process_elem=vCalendar.tplM['contentline_E_DTSTART'][0])!=undefined) { // replace the object and related objects' group names (+ append the related objects after the processed) parsed=('\r\n'+process_elem).match(RegExp('\r\n((?:'+vCalendar.re['group']+'\\.)?)', 'm')); if(parsed[1]!='') // if group is present, replace the object and related objects' group names process_elem=('\r\n'+process_elem).replace(RegExp('\r\n'+parsed[1].replace('.', '\\.'), 'mg'), '\r\nitem'+(groupCounter++)+'.').substring(2); } else { process_elem=vCalendar.tplC['contentline_E_DTSTART']; process_elem=process_elem.replace('##:::##group_wd##:::##', ''); process_elem=process_elem.replace('##:::##params_wsc##:::##', ''); } var datetime_from='', datetime_to=''; var a=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_from').val()); var a2=$.datepicker.parseDate(globalSettings.datepickerformat.value, $('#date_to').val()); var b=new Date(1970, 1, 1, 0, 0, 0); if(datetime_from=='') datetime_from=$.fullCalendar.formatDate(a, 'yyyyMMdd'); if(datetime_to=='') datetime_to=$.fullCalendar.formatDate(a2, 'yyyyMMdd'); var dateTo=$.datepicker.parseDate('yymmdd',datetime_to); if($('#allday').prop('checked')) { process_elem=process_elem.replace('##:::##AllDay##:::##', ';'+vcalendarEscapeValue('VALUE=DATE')); process_elem=process_elem.replace('##:::##TZID##:::##', vcalendarEscapeValue('')); process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(datetime_from)); } else { b=new Date(Date.parse("01/02/1990, "+$('#time_from').val() )); var time_from=$.fullCalendar.formatDate(b, 'HHmmss'); process_elem=process_elem.replace('##:::##AllDay##:::##', vcalendarEscapeValue('')); /*if((typeof vCalendar.tplM['unprocessed']!='undefined') && (vCalendar.tplM['unprocessed']!='') && (vCalendar.tplM['unprocessed']!=null)) { var checkTZID=vCalendar.tplM['unprocessed'].match(vCalendar.pre['contentline_TZID']); if(checkTZID!=null) { parsed=checkTZID[0].match(vCalendar.pre['contentline_parse']); process_elem=process_elem.replace('##:::##TZID##:::##', ';'+vcalendarEscapeValue("TZID="+parsed[4])); } else process_elem=process_elem.replace('##:::##TZID##:::##', ';'+vcalendarEscapeValue("TZID="+ sel_option)); } else*/ process_elem=process_elem.replace('##:::##TZID##:::##', timeZoneAttr); process_elem=process_elem.replace('##:::##value##:::##', vcalendarEscapeValue(datetime_from+'T'+time_from+(isUTC ? 'Z' : ''))); } vCalendarText+=process_elem; if(realEvent!='') { if(realEvent.type!='') { var repeatStart=realEvent.repeatStart; a.setHours(b.getHours()); a.setMinutes(b.getMinutes()); a.setSeconds(b.getSeconds()); var changeDate=a; var offsetDate=changeDate-repeatStart; var realEventUID=realEvent.vcalendar.match(vCalendar.pre['contentline_UID']); if(realEventUID!=null) realEventUID=realEventUID[0].match(vCalendar.pre['contentline_parse'])[4]; if(offsetDate!=0) { var vcalendarOrig=vCalendarText; var eventArray=new Array(),backupEventArray= new Array(); while(vcalendarOrig.match(vCalendar.pre['vevent'])!=null) { if(vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VEVENT')-2, vcalendarOrig.indexOf('BEGIN:VEVENT'))=='\r\n') { var partEvent=vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VEVENT')-2,vcalendarOrig.indexOf('END:VEVENT')+'END:VEVENT'.length); vcalendarOrig=vcalendarOrig.replace(partEvent, ''); } else { var partEvent=vcalendarOrig.substring(vcalendarOrig.indexOf('BEGIN:VEVENT'),vcalendarOrig.indexOf('END:VEVENT')+'END:VEVENT'.length); vcalendarOrig=vcalendarOrig.replace(partEvent, ''); partEvent+='\r\n'; } eventArray[eventArray.length]=partEvent; backupEventArray[backupEventArray.length]=partEvent; } if(eventArray.length==0) console.log("Error: '"+inputUID+"': unable to parse vEvent"); for(var it=0;it"name", [3]->";param;param", [4]->"value" if((parsed=('\r\n'+vcalendar_full[vcalendar_full.length-2]+'\r\n').match(vCalendar.pre['contentline_parse']))==null) return false; // values not directly supported by the editor (old values are kept intact) vCalendar.tplM['end'][0]=vCalendar.tplC['end'].replace(/##:::##group_wd##:::##/g, vcalendar_end_group=parsed[1]); if(vcalendar_begin_group!=vcalendar_end_group) return false;// the vCalendar BEGIN and END "group" are different // remove the vCalendar BEGIN and END vcalendar='\r\n'+vcalendar_full.slice(1, vcalendar_full.length-2).join('\r\n')+'\r\n'; /* vcalendar_element=vcalendar.match(vCalendar.pre['tzone']); if(vcalendar_element!=null) vcalendar=vcalendar.replace(vcalendar_element[0],''); */ //FIX TIMEZONE var beginTimeZone=vcalendar.indexOf('BEGIN:VTIMEZONE'); var startEndTimeZone=vcalendar.lastIndexOf('END:VTIMEZONE'); var endTimeZone=0; var vTimeZone=''; if(beginTimeZone!=-1 && startEndTimeZone!=-1) { for(i=(startEndTimeZone+2);i"group.", [2]->"name", [3]->";param;param", [4]->"value" if((parsed=('\r\n'+vcalendar_full[vevent_full.length-2]+'\r\n').match(vCalendar.pre['contentline_parse']))==null) return false; // values not directly supported by the editor (old values are kept intact) vCalendar.tplM['endVEVENT'][0]=vCalendar.tplC['endVEVENT'].replace(/##:::##group_wd##:::##/g, vcalendar_end_group=parsed[1]); if(vcalendar_begin_group!=vcalendar_end_group) return false;// the vCalendar BEGIN and END "group" are different // remove the vCalendar BEGIN and END vevent='\r\n'+vevent_full.slice(2, vevent_full.length-1).join('\r\n')+'\r\n'; //SUMMARY vcalendar_element=vevent.match(RegExp('\r\n'+vCalendar.re['contentline_SUMMARY'], 'mi')); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); //note=String(vcalendar_element).split(':')[1]; title=vcalendarUnescapeValue(parsed[4]); vCalendar.tplM['contentline_SUMMARY'][0]=vCalendar.tplC['contentline_SUMMARY']; vCalendar.tplM['contentline_SUMMARY'][0]=vCalendar.tplM['contentline_SUMMARY'][0].replace(/##:::##group_wd##:::##/g, parsed[1]); vCalendar.tplM['contentline_SUMMARY'][0]=vCalendar.tplM['contentline_SUMMARY'][0].replace(/##:::##params_wsc##:::##/g, parsed[3]); vevent=vevent.replace(vcalendar_element[0], '\r\n'); if(parsed[1]!='') { var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im'); while ((vcalendar_element_related=vevent.match(re))!=null) { // append the parameter to its parent vCalendar.tplM['contentline_SUMMARY'][0]+=vcalendar_element_related[0].substr(2); // remove the processed parameter vevent=vevent.replace(vcalendar_element_related[0], '\r\n'); } } } vcalendar_element=vevent.match(RegExp('\r\n'+vCalendar.re['contentline_TRANSP'], 'mi')); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); //note=String(vcalendar_element).split(':')[1]; title=vcalendarUnescapeValue(parsed[4]); vCalendar.tplM['contentline_TRANSP'][0]=vCalendar.tplC['contentline_TRANSP']; vCalendar.tplM['contentline_TRANSP'][0]=vCalendar.tplM['contentline_TRANSP'][0].replace(/##:::##group_wd##:::##/g, parsed[1]); vCalendar.tplM['contentline_TRANSP'][0]=vCalendar.tplM['contentline_TRANSP'][0].replace(/##:::##params_wsc##:::##/g, parsed[3]); vevent=vevent.replace(vcalendar_element[0], '\r\n'); if(parsed[1]!='') { var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im'); while ((vcalendar_element_related=vevent.match(re))!=null) { // append the parameter to its parent vCalendar.tplM['contentline_TRANSP'][0]+=vcalendar_element_related[0].substr(2); // remove the processed parameter vevent=vevent.replace(vcalendar_element_related[0], '\r\n'); } } } vcalendar_element=vevent.match(RegExp('\r\n'+vCalendar.re['contentline_PRIORITY'], 'mi')); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); //note=String(vcalendar_element).split(':')[1]; title=vcalendarUnescapeValue(parsed[4]); vCalendar.tplM['contentline_PRIORITY'][0]=vCalendar.tplC['contentline_PRIORITY']; vCalendar.tplM['contentline_PRIORITY'][0]=vCalendar.tplM['contentline_PRIORITY'][0].replace(/##:::##group_wd##:::##/g, parsed[1]); vCalendar.tplM['contentline_PRIORITY'][0]=vCalendar.tplM['contentline_PRIORITY'][0].replace(/##:::##params_wsc##:::##/g, parsed[3]); vevent=vevent.replace(vcalendar_element[0], '\r\n'); if(parsed[1]!='') { var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im'); while ((vcalendar_element_related=vevent.match(re))!=null) { // append the parameter to its parent vCalendar.tplM['contentline_PRIORITY'][0]+=vcalendar_element_related[0].substr(2); // remove the processed parameter vevent=vevent.replace(vcalendar_element_related[0], '\r\n'); } } } //LOCATION vcalendar_element=vevent.match(RegExp('\r\n'+vCalendar.re['contentline_LOCATION'], 'mi')); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); //note=String(vcalendar_element).split(':')[1]; title=vcalendarUnescapeValue(parsed[4]); vCalendar.tplM['contentline_LOCATION'][0]=vCalendar.tplC['contentline_LOCATION']; vCalendar.tplM['contentline_LOCATION'][0]=vCalendar.tplM['contentline_LOCATION'][0].replace(/##:::##group_wd##:::##/g, parsed[1]); vCalendar.tplM['contentline_LOCATION'][0]=vCalendar.tplM['contentline_LOCATION'][0].replace(/##:::##params_wsc##:::##/g, parsed[3]); vevent=vevent.replace(vcalendar_element[0], '\r\n'); if(parsed[1]!='') { var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im'); while ((vcalendar_element_related=vevent.match(re))!=null) { // append the parameter to its parent vCalendar.tplM['contentline_LOCATION'][0]+=vcalendar_element_related[0].substr(2); // remove the processed parameter vevent=vevent.replace(vcalendar_element_related[0], '\r\n'); } } } //URL vcalendar_element=vevent.match(RegExp('\r\n'+vCalendar.re['contentline_URL'], 'mi')); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); //note=String(vcalendar_element).split(':')[1]; title=vcalendarUnescapeValue(parsed[4]); vCalendar.tplM['contentline_URL'][0]=vCalendar.tplC['contentline_URL']; vCalendar.tplM['contentline_URL'][0]=vCalendar.tplM['contentline_URL'][0].replace(/##:::##group_wd##:::##/g, parsed[1]); vCalendar.tplM['contentline_URL'][0]=vCalendar.tplM['contentline_URL'][0].replace(/##:::##params_wsc##:::##/g, parsed[3]); vevent=vevent.replace(vcalendar_element[0], '\r\n'); if(parsed[1]!='') { var re=RegExp('\r\n'+parsed[1].replace('.','\\..*')+'\r\n', 'im'); while ((vcalendar_element_related=vevent.match(re))!=null) { // append the parameter to its parent vCalendar.tplM['contentline_URL'][0]+=vcalendar_element_related[0].substr(2); // remove the processed parameter vevent=vevent.replace(vcalendar_element_related[0], '\r\n'); } } } // ------------------------------ VALARM ------------------------------ // var valarm=vevent.match(vCalendar.pre['valarm']); if(valarm!=null) { vevent=vevent.replace(valarm[0], ''); var alarmString=''; var alarmArray=new Array(); for(var i=0;i"group.", [2]->"name", [3]->";param;param", [4]->"value" if((parsed=('\r\n'+valarm_full[valarm_full.length-2]+'\r\n').match(vCalendar.pre['contentline_parse']))==null) return false; // values not directly supported by the editor (old values are kept intact) vCalendar.tplM['endVALARM'][j]=vCalendar.tplC['endVALARM'].replace(/##:::##group_wd##:::##/g, vcalendar_end_group=parsed[1]); if(vcalendar_begin_group!=vcalendar_end_group) return false;// the vCalendar BEGIN and END "group" are different // remove the vCalendar BEGIN and END alarmArray[j]='\r\n'+valarm_full.slice(1, valarm_full.length-2).join('\r\n')+'\r\n'; trigger=alarmArray[j].match(vCalendar.pre['contentline_TRIGGER']); if(trigger!=null) { parsed=(trigger[0]+'\r\n').match(vCalendar.pre['contentline_parse']); vCalendar.tplM['contentline_TRIGGER'][j]=vCalendar.tplC['contentline_TRIGGER']; vCalendar.tplM['contentline_TRIGGER'][j]=vCalendar.tplM['contentline_TRIGGER'][j].replace(/##:::##group_wd##:::##/g, parsed[1]); var pars=vcalendarSplitParam(parsed[3]); var parString=''; for(var i=0;i0) { var daysUntilDaylight=(parseInt(daylightStartCount)-1)*7; var dayLightStartDate=new Date(checkDate.getFullYear(), checkDate.getMonth(), checkDate.getDate()+daysUntilDaylight, daylightStartsHours, daylightStartsMinutes); } else { var tmpLastDay=21+checkDate.getDate(); var checkTmpDay=new Date(t.getFullYear(),daylightStartsMonth,tmpLastDay+7,23,59,0); if(checkTmpDay.getMonth()!=daylightStartsMonth) var lastDay=tmpLastDay; else var lastDay=tmpLastDay+7; var daysUntilDaylight=(daylightStartCount+1)*7; var dayLightStartDate=new Date(checkDate.getFullYear(), checkDate.getMonth(), lastDay+daysUntilDaylight, daylightStartsHours, daylightStartsMinutes); } if(dayLightStartDate>t && !disableRecursion) dayLightStartDate=getDateFromDay(objComponent, t, true).startDate; return {offsetFrom:objComponent.tzOffsetFROM, offsetTo: objComponent.tzOffsetTO, startDate: dayLightStartDate}; } function vcalendarToData(inputCollection, inputEvent, isNew) { var vcalendarOrig=inputEvent.vcalendar; var eventArray=new Array(); //CHECK CALSCALE var elem=vcalendarOrig.match(vCalendar.pre['contentline_CALSCALE']); if(elem!=null) { calscale=elem[0].match(vCalendar.pre['contentline_parse'])[4]; if(calscale!='GREGORIAN') { console.log("Error:'"+inputEvent.uid+"': Unsupported calscale in:"+vcalendarOrig); return false; } } //CHECK VERSION var elemV=vcalendarOrig.match(vCalendar.pre['contentline_VERSION']); if(elemV!=null) { var ver=elemV[0].match(vCalendar.pre['contentline_parse'])[4]; if(ver!='2.0') { console.log("Error:'"+inputEvent.uid+"': Unsupported version ("+ver+") in:"+vcalendarOrig); return false; } } //FIX TIMEZONE var beginTimeZone=vcalendarOrig.indexOf('BEGIN:VTIMEZONE'); var startEndTimeZone=vcalendarOrig.lastIndexOf('END:VTIMEZONE'); var endTimeZone=0; var rid=inputEvent.uid.substring(0, inputEvent.uid.lastIndexOf('/')+1); var evid=inputEvent.uid.substring(inputEvent.uid.lastIndexOf('/')+1, inputEvent.uid.length); var isChange=false, needReload=false; if(!isNew) { var events=findEventInArray(inputEvent.uid, true); if(events!='') { if(events.etag!=inputEvent.etag) { for(var i=0; i'+name+" "+localization[globalInterfaceLanguage].repeatChangeTxt); $('#repeatConfirmBoxQuestion').html(localization[globalInterfaceLanguage].repeatChangeTxtClose); } else needReload=true; } } isChange=true; } } } if((beginTimeZone!=-1) && (startEndTimeZone!=-1)) { for(i=(startEndTimeZone+2);i0) isRepeat=true; for(var i=0;i1 &&(frequency=='MONTHLY'||frequency=='YEARLY')) { console.log("Error:'"+inputEvent.uid+"': Unsupported recurrence rule in event:"+vcalendar); return false; } } } if(!returnForValue) { continue; } if(!interval) interval=1; } var dayLightStartDate, dayLightEndDate, tzObject; vcalendar_element=vcalendar.match(vCalendar.pre['contentline_DTSTART']); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); start=parsed[4]; var help1=start; if(help1.indexOf("T")==-1) { help1=help1.substring(0, 4)+'-'+help1.substring(4, 6)+'-'+help1.substring(6, 8); all=true; } else { help1=help1.substring(0, 4)+'-'+help1.substring(4, 6)+'-'+help1.substring(6, 8)+'T'+help1.substring(9, 11)+':'+help1.substring(11, 13)+':'+help1.substring(13, 15); all=false; } var t=$.fullCalendar.parseDate(help1); if(t==null) return false; if(t.toString()=='Invalid Date') return false; if(!all) { parsed_value=vcalendarSplitParam(parsed[3]); for(h=1;h1 || tzName=='UTC') { if(tzName!='UTC') tzName=$.trim(dtStartTimezone[1]); var finTZ = checkTimezone(tzName); if(finTZ!=null) tzName = finTZ; if(globalSettings.timezonesupport.value && tzName in timezones) { valOffsetFrom=getOffsetByTZ(tzName, t); intOffset=(getLocalOffset(t)*-1*1000)-valOffsetFrom.getSecondsFromOffset()*1000; } } else if(processedTimezones.indexOf(tzName)==-1) { if(timeZonesEnabled.indexOf(tzName)==-1) timeZonesEnabled.push('local'); processedTimezones.push('local'); } if(tzName!='' && tzName != 'local') if(processedTimezones.indexOf(tzName)==-1) { if(timeZonesEnabled.indexOf(tzName)==-1) timeZonesEnabled.push(tzName); processedTimezones.push(tzName); } } else tzName = globalSessionTimeZone; realStart=$.fullCalendar.parseDate(help1); inputEvent.start=$.fullCalendar.parseDate(help1); start=$.fullCalendar.parseDate(help1); if(intOffset) { inputEvent.start.setTime(inputEvent.start.getTime()+intOffset); start.setTime(start.getTime()+intOffset); } if(exDate_array!=null) for(var j=0;j1 || tzNameA=='UTC') { if(tzNameA!='UTC' && dtStartTimezoneA[0]==';TZID') tzNameA=$.trim(dtStartTimezoneA[1]); var finTZ = checkTimezone(tzNameA); if(finTZ!=null) tzNameA = finTZ; if(globalSettings.timezonesupport.value && tzNameA in timezones) { var valOffsetFromA=getOffsetByTZ(tzNameA, alarmTimeA); intOffsetA=getOffsetByTZ(tzName, alarmTimeA).getSecondsFromOffset()*1000-valOffsetFromA.getSecondsFromOffset()*1000; } } else if(processedTimezones.indexOf(tzName)==-1) { if(timeZonesEnabled.indexOf(tzName)==-1) timeZonesEnabled.push('local'); processedTimezones.push('local'); } if(tzNameA!='' && tzNameA != 'local') if(processedTimezones.indexOf(tzNameA)==-1) { if(timeZonesEnabled.indexOf(tzNameA)==-1) timeZonesEnabled.push(tzNameA); processedTimezones.push(tzNameA); } if(intOffsetA!='') alarmTimeA.setTime(alarmTimeA.getTime()+intOffsetA); alertTime[j]=$.fullCalendar.formatDate(alarmTimeA,"yyyy-MM-dd'T'HH:mm:ss"); } else { alertTime[j]=0; if(value.indexOf('W')!=-1) alertTime[j]=parseAlarmWeek(value); else if(value.indexOf('D')!=-1) alertTime[j]=parseAlarmDay(value); else if(value.indexOf('T')!=-1) alertTime[j]=parseAlarmTime(value); if(parsed[4].charAt(0)=="-") alertTime[j]="-"+alertTime[j]; else alertTime[j]="+"+alertTime[j]; } } } else break; noteA=alarmArray[j].match(vCalendar.pre['contentline_NOTE']); if(noteA!=null) { parsed=noteA[0].match(vCalendar.pre['contentline_parse']); alertNote[j]=parsed[4]; } else alertNote[j]='Default note'; } } } vcalendar_element=vcalendar.match(vCalendar.pre['contentline_LOCATION']); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); location=vcalendarUnescapeValue(parsed[4]); } vcalendar_element=vcalendar.match(vCalendar.pre['contentline_NOTE']); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); note=vcalendarUnescapeValue(parsed[4]); } vcalendar_element=vcalendar.match(vCalendar.pre['contentline_SUMMARY']); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); title=vcalendarUnescapeValue(parsed[4]); } vcalendar_element=vcalendar.match(vCalendar.pre['contentline_PRIORITY']); if(vcalendar_element!=null) { parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']); priority=vcalendarUnescapeValue(parsed[4]); } var index=0; for(var p=0;p1 || tzName=='UTC') { if(tzName!='UTC') tzName=$.trim(dtStartTimezone[1]); var finTZ = checkTimezone(tzName); if(finTZ!=null) tzName = finTZ; if(globalSettings.timezonesupport.value && tzName in timezones) { valOffsetFrom=getOffsetByTZ(tzName, t1); intOffset=(getLocalOffset(t1)*-1*1000)-valOffsetFrom.getSecondsFromOffset()*1000; } } else if(processedTimezones.indexOf(tzName)==-1) { if(timeZonesEnabled.indexOf(tzName)==-1) timeZonesEnabled.push('local'); processedTimezones.push('local'); } //realEnd=$.fullCalendar.parseDate(help); //help1+=valOffsetFrom; if(tzName!='' && tzName != 'local') if(processedTimezones.indexOf(tzName)==-1) { if(timeZonesEnabled.indexOf(tzName)==-1) timeZonesEnabled.push(tzName); processedTimezones.push(tzName); } } else tzName = globalSessionTimeZone; realEnd=$.fullCalendar.parseDate(help); inputEvent.end=$.fullCalendar.parseDate(help); end=$.fullCalendar.parseDate(help); if(intOffset) { inputEvent.end.setTime(inputEvent.end.getTime()+intOffset); end.setTime(end.getTime()+intOffset); } } else return false; if(globalVisibleCalDAVCollections.indexOf(rid)!=-1 || isChange || isNew) { if(isRepeat) { var futureRLimit = new Date(globalToLoadedLimit.getTime()) futureRLimit.setDate(futureRLimit.getDate()+14); var ruleString=vcalendar.match(vCalendar.pre['contentline_RRULE2'])[0].match(vCalendar.pre['contentline_parse'])[4]; inputEvent.isRepeat=true; if(realStart) var varDate=new Date(realStart.getTime()); else var varDate=new Date(start.getTime()); if(realEnd) var varEndDate=new Date(realEnd.getTime()); else var varEndDate=new Date(end.getTime()); var lastGenDate=''; var repeatStart=new Date(varDate.getTime()); var repeatEnd=new Date(varEndDate.getTime()); var untilDate='',realUntilDate='',realUntil=''; if(until!=='') { if(isUntilDate) { if(until.indexOf('T')!=-1) { var uString = until.substring(0, 4)+'-'+until.substring(4, 6)+'-'+until.substring(6, 8)+'T'+until.substring(9, 11)+':'+until.substring(11, 13)+':'+until.substring(13, 15); var ut=$.fullCalendar.parseDate(uString); if(ut==null) return false; if(ut.toString()=='Invalid Date') return false; if(!all) { if(globalSettings.timezonesupport.value && tzName in timezones) valOffsetFrom=getOffsetByTZ(tzName, ut); if(valOffsetFrom) { var intOffset=valOffsetFrom.getSecondsFromOffset()*1000; ut.setTime(ut.getTime()+intOffset); } } untilDate = new Date(ut.getTime()); } else { untilDate=$.fullCalendar.parseDate(until.substring(0, 4)+'-'+until.substring(4, 6)+'-'+until.substring(6, 8)); untilDate.setHours(realStart.getHours()); untilDate.setMinutes(realStart.getMinutes()); untilDate.setSeconds(realStart.getSeconds()); } realUntil=''; } else { untilDate=''; realUntil=until; } realUntilDate=untilDate; inputEvent.untilDate=untilDate; } else { untilDate=new Date(futureRLimit.getTime()); realUntilDate=''; inputEvent.untilDate='never'; } var repeatCount=0, realRepeatCount=0; if(!inputEvent.isDrawn) { if(alertTime.length>0) { var aTime=''; var now=new Date(); if(!inputCollection.ignoreAlarms) alertTimeOut=setAlertTimeouts(false,alertTime, start, end, {allDay:all, title:title}, true, inputEvent.uid); } realRepeatCount++; var checkRec=isInRecurrenceArray(varDate,stringUID,recurrence_id_array, tzName); if(exDates.length>0) if(exDates.indexOf(varDate.toString())!=-1) checkRec=true; if(!checkRec) { repeatCount++; var tmpObj=new items(inputEvent.etag, start, end, title, all, inputEvent.uid, rid, evid, note, inputEvent.displayValue, alertTime, alertNote, realUntilDate, frequency, interval, realUntil, repeatStart, repeatEnd, byMonthDay,repeatCount, realRepeatCount, vcalendar, location, alertTimeOut,tzName, realStart, realEnd, byDay, rec_id,wkst,classType, avail,hrefUrl, compareString,priority,status,ruleString); globalEventList.displayEventsArray[rid].splice(globalEventList.displayEventsArray[rid].length, 0, tmpObj); } } var lastGenDate=generateRepeatInstances({ untilDate:realUntilDate, repeatStart:varDate, futureRLimit:futureRLimit, stringUID:stringUID, recurrence_id_array:recurrence_id_array, exDates:exDates, alertTime:alertTime, ignoreAlarms:inputCollection.ignoreAlarms, items:new items(inputEvent.etag, varDate, varEndDate, title, all, inputEvent.uid, rid, evid, note, inputEvent.displayValue, alertTime, alertNote, realUntilDate, frequency, interval, realUntil, repeatStart, repeatEnd, byMonthDay, repeatCount, realRepeatCount, vcalendar, location, alertTimeOut, tzName, realStart, realEnd, byDay, rec_id,wkst,classType, avail,hrefUrl,compareString,priority,status,ruleString) }); } else { if(!inputCollection.ignoreAlarms) alertTimeOut=setAlertTimeouts(false,alertTime, start, end, {allDay:all, title:title},true,inputEvent.uid); var tmpObj=new items(inputEvent.etag, start, end, title, all, inputEvent.uid, rid, evid, note, inputEvent.displayValue, alertTime, alertNote, '', '', '', '', '', '', '', '', '', vcalendar, location, alertTimeOut, tzName, realStart, realEnd, byDay, rec_id,wkst,classType, avail,hrefUrl,compareString,priority,status,ruleString); if(isChange) { if(needReload) showEventForm(null, null, tmpObj, globalJsEvent, 'show', ''); } globalEventList.displayEventsArray[rid].splice(globalEventList.displayEventsArray[rid].length, 0, tmpObj); } } } inputEvent.isDrawn=true; } function notRFCDataToRFCData(vcalendarString) { // If vCalendar contains only '\n' instead of '\r\n' we correct this if(vcalendarString.match(RegExp('\r', 'm'))==null) vcalendarString=vcalendarString.replace(RegExp('\n', 'gm'), '\r\n'); // remove multiple empty lines vcalendarString=vcalendarString.replace(RegExp('(\r\n)+','gm'),'\r\n'); // remove line folding vcalendarString=vcalendarString.replace(RegExp('\r\n'+vCalendar.re['WSP'], 'gm'), ''); // append '\r\n' to the end of the vCalendar if missing if(vcalendarString[vcalendarString.length-1]!='\n') vcalendarString+='\r\n'; return vcalendarString; } function vCalendarCleanup(vcalendarString) { vcalendarString=notRFCDataToRFCData(vcalendarString); return vcalendarString; }