- Модуль: 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;
}