• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_tools.php
  • Класс: CSocNetLogTools
  • Вызов: CSocNetLogTools::FormatDestinationFromRights
static function FormatDestinationFromRights($arRights, $arParams, &$iMoreCount = false)
{
	static $arDepartmentsStaticCache = array();

	if (empty($arRights))
	{
		return array();
	}

	$arDestination = array();
	$arSonetGroups = array();

	$bCheckPermissions = (
		!array_key_exists("CHECK_PERMISSIONS_DEST", $arParams)
		|| $arParams["CHECK_PERMISSIONS_DEST"] !== "N"
	);

	$htmlEncode = (
		!array_key_exists("HTML_ENCODE", $arParams)
		|| $arParams["HTML_ENCODE"] !== "N"
	);

	if (!function_exists("__DestinationRightsSort"))
	{
		function __DestinationRightsSort($a, $b)
		{
			if ($a == $b)
			{
				return 0;
			}

			if (preg_match('/^USd+$/', $a))
			{
				return -1;
			}
			elseif (in_array($a, array("G2", "AU")))
			{
				if (in_array($b, array("G2", "AU")))
				{
					return 0;
				}

				if (preg_match('/^USd+$/', $b))
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^CRMDEALd+$/', $a))
			{
				if (preg_match('/^CRMDEALd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^CRMCONTACTd+$/', $a))
			{
				if (preg_match('/^CRMCONTACTd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^CRMDEALd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^CRMCOMPANYd+$/', $a))
			{
				if (preg_match('/^CRMCOMPANYd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^CRMLEADd+$/', $a))
			{
				if (preg_match('/^CRMLEADd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^CRMDYNAMICd+ENTITYd+$/', $a))
			{
				if (preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $a))
			{
				if (preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
					|| preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^SGd+_'.SONET_ROLES_USER.'$/', $a))
			{
				if (preg_match('/^SGd+_'.SONET_ROLES_USER.'$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
					|| preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b)
					|| preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^SGd+_'.SONET_ROLES_MODERATOR.'$/', $a))
			{
				if (preg_match('/^SGd+_'.SONET_ROLES_MODERATOR.'$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^SGd+_'.SONET_ROLES_USER.'$/', $b)
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
					|| preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b)
					|| preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^SGd+_'.SONET_ROLES_OWNER.'$/', $a))
			{
				if (preg_match('/^SGd+_'.SONET_ROLES_OWNER.'$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^SGd+_'.SONET_ROLES_USER.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_MODERATOR.'$/', $b)
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
					|| preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b)
					|| preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^Dd+$/', $a))
			{
				if (preg_match('/^Dd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^SGd+_'.SONET_ROLES_USER.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_MODERATOR.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_OWNER.'$/', $b)
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
					|| preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b)
					|| preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif (preg_match('/^DRd+$/', $a))
			{
				if (preg_match('/^DRd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, array("G2", "AU"))
					|| preg_match('/^SGd+_'.SONET_ROLES_USER.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_MODERATOR.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_OWNER.'$/', $b)
					|| preg_match('/^Dd+$/', $b)
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
					|| preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b)
					|| preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif(preg_match('/^Ud+$/', $a))
			{
				if (preg_match('/^Ud+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, [ "G2", "AU" ])
					|| preg_match('/^SGd+_'.SONET_ROLES_USER.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_MODERATOR.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_OWNER.'$/', $b)
					|| preg_match('/^Dd+$/', $b)
					|| preg_match('/^DRd+$/', $b)
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
					|| preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b)
					|| preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			elseif(preg_match('/^Gd+$/', $a))
			{
				if (preg_match('/^Gd+$/', $b))
				{
					return 0;
				}

				if (
					preg_match('/^USd+$/', $b)
					|| in_array($b, [ "G2", "AU" ])
					|| preg_match('/^SGd+_'.SONET_ROLES_USER.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_MODERATOR.'$/', $b)
					|| preg_match('/^SGd+_'.SONET_ROLES_OWNER.'$/', $b)
					|| preg_match('/^Dd+$/', $b)
					|| preg_match('/^DRd+$/', $b)
					|| preg_match('/^Ud+$/', $b)
					|| preg_match('/^CRMDEALd+$/', $b)
					|| preg_match('/^CRMCONTACTd+$/', $b)
					|| preg_match('/^CRMCOMPANYd+$/', $b)
					|| preg_match('/^CRMLEADd+$/', $b)
					|| preg_match('/^CRMDYNAMICd+ENTITYd+$/', $b)
					|| preg_match('/^CRMSUSDYNAMICd+ENTITYd+$/', $b)
				)
				{
					return 1;
				}

				return -1;
			}
			else
			{
				return 0;
			}
		}
	}

	$arRights = array_unique($arRights);
	usort($arRights, "__DestinationRightsSort");

	$cnt = 0;
	$bAll = false;
	$bJustCount = false;

	$arGroupIdToGet = array();
	$arUserIdToGet = array();
	$arDepartmentIdToGet = array();
	$arSonetGroupIdToGet = array();

	$avatarSize = (isset($arParams['AVATAR_SIZE']) ? (int)$arParams['AVATAR_SIZE'] : 100);

	$arParams["DESTINATION_LIMIT"] = !isset($arParams["DESTINATION_LIMIT"]) || intval($arParams["DESTINATION_LIMIT"]) <= 0 ? 3 : $arParams["DESTINATION_LIMIT"];

	$arModuleEvents = array();
	$db_events = GetModuleEvents("socialnetwork", "OnSocNetLogFormatDestination");
	while ($arEvent = $db_events->Fetch())
	{
		$arModuleEvents[] = $arEvent;
	}

	foreach ($arRights as $right_tmp)
	{
		if ($cnt >= $arParams["DESTINATION_LIMIT"])
		{
			$bJustCount = true;
		}

		if (
			$right_tmp === "G1"
			&& count($arRights) > 1
		)
		{
			continue;
		}

		if (
			preg_match('/^USd+$/', $right_tmp, $matches)
			|| in_array($right_tmp, array("G2", "AU"))
		)
		{
			if ($bAll)
			{
				continue;
			}

			if (
				isset($arParams["USE_ALL_DESTINATION"])
				&& $arParams["USE_ALL_DESTINATION"]
				&& in_array($right_tmp, array("G2", "AU"))
			)
			{
				continue;
			}

			if (!$bJustCount)
			{
				$destinationTitle = (
					ModuleManager::isModuleInstalled('intranet')
						? GetMessage("SONET_GL_DESTINATION_G2")
						: GetMessage("SONET_GL_DESTINATION_G2_BSM")
				);
				$arDestination[] = array(
					"STYLE" => "all-users",
					"TITLE" => ($htmlEncode ? htmlspecialcharsEx($destinationTitle) : $destinationTitle)
				);
			}

			$bAll = true;
			$cnt++;
		}
		elseif (preg_match('/^G(d+)$/', $right_tmp, $matches))
		{
			$cnt++;
			if (!$bJustCount)
			{
				$arGroupIdToGet[] = $matches[1];
			}
		}
		elseif (preg_match('/^U(d+)$/', $right_tmp, $matches))
		{
			if (
				array_key_exists("CREATED_BY", $arParams)
				&& intval($arParams["CREATED_BY"]) > 0
				&& $arParams["CREATED_BY"] == $matches[1]
			)
			{
				continue;
			}

			$cnt++;
			if (!$bJustCount)
			{
				$arUserIdToGet[] = $matches[1];
			}
		}
		elseif (
			(
				preg_match('/^D(d+)$/', $right_tmp, $matches)
				|| preg_match('/^DR(d+)$/', $right_tmp, $matches)
			)
			&& CModule::IncludeModule("iblock")
		)
		{
			$cnt++;
			if (!$bJustCount)
			{
				$arDepartmentIdToGet[] = $matches[1];
			}
		}
		elseif (
			preg_match('/^SG(d+)_'.SONET_ROLES_USER.'$/', $right_tmp, $matches)
			|| preg_match('/^SG(d+)$/', $right_tmp, $matches)
		)
		{
			if (
				array_key_exists($matches[1], $arSonetGroups)
				&& is_array($arSonetGroups[$matches[1]])
				&& in_array(SONET_ROLES_USER, $arSonetGroups[$matches[1]])
			)
			{
				continue;
			}

			$cnt++;
			if (!$bJustCount)
			{
				// already cached
				$workgroupFields = CSocNetGroup::getById($matches[1], $bCheckPermissions);
				if ($workgroupFields)
				{
					$avatarUrl = (
						isset($arParams['GET_AVATARS']) && (bool)$arParams['GET_AVATARS']
							? self::getResizedAvatarUrl([
								'fileId' => (int)$workgroupFields['IMAGE_ID'],
								'avatarSize' => $avatarSize,
							])
							: ''
					);
					$arDestination[] = array(
						"TYPE" => "SG",
						"ID" => $workgroupFields["ID"],
						"STYLE" => "sonetgroups",
						"TITLE" => ($htmlEncode ?
							$workgroupFields["NAME"]
							: htmlspecialcharsback($workgroupFields["NAME"])
						),
						"URL" => str_replace(
							"#group_id#",
							$workgroupFields["ID"],
							$arParams["PATH_TO_GROUP"] ?? ''
						),
						"IS_EXTRANET" => (
							is_array($GLOBALS["arExtranetGroupID"] ?? null)
							&& in_array($workgroupFields["ID"], $GLOBALS["arExtranetGroupID"])
								? "Y"
								: "N"
						),
						'AVATAR' => $avatarUrl,
					);

					if (!array_key_exists($workgroupFields["ID"], $arSonetGroups))
					{
						$arSonetGroups[$workgroupFields["ID"]] = array();
					}
					$arSonetGroups[$workgroupFields["ID"]][] = SONET_ROLES_USER;
				}
			}
		}
		elseif (preg_match('/^SG(d+)_'.SONET_ROLES_MODERATOR.'$/', $right_tmp, $matches))
		{
			if (!in_array("SG".$matches[1]."_".SONET_ROLES_USER, $arRights))
			{
				$cnt++;
				if (!$bJustCount)
				{
					$workgroupFields = CSocNetGroup::getById($matches[1], $bCheckPermissions);
					if ($workgroupFields)
					{
						$avatarUrl = (
							isset($arParams['GET_AVATARS']) && (bool)$arParams['GET_AVATARS']
								? self::getResizedAvatarUrl([
									'fileId' => (int)$workgroupFields['IMAGE_ID'],
									'avatarSize' => $avatarSize,
								])
								: ''
						);

						$arDestination[] = array(
							"TYPE" => "SG",
							"ID" => $workgroupFields["ID"],
							"STYLE" => "sonetgroups",
							"TITLE" => ($htmlEncode ? $workgroupFields["NAME"] : htmlspecialcharsback($workgroupFields["NAME"])).GetMessage("SONET_GL_DESTINATION_SG_MODERATOR"),
							"URL" => str_replace("#group_id#", $workgroupFields["ID"], $arParams["PATH_TO_GROUP"]),
							"IS_EXTRANET" => (is_array($GLOBALS["arExtranetGroupID"]) && in_array($workgroupFields["ID"], $GLOBALS["arExtranetGroupID"]) ? "Y" : "N"),
							'AVATAR' => $avatarUrl,
						);

						if (!array_key_exists($workgroupFields["ID"], $arSonetGroups))
						{
							$arSonetGroups[$workgroupFields["ID"]] = array();
						}
						$arSonetGroups[$workgroupFields["ID"]][] = SONET_ROLES_MODERATOR;
					}
				}
			}
		}
		elseif (preg_match('/^SG(d+)_'.SONET_ROLES_OWNER.'$/', $right_tmp, $matches))
		{
			if (!in_array("SG".$matches[1]."_".SONET_ROLES_USER, $arRights) && !in_array("SG".$matches[1]."_".SONET_ROLES_MODERATOR, $arRights))
			{
				$cnt++;
				if (!$bJustCount)
				{
					$workgroupFields = CSocNetGroup::getById($matches[1], $bCheckPermissions);
					if ($workgroupFields)
					{
						$avatarUrl = (
							isset($arParams['GET_AVATARS']) && (bool)$arParams['GET_AVATARS']
								? self::getResizedAvatarUrl([
									'fileId' => (int)$workgroupFields['IMAGE_ID'],
									'avatarSize' => $avatarSize,
								])
								: ''
						);

						$arDestination[] = array(
							"TYPE" => "SG",
							"ID" => $workgroupFields["ID"],
							"STYLE" => "sonetgroups",
							"TITLE" => ($htmlEncode ? $workgroupFields["NAME"] : htmlspecialcharsback($workgroupFields["NAME"])).GetMessage("SONET_GL_DESTINATION_SG_OWNER"),
							"URL" => str_replace(
								"#group_id#",
								$workgroupFields["ID"],
								$arParams["PATH_TO_GROUP"] ?? ''
							),
							"IS_EXTRANET" => (
								is_array($GLOBALS["arExtranetGroupID"] ?? null)
								&& in_array($workgroupFields["ID"], $GLOBALS["arExtranetGroupID"])
									? "Y"
									: "N"
							),
							'AVATAR' => $avatarUrl,
						);

						if (!array_key_exists($workgroupFields["ID"], $arSonetGroups))
						{
							$arSonetGroups[$workgroupFields["ID"]] = array();
						}
						$arSonetGroups[$workgroupFields["ID"]][] = SONET_ROLES_OWNER;
					}
				}
			}
		}
		else
		{
			$cnt++;
			if (!$bJustCount)
			{
				foreach ($arModuleEvents as $arEvent)
				{
					ExecuteModuleEventEx($arEvent, array(&$arDestination, $right_tmp, $arRights, $arParams, $bCheckPermissions));
				}
			}
		}
	}

	if (!empty($arGroupIdToGet))
	{
		$rsGroupTmp = BitrixMainGroupTable::getList([
			'select' => [ 'ID', 'NAME' ],
			'filter' => [
				'ID' => $arGroupIdToGet
			],
		]);

		while ($groupFields = $rsGroupTmp->fetch())
		{
			$arDestination[] = array(
				"TYPE" => "G",
				"ID" => $groupFields["ID"],
				"STYLE" => "groups",
				"TITLE" => ($htmlEncode ? htmlspecialcharsEx($groupFields["NAME"]) : $groupFields["NAME"]),
				"URL" => "",
			);
		}
	}

	if (!empty($arUserIdToGet))
	{
		$select = [ 'ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL', 'PERSONAL_PHOTO' ];
		if (ModuleManager::isModuleInstalled('mail'))
		{
			$select[] = 'EXTERNAL_AUTH_ID';
		}
		if (ModuleManager::isModuleInstalled('crm'))
		{
			$select[] = 'UF_USER_CRM_ENTITY';
		}

		$rsUserTmp = BitrixMainUserTable::getList(array(
			'order' => array(),
			'filter' => array(
				"ID" => $arUserIdToGet
			),
			'select' => $select
		));

		while ($arUserTmp = $rsUserTmp->fetch())
		{
			$avatarUrl = (
				isset($arParams['GET_AVATARS']) && (bool)$arParams['GET_AVATARS']
					? self::getResizedAvatarUrl([
						'fileId' => (int)$arUserTmp['PERSONAL_PHOTO'],
						'avatarSize' => $avatarSize,
					])
					: ''
			);

			$isEmail = (isset($arUserTmp['EXTERNAL_AUTH_ID']) && $arUserTmp['EXTERNAL_AUTH_ID'] === 'email');
			$url = str_replace("#user_id#", $arUserTmp["ID"], $arParams["PATH_TO_USER"] ?? '');
			if (
				$isEmail
				&& !empty($arParams['LOG_ID'])
				&& (int)$arParams['LOG_ID'] > 0
			)
			{
				$url = (new BitrixMainWebUri($url))->addParams([
					'entityType' => 'LOG_ENTRY',
					'entityId' => (int)$arParams['LOG_ID'],
				])->getUri();
			}

			$arDestination[] = [
				"TYPE" => "U",
				"ID" => $arUserTmp["ID"],
				"STYLE" => "users",
				"TITLE" => CUser::FormatName($arParams["NAME_TEMPLATE"], $arUserTmp, ($arParams["SHOW_LOGIN"] === "Y"), $htmlEncode),
				'SHORT_TITLE' => trim($htmlEncode ? htmlspecialcharsEx($arUserTmp['NAME']) : $arUserTmp['NAME']),
				'URL' => $url,
				"IS_EXTRANET" => (isset($GLOBALS["arExtranetUserID"]) && is_array($GLOBALS["arExtranetUserID"]) && in_array($arUserTmp["ID"], $GLOBALS["arExtranetUserID"]) ? "Y" : "N"),
				'IS_EMAIL' => ($isEmail ? 'Y' : 'N'),
				"CRM_ENTITY" => (!empty($arUserTmp["UF_USER_CRM_ENTITY"]) ? $arUserTmp["UF_USER_CRM_ENTITY"] : false),
				'AVATAR' => $avatarUrl,
			];
		}
	}

	if (!empty($arDepartmentIdToGet))
	{
		foreach ($arDepartmentIdToGet as $key => $value)
		{
			if (array_key_exists($value, $arDepartmentsStaticCache))
			{
				$arDestination[] = array(
					"TYPE" => "D",
					"ID" => $arDepartmentsStaticCache[$value]["ID"],
					"STYLE" => "department",
					"TITLE" => $arDepartmentsStaticCache[$value]["NAME"],
					"URL" => str_replace(array("#ID#", "#id#"), $arDepartmentsStaticCache[$value]["ID"], $arParams["PATH_TO_CONPANY_DEPARTMENT"])
				);
				unset($arDepartmentIdToGet[$key]);
			}
		}

		if (!empty($arDepartmentIdToGet))
		{
			$rsDepartmentTmp = CIBlockSection::GetList(
				array(),
				array(
					"ID" => $arDepartmentIdToGet
				),
				false,
				array('ID', 'NAME')
			);

			while ($arDepartmentTmp = $rsDepartmentTmp->fetch())
			{
				$arDestination[] = array(
					"TYPE" => "D",
					"ID" => $arDepartmentTmp["ID"],
					"STYLE" => "department",
					"TITLE" => ($htmlEncode ? htmlspecialcharsEx($arDepartmentTmp["NAME"]) : $arDepartmentTmp["NAME"]),
					"URL" => str_replace(array("#ID#", "#id#"), $arDepartmentTmp["ID"], $arParams["PATH_TO_CONPANY_DEPARTMENT"])
				);
				$arDepartmentsStaticCache[$arDepartmentTmp["ID"]] = $arDepartmentTmp;
			}
		}
	}

	$db_events = GetModuleEvents("socialnetwork", "OnAfterSocNetLogFormatDestination");
	while ($arEvent = $db_events->Fetch())
	{
		ExecuteModuleEventEx($arEvent, array(&$arDestination));
	}

	if ($cnt > $arParams["DESTINATION_LIMIT"])
	{
		$iMoreCount = $cnt - $arParams["DESTINATION_LIMIT"];
	}

	return $arDestination;
}