• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock.php
  • Класс: CAllIBlock
  • Вызов: CAllIBlock::Add
function Add($arFields)
{
	/** @global CCacheManager $CACHE_MANAGER */
	global $CACHE_MANAGER;
	/** @global CDatabase $DB */
	global $DB;
	$SAVED_PICTURE = null;

	//Default Yes
	$arFields["ACTIVE"] = isset($arFields["ACTIVE"]) && $arFields["ACTIVE"] === "N"? "N": "Y";
	$arFields["WORKFLOW"] = isset($arFields["WORKFLOW"]) && $arFields["WORKFLOW"] === "N"? "N": "Y";
	$arFields["INDEX_ELEMENT"] = isset($arFields["INDEX_ELEMENT"]) && $arFields["INDEX_ELEMENT"] === "N"? "N": "Y";
	//Default No
	$arFields["BIZPROC"] = isset($arFields["BIZPROC"]) && $arFields["BIZPROC"] === "Y"? "Y": "N";
	$arFields["INDEX_SECTION"] = isset($arFields["INDEX_SECTION"]) && $arFields["INDEX_SECTION"] === "Y"? "Y": "N";

	if(!isset($arFields["SECTION_CHOOSER"]))
		$arFields["SECTION_CHOOSER"] = "L";
	elseif($arFields["SECTION_CHOOSER"] !== "D" && $arFields["SECTION_CHOOSER"] !== "P")
		$arFields["SECTION_CHOOSER"] = "L";

	if(!isset($arFields["DESCRIPTION_TYPE"]) || $arFields["DESCRIPTION_TYPE"] !== "html")
		$arFields["DESCRIPTION_TYPE"] = "text";

	$arFields["VERSION"] = isset($arFields["VERSION"]) && intval($arFields["VERSION"]) === 2? "2": "1";

	if(isset($arFields["RIGHTS_MODE"]))
		$arFields["RIGHTS_MODE"] =  $arFields["RIGHTS_MODE"] === "E"? "E": "S";
	elseif(isset($arFields["RIGHTS"]))
		$arFields["RIGHTS_MODE"] = "E";
	else
		$arFields["RIGHTS_MODE"] = "S";

	if (array_key_exists("PICTURE", $arFields))
	{
		if(
			!is_array($arFields["PICTURE"])
			|| (
				($arFields["PICTURE"]["name"] ?? '') === ''
				&& ($arFields["PICTURE"]["del"] ?? '' ) === ''
			)
		)
		{
			unset($arFields["PICTURE"]);
		}
		else
		{
			$arFields["PICTURE"]["MODULE_ID"] = "iblock";
		}
	}

	if(array_key_exists("SITE_ID", $arFields))
	{
		$arFields["LID"] = $arFields["SITE_ID"];
		unset($arFields["SITE_ID"]);
	}

	if(array_key_exists("EXTERNAL_ID", $arFields))
	{
		$arFields["XML_ID"] = $arFields["EXTERNAL_ID"];
		unset($arFields["EXTERNAL_ID"]);
	}

	if(array_key_exists("SECTION_PROPERTY", $arFields))
		$arFields["SECTION_PROPERTY"] = "Y";

	unset($arFields["ID"]);

	if(!$this->CheckFields($arFields))
	{
		$Result = false;
		$arFields["RESULT_MESSAGE"] = &$this->LAST_ERROR;
	}
	else
	{
		$arLID = array();
		if(array_key_exists("LID", $arFields))
		{
			if(is_array($arFields["LID"]))
			{
				foreach($arFields["LID"] as $site_id)
					$arLID[$site_id] = $DB->ForSQL($site_id);
			}
			else
			{
				$arLID[$arFields["LID"]] = $DB->ForSQL($arFields["LID"]);
			}
		}

		if(empty($arLID))
			unset($arFields["LID"]);
		else
			$arFields["LID"] = end($arLID);

		if(array_key_exists("PICTURE", $arFields))
		{
			$SAVED_PICTURE = $arFields["PICTURE"];
			CFile::SaveForDB($arFields, "PICTURE", "iblock");
		}

		$ID = $DB->Add("b_iblock", $arFields, array("DESCRIPTION"), "iblock");

		if(array_key_exists("PICTURE", $arFields))
		{
			$arFields["PICTURE"] = $SAVED_PICTURE;
		}

		$this->SetMessages($ID, $arFields);

		if(array_key_exists("FIELDS", $arFields) && is_array($arFields["FIELDS"]))
			$this->SetFields($ID, $arFields["FIELDS"]);

		if($arFields["RIGHTS_MODE"] === "E")
		{
			if(
				!array_key_exists("RIGHTS", $arFields)
				&& array_key_exists("GROUP_ID", $arFields)
				&& is_array($arFields["GROUP_ID"])
			)
			{
				$obIBlockRights = new CIBlockRights($ID);
				$obIBlockRights->SetRights($obIBlockRights->ConvertGroups($arFields["GROUP_ID"]));
			}
			elseif(
				array_key_exists("RIGHTS", $arFields)
				&& is_array($arFields["RIGHTS"])
			)
			{
				$obIBlockRights = new CIBlockRights($ID);
				$obIBlockRights->SetRights($arFields["RIGHTS"]);
			}
		}
		else
		{
			if(array_key_exists("GROUP_ID", $arFields) && is_array($arFields["GROUP_ID"]))
				$this->SetPermission($ID, $arFields["GROUP_ID"]);
		}

		if (array_key_exists("IPROPERTY_TEMPLATES", $arFields))
		{
			$ipropTemplates = new BitrixIblockInheritedPropertyIblockTemplates($ID);
			$ipropTemplates->set($arFields["IPROPERTY_TEMPLATES"]);
		}

		if(!empty($arLID))
		{
			$DB->Query("
				DELETE FROM b_iblock_site WHERE IBLOCK_ID = ".$ID."
			", false, "FILE: ".__FILE__."
LINE: ".__LINE__); $DB->Query(" INSERT INTO b_iblock_site(IBLOCK_ID, SITE_ID) SELECT ".$ID.", LID FROM b_lang WHERE LID IN ('".implode("', '", $arLID)."') ", false, "FILE: ".__FILE__."
LINE: ".__LINE__); } if($arFields["VERSION"] == 2) { if($this->_Add($ID)) { $Result = $ID; $arFields["ID"] = &$ID; } else { $this->LAST_ERROR = GetMessage("IBLOCK_TABLE_CREATION_ERROR"); $Result = false; $arFields["RESULT_MESSAGE"] = &$this->LAST_ERROR; } } else { $Result = $ID; $arFields["ID"] = &$ID; } CDiskQuota::recalculateDb(); $this->CleanCache($ID); } $arFields["RESULT"] = &$Result; foreach(GetModuleEvents("iblock", "OnAfterIBlockAdd", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arFields)); if(defined("BX_COMP_MANAGED_CACHE") && self::isEnabledClearTagCache()) $CACHE_MANAGER->ClearByTag("iblock_id_new"); return $Result; }