calendar-bundle/src/Resources/contao/dca/tl_calendar_events.php
public function adjustTime(Contao\DataContainer $dc)
	{
		// Return if there is no active record (override all)
		if (!$dc->activeRecord)
		{
			return;
		}

		$arrSet['startTime'] = $dc->activeRecord->startDate;
		$arrSet['endTime'] = $dc->activeRecord->startDate;

		// Set end date
		if ($dc->activeRecord->endDate)
		{
			if ($dc->activeRecord->endDate > $dc->activeRecord->startDate)
			{
				$arrSet['endDate'] = $dc->activeRecord->endDate;
				$arrSet['endTime'] = $dc->activeRecord->endDate;
			}
			else
			{
				$arrSet['endDate'] = $dc->activeRecord->startDate;
				$arrSet['endTime'] = $dc->activeRecord->startDate;
			}
		}

		// Add time
		if ($dc->activeRecord->addTime)
		{
			$arrSet['startTime'] = strtotime(date('Y-m-d', $arrSet['startTime']) . ' ' . date('H:i:s', $dc->activeRecord->startTime));
			$arrSet['endTime'] = strtotime(date('Y-m-d', $arrSet['endTime']) . ' ' . date('H:i:s', $dc->activeRecord->endTime ?: $dc->activeRecord->startTime));
		}

		// Adjust end time of "all day" events
		elseif (($dc->activeRecord->endDate && $arrSet['endDate'] == $arrSet['endTime']) || $arrSet['startTime'] == $arrSet['endTime'])
		{
			$arrSet['endTime'] = (strtotime('+ 1 day', $arrSet['endTime']) - 1);
		}

		$arrSet['repeatEnd'] = 0;

		// Recurring events
		if ($dc->activeRecord->recurring)
		{
			// Unlimited recurrences end on 2038-01-01 00:00:00 (see #4862)
			if ($dc->activeRecord->recurrences == 0)
			{
				$arrSet['repeatEnd'] = 2145913200;
			}
			else
			{
				$arrRange = Contao\StringUtil::deserialize($dc->activeRecord->repeatEach);

				if (\is_array($arrRange) && isset($arrRange['unit']) && isset($arrRange['value']))
				{
					$arg = $arrRange['value'] * $dc->activeRecord->recurrences;
					$unit = $arrRange['unit'];

					$strtotime = '+ ' . $arg . ' ' . $unit;
					$arrSet['repeatEnd'] = strtotime($strtotime, $arrSet['endTime']);
				}
			}
		}

		$this->Database->prepare("UPDATE tl_calendar_events %s WHERE id=?")->set($arrSet)->execute($dc->id);
	}
public function adjustTime(Contao\DataContainer $dc)
	{
		// Return if there is no active record (override all)
		if (!$dc->activeRecord)
		{
			return;
		}

		$arrSet['startTime'] = $dc->activeRecord->startDate;
		$arrSet['endTime'] = $dc->activeRecord->startDate;

		// Set end date
		if ($dc->activeRecord->endDate)
		{
			if ($dc->activeRecord->endDate > $dc->activeRecord->startDate)
			{
				$arrSet['endDate'] = $dc->activeRecord->endDate;
				$arrSet['endTime'] = $dc->activeRecord->endDate;
			}
			else
			{
				$arrSet['endDate'] = $dc->activeRecord->startDate;
				$arrSet['endTime'] = $dc->activeRecord->startDate;
			}
		}

		// Add time
		if ($dc->activeRecord->addTime)
		{
			$arrSet['startTime'] = strtotime(date('Y-m-d', $arrSet['startTime']) . ' ' . date('H:i:s', $dc->activeRecord->startTime));
			$arrSet['endTime'] = strtotime(date('Y-m-d', $arrSet['endTime']) . ' ' . date('H:i:s', $dc->activeRecord->endTime ?: $dc->activeRecord->startTime));
		}

		// Adjust end time of "all day" events
		elseif (($dc->activeRecord->endDate && $arrSet['endDate'] == $arrSet['endTime']) || $arrSet['startTime'] == $arrSet['endTime'])
		{
			$arrSet['endTime'] = (strtotime('+ 1 day', $arrSet['endTime']) - 1);
		}

		$arrSet['repeatEnd'] = 0;

		// Recurring events
		if ($dc->activeRecord->recurring)
		{
			// Unlimited recurrences end on 2038-01-01 00:00:00 (see #4862)
			if ($dc->activeRecord->recurrences == 0)
			{
				$arrSet['repeatEnd'] = 2145913200;
			}
			else
			{
				$arrRange = Contao\StringUtil::deserialize($dc->activeRecord->repeatEach);

				if (\is_array($arrRange) && isset($arrRange['unit']) && isset($arrRange['value']))
				{
					$arg = $arrRange['value'] * $dc->activeRecord->recurrences;
					$unit = $arrRange['unit'];

					$strtotime = '+ ' . $arg . ' ' . $unit;
					$arrSet['repeatEnd'] = strtotime($strtotime, $arrSet['endTime']);
				}
			}
		}

		$this->Database->prepare("UPDATE tl_calendar_events %s WHERE id=?")->set($arrSet)->execute($dc->id);
	}
public function adjustTime ( Contao \ DataContainer $ dc ) { // Return if there is no active record (override all) if ( ! $ dc -> activeRecord ) { return ; } $ arrSet [ 'startTime' ] = $ dc -> activeRecord -> startDate ; $ arrSet [ 'endTime' ] = $ dc -> activeRecord -> startDate ; // Set end date if ( $ dc -> activeRecord -> endDate ) { if ( $ dc -> activeRecord -> endDate > $ dc -> activeRecord -> startDate ) { $ arrSet [ 'endDate' ] = $ dc -> activeRecord -> endDate ; $ arrSet [ 'endTime' ] = $ dc -> activeRecord -> endDate ; } else { $ arrSet [ 'endDate' ] = $ dc -> activeRecord -> startDate ; $ arrSet [ 'endTime' ] = $ dc -> activeRecord -> startDate ; } } // Add time if ( $ dc -> activeRecord -> addTime ) { $ arrSet [ 'startTime' ] = strtotime ( date ( 'Y-m-d' , $ arrSet [ 'startTime' ] ) . ' ' . date ( 'H:i:s' , $ dc -> activeRecord -> startTime ) ) ; $ arrSet [ 'endTime' ] = strtotime ( date ( 'Y-m-d' , $ arrSet [ 'endTime' ] ) . ' ' . date ( 'H:i:s' , $ dc -> activeRecord -> endTime ? : $ dc -> activeRecord -> startTime ) ) ; } // Adjust end time of "all day" events elseif ( ( $ dc -> activeRecord -> endDate && $ arrSet [ 'endDate' ] == $ arrSet [ 'endTime' ] ) || $ arrSet [ 'startTime' ] == $ arrSet [ 'endTime' ] ) { $ arrSet [ 'endTime' ] = ( strtotime ( '+ 1 day' , $ arrSet [ 'endTime' ] ) - 1 ) ; } $ arrSet [ 'repeatEnd' ] = 0 ; // Recurring events if ( $ dc -> activeRecord -> recurring ) { // Unlimited recurrences end on 2038-01-01 00:00:00 (see #4862) if ( $ dc -> activeRecord -> recurrences == 0 ) { $ arrSet [ 'repeatEnd' ] = 2145913200 ; } else { $ arrRange = Contao \ StringUtil :: deserialize ( $ dc -> activeRecord -> repeatEach ) ; if ( \ is_array ( $ arrRange ) && isset ( $ arrRange [ 'unit' ] ) && isset ( $ arrRange [ 'value' ] ) ) { $ arg = $ arrRange [ 'value' ] * $ dc -> activeRecord -> recurrences ; $ unit = $ arrRange [ 'unit' ] ; $ strtotime = '+ ' . $ arg . ' ' . $ unit ; $ arrSet [ 'repeatEnd' ] = strtotime ( $ strtotime , $ arrSet [ 'endTime' ] ) ; } } } $ this -> Database -> prepare ( "UPDATE tl_calendar_events %s WHERE id=?" ) -> set ( $ arrSet ) -> execute ( $ dc -> id ) ; }
Adjust start end end time of the event based on date, span, startTime and endTime

@param Contao\DataContainer $dc
Adjust start end end time of the event based on date span startTime and endTime