- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/usertypesql.php
- Класс: CUserTypeSQL
- Вызов: CUserTypeSQL::SetEntity
function SetEntity($entity_id, $ID)
{
global $USER_FIELD_MANAGER;
$this->user_fields = $USER_FIELD_MANAGER->GetUserFields($entity_id);
$this->entity_id = mb_strtolower(preg_replace("/[^0-9A-Z_]+/", "", $entity_id));
$this->select = array();
$this->filter = array();
$this->order = array();
$this->obWhere = new CSQLWhere;
$num = 0;
$arFields = array();
foreach($this->user_fields as $FIELD_NAME => $arField)
{
if($arField["MULTIPLE"] == "Y")
$num++;
$table_alias = $arField["MULTIPLE"] == "N" ? $this->table_alias : $this->table_alias . $num;
$arType = $this->user_fields[$FIELD_NAME]["USER_TYPE"];
if($arField["MULTIPLE"] == "N")
$TABLE_FIELD_NAME = $table_alias . "." . $FIELD_NAME;
elseif($arType["BASE_TYPE"] == "int")
$TABLE_FIELD_NAME = $table_alias . ".VALUE_INT";
elseif($arType["BASE_TYPE"] == "file")
$TABLE_FIELD_NAME = $table_alias . ".VALUE_INT";
elseif($arType["BASE_TYPE"] == "enum")
$TABLE_FIELD_NAME = $table_alias . ".VALUE_INT";
elseif($arType["BASE_TYPE"] == "double")
$TABLE_FIELD_NAME = $table_alias . ".VALUE_DOUBLE";
elseif($arType["BASE_TYPE"] == "datetime")
$TABLE_FIELD_NAME = $table_alias . ".VALUE_DATE";
else
$TABLE_FIELD_NAME = $table_alias . ".VALUE";
$arFields[$FIELD_NAME] = array(
"TABLE_ALIAS" => $table_alias,
"FIELD_NAME" => $TABLE_FIELD_NAME,
"FIELD_TYPE" => $arType["BASE_TYPE"],
"USER_TYPE_ID" => $arType["USER_TYPE_ID"],
"MULTIPLE" => $arField["MULTIPLE"],
"JOIN" => $arField["MULTIPLE"] == "N" ?
"INNER JOIN b_uts_" . $this->entity_id . " " . $table_alias . " ON " . $table_alias . ".VALUE_ID = " . $ID :
"INNER JOIN b_utm_" . $this->entity_id . " " . $table_alias . " ON " . $table_alias . ".FIELD_ID = " . $arField["ID"] . " AND " . $table_alias . ".VALUE_ID = " . $ID,
"LEFT_JOIN" => $arField["MULTIPLE"] == "N" ?
"LEFT JOIN b_uts_" . $this->entity_id . " " . $table_alias . " ON " . $table_alias . ".VALUE_ID = " . $ID :
"LEFT JOIN b_utm_" . $this->entity_id . " " . $table_alias . " ON " . $table_alias . ".FIELD_ID = " . $arField["ID"] . " AND " . $table_alias . ".VALUE_ID = " . $ID,
);
if($arType["BASE_TYPE"] == "enum")
{
$arFields[$FIELD_NAME . "_VALUE"] = array(
"TABLE_ALIAS" => $table_alias . "EN",
"FIELD_NAME" => $table_alias . "EN.VALUE",
"FIELD_TYPE" => "string",
"MULTIPLE" => $arField["MULTIPLE"],
"JOIN" => $arField["MULTIPLE"] == "N" ?
"INNER JOIN b_uts_" . $this->entity_id . " " . $table_alias . "E ON " . $table_alias . "E.VALUE_ID = " . $ID . "
INNER JOIN b_user_field_enum " . $table_alias . "EN ON " . $table_alias . "EN.ID = " . $table_alias . "E." . $FIELD_NAME :
"INNER JOIN b_utm_" . $this->entity_id . " " . $table_alias . "E ON " . $table_alias . "E.FIELD_ID = " . $arField["ID"] . " AND " . $table_alias . "E.VALUE_ID = " . $ID . "
INNER JOIN b_user_field_enum " . $table_alias . "EN ON " . $table_alias . "EN.ID = " . $table_alias . "E.VALUE_INT",
"LEFT_JOIN" => $arField["MULTIPLE"] == "N" ?
"LEFT JOIN b_uts_" . $this->entity_id . " " . $table_alias . "E ON " . $table_alias . "E.VALUE_ID = " . $ID . "
LEFT JOIN b_user_field_enum " . $table_alias . "EN ON " . $table_alias . "EN.ID = " . $table_alias . "E." . $FIELD_NAME :
"LEFT JOIN b_utm_" . $this->entity_id . " " . $table_alias . "E ON " . $table_alias . "E.FIELD_ID = " . $arField["ID"] . " AND " . $table_alias . "E.VALUE_ID = " . $ID . "
LEFT JOIN b_user_field_enum " . $table_alias . "EN ON " . $table_alias . "EN.ID = " . $table_alias . "E.VALUE_INT",
);
}
}
$this->obWhere->SetFields($arFields);
}