• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblocksection.php
  • Класс: CAllIBlockSection
  • Вызов: CAllIBlockSection::Add
function Add($arFields, $bResort=true, $bUpdateSearch=true, $bResizePictures=false)
{
	global $USER, $DB, $APPLICATION;

	if(is_set($arFields, "EXTERNAL_ID"))
		$arFields["XML_ID"] = $arFields["EXTERNAL_ID"];
	Unset($arFields["GLOBAL_ACTIVE"]);
	Unset($arFields["DEPTH_LEVEL"]);
	Unset($arFields["LEFT_MARGIN"]);
	Unset($arFields["RIGHT_MARGIN"]);

	$strWarning = '';

	if ($this->iblock !== null && $this->iblock['ID'] === (int)$arFields["IBLOCK_ID"])
	{
		$arIBlock = $this->iblock;
	}
	else
	{
		$arIBlock = CIBlock::GetArrayByID($arFields["IBLOCK_ID"]);
	}

	if($bResizePictures && is_array($arIBlock))
	{
		$arDef = $arIBlock["FIELDS"]["SECTION_PICTURE"]["DEFAULT_VALUE"];

		if(
			$arDef["FROM_DETAIL"] === "Y"
			&& is_array($arFields["DETAIL_PICTURE"])
			&& $arFields["DETAIL_PICTURE"]["size"] > 0
			&& (
				$arDef["UPDATE_WITH_DETAIL"] === "Y"
				|| $arFields["PICTURE"]["size"] <= 0
			)
		)
		{
			$arNewPreview = $arFields["DETAIL_PICTURE"];
			$arNewPreview["COPY_FILE"] = "Y";
			$arNewPreview["description"] = $arFields["PICTURE"]["description"];
			$arFields["PICTURE"] = $arNewPreview;
		}

		if(
			array_key_exists("PICTURE", $arFields)
			&& is_array($arFields["PICTURE"])
			&& $arDef["SCALE"] === "Y"
		)
		{
			$arNewPicture = CIBlock::ResizePicture($arFields["PICTURE"], $arDef);
			if(is_array($arNewPicture))
			{
				$arNewPicture["description"] = $arFields["PICTURE"]["description"];
				$arFields["PICTURE"] = $arNewPicture;
			}
			elseif($arDef["IGNORE_ERRORS"] !== "Y")
			{
				unset($arFields["PICTURE"]);
				$strWarning .= GetMessage("IBLOCK_FIELD_PREVIEW_PICTURE").": ".$arNewPicture."
"; } } if( array_key_exists("PICTURE", $arFields) && is_array($arFields["PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y" ) { if( $arFields["PICTURE"]["tmp_name"] <> '' && ( $arFields["PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"] || ($arFields["PICTURE"]["COPY_FILE"] == "Y" && !$arFields["PICTURE"]["copy"]) ) ) { $tmp_name = CTempFile::GetFileName(basename($arFields["PICTURE"]["tmp_name"])); CheckDirPath($tmp_name); copy($arFields["PICTURE"]["tmp_name"], $tmp_name); $arFields["PICTURE"]["copy"] = true; $arFields["PICTURE"]["tmp_name"] = $tmp_name; } CIBlock::FilterPicture($arFields["PICTURE"]["tmp_name"], array( "name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"].Rel2Abs("/", $arDef["WATERMARK_FILE"]), )); } if( array_key_exists("PICTURE", $arFields) && is_array($arFields["PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y" ) { if( $arFields["PICTURE"]["tmp_name"] <> '' && ( $arFields["PICTURE"]["tmp_name"] === $arFields["DETAIL_PICTURE"]["tmp_name"] || ($arFields["PICTURE"]["COPY_FILE"] == "Y" && !$arFields["PICTURE"]["copy"]) ) ) { $tmp_name = CTempFile::GetFileName(basename($arFields["PICTURE"]["tmp_name"])); CheckDirPath($tmp_name); copy($arFields["PICTURE"]["tmp_name"], $tmp_name); $arFields["PICTURE"]["copy"] = true; $arFields["PICTURE"]["tmp_name"] = $tmp_name; } CIBlock::FilterPicture($arFields["PICTURE"]["tmp_name"], array( "name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"].Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"], )); } $arDef = $arIBlock["FIELDS"]["SECTION_DETAIL_PICTURE"]["DEFAULT_VALUE"]; if( array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["SCALE"] === "Y" ) { $arNewPicture = CIBlock::ResizePicture($arFields["DETAIL_PICTURE"], $arDef); if(is_array($arNewPicture)) { $arNewPicture["description"] = $arFields["DETAIL_PICTURE"]["description"]; $arFields["DETAIL_PICTURE"] = $arNewPicture; } elseif($arDef["IGNORE_ERRORS"] !== "Y") { unset($arFields["DETAIL_PICTURE"]); $strWarning .= GetMessage("IBLOCK_FIELD_DETAIL_PICTURE").": ".$arNewPicture."
"; } } if( array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_FILE"] === "Y" ) { if( $arFields["DETAIL_PICTURE"]["tmp_name"] <> '' && ( $arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PICTURE"]["tmp_name"] || ($arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["DETAIL_PICTURE"]["copy"]) ) ) { $tmp_name = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"])); CheckDirPath($tmp_name); copy($arFields["DETAIL_PICTURE"]["tmp_name"], $tmp_name); $arFields["DETAIL_PICTURE"]["copy"] = true; $arFields["DETAIL_PICTURE"]["tmp_name"] = $tmp_name; } CIBlock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array( "name" => "watermark", "position" => $arDef["WATERMARK_FILE_POSITION"], "type" => "file", "size" => "real", "alpha_level" => 100 - min(max($arDef["WATERMARK_FILE_ALPHA"], 0), 100), "file" => $_SERVER["DOCUMENT_ROOT"].Rel2Abs("/", $arDef["WATERMARK_FILE"]), )); } if( array_key_exists("DETAIL_PICTURE", $arFields) && is_array($arFields["DETAIL_PICTURE"]) && $arDef["USE_WATERMARK_TEXT"] === "Y" ) { if( $arFields["DETAIL_PICTURE"]["tmp_name"] <> '' && ( $arFields["DETAIL_PICTURE"]["tmp_name"] === $arFields["PICTURE"]["tmp_name"] || ($arFields["DETAIL_PICTURE"]["COPY_FILE"] == "Y" && !$arFields["DETAIL_PICTURE"]["copy"]) ) ) { $tmp_name = CTempFile::GetFileName(basename($arFields["DETAIL_PICTURE"]["tmp_name"])); CheckDirPath($tmp_name); copy($arFields["DETAIL_PICTURE"]["tmp_name"], $tmp_name); $arFields["DETAIL_PICTURE"]["copy"] = true; $arFields["DETAIL_PICTURE"]["tmp_name"] = $tmp_name; } CIBlock::FilterPicture($arFields["DETAIL_PICTURE"]["tmp_name"], array( "name" => "watermark", "position" => $arDef["WATERMARK_TEXT_POSITION"], "type" => "text", "coefficient" => $arDef["WATERMARK_TEXT_SIZE"], "text" => $arDef["WATERMARK_TEXT"], "font" => $_SERVER["DOCUMENT_ROOT"].Rel2Abs("/", $arDef["WATERMARK_TEXT_FONT"]), "color" => $arDef["WATERMARK_TEXT_COLOR"], )); } } $ipropTemplates = new BitrixIblockInheritedPropertySectionTemplates($arFields["IBLOCK_ID"], 0); if (array_key_exists("PICTURE", $arFields)) { if (!is_array($arFields["PICTURE"])) { unset($arFields["PICTURE"]); } elseif ( ($arFields["PICTURE"]["name"] ?? '') === '' && ($arFields["PICTURE"]["del"] ?? '') === '' ) { unset($arFields["PICTURE"]); } else { $arFields["PICTURE"]["MODULE_ID"] = "iblock"; if (isset($arFields["PICTURE"]["name"])) { $arFields["PICTURE"]["name"] = BitrixIblockTemplateHelper::makeFileName( $ipropTemplates , "SECTION_PICTURE_FILE_NAME" , $arFields , $arFields["PICTURE"] ); } } } if (array_key_exists("DETAIL_PICTURE", $arFields)) { if (!is_array($arFields["DETAIL_PICTURE"])) { unset($arFields["DETAIL_PICTURE"]); } elseif ( ($arFields["DETAIL_PICTURE"]["name"] ?? '') === '' && ($arFields["DETAIL_PICTURE"]["del"] ?? '') === '' ) { unset($arFields["DETAIL_PICTURE"]); } else { $arFields["DETAIL_PICTURE"]["MODULE_ID"] = "iblock"; if (isset($arFields["DETAIL_PICTURE"]["name"])) { $arFields["DETAIL_PICTURE"]["name"] = BitrixIblockTemplateHelper::makeFileName( $ipropTemplates , "SECTION_DETAIL_PICTURE_FILE_NAME" , $arFields , $arFields["DETAIL_PICTURE"] ); } } } $arFields["IBLOCK_SECTION_ID"] = isset($arFields["IBLOCK_SECTION_ID"])? intval($arFields["IBLOCK_SECTION_ID"]): 0; if($arFields["IBLOCK_SECTION_ID"] == 0) $arFields["IBLOCK_SECTION_ID"] = false; if(is_set($arFields, "ACTIVE") && $arFields["ACTIVE"] != "Y") $arFields["ACTIVE"] = "N"; else $arFields["ACTIVE"] = "Y"; if(!array_key_exists("DESCRIPTION_TYPE", $arFields) || $arFields["DESCRIPTION_TYPE"]!="html") $arFields["DESCRIPTION_TYPE"]="text"; if(!isset($arFields["DESCRIPTION"])) $arFields["DESCRIPTION"] = false; $arFields["SEARCHABLE_CONTENT"] = mb_strtoupper( $arFields["NAME"]."rn". ($arFields["DESCRIPTION_TYPE"]=="html" ? HTMLToTxt($arFields["DESCRIPTION"]) : $arFields["DESCRIPTION"] ) ); unset($arFields["DATE_CREATE"]); $arFields["~DATE_CREATE"] = $DB->CurrentTimeFunction(); if(is_object($USER)) { $user_id = intval($USER->GetID()); if(!isset($arFields["CREATED_BY"]) || intval($arFields["CREATED_BY"]) <= 0) $arFields["CREATED_BY"] = $user_id; if(!isset($arFields["MODIFIED_BY"]) || intval($arFields["MODIFIED_BY"]) <= 0) $arFields["MODIFIED_BY"] = $user_id; } $IBLOCK_ID = intval($arFields["IBLOCK_ID"]); if(!$this->CheckFields($arFields)) { $Result = false; $arFields["RESULT_MESSAGE"] = &$this->LAST_ERROR; } elseif($IBLOCK_ID && !$GLOBALS["USER_FIELD_MANAGER"]->CheckFields("IBLOCK_".$IBLOCK_ID."_SECTION", 0, $arFields)) { $Result = false; $err = $APPLICATION->GetException(); if(is_object($err)) $this->LAST_ERROR .= str_replace("

", "
", $err->GetString()."
"); $arFields["RESULT_MESSAGE"] = &$this->LAST_ERROR; } else { if(array_key_exists("PICTURE", $arFields)) { $SAVED_PICTURE = $arFields["PICTURE"]; CFile::SaveForDB($arFields, "PICTURE", "iblock"); } if(array_key_exists("DETAIL_PICTURE", $arFields)) { $SAVED_DETAIL_PICTURE = $arFields["DETAIL_PICTURE"]; CFile::SaveForDB($arFields, "DETAIL_PICTURE", "iblock"); } CIBlock::_transaction_lock($IBLOCK_ID); unset($arFields["ID"]); $ID = intval($DB->Add("b_iblock_section", $arFields, Array("DESCRIPTION","SEARCHABLE_CONTENT"), "iblock")); $arFields["ID"] = $ID; if(array_key_exists("PICTURE", $arFields)) $arFields["PICTURE"] = $SAVED_PICTURE; if(array_key_exists("DETAIL_PICTURE", $arFields)) $arFields["DETAIL_PICTURE"] = $SAVED_DETAIL_PICTURE; if($bResort) { if(!array_key_exists("SORT", $arFields)) $arFields["SORT"] = 500; self::recountTreeAfterAdd($arFields); } $GLOBALS["USER_FIELD_MANAGER"]->Update("IBLOCK_".$IBLOCK_ID."_SECTION", $ID, $arFields); if($bUpdateSearch) CIBlockSection::UpdateSearch($ID); if( CIBlock::GetArrayByID($IBLOCK_ID, "SECTION_PROPERTY") === "Y" && isset($arFields["SECTION_PROPERTY"]) && is_array($arFields["SECTION_PROPERTY"]) ) { foreach($arFields["SECTION_PROPERTY"] as $PROPERTY_ID => $arLink) { $arLink['INVALIDATE'] = 'N'; CIBlockSectionPropertyLink::Add($ID, $PROPERTY_ID, $arLink); } unset($arLink); unset($PROPERTY_ID); } if($arIBlock["FIELDS"]["LOG_SECTION_ADD"]["IS_REQUIRED"] == "Y") { $USER_ID = is_object($USER)? intval($USER->GetID()) : 0; $arEvents = GetModuleEvents("main", "OnBeforeEventLog", true); if(empty($arEvents) || ExecuteModuleEventEx($arEvents[0], array($USER_ID))===false) { $rsSection = CIBlockSection::GetList(array(), array("=ID"=>$ID), false, array("LIST_PAGE_URL", "NAME", "CODE")); $arSection = $rsSection->GetNext(); $res = array( "ID" => $ID, "CODE" => $arSection["CODE"], "NAME" => $arSection["NAME"], "SECTION_NAME" => $arIBlock["SECTION_NAME"], "USER_ID" => $USER_ID, "IBLOCK_PAGE_URL" => $arSection["LIST_PAGE_URL"], ); CEventLog::Log( "IBLOCK", "IBLOCK_SECTION_ADD", "iblock", $arIBlock["ID"], serialize($res) ); } } if($arIBlock["RIGHTS_MODE"] === "E") { $obSectionRights = new CIBlockSectionRights($arIBlock["ID"], $ID); $obSectionRights->ChangeParents(array(), array($arFields["IBLOCK_SECTION_ID"])); if(array_key_exists("RIGHTS", $arFields) && is_array($arFields["RIGHTS"])) $obSectionRights->SetRights($arFields["RIGHTS"]); } if (array_key_exists("IPROPERTY_TEMPLATES", $arFields)) { $ipropTemplates = new BitrixIblockInheritedPropertySectionTemplates($arIBlock["ID"], $ID); $ipropTemplates->set($arFields["IPROPERTY_TEMPLATES"]); } $Result = $ID; /************* QUOTA *************/ CDiskQuota::recalculateDb(); /************* QUOTA *************/ } $arFields["RESULT"] = &$Result; foreach (GetModuleEvents("iblock", "OnAfterIBlockSectionAdd", true) as $arEvent) ExecuteModuleEventEx($arEvent, array(&$arFields)); CIBlock::clearIblockTagCache($arIBlock['ID']); return $Result; }