• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
  • Класс: CCalendarEvent
  • Вызов: CCalendarEvent::CheckEntryChanges
static function CheckEntryChanges($newFields = [], $currentFields = [])
{
	$changes = [];
	$fieldList = [
		'NAME',
		'DATE_FROM',
		'DATE_TO',
		'RRULE',
		'DESCRIPTION',
		'LOCATION',
		'IMPORTANCE'
	];

	foreach ($fieldList as $fieldKey)
	{
		if ($fieldKey === 'LOCATION')
		{
			if (
				is_array($newFields[$fieldKey])
				&& ($newFields[$fieldKey]['NEW'] ?? null) !== ($currentFields[$fieldKey] ?? null)
			)
			{
				$changes[] = [
					'fieldKey' => $fieldKey,
					'oldValue' => $currentFields[$fieldKey] ?? null,
					'newValue' => $newFields[$fieldKey]['NEW'] ?? null,
				];
			}
			else if (
				!is_array($newFields[$fieldKey]) && $newFields[$fieldKey] !== $currentFields[$fieldKey]
				&& (CCalendar::GetTextLocation($newFields["LOCATION"]) ?? '') !== (CCalendar::GetTextLocation($currentFields["LOCATION"]) ?? '')
			)
			{
				$changes[] = [
					'fieldKey' => $fieldKey,
					'oldValue' => $currentFields[$fieldKey],
					'newValue' => $newFields[$fieldKey]
				];
			}
		}
		else if ($fieldKey === 'DATE_FROM')
		{
			if (
				$newFields[$fieldKey] !== $currentFields[$fieldKey]
				|| ($newFields['TZ_FROM'] ?? null) !== ($currentFields['TZ_FROM'] ?? null)
			)
			{
				$changes[] = [
					'fieldKey' => $fieldKey,
					'oldValue' => $currentFields[$fieldKey],
					'newValue' => $newFields[$fieldKey]
				];
			}
		}
		else if ($fieldKey === 'DATE_TO')
		{
			if (
				(
					$newFields['DATE_FROM'] === $currentFields['DATE_FROM']
					&& ($newFields['TZ_FROM'] ?? null) === ($currentFields['TZ_FROM'] ?? null)
				)
				&&
				(
					$newFields[$fieldKey] !== $currentFields[$fieldKey]
					|| ($newFields['TZ_TO'] ?? null) !== ($currentFields['TZ_TO'] ?? null)
				)
			)
			{
				$changes[] = [
					'fieldKey' => $fieldKey,
					'oldValue' => $currentFields[$fieldKey],
					'newValue' => $newFields[$fieldKey]
				];
			}
		}
		else if ($fieldKey === 'IMPORTANCE')
		{
			if (
				$newFields[$fieldKey] !== $currentFields[$fieldKey]
				&& $newFields[$fieldKey] === 'high'
			)
			{
				$changes[] = [
					'fieldKey' => $fieldKey,
					'oldValue' => $currentFields[$fieldKey],
					'newValue' => $newFields[$fieldKey]
				];
			}
		}
		else if ($fieldKey === 'DESCRIPTION')
		{
			if (mb_strtolower(trim($newFields[$fieldKey])) !== mb_strtolower(trim($currentFields[$fieldKey])))
			{
				$changes[] = [
					'fieldKey' => $fieldKey,
					'oldValue' => $currentFields[$fieldKey],
					'newValue' => $newFields[$fieldKey]
				];
			}
		}
		else if ($fieldKey === 'RRULE')
		{
			$newRule = self::ParseRRULE($newFields[$fieldKey]);
			$oldRule = self::ParseRRULE($currentFields[$fieldKey]);

			if (
                    (($newRule['FREQ'] ?? null) !== ($oldRule['FREQ'] ?? null))
				|| (($newRule['INTERVAL'] ?? null) !== ($oldRule['INTERVAL'] ?? null))
				|| (($newRule['BYDAY'] ?? null) !== ($oldRule['BYDAY'] ?? null))
			)
			{
				$changes[] = [
					'fieldKey' => $fieldKey,
					'oldValue' => $oldRule,
					'newValue' => $newRule
				];
			}
		}
		else if ($newFields[$fieldKey] !== $currentFields[$fieldKey])
		{
			$changes[] = [
				'fieldKey' => $fieldKey,
				'oldValue' => $currentFields[$fieldKey],
				'newValue' => $newFields[$fieldKey]
			];
		}
	}

	if (is_array($newFields['ATTENDEES_CODES']) && is_array($currentFields['ATTENDEES_CODES'])
		&& (count(array_diff($newFields['ATTENDEES_CODES'], $currentFields['ATTENDEES_CODES']))
			|| count(array_diff($currentFields['ATTENDEES_CODES'], $newFields['ATTENDEES_CODES'])))
	)
	{
		$changes[] = [
			'fieldKey' => 'ATTENDEES',
			'oldValue' => $currentFields['ATTENDEES_CODES'],
			'newValue' => $newFields['ATTENDEES_CODES']
		];
	}

	return $changes;
}