- Модуль: 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;
}