• Модуль: xdimport
  • Путь к файлу: ~/bitrix/modules/xdimport/classes/general/lf_scheme.php
  • Класс: CAllXDILFScheme
  • Вызов: CAllXDILFScheme::CheckFields
function CheckFields($action, &$arFields)
{
	global $DB;
	$this->LAST_ERROR = "";
	$aMsg = array();

	if((($action == "update" && array_key_exists("TYPE", $arFields)) || $action == "add") && $arFields["TYPE"] == '')
		$aMsg[] = array("id"=>"TYPE", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_TYPE"));
	if((($action == "update" && array_key_exists("ENTITY_TYPE", $arFields)) || $action == "add") && $arFields["ENTITY_TYPE"] == '')
		$aMsg[] = array("id"=>"ENTITY_TYPE", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_ENTITY_TYPE"));
	if((($action == "update" && array_key_exists("EVENT_ID", $arFields)) || $action == "add") && $arFields["EVENT_ID"] == '')
		$aMsg[] = array("id"=>"EVENT_ID", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_EVENT_ID"));
	if((($action == "update" && array_key_exists("NAME", $arFields)) || $action == "add") && $arFields["NAME"] == '')
		$aMsg[] = array("id"=>"NAME", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_NAME"));
	if($arFields["LID"] <> '')
	{
		$r = CLang::GetByID($arFields["LID"]);
		if(!$r->Fetch())
			$aMsg[] = array("id"=>"LID", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_SITE"));
	}
	elseif (($action == "update" && array_key_exists("LID", $arFields)) || $action == "add")
		$aMsg[] = array("id"=>"LID", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_SITE2"));

	if(
		($action == "add" && $arFields["TYPE"] == "POST" && (!array_key_exists("HASH", $arFields) || $arFields["HASH"] == ''))
		|| ($action == "update" && $arFields["TYPE"] == "POST" && array_key_exists("HASH", $arFields) && $arFields["HASH"] == '')
	)
		$arFields["HASH"] = md5(randString(20));
		
	if(
		($action == "add" && (!array_key_exists("ENABLE_COMMENTS", $arFields) || !in_array($arFields["ENABLE_COMMENTS"], array("Y", "N")))) 
		|| ($action == "update" && array_key_exists("ENABLE_COMMENTS", $arFields) && !in_array($arFields["ENABLE_COMMENTS"], array("Y", "N")))
	)
		$arFields["ENABLE_COMMENTS"] = "Y";

	if((($action == "update" && array_key_exists("DAYS_OF_MONTH", $arFields)) || $action == "add") && $arFields["DAYS_OF_MONTH"] <> '')
	{
		$arDoM = explode(",", $arFields["DAYS_OF_MONTH"]);
		$arFound = array();
		foreach($arDoM as $strDoM)
		{
			if(preg_match("/^(d{1,2})$/", trim($strDoM), $arFound))
			{
				if(intval($arFound[1]) < 1 || intval($arFound[1]) > 31)
				{
					$aMsg[] = array("id"=>"DAYS_OF_MONTH", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_DOM"));
					break;
				}
			}
			elseif(preg_match("/^(d{1,2})-(d{1,2})$/", trim($strDoM), $arFound))
			{
				if(intval($arFound[1]) < 1 || intval($arFound[1]) > 31 || intval($arFound[2]) < 1 || intval($arFound[2]) > 31 || intval($arFound[1]) >= intval($arFound[2]))
				{
					$aMsg[] = array("id"=>"DAYS_OF_MONTH", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_DOM"));
					break;
				}
			}
			else
			{
				$aMsg[] = array("id"=>"DAYS_OF_MONTH", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_DOM2"));
				break;
			}
		}
	}
	if((($action == "update" && array_key_exists("DAYS_OF_WEEK", $arFields)) || $action == "add") && $arFields["DAYS_OF_WEEK"] <> '')
	{
		$arDoW = explode(",", $arFields["DAYS_OF_WEEK"]);
		$arFound = array();
		foreach($arDoW as $strDoW)
		{
			if(preg_match("/^(d)$/", trim($strDoW), $arFound))
			{
				if(intval($arFound[1]) < 1 || intval($arFound[1]) > 7)
				{
					$aMsg[] = array("id"=>"DAYS_OF_WEEK", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_DOW"));
					break;
				}
			}
			else
			{
				$aMsg[] = array("id"=>"DAYS_OF_WEEK", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_DOW2"));
				break;
			}
		}
	}
	if((($action == "update" && array_key_exists("TIMES_OF_DAY", $arFields)) || $action == "add") && $arFields["TIMES_OF_DAY"] <> '')
	{
		$arToD = explode(",", $arFields["TIMES_OF_DAY"]);
		$arFound = array();
		foreach($arToD as $strToD)
		{
			if(preg_match("/^(d{1,2}):(d{1,2})$/", trim($strToD), $arFound))
			{
				if(intval($arFound[1]) > 23 || intval($arFound[2]) > 59)
				{
					$aMsg[] = array("id"=>"TIMES_OF_DAY", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_TOD"));
					break;
				}
			}
			else
			{
				$aMsg[] = array("id"=>"TIMES_OF_DAY", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_TOD2"));
				break;
			}
		}
	}

	if (!array_key_exists("AUTO", $arFields))
	{
		if (array_key_exists("TYPE",  $arFields))
		{
			if (in_array($arFields["TYPE"], array("XML", "RSS")))
				$arFields["AUTO"] = "Y";
			else
				$arFields["AUTO"] = "N";
		}
	}
	elseif (!in_array($arFields["AUTO"], array("Y", "N")))
		$arFields["AUTO"] = "N";
		
	if (
		array_key_exists("IS_HTML", $arFields)
		&& !in_array($arFields["IS_HTML"], array("Y", "N"))
	)
	{
		$arFields["IS_HTML"] = "N";
	}

	if (array_key_exists("URI", $arFields))
	{
		$arURI = parse_url($arFields["URI"]);
		if (
			array_key_exists("TYPE", $arFields) 
			&& in_array($arFields["TYPE"], array("XML", "RSS"))
		)
		{
			if($arURI["host"] == '')
			{
				$aMsg[] = array(
					"id" => "URI", 
					"text" => GetMessage("LFP_CLASS_SCHEME_ERR_URI_HOST")
				);	
			}
			else
			{
				$arFields["HOST"] = $arURI["host"];
			}

			if($arURI["port"] <> '')
			{
				$arFields["PORT"] = $arURI["port"];
			}

			if($arURI["path"] <> '')
			{
				$arFields["PAGE"] = $arURI["path"];
			}
		}
		
		if (
			array_key_exists("TYPE", $arFields) 
			&& $arFields["TYPE"] == "RSS" 
			&& $arURI["query"] <> ''
		)
		{
			$arFields["PARAMS"] = $arURI["query"];
		}
		
		if ($arFields["TYPE"] != "RSS")
		{
			unset($arFields["URI"]);
		}
	}
	elseif (array_key_exists("HOST", $arFields))
	{
		if (array_key_exists("TYPE", $arFields) && in_array($arFields["TYPE"], array("XML")))
		{
			if (mb_strpos($arFields["HOST"], "://") === false)
				$arFields["HOST"] = "http://".$arFields["HOST"];

			$arURI = parse_url($arFields["HOST"]);

			if($arURI["host"] == '')
				$aMsg[] = array("id"=>"HOST", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_URI_HOST"));	
			else
				$arFields["HOST"] = $arURI["host"];

			if($arURI["port"] <> '')
				$arFields["PORT"] = $arURI["port"];
		}
	}

	if($arFields["AUTO"]=="Y")
	{
		if(mb_strlen($arFields["DAYS_OF_MONTH"]) + mb_strlen($arFields["DAYS_OF_WEEK"]) <= 0)
			$aMsg[] = array("id"=>"DAYS_OF_MONTH", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_DAYS_MISSING"));
		if($arFields["TIMES_OF_DAY"] == '')
			$aMsg[] = array("id"=>"TIMES_OF_DAY", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_TIMES_MISSING"));
		if($arFields["LAST_EXECUTED"] == '')
			$aMsg[] = array("id"=>"LAST_EXECUTED", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_LE_MISSING"));
		elseif(is_set($arFields, "LAST_EXECUTED") && $arFields["LAST_EXECUTED"]!==false && $DB->IsDate($arFields["LAST_EXECUTED"], false, false, "FULL")!==true)
			$aMsg[] = array("id"=>"LAST_EXECUTED", "text"=>GetMessage("LFP_CLASS_SCHEME_ERR_LE_WRONG"));
	}

	if(!empty($aMsg))
	{
		$e = new CAdminException($aMsg);
		$GLOBALS["APPLICATION"]->ThrowException($e);
		$this->LAST_ERROR = $e->GetString();
		return false;
	}
	return true;
}