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