• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/usertype.php
  • Класс: CAllUserTypeEntity
  • Вызов: CAllUserTypeEntity::Add
function Add($arFields, $bCheckUserType = true)
{
	global $DB, $APPLICATION, $USER_FIELD_MANAGER, $CACHE_MANAGER;

	if(!$this->CheckFields(0, $arFields, $bCheckUserType))
		return false;

	$rs = CUserTypeEntity::GetList(array(), array(
		"ENTITY_ID" => $arFields["ENTITY_ID"],
		"FIELD_NAME" => $arFields["FIELD_NAME"],
	));

	if($rs->Fetch())
	{
		$aMsg = array();
		$aMsg[] = array(
			"id" => "FIELD_NAME",
			"text" => GetMessage("USER_TYPE_ADD_ALREADY_ERROR", array(
				"#FIELD_NAME#" => htmlspecialcharsbx($arFields["FIELD_NAME"]),
				"#ENTITY_ID#" => htmlspecialcharsbx($arFields["ENTITY_ID"]),
			)),
		);
		$e = new CAdminException($aMsg);
		$APPLICATION->ThrowException($e);
		return false;
	}

	unset($arFields["ID"]);
	if(!isset($arFields["SORT"]) || intval($arFields["SORT"]) <= 0)
		$arFields["SORT"] = 100;
	if(!isset($arFields["MULTIPLE"]) || $arFields["MULTIPLE"] !== "Y")
		$arFields["MULTIPLE"] = "N";
	if(!isset($arFields["MANDATORY"]) || $arFields["MANDATORY"] !== "Y")
		$arFields["MANDATORY"] = "N";
	$arFields["SHOW_FILTER"] = mb_substr($arFields["SHOW_FILTER"] ?? '', 0, 1);
	if($arFields["SHOW_FILTER"] == '' || mb_strpos("NIES", $arFields["SHOW_FILTER"]) === false)
		$arFields["SHOW_FILTER"] = "N";
	if(!isset($arFields["SHOW_IN_LIST"]) || $arFields["SHOW_IN_LIST"] !== "N")
		$arFields["SHOW_IN_LIST"] = "Y";
	if(!isset($arFields["EDIT_IN_LIST"]) || $arFields["EDIT_IN_LIST"] !== "N")
		$arFields["EDIT_IN_LIST"] = "Y";
	if(!isset($arFields["IS_SEARCHABLE"]) || $arFields["IS_SEARCHABLE"] !== "Y")
		$arFields["IS_SEARCHABLE"] = "N";

	if(!array_key_exists("SETTINGS", $arFields))
		$arFields["SETTINGS"] = array();
	$arFields["SETTINGS"] = serialize($USER_FIELD_MANAGER->PrepareSettings(0, $arFields, $bCheckUserType));

	/**
	 * events
	 * PROVIDE_STORAGE - use own uf subsystem to store data (uts/utm tables)
	 */
	$commonEventResult = array('PROVIDE_STORAGE' => true);

	foreach(GetModuleEvents("main", "OnBeforeUserTypeAdd", true) as $arEvent)
	{
		$eventResult = ExecuteModuleEventEx($arEvent, array(&$arFields));

		if($eventResult === false)
		{
			if($e = $APPLICATION->GetException())
			{
				return false;
			}

			$aMsg = array();
			$aMsg[] = array(
				"id" => "FIELD_NAME",
				"text" => GetMessage("USER_TYPE_ADD_ERROR", array(
					"#FIELD_NAME#" => htmlspecialcharsbx($arFields["FIELD_NAME"]),
					"#ENTITY_ID#" => htmlspecialcharsbx($arFields["ENTITY_ID"]),
				))
			);

			$e = new CAdminException($aMsg);
			$APPLICATION->ThrowException($e);

			return false;
		}
		elseif(is_array($eventResult))
		{
			$commonEventResult = array_merge($commonEventResult, $eventResult);
		}
	}

	if(is_object($USER_FIELD_MANAGER))
		$USER_FIELD_MANAGER->CleanCache();

	if($commonEventResult['PROVIDE_STORAGE'])
	{
		if(!$this->CreatePropertyTables($arFields["ENTITY_ID"]))
			return false;

		$strType = $USER_FIELD_MANAGER->getUtsDBColumnType($arFields);

		if(!$strType)
		{
			$aMsg = array();
			$aMsg[] = array(
				"id" => "FIELD_NAME",
				"text" => GetMessage("USER_TYPE_ADD_ERROR", array(
					"#FIELD_NAME#" => htmlspecialcharsbx($arFields["FIELD_NAME"]),
					"#ENTITY_ID#" => htmlspecialcharsbx($arFields["ENTITY_ID"]),
				)),
			);
			$e = new CAdminException($aMsg);
			$APPLICATION->ThrowException($e);
			return false;
		}

		$tableName = 'b_uts_' . mb_strtolower($arFields['ENTITY_ID']);
		$tableFields = $DB->GetTableFields($tableName);
		if (!array_key_exists($arFields['FIELD_NAME'], $tableFields))
		{
			$ddl = 'ALTER TABLE ' . $tableName . ' ADD ' . $arFields['FIELD_NAME'] . ' ' . $strType;
			if (!$DB->DDL($ddl, true, "FILE: " . __FILE__ . "
LINE: " . __LINE__)) { $aMsg = array(); $aMsg[] = array( "id" => "FIELD_NAME", "text" => GetMessage("USER_TYPE_ADD_ERROR", array( "#FIELD_NAME#" => htmlspecialcharsbx($arFields["FIELD_NAME"]), "#ENTITY_ID#" => htmlspecialcharsbx($arFields["ENTITY_ID"]), )) ); $e = new CAdminException($aMsg); $APPLICATION->ThrowException($e); return false; } } } if($ID = $DB->Add("b_user_field", $arFields, array("SETTINGS"))) { if(CACHED_b_user_field !== false) $CACHE_MANAGER->CleanDir("b_user_field"); $arLabels = array("EDIT_FORM_LABEL", "LIST_COLUMN_LABEL", "LIST_FILTER_LABEL", "ERROR_MESSAGE", "HELP_MESSAGE"); $arLangs = array(); foreach($arLabels as $label) { if(isset($arFields[$label]) && is_array($arFields[$label])) { foreach($arFields[$label] as $lang => $value) { $arLangs[$lang][$label] = $value; } } } foreach($arLangs as $lang => $arLangFields) { $arLangFields["USER_FIELD_ID"] = $ID; $arLangFields["LANGUAGE_ID"] = $lang; $arInsert = $DB->PrepareInsert("b_user_field_lang", $arLangFields); $DB->Query("INSERT INTO b_user_field_lang (".$arInsert[0].") VALUES (".$arInsert[1].")"); } } // post event $arFields['ID'] = $ID; foreach(GetModuleEvents("main", "OnAfterUserTypeAdd", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($arFields)); } return $ID; }