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);
}