aboutsummaryrefslogtreecommitdiff
path: root/radicale_infcloud/web/data_process.js
diff options
context:
space:
mode:
authorB. Stack <bgstack15@gmail.com>2022-08-10 22:35:07 -0400
committerB. Stack <bgstack15@gmail.com>2022-08-10 22:35:07 -0400
commit565d576f704c337b82a583d192c77d43bfca2648 (patch)
tree35b6ea25942e190e48a1878902c0fcbdff8825db /radicale_infcloud/web/data_process.js
parentadd my preferred contact display settings (diff)
downloadradicaleinfcloud-565d576f704c337b82a583d192c77d43bfca2648.tar.gz
radicaleinfcloud-565d576f704c337b82a583d192c77d43bfca2648.tar.bz2
radicaleinfcloud-565d576f704c337b82a583d192c77d43bfca2648.zip
WIP: add upload functionality, part 1
The upload button now calls logic, which does a rudimentary upload. The new item can successfully be saved to the server, but the event does not immediately show up in the InfCloud view. The user has to reload the web page to see the new event, which of course is not ideal. There must be a way to add the new object immediately.
Diffstat (limited to 'radicale_infcloud/web/data_process.js')
-rw-r--r--radicale_infcloud/web/data_process.js801
1 files changed, 793 insertions, 8 deletions
diff --git a/radicale_infcloud/web/data_process.js b/radicale_infcloud/web/data_process.js
index bdbf711..e71f23e 100644
--- a/radicale_infcloud/web/data_process.js
+++ b/radicale_infcloud/web/data_process.js
@@ -1067,6 +1067,7 @@ function checkAndFixMultipleUID(vcalendar, isEvent)
}
return eventStringArray;
}
+
function dataToVcalendar(operation, accountUID, inputUID, inputEtag, delUID,isFormHidden, deleteMode)
{
var vevent=false,
@@ -1341,11 +1342,6 @@ function dataToVcalendar(operation, accountUID, inputUID, inputEtag, delUID,isFo
{
if(globalSettings.timezonesupport.value)
sel_option=$('#timezone').val();
- //else
- //{
- // if(inputEvents.length>0)
- // sel_option=inputEvents[0].timeZone;
- //}
if(sel_option=='UTC')
{
@@ -2148,9 +2144,6 @@ function dataToVcalendar(operation, accountUID, inputUID, inputEtag, delUID,isFo
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)
@@ -3447,6 +3440,7 @@ function getDateFromDay(objComponent, t, disableRecursion,uid)
return {offsetFrom:objComponent.tzOffsetFROM, offsetTo: objComponent.tzOffsetTO, startDate: dayLightStartDate};
}
+/* FINDTHIS */
function vcalendarToData(inputCollection, inputEvent, isNew)
{
var vcalendarOrig=inputEvent.vcalendar;
@@ -7793,3 +7787,794 @@ function normalizeVcard(vcardString)
return vcard_out_grouped.join('');
}
+
+/* START stackrpms functions 2022-08-10
+ * duplicated and modified from function vcalendarToData() on line 3443
+ */
+function stringToVevent(inputCollection, vstring, uid, etag, isNew)
+{
+ //vcalendarToData(inputCollection, inputEvent, isNew)
+ //var vcalendarOrig=inputEvent.vcalendar;
+ var vcalendarOrig=vstring;
+ 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:'"+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:'"+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=uid.substring(0, uid.lastIndexOf('/')+1);
+ var evid=uid.substring(uid.lastIndexOf('/')+1, uid.length);
+
+ var isChange=false,
+ needReload=false;
+
+ if(!isNew)
+ {
+ var events=findEventInArray(uid, true);
+ if(events!='')
+ {
+ if(events.etag!=etag)
+ {
+ for(var i=0; i<events.alertTimeOut.length; i++)
+ clearTimeout(events.alertTimeOut[i]);
+ deleteEventFromArray(uid);
+
+ if($('#show').val()!='')
+ {
+ if($('#show').val()==uid)
+ {
+ if($('#repeatEvent').val()=="true" || $('#recurrenceID').val()!='')
+ {
+ var name=globalCalEvent.title;
+ showEventForm(null, null, {title: name, id:uid}, globalJsEvent, 'show','', true);
+ $('#editAll').css('visibility','hidden');
+ $('#editFuture').css('visibility','hidden');
+ $('#editOnlyOne').css('visibility','hidden');
+ $('#repeatConfirmBoxContent').html('<b>'+name+"</b> "+localization[globalInterfaceLanguage].repeatChangeTxt);
+ $('#repeatConfirmBoxQuestion').html(localization[globalInterfaceLanguage].repeatChangeTxtClose);
+ }
+ else
+ needReload=true;
+ }
+ }
+ isChange=true;
+ }
+ }
+ }
+
+ if((beginTimeZone!=-1) && (startEndTimeZone!=-1))
+ {
+ for(i=(startEndTimeZone+2);i<vcalendarOrig.length;i++)
+ {
+ if(vcalendarOrig.charAt(i)=='\n')
+ {
+ endTimeZone=i+1;
+ break;
+ }
+ }
+ vTimeZone=vcalendarOrig.substring(beginTimeZone, endTimeZone);
+ vcalendar=vcalendarOrig.substring(0, beginTimeZone)+vcalendarOrig.substring(endTimeZone, vcalendarOrig.length);
+ }
+
+ /*
+ vcalendar_element=vcalendar.match(vCalendar.pre['tzone']);
+ if(vcalendar_element!=null)
+ vcalendar=vcalendar.replace(vcalendar_element[0],'');
+ */
+ var recurrence_id_array=new Array();
+ /* FINDTHIS matching for BEGIN:VEVENT */
+ // this one works, but has 3 replace calls!
+ vcalendarOrig = vcalendarOrig.replace(/^\n/gm,'').replace('\n','\r\n').replace(/\r*\n/gm,'\r\n');
+ 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';
+ }
+ var rec_array=partEvent.match(vCalendar.pre['contentline_RECURRENCE_ID']);
+ var uidString=partEvent.match(vCalendar.pre['contentline_UID']);
+
+ if(uidString!=null && rec_array!=null)
+ {
+ recurrence_id_array[recurrence_id_array.length]=rec_array[0].match(vCalendar.pre['contentline_parse'])[4]+';'+uidString[0].match(vCalendar.pre['contentline_parse'])[4];
+ }
+ eventArray[eventArray.length]=partEvent;
+ }
+ if(eventArray.length==0)
+ console.log("Error: '"+uid+"': unable to parse vEvent");
+
+ for(var evIt=0; evIt<eventArray.length; evIt++)
+ {
+ var oo='',
+ note='',
+ start='',
+ end='',
+ title='',
+ location='',
+ all=false,
+ frequency='',
+ interval='',
+ byMonthDay='',
+ byDay='',
+ until='',
+ isUntilDate=false,
+ isRepeat=false,
+ alertTime=new Array(),
+ alertNote=new Array(),
+ alertTimeOut=new Array(),
+ valOffsetFrom='',
+ valOffsetTo='',
+ intOffset=0,
+ tzName='local',
+ realStart='',
+ realEnd='',
+ rec_id='',
+ wkst='',
+ classType='',
+ avail='',
+ hrefUrl='',
+ returnForValue = true,
+ stringUID='',
+ priority="0",
+ status='',
+ pars=new Array();
+ var dtStartTimezone='';
+ var dates = new Array();
+ var vcalendar=eventArray[evIt];
+ var stringUID=vcalendar.match(vCalendar.pre['contentline_UID']);
+ if(stringUID!=null)
+ stringUID=stringUID[0].match(vCalendar.pre['contentline_parse'])[4];
+
+ var exDates=new Array();
+ var exDate=null;
+ var exDate_array=new Array();
+ var vcalendar2=vcalendar+'';
+
+ while(vcalendar2.match(vCalendar.pre['contentline_EXDATE'])!= null)
+ {
+ exDate=vcalendar2.match(vCalendar.pre['contentline_EXDATE']);
+ exDate_array[exDate_array.length]=exDate[0];
+ vcalendar2=vcalendar2.replace(exDate,'\r\n');
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_RRULE2']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ pars=parsed[4].split(';');
+ var parString='';
+
+ if(pars.length>0)
+ isRepeat=true;
+ for(var i=0;i<pars.length;i++)
+ {
+ if(pars[i].indexOf('FREQ=')!=-1)
+ frequency=pars[i].split('=')[1];
+ else if(pars[i].indexOf('INTERVAL=')!=-1)
+ interval=pars[i].split('=')[1];
+ else if(pars[i].indexOf('COUNT=')!=-1)
+ {
+ until=pars[i].split('=')[1];
+ if(until==0)
+ {
+ returnForValue = false;
+ break
+ }
+ else if(isNaN(until))
+ {
+ returnForValue = false;
+ break
+ }
+ }
+ else if(pars[i].indexOf('UNTIL=')!=-1)
+ {
+ isUntilDate=true;
+ until=pars[i].split('=')[1];
+ //if(until.indexOf('T')==-1)
+// until+='T000000Z';
+
+ }
+ else if(pars[i].indexOf('WKST=')!=-1)
+ {
+ wkst=pars[i].split('=')[1].replace(/\d*MO/,1).replace(/\d*TU/,2).replace(/\d*WE/,3).replace(/\d*TH/,4).replace(/\d*FR/,5).replace(/\d*SA/,6).replace(/\d*SU/,0);
+ if(globalSettings.mozillasupport.value!=null && globalSettings.mozillasupport.value)
+ wkst='';
+ }
+ else if(pars[i].indexOf('BYMONTHDAY=')!=-1)
+ byMonthDay=pars[i].split('=')[1];
+ else if(pars[i].indexOf('BYDAY=')!=-1)
+ {
+ byDay=pars[i].split('=')[1];
+ byDay=byDay.replace(/\d*MO/,1).replace(/\d*TU/,2).replace(/\d*WE/,3).replace(/\d*TH/,4).replace(/\d*FR/,5).replace(/\d*SA/,6).replace(/\d*SU/,0).split(',');
+ }
+ }
+ 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;h<parsed_value.length;h++)
+ if(parsed_value[h]!='')
+ dtStartTimezone=parsed_value[h];
+ dtStartTimezone=dtStartTimezone.split('=')
+
+ if(start.charAt(start.length-1)=='Z')
+ tzName='UTC';
+ if(dtStartTimezone.length>1 || 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;j<exDate_array.length;j++)
+ {
+ var exString=(exDate_array[j]+'\r\n').match(vCalendar.pre['contentline_parse'])[4];
+ if(exString.indexOf('T')!=-1 && exString.indexOf('Z')!=-1)
+ var utcTime=exString.parseComnpactISO8601().setSeconds(getLocalOffset(exString.parseComnpactISO8601())*-1);
+ else if(exString.indexOf('T')!=-1 && exString.indexOf('Z')==-1)
+ var utcTime=exString.parseComnpactISO8601();
+ else
+ {
+ if(help1.indexOf('T')!=-1)
+ exString += 'T' + $.fullCalendar.formatDate(start,'HHmmss');
+
+ var utcTime=exString.parseComnpactISO8601();
+ }
+ exDates[exDates.length]=new Date(utcTime).toString();
+ }
+ var valarm=vcalendar.match(vCalendar.pre['valarm']);
+ if(valarm!=null)
+ {
+ vcalendar=vcalendar.replace(valarm[0], '');
+ var alarmString='';
+ var alarmArray=new Array();
+ for(var i=0;i<valarm[0].length;i++)
+ {
+ if(valarm[0].substring(i-'END:VALARM'.length, i)=='END:VALARM')
+ {
+ alarmArray[alarmArray.length]=alarmString+'\r\n';
+ alarmString='';
+ }
+ alarmString+=valarm[0][i];
+ }
+
+ for(var j=0;j<alarmArray.length;j++)
+ {
+ checkA=alarmArray[j].match(vCalendar.re['valarm']);
+ if(checkA!=null)
+ {
+ action=(alarmArray[j]).match(vCalendar.pre['contentline_ACTION']);
+ if(action!=null)
+ parsed=action[0].match(vCalendar.pre['contentline_parse']);
+ else
+ break;
+
+ trigger=alarmArray[j].match(vCalendar.pre['contentline_TRIGGER']);
+ if(trigger!=null)
+ {
+ parsed=(trigger[0]+'\r\n').match(vCalendar.pre['contentline_parse']);
+ if(parsed!=null)
+ {
+ value=parsed[4];
+ var checkD=value.match(vCalendar.pre['date-time-value']);
+ var intOffsetA='';
+ var tzNameA='';
+ if(checkD!=null)
+ {
+ if(parsed[3])
+ var dtStartTimezoneA=parsed[3].split('=');
+ var alarmTimeA=$.fullCalendar.parseDate(value.substring(0, 4)+'-'+value.substring(4, 6)+'-'+value.substring(6, 8)+'T'+value.substring(9, 11)+':'+value.substring(11, 13)+':'+value.substring(13, 15));
+ if(value.charAt(value.length-1)=='Z')
+ tzNameA='UTC';
+ if(dtStartTimezoneA.length>1 || 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;p<globalResourceCalDAVList.collections.length;p++)
+ if(typeof globalResourceCalDAVList.collections[p].uid !='undefined' && globalResourceCalDAVList.collections[p].uid==uid)
+ {
+ index=p;
+ break;
+ }
+ var firstPart=index.pad(String(globalResourceCalDAVList.collections.length).length);
+
+ var compareString=(firstPart + title).toLowerCase();
+
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_CLASS']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ classType=vcalendarUnescapeValue(parsed[4]);
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_STATUS']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ status=vcalendarUnescapeValue(parsed[4]);
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_TRANSP']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ avail=vcalendarUnescapeValue(parsed[4]);
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_URL']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ hrefUrl=vcalendarUnescapeValue(parsed[4]);
+ }
+
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_RECURRENCE_ID']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ var rec=parsed[4];
+ /*if(rec.indexOf("T")==-1)
+ {
+ rec=rec.substring(0, 4)+'/'+rec.substring(4, 6)+'/'+rec.substring(6, 8);
+ var d=$.fullCalendar.parseDate(rec);
+ var da=new Date(d.getTime()-1*24*60*60*1000);
+ var day=da.getDate();
+
+ if(day<10)
+ day='0'+day;
+
+ var month=da.getMonth();
+ month++;
+ if(month<10)
+ month='0'+month;
+
+ rec=da.getFullYear()+'-'+month+'-'+day;
+ }
+ else
+ rec=rec.substring(0, 4)+'-'+rec.substring(4, 6)+'-'+rec.substring(6, 8)+'T'+rec.substring(9, 11)+':'+rec.substring(11, 13)+':'+rec.substring(13, 15);
+ rec_id=$.fullCalendar.parseDate(rec);*/
+ //if(!rec_id || rec_id=='Invalid Date')
+ // rec_id='';
+ rec_id=rec;
+ }
+
+ var isDuration = false;
+ var dur = 0;
+ vcalendar_element=vcalendar.match(vCalendar.pre['contentline_DTEND']);
+ if(vcalendar_element!=null)
+ {
+ parsed=vcalendar_element[0].match(vCalendar.pre['contentline_parse']);
+ end=parsed[4];
+ var help=end;
+ if(help.indexOf("T")==-1)
+ {
+ help=help.substring(0, 4)+'-'+help.substring(4, 6)+'-'+help.substring(6, 8);
+ var d=$.fullCalendar.parseDate(help);
+ var da=new Date(d.getTime());
+ if(help1.indexOf("T")==-1)
+ da.setDate(da.getDate()-1);
+ help=$.fullCalendar.formatDate(da, "yyyy-MM-dd");
+ all=true;
+ if(help1.indexOf("T")!=-1)
+ {
+ all=false;
+ help+='T00:00:00';
+ if(tzName == 'UTC')
+ help+='Z';
+ }
+ }
+ else
+ {
+ help=help.substring(0, 4)+'-'+help.substring(4, 6)+'-'+help.substring(6, 8)+'T'+help.substring(9, 11)+':'+help.substring(11, 13)+':'+help.substring(13, 15);
+ all=false;
+ }
+ }
+ else
+ {
+ var checkDur=vcalendar.match(vCalendar.pre['dur-value']);
+ if(checkDur!=null)
+ {
+ var checkP = (checkDur[0]+'\r\n').match(vCalendar.pre['contentline_parse']);
+ if(checkP != null)
+ {
+ var value=checkP[4];
+
+ var number = 0;
+ if(value.indexOf('W')!=-1)
+ number=parseAlarmWeek(value);
+ else if(value.indexOf('D')!=-1)
+ number=parseAlarmDay(value);
+ else if(value.indexOf('T')!=-1)
+ number=parseAlarmTime(value);
+ if(parsed[4].charAt(0)=="-")
+ number="-"+number;
+ else
+ number="+"+number;
+ dur=parseInt(number.substring(1, number.length-1),10);
+ isDuration = true;
+ }
+ }
+ }
+ if(isDuration)
+ {
+ var st='';
+ if(!all)
+ st = $.fullCalendar.parseDate(help1);
+ else
+ {
+ st = $.fullCalendar.parseDate(help1+'T00:00:00');
+ //date object mindfuck problem
+ st.setMilliseconds(-1);
+ }
+ var durDate = new Date(st.getTime() + dur);
+ help = $.fullCalendar.formatDate(durDate,"yyyy-MM-dd'T'HH:mm:ss");
+ }
+
+ if(typeof help=='undefined' || help=='' || help==null)
+ help=help1;
+ var t1=$.fullCalendar.parseDate(help);
+ if(t1==null)
+ return false;
+ else if(t1.toString()=='Invalid Date')
+ return false;
+
+ if(!all)
+ {
+ if(end.charAt(end.length-1)=='Z')
+ tzName='UTC';
+ if(dtStartTimezone.length>1 || 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(true)
+ {
+ if(alertTime.length>0)
+ {
+ var aTime='';
+ var now=new Date();
+ if(!inputCollection.ignoreAlarms)
+ alertTimeOut=setAlertTimeouts(false,alertTime, start, end, {allDay:all, title:title}, true, 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(etag, start, end, title, all, uid, rid, evid, note, inputCollection.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(etag, varDate, varEndDate, title, all, uid, rid, evid, note, inputCollection.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,uid);
+
+ var tmpObj=new items(etag, start, end, title, all, uid, rid, evid, note, inputCollection.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;
+ return tmpObj;
+}
+/* END stackrpms functions */
bgstack15