- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/google/outgoingeventmanager.php
- Класс: BitrixCalendarSyncGoogleOutgoingEventManager
- Вызов: OutgoingEventManager::multipartDecode
private function multipartDecode($response, array $syncEventList): void
{
$boundary = $this->httpClient->getClient()->getHeaders()->getBoundary();
$response = str_replace("--$boundary--", "--$boundary", $response);
$parts = explode("--$boundary" . self::LINE_SEPARATOR, $response);
foreach ($parts as $part)
{
$part = trim($part);
if (!empty($part))
{
$partEvent = explode(self::LINE_SEPARATOR . self::LINE_SEPARATOR, $part);
$data = $this->getMetaInfo($partEvent[1]);
$eventId = $this->getId($partEvent[0]);
if ($eventId === null)
{
continue;
}
try
{
$parsedData = Json::decode($partEvent[2]);
}
catch (ArgumentException $e)
{
continue;
}
if ($data['status'] === 200)
{
/** @var SyncEvent $masterEvent */
$syncEvent = $syncEventList[$parsedData['iCalUID']];
if ($syncEvent === null)
{
continue;
}
if ($syncEvent->hasInstances() && isset($parsedData['originalStartTime']))
{
$syncEvent = $this->getInstanceByOriginalDate($syncEvent, $parsedData);
// TODO: it's workaround to skip errors
if ($syncEvent === null)
{
continue;
}
}
$eventConnection = (new BuilderEventConnectionFromExternalEvent(
$parsedData,
$syncEvent,
$this->connection
))->build();
$syncEvent
->setEventConnection($eventConnection)
->setAction(Dictionary::SYNC_EVENT_ACTION['success'])
;
}
elseif (isset($parsedData['error']['code'], $parsedData['error']['message']))
{
return;
}
}
}
}