• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/api/userfieldtype.php
  • Класс: BitrixRestApiUserFieldType
  • Вызов: UserFieldType::add
static function add($param, $n, CRestServer $server)
{
	static::checkPermission($server);

	$param = array_change_key_case($param, CASE_UPPER);

	$userTypeId = toLower($param['USER_TYPE_ID']);
	$placementHandler = $param['HANDLER'];

	if($userTypeId == '')
	{
		throw new ArgumentNullException("USER_TYPE_ID");
	}

	if($placementHandler == '')
	{
		throw new ArgumentNullException("HANDLER");
	}

	$appInfo = AppTable::getByClientId($server->getClientId());;

	HandlerHelper::checkCallback($placementHandler, $appInfo);

	$placementBind = array(
		'APP_ID' => $appInfo['ID'],
		'PLACEMENT' => static::PLACEMENT_UF_TYPE,
		'PLACEMENT_HANDLER' => $placementHandler,
		'TITLE' => $userTypeId,
		'ADDITIONAL' => $userTypeId,
		'OPTIONS' => static::prepareOption($param['OPTIONS']),
	);

	$placementBind = array_merge(
		$placementBind,
		Lang::fillCompatibility(
			$param,
			[
				'TITLE',
				'DESCRIPTION',
			],
			[
				'TITLE' => $placementBind['TITLE']
			]
		)
	);
	$langAll = [];
	if ($placementBind['LANG_ALL'])
	{
		$langAll = $placementBind['LANG_ALL'];
	}
	unset($placementBind['LANG_ALL']);

	$result = PlacementTable::add($placementBind);
	if(!$result->isSuccess())
	{
		$errorMessage = $result->getErrorMessages();
		throw new RestException(
			'Unable to set placement handler: '.implode(', ', $errorMessage),
			RestException::ERROR_CORE
		);
	}
	else
	{
		$placementId = $result->getId();
		foreach ($langAll as $lang => $item)
		{
			$item['PLACEMENT_ID'] = $placementId;
			$item['LANGUAGE_ID'] = $lang;
			$res = PlacementLangTable::add($item);
			if (!$res->isSuccess())
			{
				throw new RestException(
					'Error: ' . implode(', ', $res->getErrorMessages()),
					RestException::ERROR_CORE
				);
			}
		}
		Callback::bind(array(
			'ID' => $placementId,
			'APP_ID' => $appInfo['ID'],
			'ADDITIONAL' => $userTypeId,
		));
	}

	return true;
}