- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_rest.php
- Класс: CIMRestService
- Вызов: CIMRestService::messageUpdate
static function messageUpdate($arParams, $n, CRestServer $server)
{
$arParams = array_change_key_case($arParams, CASE_UPPER);
if (isset($arParams['MESSAGE_ID']))
{
$arParams['ID'] = $arParams['MESSAGE_ID'];
}
$arParams['ID'] = intval($arParams['ID']);
if ($arParams['ID'] <= 0)
{
throw new BitrixRestRestException("Message ID can't be empty", "MESSAGE_ID_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
$arParams['IS_EDITED'] = $arParams['IS_EDITED'] == 'N'? 'N': 'Y';
$message = null;
if (isset($arParams['ATTACH']))
{
$message = CIMMessenger::CheckPossibilityUpdateMessage(IM_CHECK_UPDATE, $arParams['ID']);
if (!$message)
{
throw new BitrixRestRestException("Time has expired for modification or you don't have access", "CANT_EDIT_MESSAGE", CRestServer::STATUS_FORBIDDEN);
}
if (empty($arParams['ATTACH']) || $arParams['ATTACH'] == 'N')
{
CIMMessageParam::Set($arParams['ID'], Array('IS_EDITED' => $arParams['IS_EDITED'], 'ATTACH' => Array()));
}
else
{
$attach = CIMMessageParamAttach::GetAttachByJson($arParams['ATTACH']);
if ($attach)
{
if ($attach->IsAllowSize())
{
CIMMessageParam::Set($arParams['ID'], Array('IS_EDITED' => $arParams['IS_EDITED'], 'ATTACH' => $attach));
}
else
{
throw new BitrixRestRestException("You have exceeded the maximum allowable size of attach", "ATTACH_OVERSIZE", CRestServer::STATUS_WRONG_REQUEST);
}
}
else if ($arParams['ATTACH'])
{
throw new BitrixRestRestException("Incorrect attach params", "ATTACH_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
}
}
if (isset($arParams['KEYBOARD']))
{
if (is_null($message))
{
$message = CIMMessenger::CheckPossibilityUpdateMessage(IM_CHECK_UPDATE, $arParams['ID']);
}
if (!$message)
{
throw new BitrixRestRestException("Time has expired for modification or you don't have access", "CANT_EDIT_MESSAGE", CRestServer::STATUS_FORBIDDEN);
}
if (empty($arParams['KEYBOARD']) || $arParams['KEYBOARD'] == 'N')
{
CIMMessageParam::Set($arParams['ID'], Array('KEYBOARD' => 'N'));
}
else
{
$keyboard = Array();
if (is_string($arParams['KEYBOARD']))
{
$arParams['KEYBOARD'] = CUtil::JsObjectToPhp($arParams['KEYBOARD']);
}
if (!isset($arParams['KEYBOARD']['BUTTONS']))
{
$keyboard['BUTTONS'] = $arParams['KEYBOARD'];
}
else
{
$keyboard = $arParams['KEYBOARD'];
}
$keyboard['BOT_ID'] = $arParams['BOT_ID'];
$keyboard = BitrixImBotKeyboard::getKeyboardByJson($keyboard);
if ($keyboard)
{
if ($keyboard->isAllowSize())
{
CIMMessageParam::Set($arParams['ID'], Array('KEYBOARD' => $keyboard));
}
else
{
throw new BitrixRestRestException("You have exceeded the maximum allowable size of keyboard", "KEYBOARD_OVERSIZE", CRestServer::STATUS_WRONG_REQUEST);
}
}
else if ($arParams['KEYBOARD'])
{
throw new BitrixRestRestException("Incorrect keyboard params", "KEYBOARD_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
}
}
if (isset($arParams['MENU']))
{
if (is_null($message))
{
$message = CIMMessenger::CheckPossibilityUpdateMessage(IM_CHECK_UPDATE, $arParams['MESSAGE_ID'], $arParams['BOT_ID']);
}
if (!$message)
{
throw new BitrixRestRestException("Time has expired for modification or you don't have access", "CANT_EDIT_MESSAGE", CRestServer::STATUS_FORBIDDEN);
}
if (empty($arParams['MENU']) || $arParams['MENU'] == 'N')
{
CIMMessageParam::Set($arParams['MESSAGE_ID'], Array('MENU' => 'N'));
}
else
{
$menu = Array();
if (is_string($arParams['MENU']))
{
$arParams['MENU'] = CUtil::JsObjectToPhp($arParams['MENU']);
}
if (!isset($arParams['MENU']['ITEMS']))
{
$menu['ITEMS'] = $arParams['MENU'];
}
else
{
$menu = $arParams['MENU'];
}
$menu['BOT_ID'] = $arParams['BOT_ID'];
$menu = BitrixImBotContextMenu::getByJson($menu);
if ($menu)
{
if ($menu->isAllowSize())
{
CIMMessageParam::Set($arParams['MESSAGE_ID'], Array('MENU' => $menu));
}
else
{
throw new BitrixRestRestException("You have exceeded the maximum allowable size of menu", "MENU_OVERSIZE", CRestServer::STATUS_WRONG_REQUEST);
}
}
else if ($arParams['MENU'])
{
throw new BitrixRestRestException("Incorrect menu params", "menu_ERROR", CRestServer::STATUS_WRONG_REQUEST);
}
}
}
if (isset($arParams['MESSAGE']))
{
$urlPreview = isset($arParams['URL_PREVIEW']) && $arParams['URL_PREVIEW'] == "N"? false: true;
$res = CIMMessenger::Update($arParams['ID'], $arParams['MESSAGE'], $urlPreview);
if (!$res)
{
throw new BitrixRestRestException("Time has expired for modification or you don't have access", "CANT_EDIT_MESSAGE", CRestServer::STATUS_FORBIDDEN);
}
}
CIMMessageParam::SendPull($arParams['ID'], Array('KEYBOARD', 'ATTACH', 'MENU'));
return true;
}