• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/internals/eventservice/event/workgroupuserevent.php
  • Класс: BitrixSocialnetworkInternalsEventServiceEventWorkgroupUserEvent
  • Вызов: WorkgroupUserEvent::process
public function process(): void
{
	$this->collectNewData();
	$events = (EventCollection::getInstance())->list();

	$workgroupsPushList = [];

	$workgroupUserEventsList = [
		EventDictionary::EVENT_WORKGROUP_USER_ADD,
		EventDictionary::EVENT_WORKGROUP_USER_UPDATE,
		EventDictionary::EVENT_WORKGROUP_USER_DELETE,
	];

	$added = [];
	$changed = [];
	$deleted = [];

	foreach ($events as $event)
	{
		/* @var $event Event */
		$eventType = $event->getType();
		$relationKey = $event->getRelationKey();

		if (in_array($eventType, $workgroupUserEventsList, true))
		{
			if ($eventType === EventDictionary::EVENT_WORKGROUP_USER_ADD)
			{
				$added[] = $relationKey;
			}
			elseif ($eventType === EventDictionary::EVENT_WORKGROUP_USER_UPDATE)
			{
				$changed[] = $relationKey;
			}
			elseif ($eventType === EventDictionary::EVENT_WORKGROUP_USER_DELETE)
			{
				$deleted[] = $relationKey;
			}
		}
	}

	$added = array_diff($added, $deleted);
	$changed = array_diff($changed, $added, $deleted);
	$changed = $this->clearNotRealChanges($changed);

	$newFields = $this->getNewFields();

	foreach ($events as $event)
	{
		/* @var $event Event */
		$eventType = $event->getType();
		$groupId = $event->getGroupId();
		$userId = $event->getGroupId();
		$relationKey = $event->getRelationKey();

		$role = ($newFields[$relationKey] ?? null);
		if (
			!$role
			|| (
				$eventType === EventDictionary::EVENT_WORKGROUP_USER_ADD
				&& !in_array($relationKey, $added, true)
			)
			|| (
				$eventType === EventDictionary::EVENT_WORKGROUP_USER_UPDATE
				&& !in_array($relationKey, $changed, true)
			)
		)
		{
			continue;
		}

		$workgroupUserPushList[] = [
			'EVENT' => $eventType,
			'GROUP_ID' => $groupId,
			'USER_ID' => $userId,
			'ROLE' => $role,
		];
	}

	if (!empty($workgroupUserPushList))
	{
		$notVisibleGroupsUsers = $this->getNotVisibleGroupsUsers([
			$added,
			$changed,
			$deleted,
		]);

		(new WorkgroupUserSender())->send($workgroupsPushList, $notVisibleGroupsUsers);
	}
}