• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblocksection.php
  • Класс: CAllIBlockSection
  • Вызов: CAllIBlockSection::CheckFields
function CheckFields(&$arFields, $ID=false)
{
	global $DB, $APPLICATION;
	$this->LAST_ERROR = "";

	if(($ID===false || array_key_exists("NAME", $arFields)) && (string)$arFields["NAME"] === '')
		$this->LAST_ERROR .= GetMessage("IBLOCK_BAD_SECTION")."
"; $pictureIsArray = isset($arFields["PICTURE"]) && is_array($arFields["PICTURE"]); if ( $pictureIsArray && array_key_exists("bucket", $arFields["PICTURE"]) && is_object($arFields["PICTURE"]["bucket"]) ) { //This is trusted image from xml import } elseif( $pictureIsArray && isset($arFields["PICTURE"]["name"]) ) { $error = CFile::CheckImageFile($arFields["PICTURE"]); if ($error <> '') $this->LAST_ERROR .= $error."
"; } $detailPictureIsArray = isset($arFields["DETAIL_PICTURE"]) && is_array($arFields["DETAIL_PICTURE"]); if( $detailPictureIsArray && array_key_exists("bucket", $arFields["DETAIL_PICTURE"]) && is_object($arFields["DETAIL_PICTURE"]["bucket"]) ) { //This is trusted image from xml import } elseif( $detailPictureIsArray && isset($arFields["DETAIL_PICTURE"]["name"]) ) { $error = CFile::CheckImageFile($arFields["DETAIL_PICTURE"]); if ($error <> '') $this->LAST_ERROR .= $error."
"; } $arIBlock = false; $arThis = false; if($ID === false) { if(!array_key_exists("IBLOCK_ID", $arFields)) { $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_BLOCK_ID")."
"; } else { $arIBlock = CIBlock::GetArrayByID($arFields["IBLOCK_ID"]); if(!$arIBlock) $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_BLOCK_ID")."
"; } } else { $rsThis = $DB->Query("SELECT ID, IBLOCK_ID, DETAIL_PICTURE, PICTURE FROM b_iblock_section WHERE ID = ".intval($ID)); $arThis = $rsThis->Fetch(); if(!$arThis) { $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_SECTION_ID", array("#ID#" => intval($ID)))."
"; } else { $arIBlock = CIBlock::GetArrayByID($arThis["IBLOCK_ID"]); if(!$arIBlock) $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_BLOCK_ID")."
"; } } $arParent = false; $IBLOCK_SECTION_ID = isset($arFields["IBLOCK_SECTION_ID"])? intval($arFields["IBLOCK_SECTION_ID"]): 0; if(($IBLOCK_SECTION_ID > 0) && ($this->LAST_ERROR == '')) { $sqlCheck = 'select ID, IBLOCK_ID from b_iblock_section where ID = ' . $IBLOCK_SECTION_ID; if ($ID !== false) { $sqlCheck .= ' and ID != '.(int)$ID; } $rsParent = $DB->Query($sqlCheck); $arParent = $rsParent->Fetch(); if(!$arParent) $this->LAST_ERROR = GetMessage("IBLOCK_BAD_BLOCK_SECTION_PARENT")."
"; } if($arParent && $arIBlock) { if($arParent["IBLOCK_ID"] != $arIBlock["ID"]) $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_BLOCK_SECTION_ID_PARENT")."
"; } if($arParent && ($this->LAST_ERROR == '')) { $rch = $DB->Query(" SELECT 'x' FROM b_iblock_section bsto ,b_iblock_section bsfrom WHERE bsto.ID = ".$arParent["ID"]." AND bsfrom.ID = ".intval($ID)." AND bsto.LEFT_MARGIN >= bsfrom.LEFT_MARGIN AND bsto.LEFT_MARGIN <= bsfrom.RIGHT_MARGIN "); if($rch->Fetch()) $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_BLOCK_SECTION_RECURSE")."
"; } if($arIBlock) { if( array_key_exists("CODE", $arFields) && mb_strlen($arFields["CODE"]) && is_array($arIBlock["FIELDS"]["SECTION_CODE"]["DEFAULT_VALUE"]) && $arIBlock["FIELDS"]["SECTION_CODE"]["DEFAULT_VALUE"]["UNIQUE"] == "Y" ) { $res = $DB->Query(" SELECT ID FROM b_iblock_section WHERE IBLOCK_ID = ".$arIBlock["ID"]." AND CODE = '".$DB->ForSQL($arFields["CODE"])."' AND ID <> ".intval($ID) ); if($res->Fetch()) $this->LAST_ERROR .= GetMessage("IBLOCK_DUP_SECTION_CODE")."
"; } foreach($arIBlock["FIELDS"] as $FIELD_ID => $field) { if(!preg_match("/^SECTION_(.+)$/", $FIELD_ID, $match)) continue; $FIELD_ID = $match[1]; if($field["IS_REQUIRED"] === "Y") { switch($FIELD_ID) { case "NAME": case "DESCRIPTION_TYPE": //We should never check for this fields break; case "PICTURE": $field["NAME"] = GetMessage("IBLOCK_FIELD_PICTURE"); case "DETAIL_PICTURE": if($arThis && $arThis[$FIELD_ID] > 0) {//There was an picture so just check that it is not deleted if( array_key_exists($FIELD_ID, $arFields) && is_array($arFields[$FIELD_ID]) && $arFields[$FIELD_ID]["del"] === "Y" ) $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_SECTION_FIELD", array("#FIELD_NAME#" => $field["NAME"]))."
"; } else {//There was NO picture so it MUST be present if(!array_key_exists($FIELD_ID, $arFields)) { $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_SECTION_FIELD", array("#FIELD_NAME#" => $field["NAME"]))."
"; } elseif(is_array($arFields[$FIELD_ID])) { if( $arFields[$FIELD_ID]["del"] === "Y" || (array_key_exists("error", $arFields[$FIELD_ID]) && $arFields[$FIELD_ID]["error"] !== 0) || $arFields[$FIELD_ID]["size"] <= 0 ) $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_SECTION_FIELD", array("#FIELD_NAME#" => $field["NAME"]))."
"; } else { if(intval($arFields[$FIELD_ID]) <= 0) $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_SECTION_FIELD", array("#FIELD_NAME#" => $field["NAME"]))."
"; } } break; default: if($ID===false || array_key_exists($FIELD_ID, $arFields)) { if(is_array($arFields[$FIELD_ID])) $val = implode("", $arFields[$FIELD_ID]); else $val = $arFields[$FIELD_ID]; if($val == '') $this->LAST_ERROR .= GetMessage("IBLOCK_BAD_SECTION_FIELD", array("#FIELD_NAME#" => $field["NAME"]))."
"; } break; } } } } $APPLICATION->ResetException(); if($ID===false) $db_events = GetModuleEvents("iblock", "OnBeforeIBlockSectionAdd", true); else { $arFields["ID"] = $ID; $arFields["IBLOCK_ID"] = $arIBlock["ID"]; $db_events = GetModuleEvents("iblock", "OnBeforeIBlockSectionUpdate", true); } /****************************** QUOTA ******************************/ if(empty($this->LAST_ERROR) && (COption::GetOptionInt("main", "disk_space") > 0)) { $quota = new CDiskQuota(); if(!$quota->checkDiskQuota($arFields)) $this->LAST_ERROR = $quota->LAST_ERROR; } /****************************** QUOTA ******************************/ foreach ($db_events as $arEvent) { $bEventRes = ExecuteModuleEventEx($arEvent, array(&$arFields)); if($bEventRes===false) { if($err = $APPLICATION->GetException()) $this->LAST_ERROR .= $err->GetString()."
"; else { $APPLICATION->ThrowException("Unknown error"); $this->LAST_ERROR .= "Unknown error.
"; } break; } } if($this->LAST_ERROR <> '') return false; return true; }