- Модуль: 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;
}