• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/usertypemanager.php
  • Класс: CUserTypeManager
  • Вызов: CUserTypeManager::CheckFieldsWithOldData
function CheckFieldsWithOldData($entity_id, $oldData, $arFields)
{
	global $APPLICATION;

	$aMsg = array();

	//1 Get user typed fields list for entity
	$arUserFields = $this->getUserFieldsWithReadyData($entity_id, $oldData, LANGUAGE_ID);

	//2 For each field
	foreach($arUserFields as $FIELD_NAME => $arUserField)
	{
		//identify user type
		if($arUserField["USER_TYPE"])
		{
			$CLASS_NAME = $arUserField["USER_TYPE"]["CLASS_NAME"];
			$EDIT_FORM_LABEL = $arUserField["EDIT_FORM_LABEL"] <> '' ? $arUserField["EDIT_FORM_LABEL"] : $arUserField["FIELD_NAME"];

			if(array_key_exists($FIELD_NAME, $arFields) && is_callable(array($CLASS_NAME, "checkfields")))
			{
				// check required values
				if($arUserField["MANDATORY"] === "Y")
				{
					if($arUserField["USER_TYPE"]["BASE_TYPE"] === "file")
					{
						$isNewFilePresent = false;
						$files = [];
						if(is_array($arUserField["VALUE"]))
						{
							$files = array_flip($arUserField["VALUE"]);
						}
						elseif($arUserField["VALUE"] > 0)
						{
							$files = array($arUserField["VALUE"] => 0);
						}
						elseif(is_numeric($arFields[$FIELD_NAME]))
						{
							$files = array($arFields[$FIELD_NAME] => 0);
						}

						if($arUserField["MULTIPLE"] === "N")
						{
							$value = $arFields[$FIELD_NAME];
							if(is_array($value) && array_key_exists("tmp_name", $value))
							{
								if(array_key_exists("del", $value) && $value["del"])
								{
									unset($files[$value["old_id"]]);
								}
								elseif(array_key_exists("size", $value) && $value["size"] > 0)
								{
									$isNewFilePresent = true;
								}
							}
							elseif ($value > 0)
							{
								$isNewFilePresent = true;
								$files[$value] = $value;
							}
						}
						else
						{
							if(is_array($arFields[$FIELD_NAME]))
							{
								foreach($arFields[$FIELD_NAME] as $value)
								{
									if(is_array($value) && array_key_exists("tmp_name", $value))
									{
										if(array_key_exists("del", $value) && $value["del"])
										{
											unset($files[$value["old_id"]]);
										}
										elseif(array_key_exists("size", $value) && $value["size"] > 0)
										{
											$isNewFilePresent = true;
										}
									}
									elseif ($value > 0)
									{
										$isNewFilePresent = true;
										$files[$value] = $value;
									}
								}
							}
						}

						if(!$isNewFilePresent && empty($files))
						{
							$aMsg[] = array("id" => $FIELD_NAME, "text" => str_replace("#FIELD_NAME#", $EDIT_FORM_LABEL, GetMessage("USER_TYPE_FIELD_VALUE_IS_MISSING")));
						}
					}
					elseif($arUserField["MULTIPLE"] == "N")
					{
						if ($this->isValueEmpty($arUserField, $arFields[$FIELD_NAME]))
						{
							$aMsg[] = array("id" => $FIELD_NAME, "text" => str_replace("#FIELD_NAME#", $EDIT_FORM_LABEL, GetMessage("USER_TYPE_FIELD_VALUE_IS_MISSING")));
						}
					}
					else
					{
						if(!is_array($arFields[$FIELD_NAME]))
						{
							$aMsg[] = array("id" => $FIELD_NAME, "text" => str_replace("#FIELD_NAME#", $EDIT_FORM_LABEL, GetMessage("USER_TYPE_FIELD_VALUE_IS_MISSING")));
						}
						else
						{
							$bFound = false;
							foreach($arFields[$FIELD_NAME] as $value)
							{
								if(
									(is_array($value) && (implode("", $value) <> ''))
									|| ((!is_array($value)) && ((string)$value <> ''))
								)
								{
									$bFound = true;
									break;
								}
							}
							if(!$bFound)
							{
								$aMsg[] = array("id" => $FIELD_NAME, "text" => str_replace("#FIELD_NAME#", $EDIT_FORM_LABEL, GetMessage("USER_TYPE_FIELD_VALUE_IS_MISSING")));
							}
						}
					}
				}

				// check regular values
				if($arUserField["MULTIPLE"] == "N")
				{
					//apply appropriate check function
					$ar = call_user_func_array(
						array($CLASS_NAME, "checkfields"),
						array($arUserField, $arFields[$FIELD_NAME])
					);
					$aMsg = array_merge($aMsg, $ar);
				}
				elseif(is_array($arFields[$FIELD_NAME]))
				{
					foreach($arFields[$FIELD_NAME] as $value)
					{
						if(!empty($value))
						{
							//apply appropriate check function
							$ar = call_user_func_array(
								array($CLASS_NAME, "checkfields"),
								array($arUserField, $value)
							);
							$aMsg = array_merge($aMsg, $ar);
						}
					}
				}
			}
		}
	}

	//3 Return succsess/fail flag
	if(!empty($aMsg))
	{
		$e = new CAdminException($aMsg);
		$APPLICATION->ThrowException($e);
		return false;
	}

	return true;
}