- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_rest.php
- Класс: CIMRestService
- Вызов: CIMRestService::commandUpdate
static function commandUpdate($arParams, $n, CRestServer $server)
{
if ($server->getAuthType() == BitrixRestSessionAuthAuth::AUTH_TYPE)
{
throw new BitrixRestRestException("Access for this method not allowed by session authorization.", "WRONG_AUTH_TYPE", CRestServer::STATUS_FORBIDDEN);
}
$arParams = array_change_key_case($arParams, CASE_UPPER);
$clientId = $server->getClientId();
$customClientId = false;
if (!$clientId)
{
if (!empty($arParams['CLIENT_ID']))
{
$customClientId = true;
$clientId = 'custom'.$arParams['CLIENT_ID'];
}
else
{
throw new BitrixRestAccessException("Client ID not specified");
}
}
$bots = BitrixImCommand::getListCache();
if (!isset($bots[$arParams['COMMAND_ID']]))
{
throw new BitrixRestRestException("Command not found", "COMMAND_ID_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
if ($bots[$arParams['COMMAND_ID']]['APP_ID'] != $clientId)
{
throw new BitrixRestRestException("Command was installed by another rest application", "APP_ID_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
if ($customClientId)
{
$arApp = ['ID' => '', 'CLIENT_ID' => $arParams['CLIENT_ID']];
}
else
{
$dbRes = BitrixRestAppTable::getList(array('filter' => array('=CLIENT_ID' => $clientId)));
$arApp = $dbRes->fetch();
}
$updateEvents = Array();
if (isset($arParams['FIELDS']['EVENT_COMMAND_ADD']) && !empty($arParams['FIELDS']['EVENT_COMMAND_ADD']))
{
$updateEvents['EVENT_COMMAND_ADD'] = $arParams['FIELDS']['EVENT_COMMAND_ADD'];
if ($customClientId)
{
$updateEvents['EVENT_COMMAND_ADD'] = $updateEvents['EVENT_COMMAND_ADD'].(mb_strpos($updateEvents['EVENT_COMMAND_ADD'], '?') === false? '?': '&').'CLIENT_ID='.$arParams['CLIENT_ID'];
}
try
{
BitrixRestHandlerHelper::checkCallback($arParams['FIELDS']['EVENT_COMMAND_ADD'], $arApp);
}
catch(Exception $e)
{
throw new BitrixRestRestException($e->getMessage(), "EVENT_COMMAND_ADD_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
}
$updateFields = Array();
if (isset($arParams['FIELDS']['COMMAND']) && !empty($arParams['FIELDS']['COMMAND']))
{
$updateFields['COMMAND'] = $arParams['FIELDS']['COMMAND'];
}
if (isset($arParams['FIELDS']['HIDDEN']) && !empty($arParams['FIELDS']['HIDDEN']))
{
$updateFields['HIDDEN'] = $arParams['FIELDS']['HIDDEN'] == 'Y'? 'Y': 'N';
}
if (isset($arParams['FIELDS']['EXTRANET_SUPPORT']) && !empty($arParams['FIELDS']['EXTRANET_SUPPORT']))
{
$updateFields['EXTRANET_SUPPORT'] = $arParams['FIELDS']['EXTRANET_SUPPORT'] == 'Y'? 'Y': 'N';
}
if (isset($arParams['FIELDS']['LANG']) && !empty($arParams['FIELDS']['LANG']))
{
$updateFields['LANG'] = $arParams['FIELDS']['LANG'];
}
if (empty($updateFields))
{
if (empty($updateEvents))
{
throw new BitrixRestRestException("Update fields can't be empty", "WRONG_REQUEST", CRestServer::STATUS_WRONG_REQUEST);
}
}
else
{
$result = BitrixImCommand::update(Array('COMMAND_ID' => $arParams['COMMAND_ID']), $updateFields);
if (!$result)
{
throw new BitrixRestRestException("Command can't be updated", "WRONG_REQUEST", CRestServer::STATUS_WRONG_REQUEST);
}
}
if (isset($updateEvents['EVENT_COMMAND_ADD']))
{
self::unbindEvent($arApp['ID'], $arApp['CLIENT_ID'], 'im', 'onImCommandAdd', 'onImCommandAdd', true);
self::bindEvent($arApp['ID'], $arApp['CLIENT_ID'], 'im', 'onImCommandAdd', 'onImCommandAdd', $updateEvents['EVENT_COMMAND_ADD']);
}
return true;
}