- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/googleapipush.php
- Класс: BitrixCalendarSyncGoogleApiPush
- Вызов: GoogleApiPush::createWatchChannels
static function createWatchChannels($start = 0)
{
$pushOptionEnabled = COption::getOptionString('calendar', 'sync_by_push', false);
if (!$pushOptionEnabled && !CCalendar::isBitrix24())
{
return null;
}
$lastId = $start;
if(!Loader::includeModule('dav'))
{
return false;
}
$davConnections = CDavConnection::getList(
["ID" => "ASC"],
[
'ACCOUNT_TYPE' => GoogleHelper::GOOGLE_ACCOUNT_TYPE_API,
'>ID' => $start
],
false,
['nTopCount' => self::CREATE_LIMIT]
);
$connections = [];
$pushConnectionIds = [];
while($row = $davConnections->fetch())
{
//connectivity check
if (!self::isConnectionError($row['LAST_RESULT']))
{
$lastId = $row['ID'];
$connections[] = $row;
$pushConnectionIds[] = $row['ID'];
}
}
if(!empty($connections))
{
$result = PushTable::getList(
[
'filter' => [
'=ENTITY_TYPE' => self::TYPE_CONNECTION,
'=ENTITY_ID' => $pushConnectionIds,
],
]
);
$pushChannels = [];
while($row = $result->fetch())
{
$pushChannels[$row['ENTITY_ID']] = $row;
}
foreach($connections as $davConnection)
{
if(isset($pushChannels[$davConnection['ID']]))
{
continue;
}
$googleApiConnection = new GoogleApiSync($davConnection['ENTITY_ID'], $davConnection['ID']);
$channelInfo = $googleApiConnection->startWatchCalendarList($connections['NAME']);
if($channelInfo && isset($channelInfo['id'], $channelInfo['resourceId']))
{
self::deletePushChannel(["ENTITY_TYPE" => self::TYPE_CONNECTION, 'ENTITY_ID' => $davConnection['ID']]);
$googleApiConnection->updateSuccessLastResultConnection();
PushTable::add([
'ENTITY_TYPE' => self::TYPE_CONNECTION,
'ENTITY_ID' => $davConnection['ID'],
'CHANNEL_ID' => $channelInfo['id'],
'RESOURCE_ID' => $channelInfo['resourceId'],
'EXPIRES' => $channelInfo['expiration'],
'NOT_PROCESSED' => 'N'
]);
}
}
}
if($lastId == $start)
{
CAgent::removeAgent("\Bitrix\Calendar\Sync\GoogleApiPush::createWatchChannels(".$start.");", "calendar");
CAgent::removeAgent("\Bitrix\Calendar\Sync\GoogleApiPush::createWatchChannels(0);", "calendar");
return null;
}
return false;
}