• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_document.php
  • Класс: \CCrmDocument
  • Вызов: CCrmDocument::GetFieldInputValue
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;
}