- Модуль: 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;
}