- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_livefeed.php
- Класс: CCalendarLiveFeed
- Вызов: CCalendarLiveFeed::EditCalendarEventEntry
static function EditCalendarEventEntry($entryFields = [], $userFieldData = [], $accessCodes = [], $params = []): void
{
if (!$entryFields['SKIP_TIME'])
{
$entryFields['DATE_FROM'] .= ' '.$entryFields['TIME_FROM'];
$entryFields['DATE_TO'] .= ' '.$entryFields['TIME_TO'];
}
// Timezone
if (!$entryFields['TZ_FROM'] && isset($entryFields['DEFAULT_TZ']))
{
$entryFields['TZ_FROM'] = $entryFields['DEFAULT_TZ'];
}
if (!$entryFields['TZ_TO'] && isset($entryFields['DEFAULT_TZ']))
{
$entryFields['TZ_TO'] = $entryFields['DEFAULT_TZ'];
}
if (isset($entryFields['DEFAULT_TZ']) && (string)$entryFields['DEFAULT_TZ'] !== '')
{
CCalendar::SaveUserTimezoneName($params["userId"], $entryFields['DEFAULT_TZ']);
}
if ($entryFields['SECTION'])
{
$entryFields['SECTIONS'] = array($entryFields['SECTION']);
}
$entryFields["OWNER_ID"] = $params["userId"];
$entryFields["CAL_TYPE"] = $params["type"];
// Add author for new event
if (!$entryFields["ID"])
{
$accessCodes[] = 'U'.$params["userId"];
}
$accessCodes = array_unique($accessCodes);
$attendeeList = CCalendar::GetDestinationUsers($accessCodes);
if (trim($entryFields["NAME"]) === '')
{
$entryFields["NAME"] = GetMessage('EC_DEFAULT_EVENT_NAME_V2');
}
$entryFields['IS_MEETING'] = (!empty($attendeeList) && $attendeeList != array($params["userId"]));
if (
isset($entryFields['RRULE'])
&& !empty($entryFields['RRULE'])
&& is_array($entryFields['RRULE']['BYDAY'])
)
{
$entryFields['RRULE']['BYDAY'] = implode(',', $entryFields['RRULE']['BYDAY']);
}
if ($entryFields['IS_MEETING'])
{
$entryFields['ATTENDEES_CODES'] = $accessCodes;
$entryFields['ATTENDEES'] = $attendeeList;
$entryFields['MEETING_HOST'] = $params["userId"];
$entryFields['MEETING'] = array(
'HOST_NAME' => CCalendar::GetUserName($params["userId"]),
'TEXT' => '',
'OPEN' => false,
'NOTIFY' => true,
'REINVITE' => false
);
}
else
{
$entryFields['ATTENDEES'] = false;
}
$eventId = CCalendar::SaveEvent(
array(
'arFields' => $entryFields,
'autoDetectSection' => true
)
);
if ($eventId > 0)
{
if (count($userFieldData) > 0)
{
CCalendarEvent::UpdateUserFields($eventId, $userFieldData);
}
foreach ($accessCodes as $key => $value)
{
if ($value === "UA")
{
unset($accessCodes[$key]);
$accessCodes[] = "G2";
break;
}
}
if ($entryFields['IS_MEETING'] && !empty($userFieldData['UF_WEBDAV_CAL_EVENT']))
{
$UF = $GLOBALS['USER_FIELD_MANAGER']->GetUserFields("CALENDAR_EVENT", $eventId, LANGUAGE_ID);
CCalendar::UpdateUFRights($userFieldData['UF_WEBDAV_CAL_EVENT'], $accessCodes, $UF['UF_WEBDAV_CAL_EVENT']);
}
$socnetLogFields = Array(
"ENTITY_TYPE" => SONET_SUBSCRIBE_ENTITY_USER,
"ENTITY_ID" => $params["userId"],
"USER_ID" => $params["userId"],
"=LOG_DATE" => CDatabase::CurrentTimeFunction(),
"TITLE_TEMPLATE" => "#TITLE#",
"TITLE" => $entryFields["NAME"],
"MESSAGE" => '',
"TEXT_MESSAGE" => ''
);
$dbRes = CSocNetLog::GetList(
array("ID" => "DESC"),
array(
"EVENT_ID" => "calendar",
"SOURCE_ID" => $eventId
),
false,
false,
array("ID")
);
$codes = [];
foreach ($accessCodes as $value)
{
if (mb_strpos($value, 'SG') === 0)
{
$codes[] = $value . '_K';
}
$codes[] = $value;
}
$codes = array_unique($codes);
if ($arRes = $dbRes->Fetch())
{
CSocNetLog::Update($arRes["ID"], $socnetLogFields);
CSocNetLogRights::DeleteByLogID($arRes["ID"]);
CSocNetLogRights::Add($arRes["ID"], $codes);
}
else
{
$socnetLogFields = array_merge($socnetLogFields, array(
"EVENT_ID" => "calendar",
"SITE_ID" => SITE_ID,
"SOURCE_ID" => $eventId,
"ENABLE_COMMENTS" => "Y",
"CALLBACK_FUNC" => false
));
$logId = CSocNetLog::Add($socnetLogFields, false);
CSocNetLogRights::Add($logId, $codes);
}
}
}