• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/ml/model/leadscoring.php
  • Класс: Bitrix\Crm\Ml\Model\LeadScoring
  • Вызов: LeadScoring::getUserFieldFeatures
static function getUserFieldFeatures($leadId)
{
	static $fieldTypes;
	if (is_null($fieldTypes))
	{
		$fieldTypes = [];

		$leadUserType = new CCrmUserType(
			$GLOBALS['USER_FIELD_MANAGER'],
			CCrmLead::GetUserFieldEntityID()
		);
		$fieldTypes = array_map(
			static fn($field) => $field["USER_TYPE_ID"],
			$leadUserType->GetFields()
		);
	}

	$fieldValues = LeadTable::getList([
		"select" => ["UF_*"],
		"filter" => [
			"=ID" => $leadId
		]
	])->fetch();


	if (!is_array($fieldTypes) || count($fieldTypes) === 0)
	{
		return false;
	}

	$result = [];

	foreach ($fieldTypes as $fieldName => $type)
	{
		switch ($type)
		{
			case "enumeration":
			case "string":
				$result[$fieldName] = "";
				break;
			case "boolean":
				$result[$fieldName] = "N";
				break;
			case "integer":
			case "double":
				$result[$fieldName] = "";
				break;
			case "date":
				$result[$fieldName."_DAY_OF_WEEK"] = "";
				$result[$fieldName."_MONTH"] = "";
				break;
			case "datetime":
				$result[$fieldName."_DAY_OF_WEEK"] = "";
				$result[$fieldName."_MONTH"] = "";
				$result[$fieldName."_TIME"] = "";
				break;
			default:
				$result[$fieldName."_FILLED"] = "N";
				break;
		}
	}

	foreach ($fieldValues as $fieldName => $value)
	{
		$fieldType = $fieldTypes[$fieldName];
		if (!$fieldType)
		{
			continue;
		}

		if ($fieldType === "string" || $fieldType === "enumeration")
		{
			if (is_array($value))
			{
				$value = implode(" ", $value);
			}

			$result[$fieldName] = FeatureBuilder::clearText($value ?? '');
		}
		else if ($fieldType === "boolean")
		{
			if (is_array($value) && count($value) > 0)
			{
				$value = $value[0];
			}

			$result[$fieldName] = $value ? "Y" : "N";
		}
		else if ($fieldType === "integer" || $fieldType === "double")
		{
			if (is_array($value) && count($value) > 0)
			{
				$value = $value[0];
			}

			$result[$fieldName] = $value !== "" ? (int)$value : "";
		}
		else if ($fieldType === "date")
		{
			if (is_array($value) && count($value) > 0)
			{
				$value = $value[0];
			}

			$result[$fieldName . "_DAY_OF_WEEK"] = $value instanceof Date ? FeatureBuilder::getDayOfWeek($value) : "";
			$result[$fieldName . "_MONTH"] = $value instanceof Date ? FeatureBuilder::getMonth($value) : "";
		}
		else if ($fieldType === "datetime")
		{
			if (is_array($value) && count($value) > 0)
			{
				$value = $value[0];
			}

			$result[$fieldName . "_DAY_OF_WEEK"] = $value instanceof DateTime
				? FeatureBuilder::getDayOfWeek($value)
				: "";
			$result[$fieldName . "_MONTH"] = $value instanceof DateTime
				? FeatureBuilder::getMonth($value)
				: "";
			$result[$fieldName . "_TIME"] = $value instanceof DateTime
				? FeatureBuilder::getTimeMnemonic($value)
				: "";
		}
		else
		{
			$result[$fieldName . "_FILLED"] = empty($value) ? "N" : "Y";
		}
	}

	return $result;
}