private function FormatFieldsArray($arFields)
{
if (array_key_exists("REMIND", $arFields) && isset($arFields["REMIND"][0]))
{
$type = $arFields["REMIND"][0]["type"];
$val = (int)$arFields["REMIND"][0]["count"];
if ($type === "hour")
{
$val *= 60;
}
elseif ($type === "day")
{
$val *= 60 * 24;
}
if ($val > 0)
{
$arFields["REMINDER_MINUTES_BEFORE_START"] = $val;
}
}
$arFields["PROPERTY_SENSITIVITY"] = "Normal";
if ($arFields["PRIVATE_EVENT"])
{
$arFields["PROPERTY_SENSITIVITY"] = "Private";
}
if (isset($arFields['ACCESSIBILITY']))
{
$arFields['ACCESSIBILITY'] = mb_strtolower($arFields['ACCESSIBILITY']);
if ($arFields['ACCESSIBILITY'] === "absent")
{
$arFields["PROPERTY_FREEBUSY"] = "OOF";
}
else if ($arFields['ACCESSIBILITY'] === "free")
{
$arFields["PROPERTY_FREEBUSY"] = "Free";
}
else if ($arFields['ACCESSIBILITY'] === "quest")
{
$arFields["PROPERTY_FREEBUSY"] = "Tentative";
}
else
{
$arFields["PROPERTY_FREEBUSY"] = "Busy";
}
}
if (isset($arFields['RRULE']))
{
$rrule = $arFields["RRULE"];
if (is_array($rrule) && in_array($rrule["FREQ"], array("DAILY", "WEEKLY", "MONTHLY", "YEARLY")))
{
$arFields["RECURRING_TYPE"] = $rrule["FREQ"];
$arFields["RECURRING_INTERVAL"] = $rrule["INTERVAL"];
if ($rrule["FREQ"] === "WEEKLY")
{
$bydays = explode(',', $rrule["BYDAY"]);
if (empty($bydays))
{
$bydays = ["MO"];
}
$weekMap = [
'SU' => "Sunday",
'MO' => "Monday",
'TU' => "Tuesday",
'WE' => "Wednesday",
'TH' => "Thursday",
'FR' => "Friday",
'SA' => "Saturday"
];
$ar1 = [];
foreach ($bydays as $v)
{
$ar1[] = $weekMap[trim($v)];
}
$arFields["RECURRING_DAYSOFWEEK"] = implode(" ", $ar1);
}
$arFields["RECURRING_STARTDATE"] = ConvertTimeStamp($arFields["DATE_FROM_TS_UTC"], "SHORT");
if (isset($rrule["COUNT"]))
{
$arFields["RECURRING_NUMBEROFOCCURRENCES"] = $rrule["COUNT"];
}
else
{
$arFields["RECURRING_ENDDATE"] = ConvertTimeStamp($arFields["DATE_TO_TS_UTC"], "SHORT");
}
}
else
{
$arFields["RECURRING_TYPE"] = null;
}
}
else if (array_key_exists("PROPERTY_PERIOD_TYPE", $arFields)) // Deprecated
{
if (in_array($arFields["PROPERTY_PERIOD_TYPE"], ["DAILY", "WEEKLY", "MONTHLY", "YEARLY"], true))
{
$ar = ["DAILY" => "DAILY", "WEEKLY" => "WEEKLY", "MONTHLY" => "MONTHLY_ABSOLUTE", "YEARLY" => "YEARLY_ABSOLUTE"];
$arFields["RECURRING_TYPE"] = $ar[$arFields["PROPERTY_PERIOD_TYPE"]];
if (isset($arFields["PROPERTY_PERIOD_COUNT"]) && $arFields["PROPERTY_PERIOD_COUNT"] !== '')
{
$arFields["RECURRING_INTERVAL"] = $arFields["PROPERTY_PERIOD_COUNT"];
}
if ($arFields["PROPERTY_PERIOD_TYPE"] === "WEEKLY" && $arFields["PROPERTY_PERIOD_ADDITIONAL"] !== '')
{
static $arWeekDayMap = [
6 => "Sunday",
0 => "Monday",
1 => "Tuesday",
2 => "Wednesday",
3 => "Thursday",
4 => "Friday",
5 => "Saturday"
];
$ar = explode(",", $arFields["PROPERTY_PERIOD_ADDITIONAL"]);
$ar1 = [];
foreach ($ar as $v)
{
$ar1[] = $arWeekDayMap[trim($v)];
}
$arFields["RECURRING_DAYSOFWEEK"] = implode(" ", $ar1);
}
$arFields["RECURRING_STARTDATE"] = ConvertTimeStamp(MakeTimeStamp($arFields["ACTIVE_FROM"]), "SHORT");
$arFields["RECURRING_ENDDATE"] = ConvertTimeStamp(MakeTimeStamp($arFields["ACTIVE_TO"]), "SHORT");
}
else
{
$arFields["RECURRING_TYPE"] = null;
}
}
$arFieldsNew = [];
$arMap = [
"XML_ID" => "Id",
"NAME" => "Subject",
"DESCRIPTION" => "Body",
"DETAIL_TEXT_TYPE" => "BodyType",
"PROPERTY_IMPORTANCE" => "Importance",
"PROPERTY_SENSITIVITY" => "Sensitivity",
"PROPERTY_FREEBUSY" => "LegacyFreeBusyStatus",
//"DATE_CREATE" => "DateTimeCreated",
"DATE_FROM" => "Start",
"DATE_TO" => "End",
"PROPERTY_LOCATION" => "Location",
"REMINDER_MINUTES_BEFORE_START" => "ReminderMinutesBeforeStart",
"RECURRING_TYPE" => "RecurringType",
"RECURRING_INTERVAL" => "RecurringInterval",
"RECURRING_DAYOFMONTH" => "RecurringDayOfMonth",
"RECURRING_DAYSOFWEEK" => "RecurringDaysOfWeek",
"RECURRING_DAYOFWEEKINDEX" => "RecurringDayOfWeekIndex",
"RECURRING_MONTH" => "RecurringMonth",
"RECURRING_STARTDATE" => "RecurringStartDate",
"RECURRING_NUMBEROFOCCURRENCES" => "RecurringNumberOfOccurrences",
"RECURRING_ENDDATE" => "RecurringEndDate",
];
$arFieldsNew["IsAllDayEvent"] = $arFields['DT_SKIP_TIME'] === 'Y';
$arFields['DETAIL_TEXT_TYPE'] = 'HTML';
foreach ($arFields as $key => $value)
{
if (!array_key_exists($key, $arMap))
{
continue;
}
$newKey = $arMap[$key];
if (in_array($newKey, ["Start", "End"], true))
{
$isFullDay = $arFields['DT_SKIP_TIME'] === 'Y';
if ($isFullDay && !isset($hours))
{
$hours = '0';
$minutes = '0';
$diff = (new DateTime())->format('P');
$parts = explode(":", $diff);
if (count($parts) === 2)
{
$hours = (int)$parts[0];
$minutes = (int)$diff[0] . $parts[1];
}
}
if ($isFullDay && $newKey === "End")
{
$dateTimeObject = Util::getDateObject($value, false);
if (isset($hours, $minutes))
{
$dateTimeObject->add("{$hours} hours {$minutes} minutes");
}
$arFieldsNew[$newKey] = $dateTimeObject->format(self::MS_DATETIME_FORMAT);
}
elseif ($isFullDay && $newKey === "Start")
{
$dateTimeObject = Util::getDateObject($value, false);
if (isset($hours, $minutes))
{
$dateTimeObject->add("{$hours} hours {$minutes} minutes");
}
$arFieldsNew[$newKey] = $dateTimeObject->format(self::MS_DATETIME_FORMAT);
}
else
{
$dateTimeObject = Util::getDateObject($value, false, $arFields['TZ_FROM']);
if ($dateTimeObject instanceof DateTime)
{
$arFieldsNew[$newKey] = $dateTimeObject->setTimezone(Util::prepareTimezone())->format(self::MS_DATETIME_FORMAT);
}
}
}
elseif (
$this->FormatStandartFieldsArray($newKey, $value, $arFieldsNew)
|| $this->FormatRecurrenceFieldsArray($newKey, $value, $arFieldsNew)
)
{
continue;
}
else
{
$arFieldsNew[$newKey] = $this->Decode($value);
}
}
if (isset($arFieldsNew["ReminderMinutesBeforeStart"]) && (int)$arFieldsNew["ReminderMinutesBeforeStart"])
{
$arFieldsNew["ReminderMinutesBeforeStart"] = (int)$arFieldsNew["ReminderMinutesBeforeStart"];
$arFieldsNew["ReminderIsSet"] = true;
}
if (array_key_exists("REQUIRED_ATTENDEES", $arFields))
{
$val = $arFields["REQUIRED_ATTENDEES"];
if (!is_array($val))
{
$val = [$val];
}
$arFieldsNew["RequiredAttendees"] = $val;
}
return $arFieldsNew;
}