variables.eventDetailsCEName = getEventDetailsCEName(); variables.eventDetailsViewName = getCEViewName(variables.eventDetailsCEName); variables.eventDateTimeCEName = getEventDateTimeCEName(); variables.eventDateTimeViewName = getCEViewName(variables.eventDateTimeCEName); var dataQry = QueryNew("temp"); arguments.startDate = TRIM(arguments.startDate); arguments.endDate = TRIM(arguments.endDate); arguments.eventID = TRIM(arguments.eventID); arguments.dateTimeID = TRIM(arguments.dateTimeID); arguments.hashID = TRIM(arguments.hashID); if ( LEN(arguments.eventID) NEQ 0 ) { if ( arguments.useCache ) { // Get the events from the eventsCache based on a date range dataQry = application.ptCalendar.calEventsCacheController.getEventsByEventID(eventID=arguments.eventID); } else dataQry = getEventsByEventID(eventID=arguments.eventID); } else if ( LEN(arguments.dateTimeID) NEQ 0 AND LEN(arguments.hashID) NEQ 0 ) { if ( arguments.useCache ) { // Get the events from the eventsCache based on a date range dataQry = application.ptCalendar.calEventsCacheController.getEventsByDateTimeIDandHashID(dateTimeID=arguments.dateTimeID,hashID=arguments.hashID); } else dataQry = getEventsByDateTimeIDandHashID(dateTimeID=arguments.dateTimeID,hashID=arguments.hashID); } else if ( LEN(arguments.dateTimeID) NEQ 0 ) { if ( arguments.useCache ) { // Get the events from the eventsCache based on a date range dataQry = application.ptCalendar.calEventsCacheController.getEventsByDateTimeID(dateTimeID=arguments.dateTimeID); } else dataQry = getEventsByDateTimeID(dateTimeID=arguments.dateTimeID); } else if ( LEN(arguments.hashID) NEQ 0 ) { if ( arguments.useCache ) { // Get the events from the eventsCache based on a date range dataQry = application.ptCalendar.calEventsCacheController.getEventsByHashID(hashID=arguments.hashID); } else dataQry = getEventsByHashID(hashID=arguments.hashID); } else if ( LEN(arguments.startdate) NEQ 0 ) { // DISABLED - see notes // Check if future or past dates cache limits are set, and if we need to not use cache to get back non-cached data // - NOTE - see solution below, using the "re-query with cache disabled" to return non-cacued data for all cases // - DISABLED - getting back NO results is better that VERY SLOW results /* if ( arguments.useCache ) { var dateTimeStamp = Now(); var futureYears = getCacheMaxFutureYears(); var pastYears = getCacheMaxPastYears(); var pastMonths = 0; var futureMonths = 0; var startCacheDate = ""; var endCacheDate = ""; // Calculate the Cache start and enddates if ( IsNumeric(pastYears) AND pastYears GT 0 ) { pastMonths = Round(pastYears * 12); startCacheDate = DateAdd("m",-(pastMonths),dateTimeStamp); // Make sure we have the first day of the month for the past limit startCacheDate = application.ptCalendar.date.firstOfMonth(inMonth=Month(startCacheDate),inYear=Year(startCacheDate)); if ( arguments.startDate LT startCacheDate ) arguments.useCache = false; } if ( LEN(arguments.endDate) NEQ 0 ) { if ( IsNumeric(futureYears) AND futureYears GT 0 ) { futureMonths = Round(futureYears * 12); endCacheDate = DateAdd("m",futureMonths,dateTimeStamp); // Make sure we have the last day of the month for the future limit endCacheDate = application.ptCalendar.date.lastOfMonth(inMonth=Month(endCacheDate),inYear=Year(endCacheDate)); if ( arguments.endDate GT endCacheDate ) arguments.useCache = false; } } }*/ if ( arguments.useCache ) { // Get Events from the eventsCache based on a date range dataQry = application.ptCalendar.calEventsCacheController.getEventsByDateRange( startDate = arguments.startDate ,endDate = arguments.endDate ); } else { // Get Events based on a date range dataQry = getEventsByDateRange( startDate = arguments.startDate ,endDate = arguments.endDate ); } } else { if ( arguments.useCache ) { // Get Events from the eventsCache dataQry = application.ptCalendar.calEventsCacheController.getEvents(); } else { // Get Events dataQry = getEventsUnion(); } } // Check if future or past dates cache limits are set, and if we need to run the events query again to get non-cached data // - DISABLED - getting back NO results is better that VERY SLOW results /* var futureYears = getCacheMaxFutureYears(); var pastYears = getCacheMaxPastYears(); // if useCache=true ... but no data is returned... try again with useCache=false if ( arguments.useCache AND dataQry.RecordCount EQ 0 AND (futureYears NEQ 0 OR pastYears NEQ 0) ) { arguments.useCache = false; dataQry = getEvents(argumentCollection=arguments); } */ return dataQry; var dataQry = QueryNew("tmp"); var dateTimeQry = application.ptCalendar.calEventDetailsDAO.getEventDetailsDateTimeJoinQuery( startDate=TRIM(arguments.startDate) ,enddate=TRIM(arguments.enddate) ,eventID=TRIM(arguments.eventID) ,dateTimeID=TRIM(arguments.dateTimeID) ,hashID=TRIM(arguments.hashID) ); var recurrenceQry = application.ptCalendar.calEventDetailsDAO.getEventDetailsRecurrenceJoinQuery( startDate=TRIM(arguments.startDate) ,enddate=TRIM(arguments.enddate) ,eventID=TRIM(arguments.eventID) ,dateTimeID=TRIM(arguments.dateTimeID) ,hashID=TRIM(arguments.hashID) ); SELECT * FROM dateTimeQry WHERE dateTimeID = UNION ALL SELECT * FROM recurrenceQry WHERE dateTimeID = ORDER BY EVENTDATE ASC, ALLDAY DESC, STARTTIME ASC errorMsg = "calEventsDAO.getEventsUnion() Query of Queries failed. If using ACF 2018 or ACF 2021 please request and install the QofQ patch from Adobe Support (cfsup@adobe.com) or apply ACF updates greater than 2018 Update 13 or 2021 Update 3."; // Must use the CommonSpot logger here, Using the ADF to log errors breaks this this function is called during an ADF reset Server.CommonSpot.addLogEntry(errorMsg,CFCatch); //application.ADF.log.addLogEntry(message=errorMsg,CFCatch=cfcatch,useDatePrefix=true,wantAllStacks=false); return getEventsUnion(startDate=TRIM(arguments.startDate),endDate=TRIM(arguments.endDate)); return getEventsUnion(eventID=TRIM(arguments.eventID)); return getEventsUnion(dateTimeID=TRIM(arguments.dateTimeID),hashID=TRIM(arguments.hashID)); return getEventsUnion(dateTimeID=TRIM(arguments.dateTimeID)); return getEventsUnion(hashID=TRIM(arguments.hashID)); return application.ptCalendar.calEventDateTimeDAO.getDateTimeColumnStruct(argumentCollection=arguments); return application.ptCalendar.calEventDateTimeDAO.getDateTimeColumnStructDirect(argumentCollection=arguments); return application.ptCalendar.calEventDateTimeDAO.getDateTimeQueryColumnListStruct(argumentCollection=arguments); return application.ptCalendar.calEventDateTimeDAO.getDateTimeTableColumnStruct(argumentCollection=arguments); var retData = {}; var cacheProcessType = "delete"; var deleteItemsList = application.ptCalendar.calEventDetailsService.deleteEventDetailsByEventID(eventID=arguments.eventID); // Check to see if any Recurrence records were deleted retData.status = false; retData.deleteDetails = 'Error: Event Details Delete Failed!'; retData.deleteDetailsList = deleteItemsList; retData.deleteDateTime = false; retData.deleteRecurrence = false; retData.cacheStatus = false; if ( ListLen(deleteItemsList) ) { retData.status = true; retData.deleteDetails = "Event Details have been deleted!"; retData.deleteDateTime = application.ptCalendar.dateTimeBuilderController.processEventDateTimeDelete(parentID=arguments.eventID); retData.deleteRecurrence = application.ptCalendar.recurrenceBuilderController.processEventRecurrenceDelete(parentID=arguments.eventID); retData.cacheStatus = application.ptCalendar.calEventsCacheController.processEventCacheByEventID(eventID=arguments.eventID,process=cacheProcessType); // Reset the Far Dates data struct application.ptCalendar.calEventsService.resetFarEventDates(); } return retData; var cacheStatus = getEventCacheStatus(); var eventsQry = QueryNew('tmp'); var farDates = initFarDatesStruct(); var minQry = QueryNew('tmp'); var maxQry = QueryNew('tmp'); var minPastDates = {}; var maxFutureDates = {}; var yearPad = variables.farDateDefaults.yearPad; var minDate = DateFormat(DateAdd('yyyy',-(ABS(yearPad)),Now()),'yyyy-mm-dd'); var maxDate = DateFormat(DateAdd('yyyy',ABS(yearPad),Now()),'yyyy-mm-dd'); // Can NOT force enable cache if no cache exists! if ( cacheStatus EQ false OR !StructKeyExists(application,'ptCalendarCache') ) arguments.useCache = false; try { eventsQry = getEvents(useCache=arguments.useCache); // If cached is enable, but empty get the events without cache // - DO NOT USE - could cause performance issue with large numbers of events //if ( arguments.useCache AND eventsQry.RecordCount EQ 0 ) // eventsQry = getEvents(useCache=false); if ( eventsQry.RecordCount ) { minQry = queryExecute( "SELECT MIN(eventDate) AS minDate FROM eventsQry", { }, { dbtype="query", maxrows=1 } ); if ( minQry.RecordCount ) minDate = minQry.minDate[1]; maxQry = queryExecute( "SELECT MAX(eventDate) AS maxDate FROM eventsQry", { }, { dbtype="query", maxrows=1 } ); if ( maxQry.RecordCount ) maxDate = maxQry.maxDate[1]; } // Set the farDates Struct // - minPast Event Date if ( IsDate(minDate) ) { farDates['minPastEventDate'] = DateFormat(minDate,'yyyy-mm-dd') & ' 00:00:00'; farDates['minPastEventYear'] = Year(farDates.minPastEventDate); farDates['minPastEventMonth'] = Month(farDates.minPastEventDate); farDates['minPastEventMonthDate'] = application.ptCalendar.date.firstOfMonth(inMonth=farDates.minPastEventMonth,inYear=farDates.minPastEventYear); farDates['minPastEventWeekDate'] = DateFormat(application.ptCalendar.date.firstDayOfWeek(inDate=farDates.minPastEventDate),'yyyy-mm-dd') & ' 00:00:00'; } else { minPastDates = getFarDatesMinPastDefaults(); structAppend(farDates, minPastDates, true); } // - maxFuture Event Date if ( IsDate(maxDate) ) { farDates['maxFutureEventDate'] = DateFormat(maxDate,'yyyy-mm-dd') & ' 23:59:59'; farDates['maxFutureEventYear'] = Year(farDates.maxFutureEventDate); farDates['maxFutureEventMonth'] = Month(farDates.maxFutureEventDate); farDates['maxFutureEventMonthDate'] = application.ptCalendar.date.lastOfMonth(inMonth=farDates.maxFutureEventMonth,inYear=farDates.maxFutureEventYear); farDates['maxFutureEventWeekDate'] = DateFormat(application.ptCalendar.date.lastDayOfWeek(inDate=farDates.maxFutureEventDate),'yyyy-mm-dd') & ' 23:59:59'; } else { maxFutureDates = getFarDatesMaxFutureDefaults(); structAppend(farDates, maxFutureDates, true); } // Add the farDates to the application.ptCalendar object application.ptCalendar['farDates'] = farDates; } catch(any ex) { // Log error message since sometimes called from a CFTHREAD application.ADF.log.addLogEntry(message='Error occurred in command calEventsDAO.setFarEventDates (#DateTimeFormat(Now(),"short")#): #ex.message#',CFCatch=ex,forceStackTrace=true,useDatePrefix=true); // #Server.CommonSpot.UDF.util.structToText(farDates)#' }