• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/userfieldenum.php
  • Класс: CUserFieldEnum
  • Вызов: CUserFieldEnum::SetEnumValues
function SetEnumValues($FIELD_ID, $values)
{
	global $DB, $CACHE_MANAGER, $APPLICATION;
	$aMsg = array();
	$originalValues = $values;

	foreach($values as $i => $row)
	{
		foreach($row as $key => $val)
		{
			if(strncmp($key, "~", 1) === 0)
			{
				unset($values[$i][$key]);
			}
		}
	}

	/*check unique XML_ID*/
	$arAdded = array();
	$salt = RandString(8);
	foreach($values as $key => $value)
	{
		if(strncmp($key, "n", 1) === 0 && (!isset($value["DEL"]) || $value["DEL"] != "Y") && (string)$value["VALUE"] <> '')
		{
			if(!isset($value["XML_ID"]) || $value["XML_ID"] == '')
			{
				$values[$key]["XML_ID"] = $value["XML_ID"] = md5($salt . $value["VALUE"]);
			}

			if(array_key_exists($value["XML_ID"], $arAdded))
			{
				$aMsg[] = array("text" => GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#" => $value["XML_ID"])));
			}
			else
			{
				$rsEnum = $this->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID, "XML_ID" => $value["XML_ID"]));
				if($arEnum = $rsEnum->Fetch())
				{
					$aMsg[] = array("text" => GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#" => $value["XML_ID"])));
				}
				else
				{
					if (!isset($arAdded[$value["XML_ID"]]))
					{
						$arAdded[$value["XML_ID"]] = 0;
					}

					$arAdded[$value["XML_ID"]]++;
				}
			}
		}
	}

	$previousValues = array();

	$rsEnum = $this->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID));
	while($arEnum = $rsEnum->Fetch())
	{
		$previousValues[$arEnum["ID"]] = $arEnum;

		if(array_key_exists($arEnum["ID"], $values))
		{
			$value = $values[$arEnum["ID"]];
			if((string)$value["VALUE"] == '' || $value["DEL"] == "Y")
			{
			}
			elseif(
				$arEnum["VALUE"] != $value["VALUE"] ||
				$arEnum["DEF"] != $value["DEF"] ||
				$arEnum["SORT"] != $value["SORT"] ||
				$arEnum["XML_ID"] != $value["XML_ID"]
			)
			{
				if(!isset($value["XML_ID"]) || $value["XML_ID"] == '')
					$value["XML_ID"] = md5($value["VALUE"]);

				$bUnique = true;
				if($arEnum["XML_ID"] != $value["XML_ID"])
				{
					if(array_key_exists($value["XML_ID"], $arAdded))
					{
						$aMsg[] = array("text" => GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#" => $value["XML_ID"])));
						$bUnique = false;
					}
					else
					{
						$rsEnumXmlId = $this->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID, "XML_ID" => $value["XML_ID"]));
						if($arEnumXmlId = $rsEnumXmlId->Fetch())
						{
							$aMsg[] = array("text" => GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#" => $value["XML_ID"])));
							$bUnique = false;
						}
					}
				}
				if($bUnique)
				{
					$arAdded[$value["XML_ID"]]++;
				}
			}
		}
	}

	if(!empty($aMsg))
	{
		$e = new CAdminException($aMsg);
		$APPLICATION->ThrowException($e);
		return false;
	}

	if(CACHED_b_user_field_enum !== false)
		$CACHE_MANAGER->CleanDir("b_user_field_enum");

	foreach($values as $key => $value)
	{
		if(strncmp($key, "n", 1) === 0 && (!isset($value["DEL"]) || $value["DEL"] != "Y") && (string)$value["VALUE"] <> '')
		{
			if(!isset($value["XML_ID"]) || $value["XML_ID"] == '')
				$value["XML_ID"] = md5($value["VALUE"]);

			if($value["DEF"] != "Y")
				$value["DEF"] = "N";

			$value["USER_FIELD_ID"] = $FIELD_ID;
			$id = $DB->Add("b_user_field_enum", $value);

			$originalValues[$id] = $originalValues[$key];
			unset($originalValues[$key], $values[$key]);
		}
	}
	$rsEnum = $this->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID));
	while($arEnum = $rsEnum->Fetch())
	{
		if(array_key_exists($arEnum["ID"], $values))
		{
			$value = $values[$arEnum["ID"]];
			if((string)$value["VALUE"] == '' || $value["DEL"] == "Y")
			{
				$DB->Query("DELETE FROM b_user_field_enum WHERE ID = " . $arEnum["ID"], false, "FILE: " . __FILE__ . "
LINE: " . __LINE__); } elseif($arEnum["VALUE"] != $value["VALUE"] || $arEnum["DEF"] != $value["DEF"] || $arEnum["SORT"] != $value["SORT"] || $arEnum["XML_ID"] != $value["XML_ID"]) { if(!isset($value["XML_ID"]) || $value["XML_ID"] == '') $value["XML_ID"] = md5($value["VALUE"]); unset($value["ID"]); $strUpdate = $DB->PrepareUpdate("b_user_field_enum", $value); if($strUpdate <> '') $DB->Query("UPDATE b_user_field_enum SET " . $strUpdate . " WHERE ID = " . $arEnum["ID"], false, "FILE: " . __FILE__ . "
LINE: " . __LINE__); } } } if(CACHED_b_user_field_enum !== false) $CACHE_MANAGER->CleanDir("b_user_field_enum"); $event = new BitrixMainEvent('main', 'onAfterSetEnumValues', [$FIELD_ID, $originalValues, $previousValues]); $event->send(); return true; }