• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/site.php
  • Класс: CAllSite
  • Вызов: CAllSite::CheckFields
public function CheckFields($arFields, $ID=false)
{
	/** @global CMain $APPLICATION */
	global $APPLICATION, $DB;

	$this->LAST_ERROR = "";
	$arMsg = array();

	if(isset($arFields["NAME"]) && mb_strlen($arFields["NAME"]) < 2)
	{
		$this->LAST_ERROR .= GetMessage("BAD_SITE_NAME")." ";
		$arMsg[] = array("id"=>"NAME", "text"=> GetMessage("BAD_SITE_NAME"));
	}
	if(($ID===false || isset($arFields["LID"])) && mb_strlen($arFields["LID"]) <> 2)
	{
		$this->LAST_ERROR .= GetMessage("BAD_SITE_LID")." ";
		$arMsg[] = array("id"=>"LID", "text"=> GetMessage("BAD_SITE_LID"));
	}
	if(isset($arFields["LID"]) && preg_match("/[^a-z0-9_]/i", $arFields["LID"]))
	{
		$this->LAST_ERROR .= GetMessage("MAIN_SITE_LATIN")." ";
		$arMsg[] = array("id"=>"LID", "text"=> GetMessage("MAIN_SITE_LATIN"));
	}
	if(isset($arFields["DIR"]) && $arFields["DIR"] == '')
	{
		$this->LAST_ERROR .= GetMessage("BAD_LANG_DIR")." ";
		$arMsg[] = array("id"=>"DIR", "text"=> GetMessage("BAD_LANG_DIR"));
	}
	if($ID===false && !isset($arFields["LANGUAGE_ID"]))
	{
		$this->LAST_ERROR .= GetMessage("MAIN_BAD_LANGUAGE_ID")." ";
		$arMsg[] = array("id"=>"LANGUAGE_ID", "text"=> GetMessage("MAIN_BAD_LANGUAGE_ID"));
	}
	if(isset($arFields["LANGUAGE_ID"]))
	{
		$dbl_check = CLanguage::GetByID($arFields["LANGUAGE_ID"]);
		if(!$dbl_check->Fetch())
		{
			$this->LAST_ERROR .= GetMessage("MAIN_BAD_LANGUAGE_ID_BAD")." ";
			$arMsg[] = array("id"=>"LANGUAGE_ID", "text"=> GetMessage("MAIN_BAD_LANGUAGE_ID_BAD"));
		}
	}
	if($ID === false && !isset($arFields["CULTURE_ID"]))
	{
		$this->LAST_ERROR .= GetMessage("lang_check_culture_not_set")." ";
		$arMsg[] = array("id"=>"CULTURE_ID", "text"=> GetMessage("lang_check_culture_not_set"));
	}
	if(isset($arFields["CULTURE_ID"]))
	{
		if(CultureTable::getRowById($arFields["CULTURE_ID"]) === null)
		{
			$this->LAST_ERROR .= GetMessage("lang_check_culture_incorrect")." ";
			$arMsg[] = array("id"=>"CULTURE_ID", "text"=> GetMessage("lang_check_culture_incorrect"));
		}
	}
	if(isset($arFields["SORT"]) && $arFields["SORT"] == '')
	{
		$this->LAST_ERROR .= GetMessage("BAD_SORT")." ";
		$arMsg[] = array("id"=>"SORT", "text"=> GetMessage("BAD_SORT"));
	}
	if(isset($arFields["TEMPLATE"]))
	{
		$isOK = false;
		$check_templ = array();
		$dupError = "";
		foreach($arFields["TEMPLATE"] as $val)
		{
			if($val["TEMPLATE"] <> '' && getLocalPath("templates/".$val["TEMPLATE"], BX_PERSONAL_ROOT) !== false)
			{
				if(in_array($val["TEMPLATE"].", ".$val["CONDITION"], $check_templ))
				{
					$dupError = " ".GetMessage("MAIN_BAD_TEMPLATE_DUP");
					$isOK = false;
					break;
				}
				$check_templ[] = $val["TEMPLATE"].", ".$val["CONDITION"];
				$isOK = true;
			}
		}
		if(!$isOK)
		{
			$this->LAST_ERROR .= GetMessage("MAIN_BAD_TEMPLATE").$dupError;
			$arMsg[] = array("id"=>"SITE_TEMPLATE", "text"=> GetMessage("MAIN_BAD_TEMPLATE").$dupError);
		}
	}

	if($ID===false)
		$events = GetModuleEvents("main", "OnBeforeSiteAdd", true);
	else
		$events = GetModuleEvents("main", "OnBeforeSiteUpdate", true);
	foreach($events as $arEvent)
	{
		$bEventRes = ExecuteModuleEventEx($arEvent, array(&$arFields));
		if($bEventRes===false)
		{
			if($err = $APPLICATION->GetException())
			{
				$this->LAST_ERROR .= $err->GetString()." ";
				$arMsg[] = array("id"=>"EVENT_ERROR", "text"=> $err->GetString());
			}
			else
			{
				$this->LAST_ERROR .= "Unknown error. ";
				$arMsg[] = array("id"=>"EVENT_ERROR", "text"=> "Unknown error. ");
			}
			break;
		}
	}

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

	if($this->LAST_ERROR <> '')
		return false;

	if($ID===false)
	{
		$r = $DB->Query("SELECT 'x' FROM b_lang WHERE LID='".$DB->ForSQL($arFields["LID"], 2)."'");
		if($r->Fetch())
		{
			$this->LAST_ERROR .= GetMessage("BAD_SITE_DUP")." ";
			$e = new CAdminException(array(array("id" => "LID", "text" => GetMessage("BAD_SITE_DUP"))));
			$APPLICATION->ThrowException($e);
			return false;
		}
	}

	return true;
}