static function GetFieldInputValue($documentType, $fieldType, $fieldName, $request, &$errors)
{
$iblockId = intval(mb_substr($documentType, mb_strlen("iblock_")));
if ($iblockId <= 0)
throw new CBPArgumentOutOfRangeException("documentType", $documentType);
$result = array();
if ($fieldType["Type"] == "user")
{
$value = $request[$fieldName["Field"]];
if ($value <> '')
{
$result = CBPHelper::usersStringToArray($value, array("lists", get_called_class(), $documentType), $errors);
if (count($errors) > 0)
{
foreach ($errors as $e)
$errors[] = $e;
}
}
else
$result = null;
}
elseif (array_key_exists($fieldName["Field"], $request) || array_key_exists($fieldName["Field"]."_text", $request))
{
$valueArray = array();
if (array_key_exists($fieldName["Field"], $request))
{
$valueArray = $request[$fieldName["Field"]];
if (!is_array($valueArray) || is_array($valueArray) && CBPHelper::isAssociativeArray($valueArray))
$valueArray = array($valueArray);
}
if (array_key_exists($fieldName["Field"]."_text", $request))
$valueArray[] = $request[$fieldName["Field"]."_text"];
foreach ($valueArray as $value)
{
if (is_array($value) || !is_array($value) && !CBPDocument::IsExpression(trim($value)))
{
if ($fieldType["Type"] == "int")
{
if ($value <> '')
{
$value = str_replace(" ", "", str_replace(",", ".", $value));
if (is_numeric($value))
{
$value = doubleval($value);
}
else
{
$value = null;
$errors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("LISTS_BIZPROC_INVALID_INT"),
"parameter" => $fieldName["Field"],
);
}
}
else
{
$value = null;
}
}
elseif ($fieldType["Type"] == "double")
{
if ($value <> '')
{
$value = str_replace(" ", "", str_replace(",", ".", $value));
if (is_numeric($value))
{
$value = doubleval($value);
}
else
{
$value = null;
$errors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("LISTS_BIZPROC_INVALID_INT"),
"parameter" => $fieldName["Field"],
);
}
}
else
{
$value = null;
}
}
elseif ($fieldType["Type"] == "select")
{
if (!is_array($fieldType["Options"]) || count($fieldType["Options"]) <= 0 || $value == '')
{
$value = null;
}
else
{
$ar = array_values($fieldType["Options"]);
if (is_array($ar[0]))
{
$b = false;
foreach ($ar as $a)
{
if ($a[0] == $value)
{
$b = true;
break;
}
}
if (!$b)
{
$value = null;
$errors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("LISTS_BIZPROC_INVALID_SELECT"),
"parameter" => $fieldName["Field"],
);
}
}
else
{
if (!array_key_exists($value, $fieldType["Options"]))
{
$value = null;
$errors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("LISTS_BIZPROC_INVALID_SELECT"),
"parameter" => $fieldName["Field"],
);
}
}
}
}
elseif ($fieldType["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;
$errors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("BPCGWTL_INVALID45"),
"parameter" => $fieldName["Field"],
);
}
}
else
{
$value = null;
}
}
}
elseif ($fieldType["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;
$errors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("BPCGWTL_INVALID915"),
"parameter" => $fieldName["Field"],
);
}
}
else
{
$value = null;
}
}
elseif ($fieldType["Type"] == "date")
{
if ($value <> '')
{
if(!CheckDateTime($value, FORMAT_DATE))
{
$value = null;
$errors[] = array(
"code" => "ErrorValue",
"message" => GetMessage("LISTS_BIZPROC_INVALID_DATE"),
"parameter" => $fieldName["Field"],
);
}
}
else
{
$value = null;
}
}
elseif ($fieldType["Type"] == "datetime")
{
if ($value <> '')
{
$valueTemporary = array();
$valueTemporary["VALUE"] = $value;
$result = CIBlockPropertyDateTime::checkFields('', $valueTemporary);
if (!empty($result))
{
$message = '';
foreach ($result as $error)
$message .= $error;
$value = null;
$errors[] = array(
"code" => "ErrorValue",
"message" => $message,
"parameter" => $fieldName["Field"],
);
}
}
else
{
$value = null;
}
}
elseif (mb_strpos($fieldType["Type"], ":") !== false && $fieldType["Type"] != "S:HTML")
{
$customType = CIBlockProperty::getUserType(mb_substr($fieldType["Type"], 2));
if (array_key_exists("GetLength", $customType))
{
if (call_user_func_array(
$customType["GetLength"],
array(
array("LINK_IBLOCK_ID" => $fieldType["Options"]),
array("VALUE" => $value)
)
) <= 0)
{
$value = null;
}
}
if (($value != null) && array_key_exists("CheckFields", $customType))
{
$errorsTemporary = call_user_func_array(
$customType["CheckFields"],
array(
array("LINK_IBLOCK_ID" => $fieldType["Options"]),
array("VALUE" => $value)
)
);
if (count($errorsTemporary) > 0)
{
$value = null;
foreach ($errorsTemporary as $e)
$errors[] = array(
"code" => "ErrorValue",
"message" => $e,
"parameter" => $fieldName["Field"],
);
}
}
elseif (!array_key_exists("GetLength", $customType) && $value === '')
$value = null;
if (
$value !== null &&
$fieldType["Type"] == "S:employee" &&
COption::getOptionString("bizproc", "employee_compatible_mode", "N") != "Y"
)
{
$value = "user_".$value;
}
}
else
{
if (!is_array($value) && $value == '')
$value = null;
}
}
if ($value !== null)
$result[] = $value;
}
}
if (!$fieldType["Multiple"])
{
if (is_array($result) && count($result) > 0)
$result = $result[0];
else
$result = null;
}
return $result;
}