• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/rest.php
  • Класс: CSocNetLogBlogPostRestProxy
  • Вызов: CSocNetLogBlogPostRestProxy::processEvent
static function processEvent(array $arParams, array $arHandler)
{
	static $processedIdList = array();

	if (!Loader::includeModule('blog'))
	{
		return false;
	}

	$eventName = $arHandler['EVENT_NAME'];

	$appKey = $arHandler['APP_ID'].$arHandler['APPLICATION_TOKEN'];
	if (!isset($processedIdList[$appKey]))
	{
		$processedIdList[$appKey] = array();
	}

	switch(mb_strtolower($eventName))
	{
		case 'onlivefeedpostadd':
		case 'onlivefeedpostupdate':
		case 'onlivefeedpostdelete':

			$id = 0;

			if (mb_strtolower($eventName) === 'onlivefeedpostadd')
			{
				$fields = isset($arParams[0]) && is_array($arParams[0])? $arParams[0] : array();
				$id = (int)($fields['ID'] ?? 0);
			}
			elseif (in_array(mb_strtolower($eventName), array('onlivefeedpostupdate', 'onlivefeedpostdelete')))
			{
				$id = (int)($arParams[0] ?? 0);
				$fields = isset($arParams[1]) && is_array($arParams[1])? $arParams[1] : array();
			}

			if ($id <= 0)
			{
				throw new RestException('Could not find livefeed entity ID in fields of event "' . $eventName . '"');
			}

			if (
				mb_strtolower($eventName) === 'onlivefeedpostupdate'
				&& in_array($id, $processedIdList[$appKey], true)
			)
			{
				throw new RestException('ID ' . $id . 'has already been processed');
			}

			if (in_array(mb_strtolower($eventName), array('onlivefeedpostadd', 'onlivefeedpostupdate')))
			{
				$processedIdList[$appKey][] = $id;
			}

			if (
				!isset($fields['SOURCE_ID'], $fields['EVENT_ID'])
				&& mb_strtolower($eventName) === 'onlivefeedpostupdate'
			)
			{
				$res = BitrixSocialnetworkLogTable::getList(array(
					'filter' => array(
						'ID' => $id
					),
					'select' => array('EVENT_ID', 'SOURCE_ID')
				));

				if ($logFields = $res->fetch())
				{
					$sourceId = (int)($logFields['SOURCE_ID'] ?? 0);
					$logEventId = $logFields['EVENT_ID'] ?? false;
				}
			}
			else
			{
				$sourceId = isset($fields['SOURCE_ID']) ? (int)$fields['SOURCE_ID'] : 0;
				$logEventId = $fields['EVENT_ID'] ?? false;
			}

			if (in_array($logEventId, BitrixBlogIntegrationSocialnetworkLog::getEventIdList(), true))
			{
				if ($sourceId <= 0)
				{
					throw new RestException('Could not find livefeed source ID in fields of event "' . $eventName . '"');
				}

				return array('FIELDS' => array('POST_ID' => $sourceId));
			}

			throw new RestException('The event "' . $logEventId .'" is not processed by the log.blogpost REST events');
		default:
			throw new RestException("Incorrect handler ID");
	}
}