• Модуль: lists
  • Путь к файлу: ~/bitrix/modules/lists/lib/bizprocdocument.php
  • Класс: BizprocDocument
  • Вызов: BizprocDocument::GetFieldInputValue
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;
}