• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/authproviders.php
  • Класс: CSocNetGroupAuthProvider
  • Вызов: CSocNetGroupAuthProvider::GetFormHtml
public function GetFormHtml($arParams=false)
{
	global $USER;

	if (
		is_array($arParams["socnetgroups"] ?? null)
		&& $arParams["socnetgroups"]["disabled"] == "true"
	)
	{
		return false;
	}

	$currElements = '';
	if (
		is_array($arParams[$this->id] ?? null)
		&& ($group_id = intval($arParams[$this->id]["group_id"])) > 0
	)
	{
		$arFinderParams = Array(
			"PROVIDER" => $this->id,
			"TYPE" => 4,
		);

		$arFilter = array(
			"ID" => $group_id,
			"ACTIVE" => "Y"
		);
		if (!CSocNetUser::IsCurrentUserModuleAdmin($arParams["SITE_ID"]))
		{
			$arFilter["CHECK_PERMISSIONS"] = $USER->GetID();
		}

		$rsGroups = CSocNetGroup::GetList(array(), $arFilter);
		if($arGroup = $rsGroups->Fetch())
		{
			$arItem = Array(
				"ID" => "SG".$arGroup['ID'],
				"AVATAR" => '/bitrix/js/main/core/images/access/avatar-user-everyone.png',
				"NAME" => Emoji::decode($arGroup['NAME']),
				"DESC" => Emoji::decode($arGroup['DESCRIPTION']),
				"OPEN" => "Y",
				"CHECKBOX" => array(
					"#ID#_A" => GetMessage("authprov_sg_a"),
					"#ID#_E" => GetMessage("authprov_sg_e"),
					"#ID#_K" => GetMessage("authprov_sg_k"),
				),
			);
			if($arGroup["IMAGE_ID"])
			{
				$imageFile = CFile::GetFileArray($arGroup["IMAGE_ID"]);
				if ($imageFile !== false)
				{
					$arFileTmp = CFile::ResizeImageGet(
						$imageFile,
						array("width" => 30, "height" => 30),
						BX_RESIZE_IMAGE_PROPORTIONAL,
						false
					);
					$arItem["AVATAR"] = $arFileTmp["src"];
				}
			}
			$currElements .= CFinder::GetFinderItem($arFinderParams, $arItem);
		}
	}

	$elements = "";
	$arFinderParams = Array(
		"PROVIDER" => $this->id,
		"TYPE" => 3,
	);

	$arLRU = CAccess::GetLastRecentlyUsed($this->id);

	if (!empty($arLRU))
	{
		$arLast = array();
		$arLastID = array();
		$arElements = array();

		foreach($arLRU as $val)
		{
			if (preg_match('/^SG([0-9]+)_([A-Z])/', $val, $match))
			{
				$arLast[$match[2]][$match[1]] = $match[1];
				$arLastID[$match[1]] = $match[1];
			}
		}

		if (!empty($arLastID))
		{
			$arFilter = array(
				"ID" => $arLastID,
				"ACTIVE" => "Y"
			);
			if($arParams["SITE_ID"] <> '')
			{
				$arFilter["SITE_ID"] = $arParams["SITE_ID"];
			}
			if(!CSocNetUser::IsCurrentUserModuleAdmin($arParams["SITE_ID"]))
			{
				$arFilter["CHECK_PERMISSIONS"] = $USER->GetID();
			}

			$rsGroups = CSocNetGroup::GetList(array("NAME" => "ASC"), $arFilter);
			while($arGroup = $rsGroups->Fetch())
			{
				$arItem = Array(
					"ID" => $arGroup['ID'],
					"AVATAR" => '/bitrix/js/main/core/images/access/avatar-user-everyone.png',
					"NAME" => Emoji::decode($arGroup['NAME']),
					"DESC" => Emoji::decode($arGroup['DESCRIPTION']),
				);
				if($arGroup["IMAGE_ID"])
				{
					$imageFile = CFile::GetFileArray($arGroup["IMAGE_ID"]);
					if ($imageFile !== false)
					{
						$arFileTmp = CFile::ResizeImageGet(
							$imageFile,
							array("width" => 30, "height" => 30),
							BX_RESIZE_IMAGE_PROPORTIONAL,
							false
						);
						$arItem["AVATAR"] = $arFileTmp["src"];
					}
				}
				$arElements[$arItem['ID']] = $arItem;
			}

			foreach($arLRU as $val)
			{
				if (preg_match('/^SG([0-9]+)_([A-Z])/', $val, $match))
				{
					if (isset($arElements[$match[1]]))
					{
						$arItem = $arElements[$match[1]];
						if ($match[2] == 'K')
						{
							$arItem['ID'] = 'SG'.$arElements[$match[1]]['ID'].'_K';
							$arItem['NAME'] = $arElements[$match[1]]['NAME'].': '.GetMessage("authprov_sg_k");
						}
						else if ($match[2] == 'E')
						{
							$arItem['ID'] = 'SG'.$arElements[$match[1]]['ID'].'_E';
							$arItem['NAME'] = $arElements[$match[1]]['NAME'].': '.GetMessage("authprov_sg_e");
						}
						else if ($match[2] == 'A')
						{
							$arItem['ID'] = 'SG'.$arElements[$match[1]]['ID'].'_A';
							$arItem['NAME'] = $arElements[$match[1]]['NAME'].': '.GetMessage("authprov_sg_a");
						}
						$elements .= CFinder::GetFinderItem($arFinderParams, $arItem);
					}
				}
			}
		}
	}

	$arFinderParams = Array(
		"PROVIDER" => $this->id,
		"TYPE" => 4,
	);

	$arFilter = array(
		"USER_ID" => $USER->GetID(),
		"<=ROLE" => SONET_ROLES_USER,
		"GROUP_ACTIVE" => "Y"
	);
	if($arParams["SITE_ID"] <> '')
	{
		$arFilter["GROUP_SITE_ID"] = $arParams["SITE_ID"];
	}

	$rsGroups = CSocNetUserToGroup::GetList(
		array("GROUP_NAME" => "ASC"),
		$arFilter,
		false,
		false,
		array("ID", "GROUP_ID", "GROUP_NAME", "GROUP_DESCRIPTION", "GROUP_IMAGE_ID")
	);

	$myElements = '';
	while($arGroup = $rsGroups->Fetch())
	{
		$arItem = Array(
			"ID" => "SG".$arGroup['GROUP_ID'],
			"AVATAR" => $arGroup['GROUP_IMAGE_ID'],
			"NAME" => $arGroup['GROUP_NAME'],
			"DESC" => $arGroup['GROUP_DESCRIPTION'],
			"CHECKBOX" => array(
				"#ID#_A" => GetMessage("authprov_sg_a"),
				"#ID#_E" => GetMessage("authprov_sg_e"),
				"#ID#_K" => GetMessage("authprov_sg_k"),
			),
		);
		if($arGroup["GROUP_IMAGE_ID"])
		{
			$imageFile = CFile::GetFileArray($arGroup["GROUP_IMAGE_ID"]);
			if ($imageFile !== false)
			{
				$arFileTmp = CFile::ResizeImageGet(
					$imageFile,
					array("width" => 30, "height" => 30),
					BX_RESIZE_IMAGE_PROPORTIONAL,
					false
				);
				$arItem["AVATAR"] = $arFileTmp["src"];
			}
		}
		$myElements .= CFinder::GetFinderItem($arFinderParams, $arItem);
	}

	$arPanels = array();
	if($currElements <> '')
	{
		$arPanels[] = array(
			"NAME" => GetMessage("authprov_sg_current"),
			"ELEMENTS" => $currElements,
		);
	}
	$arPanels[] = array(
		"NAME" => GetMessage("authprov_sg_panel_last"),
		"ELEMENTS" => $elements,
	);
	$arPanels[] = array(
		"NAME" => GetMessage("authprov_sg_panel_my_group"),
		"ELEMENTS" => $myElements,
	);
	$arPanels[] = array(
		"NAME" => GetMessage("authprov_sg_panel_search"),
		"ELEMENTS" => CFinder::GetFinderItem(Array("TYPE" => "text"), Array("TEXT" => GetMessage("authprov_sg_panel_search_text"))),
		"SEARCH" => "Y",
	);
	$html = CFinder::GetFinderAppearance($arFinderParams, $arPanels);

	return array("HTML"=>$html, "SELECTED"=>($currElements <> ''));
}