static function GetFieldInputValue($documentType, $arFieldType, $arFieldName, $arRequest, &$arErrors)
{
if (mb_strpos($documentType, '_') === false)
$documentType .= '_0';
$arDocumentID = static::GetDocumentInfo($documentType);
if (empty($arDocumentID))
throw new CBPArgumentNullException('documentId');
$result = array();
if ($arFieldType["Type"] == "user")
{
$value = array_key_exists($arFieldName["Field"], $arRequest) ? $arRequest[$arFieldName["Field"]] : '';
if ($value !== '')
{
$arErrorsTmp1 = array();
$result = CBPHelper::UsersStringToArray($value, $arDocumentID["DOCUMENT_TYPE"], $arErrorsTmp1);
if (count($arErrorsTmp1) > 0)
{
foreach ($arErrorsTmp1 as $e)
$arErrors[] = $e;
}
}
elseif(array_key_exists($arFieldName["Field"]."_text", $arRequest))
{
$result[] = $arRequest[$arFieldName["Field"]."_text"];
}
}
elseif (array_key_exists($arFieldName["Field"], $arRequest) || array_key_exists($arFieldName["Field"]."_text", $arRequest))
{
$arValue = array();
if (array_key_exists($arFieldName["Field"], $arRequest))
{
$arValue = $arRequest[$arFieldName["Field"]];
if (!is_array($arValue) || is_array($arValue) && CBPHelper::IsAssociativeArray($arValue))
$arValue = array($arValue);
}
if (array_key_exists($arFieldName["Field"]."_text", $arRequest))
$arValue[] = $arRequest[$arFieldName["Field"]."_text"];
foreach ($arValue as $value)
{
if (is_array($value) || !is_array($value) && !CBPDocument::IsExpression(trim($value)))
{
if ($arFieldType['Type'] == 'email' || $arFieldType['Type'] == 'im' || $arFieldType['Type'] == 'web' || $arFieldType['Type'] == 'phone')
{
if (is_array($value))
{
$keys1 = array_keys($value);
foreach ($keys1 as $key1)
{
if (is_array($value[$key1]))
{
$keys2 = array_keys($value[$key1]);
foreach ($keys2 as $key2)
{
if (!isset($value[$key1][$key2]["VALUE"]) || empty($value[$key1][$key2]["VALUE"]))
unset($value[$key1][$key2]);
}
if (count($value[$key1]) <= 0)
unset($value[$key1]);
}
else
{
unset($value[$key1]);
}
}
if (count($value) <= 0)
$value = null;
}
else
{
$value = null;
}
}
elseif ($arFieldType["Type"] == "int")
{
if ($value <> '')
{
$value = str_replace(" ", "", $value);
if ($value."|" == intval($value)."|")
{
$value = intval($value);
}
else
{
$value = null;
$arErrors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("BPCGWTL_INVALID1"),
"parameter" => $arFieldName["Field"],
);
}
}
else
{
$value = null;
}
}
elseif ($arFieldType["Type"] == "double")
{
if ($value <> '')
{
$value = str_replace(" ", "", str_replace(",", ".", $value));
if (is_numeric($value))
{
$value = doubleval($value);
}
else
{
$value = null;
$arErrors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("BPCGWTL_INVALID11"),
"parameter" => $arFieldName["Field"],
);
}
}
else
{
$value = null;
}
}
elseif ($arFieldType["Type"] == "select")
{
if (!is_array($arFieldType["Options"]) || count($arFieldType["Options"]) <= 0 || $value == '')
{
$value = null;
}
else
{
$ar = array_values($arFieldType["Options"]);
if (is_array($ar[0]))
{
$b = false;
foreach ($ar as $a)
{
if ($a[0] == $value)
{
$b = true;
break;
}
}
if (!$b)
{
$value = null;
$arErrors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("BPCGWTL_INVALID35"),
"parameter" => $arFieldName["Field"],
);
}
}
else
{
if (!array_key_exists($value, $arFieldType["Options"]))
{
$value = null;
$arErrors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("BPCGWTL_INVALID35"),
"parameter" => $arFieldName["Field"],
);
}
}
}
}
elseif ($arFieldType["Type"] == "bool")
{
if ($value !== "Y" && $value !== "N")
{
if ($value === true)
{
$value = "Y";
}
elseif ($value === false)
{
$value = "N";
}
elseif ($value <> '')
{
$value = mb_strtolower($value);
if (in_array($value, array("y", "yes", "true", "1")))
{
$value = "Y";
}
elseif (in_array($value, array("n", "no", "false", "0")))
{
$value = "N";
}
else
{
$value = null;
$arErrors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("BPCGWTL_INVALID45"),
"parameter" => $arFieldName["Field"],
);
}
}
else
{
$value = null;
}
}
}
elseif ($arFieldType["Type"] == "file")
{
if (is_array($value) && array_key_exists("name", $value) && $value["name"] <> '')
{
if (!array_key_exists("MODULE_ID", $value) || $value["MODULE_ID"] == '')
$value["MODULE_ID"] = "bizproc";
$value = CFile::SaveFile($value, "bizproc_wf", true, true);
if (!$value)
{
$value = null;
$arErrors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("BPCGWTL_INVALID915"),
"parameter" => $arFieldName["Field"],
);
}
}
else
{
$value = null;
}
}
elseif (mb_strpos($arFieldType["Type"], ":") !== false)
{
$customTypeID = str_replace('UF:', '', $arFieldType['Type']);
$arCustomType = $GLOBALS["USER_FIELD_MANAGER"]->GetUserType($customTypeID);
if($customTypeID === 'crm' && $value === '')
{
//skip empty crm entity references
$value = null;
}
elseif ($value !== null && $arCustomType && array_key_exists("CheckFields", $arCustomType))
{
$arErrorsTmp1 = call_user_func_array(
$arCustomType["CheckFields"],
array(
array("LINK_IBLOCK_ID" => $arFieldType["Options"]),
array("VALUE" => $value)
)
);
if (count($arErrorsTmp1) > 0)
{
$value = null;
foreach ($arErrorsTmp1 as $e)
$arErrors[] = array(
"code" => "ErrorValue",
"message" => $e,
"parameter" => $arFieldName["Field"],
);
}
}
if (!is_array($value) && ($value == '') || is_array($value) && (count($value) == 0 || count($value) == 1 && isset($value["VALUE"]) && !is_array($value["VALUE"]) && $value["VALUE"] == ''))
$value = null;
}
else
{
if (!is_array($value) && $value == '')
$value = null;
}
}
if ($value !== null)
$result[] = $value;
}
}
$qty = count($result);
if($arFieldType["Type"] === "UF:boolean")
{
//Boolean is not multiple. Last value is actual.
$result = $qty > 0 ? $result[$qty - 1] : null;
}
elseif($arFieldType["Type"] === "UF:disk_file")
{
$result = array_unique($result);
}
elseif(!$arFieldType["Multiple"])
{
$result = $qty > 0 ? $result[$qty - 1] : null;
}
return $result;
}