• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/usertypemanager.php
  • Класс: CUserTypeManager
  • Вызов: CUserTypeManager::GetUserFields
function GetUserFields($entity_id, $value_id = 0, $LANG = false, $user_id = false)
{
	$entity_id = preg_replace("/[^0-9A-Z_]+/", "", $entity_id);
	$value_id = intval($value_id);
	$cacheId = $entity_id . "." . $LANG . '.' . (int)$user_id;

	global $DB;

	$result = array();
	if(!array_key_exists($cacheId, $this->arFieldsCache))
	{
		$arFilter = array("ENTITY_ID" => $entity_id);
		if($LANG)
			$arFilter["LANG"] = $LANG;
		$rs = CUserTypeEntity::GetList(array(), $arFilter);
		while($arUserField = $rs->Fetch())
		{
			if($arType = $this->GetUserType($arUserField["USER_TYPE_ID"]))
			{
				if($user_id !== 0	&& is_callable(array($arType["CLASS_NAME"], "checkpermission")))
				{
					if(!call_user_func_array(array($arType["CLASS_NAME"], "checkpermission"), [$arUserField, $user_id]))
						continue;
				}
				$arUserField["USER_TYPE"] = $arType;
				$arUserField["VALUE"] = false;
				if(!is_array($arUserField["SETTINGS"]) || empty($arUserField["SETTINGS"]))
					$arUserField["SETTINGS"] = $this->PrepareSettings(0, $arUserField);
				$result[$arUserField["FIELD_NAME"]] = $arUserField;
			}
		}
		$this->arFieldsCache[$cacheId] = $result;
	}
	else
	{
		$result = $this->arFieldsCache[$cacheId];
	}

	if (!empty($result) && $value_id > 0)
	{
		$valuesGottenByEvent = $this->getUserFieldValuesByEvent($result, $entity_id, $value_id);

		$select = "VALUE_ID";
		foreach($result as $fieldName => $arUserField)
		{
			$result[$fieldName]["ENTITY_VALUE_ID"] = $value_id;

			if (is_array($valuesGottenByEvent))
			{
				$result[$fieldName]["VALUE"] = array_key_exists($fieldName, $valuesGottenByEvent) ? $valuesGottenByEvent[$fieldName] : $result[$fieldName]["VALUE"];
				$result[$fieldName]["CUSTOM_DATA"] = $this->getCustomData($result[$fieldName], $value_id);
			}
			else if ($arUserField["MULTIPLE"] == "N"
				&& is_array($arUserField["USER_TYPE"])
				&& array_key_exists("CLASS_NAME", $arUserField["USER_TYPE"])
				&& is_callable(array($arUserField["USER_TYPE"]["CLASS_NAME"], "FormatField")))
			{
				$select .= ", " . call_user_func_array(array($arUserField["USER_TYPE"]["CLASS_NAME"], "FormatField"), array($arUserField, $fieldName)) . " " . $fieldName;
			}
			else
			{
				$select .= ", " . $fieldName;
			}
		}

		if (is_array($valuesGottenByEvent))
		{
			return $result;
		}

		$rs = $DB->Query("SELECT ".$select." FROM b_uts_".mb_strtolower($entity_id) . " WHERE VALUE_ID = " . $value_id, false, "FILE: " . __FILE__ . "
LINE: " . __LINE__); if($ar = $rs->Fetch()) { foreach($ar as $key => $value) { if(array_key_exists($key, $result)) { if($result[$key]["MULTIPLE"] == "Y") { if(mb_substr($value, 0, 1) !== 'a' && $value > 0) { $value = $this->LoadMultipleValues($result[$key], $value); } else { $value = unserialize($value, ['allowed_classes' => false]); } $result[$key]["VALUE"] = $this->OnAfterFetch($result[$key], $value); } else { $result[$key]["VALUE"] = $this->OnAfterFetch($result[$key], $value); } } } } foreach ($result as $fieldName => $userField) { $result[$fieldName]["CUSTOM_DATA"] = $this->getCustomData($userField, $value_id); } } return $result; }