• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/notify.php
  • Класс: CIntranetNotify
  • Вызов: CIntranetNotify::NewUserMessage
static function NewUserMessage($USER_ID): void
{
	static $uniqueIdCache = [];

	if (!CModule::IncludeModule('socialnetwork'))
	{
		return;
	}

	$USER_ID = (int)$USER_ID;
	if ($USER_ID <= 0)
	{
		return;
	}

	$arRights = self::GetRights($USER_ID);
	if (!$arRights)
	{
		return;
	}

	$blockNewUserLF = COption::GetOptionString("intranet", "BLOCK_NEW_USER_LF_SITE", false);
	if (!$blockNewUserLF)
	{
		$blockNewUserLF = COption::GetOptionString("intranet", "BLOCK_NEW_USER_LF", "N");
	}

	if ($blockNewUserLF === 'Y')
	{
		return;
	}

	$dbRes = CUser::GetList(
		"ID",
		"asc",
		[ 'ID_EQUAL_EXACT' => $USER_ID ],
		[
			'FIELDS' => [ 'EXTERNAL_AUTH_ID' ],
			'SELECT' => [ 'UF_DEPARTMENT' ],
		]
	);
	if (
		!($arUser = $dbRes->fetch())
		|| (in_array($arUser["EXTERNAL_AUTH_ID"], [ 'bot', 'imconnector' ], true))
	)
	{
		return;
	}

	$bExtranetUser = false;

	if (
		!isset($arUser['UF_DEPARTMENT'])
		|| !is_array($arUser['UF_DEPARTMENT'])
		|| empty($arUser['UF_DEPARTMENT'])
	)
	{
		if (!Loader::includeModule('extranet'))
		{
			return;
		}

		$extranetGroupId = CExtranet::getExtranetUserGroupId();
		if (
			!$extranetGroupId
			|| !in_array($extranetGroupId, CUser::GetUserGroup($USER_ID))
		)
		{
			return;
		}

		$bExtranetUser = true;
	}

	$uniqueId = round((microtime(true) - mktime(0,0,0,1,1,2017))*10);
	while (in_array($uniqueId, $uniqueIdCache))
	{
		$uniqueId += 10000000;
	}
	$uniqueIdCache[] = $uniqueId;

	$arSoFields = array(
		"ENTITY_TYPE" => SONET_INTRANET_NEW_USER_ENTITY,
		"EVENT_ID" => SONET_INTRANET_NEW_USER_EVENT_ID,
		"ENTITY_ID" => $USER_ID,
		"SOURCE_ID" => $USER_ID,
		"USER_ID" => $USER_ID,
		"=LOG_DATE" => CDatabase::CurrentTimeFunction(),
		"MODULE_ID" => "intranet",
		"TITLE_TEMPLATE" => "#TITLE#",
		"TITLE" => Loc::getMessage($bExtranetUser ? 'I_NEW_USER_EXTERNAL_TITLE' : 'I_NEW_USER_TITLE'),
		"MESSAGE" => '',
		"TEXT_MESSAGE" => '',
		"CALLBACK_FUNC" => false,
		"SITE_ID" => SITE_ID,
		"ENABLE_COMMENTS" => "Y", //!!!
		"RATING_TYPE_ID" => "INTRANET_NEW_USER",
		"RATING_ENTITY_ID" => $uniqueId,
	);

	// check earlier messages for this user
	$res = CSocNetLog::getList(
		array(),
		array(
			'ENTITY_TYPE' => $arSoFields['ENTITY_TYPE'],
			'ENTITY_ID' => $arSoFields['ENTITY_ID'],
			'EVENT_ID' => $arSoFields['EVENT_ID'],
			'SOURCE_ID' => $arSoFields['SOURCE_ID'],
		),
		false,
		false,
		array('ID')
	);
	while($logEntry = $res->fetch())
	{
		CSocNetLog::delete($logEntry['ID']);
	}

	$logID = CSocNetLog::add($arSoFields, false);

	if ((int)$logID <= 0)
	{
		return;
	}

	$arFields = array(
		"TMP_ID" => $logID
	);

	if (
		$bExtranetUser
		&& Loader::includeModule("extranet")
	)
	{
		$arFields["SITE_ID"] = CExtranet::getSitesByLogDestinations($arRights);
	}
	elseif (defined("ADMIN_SECTION") && ADMIN_SECTION === true)
	{
		$site = CSocNetLogComponent::getSiteByDepartmentId($arUser["UF_DEPARTMENT"]);
		if ($site)
		{
			$arFields["SITE_ID"] = array($site['LID']);
		}
	}

	CSocNetLog::Update($logID, $arFields);
	CSocNetLogRights::Add($logID, $arRights);
	CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $logID);
}