2namespace Bitrix\MessageService;
4use \Bitrix\Main\Loader;
5use \Bitrix\Rest\AppTable;
6use Bitrix\Rest\HandlerHelper;
7use \Bitrix\Rest\RestException;
8use \Bitrix\Rest\AccessException;
11Loader::includeModule(
'rest');
37 'messageservice.sender.add' => [__CLASS__,
'addSender'],
38 'messageservice.sender.update' => [__CLASS__,
'updateSender'],
39 'messageservice.sender.delete' => [__CLASS__,
'deleteSender'],
40 'messageservice.sender.list' => [__CLASS__,
'getSenderList'],
42 'messageservice.message.status.update' => [__CLASS__,
'updateMessageStatus'],
43 'messageservice.message.status.get' => [__CLASS__,
'getMessageStatus'],
60 if (!Loader::includeModule(
'rest'))
75 'filter' => [
'=APP_ID' =>
$app[
'CLIENT_ID']]
90 static::onRestAppDelete(
$fields);
104 if(!$server->getClientId())
109 self::checkAdminPermissions();
112 self::validateSender(
$params, $server);
114 $params[
'APP_ID'] = $server->getClientId();
119 '=APP_ID' =>
$params[
'APP_ID'],
126 throw new RestException(
'Sender already installed!', self::ERROR_SENDER_ALREADY_INSTALLED);
131 'DESCRIPTION' => isset(
$params[
'DESCRIPTION']) ?
$params[
'DESCRIPTION'] :
''
140 throw new RestException(
'Sender save error!', self::ERROR_SENDER_ADD_FAILURE);
143 $senderLang[
'APP_ID'] =
$result->getId();
144 static::addSenderLang($senderLang, $server->getClientId());
151 'addProvider' .
$params[
'TYPE'],
152 uniqid(
$app[
'CODE'],
true),
171 if (!$server->getClientId())
176 self::checkAdminPermissions();
181 throw new RestException(
'CODE is required!', self::ERROR_SENDER_CODE_REQUIRED);
186 throw new RestException(
'At least one other parameter is required!', self::ERROR_SENDER_OTHER_PARAMS_REQUIRED);
189 if (!empty(
$params[
'HANDLER']))
191 self::validateSenderHandler(
$params[
'HANDLER'], $server);
196 $params[
'APP_ID'] = $server->getClientId();
201 '=APP_ID' =>
$params[
'APP_ID'],
208 throw new RestException(
'Sender not found!', self::ERROR_SENDER_NOT_FOUND);
219 $senderLang[
'NAME'] =
$params[
'NAME'];
222 if (!empty(
$params[
'DESCRIPTION']))
224 $senderLang[
'DESCRIPTION'] =
$params[
'DESCRIPTION'];
229 static::updateSenderLang($senderLang, $server->getClientId());
236 if ($updateResult->getErrors())
238 throw new RestException(
'Sender update error!', self::ERROR_SENDER_UPDATE_FAILURE);
246 'updateProvider' . (
$params[
'TYPE'] ??
''),
247 uniqid(
$app[
'CODE'],
true),
264 if(!$server->getClientId())
270 self::checkAdminPermissions();
271 self::validateSenderCode(
$params[
'CODE']);
272 $params[
'APP_ID'] = $server->getClientId();
277 '=APP_ID' =>
$params[
'APP_ID'],
284 throw new RestException(
'Sender not found!', self::ERROR_SENDER_NOT_FOUND);
302 if(!$server->getClientId())
307 self::checkAdminPermissions();
309 'select' => [
'CODE'],
311 '=APP_ID' => $server->getClientId()
333 if(!$server->getClientId())
339 static::validateSenderCode(
$params[
'CODE']);
340 if (empty(
$params[
'MESSAGE_ID']))
342 throw new RestException(
'Message not found!', self::ERROR_MESSAGE_NOT_FOUND);
348 throw new RestException(
'Message status incorrect!', self::ERROR_MESSAGE_STATUS_INCORRECT);
354 $server->getClientId().
'|'.
$params[
'CODE']
358 throw new RestException(
'Message not found!', self::ERROR_MESSAGE_NOT_FOUND);
361 if (
$message->getAuthorId() !== static::getUserId())
363 static::checkAdminPermissions();
379 if (Loader::includeModule(
'intranet') && \
Bitrix\Intranet\Util::isExtranetUser(static::getUserId()))
386 if (empty(
$params[
'MESSAGE_ID']) || !is_numeric(
$params[
'MESSAGE_ID']))
388 throw new RestException(
'Message not found!', self::ERROR_MESSAGE_NOT_FOUND);
395 throw new RestException(
'Message not found!', self::ERROR_MESSAGE_NOT_FOUND);
403 private static function getUserId(): int
408 return (
int)
$USER->getID();
413 private static function checkAdminPermissions()
418 || (!
$USER->isAdmin() && !(Loader::includeModule(
'bitrix24') && \CBitrix24::isPortalAdmin(
$USER->getID())))
421 throw new AccessException();
425 private static function validateSender(
$data, $server)
429 throw new RestException(
'Empty data!', self::ERROR_SENDER_VALIDATION_FAILURE);
432 static::validateSenderCode(
$data[
'CODE']);
433 static::validateSenderHandler(
$data[
'HANDLER'], $server);
434 if (empty(
$data[
'NAME']))
436 throw new RestException(
'Empty sender NAME!', self::ERROR_SENDER_VALIDATION_FAILURE);
439 if (empty(
$data[
'TYPE']))
441 throw new RestException(
'Empty sender message TYPE!', self::ERROR_SENDER_VALIDATION_FAILURE);
444 if (!in_array(
$data[
'TYPE'], [
'SMS'],
true))
446 throw new RestException(
'Unknown sender message TYPE!', self::ERROR_SENDER_VALIDATION_FAILURE);
450 private static function validateSenderCode(
$code)
454 throw new RestException(
'Empty sender code!', self::ERROR_SENDER_VALIDATION_FAILURE);
456 if (!preg_match(
'#^[a-z0-9\.\-_]+$#i',
$code))
458 throw new RestException(
'Wrong sender code!', self::ERROR_SENDER_VALIDATION_FAILURE);
462 private static function validateSenderHandler($handler, $server)
473 private static function getApp($server)
475 if(self::$app ==
null)
477 if (Loader::includeModule(
'rest'))
482 '=CLIENT_ID' => $server->getClientId()
493 private static function addSenderLang($langFields,
$clientId)
497 if (!is_array($langFields[
'NAME']))
500 'APP_ID' => $langFields[
'APP_ID'],
501 'LANGUAGE_ID' =>
'**',
502 'NAME' => $langFields[
'NAME'],
503 'DESCRIPTION' => is_scalar($langFields[
'DESCRIPTION']) ? (string)$langFields[
'DESCRIPTION'] : null
508 foreach ($langFields[
'NAME'] as $langId => $langName)
510 $langData[mb_strtolower($langId)] = [
511 'APP_ID' => $langFields[
'APP_ID'],
512 'LANGUAGE_ID' => mb_strtolower($langId),
513 'NAME' => $langFields[
'NAME'][$langId],
514 'DESCRIPTION' => is_array($langFields[
'DESCRIPTION']) && isset($langFields[
'DESCRIPTION'][$langId])
515 ? (string)$langFields[
'DESCRIPTION'][$langId] : null
518 if (!isset($langData[
'**']))
521 'APP_ID' => $langFields[
'APP_ID'],
522 'LANGUAGE_ID' =>
'**',
523 'NAME' => $langFields[
'NAME'][$langId],
524 'DESCRIPTION' => is_array($langFields[
'DESCRIPTION']) && isset($langFields[
'DESCRIPTION'][$langId])
525 ? (string)$langFields[
'DESCRIPTION'][$langId] : null
531 $appNames = static::getAppNames(
$clientId);
532 foreach ($appNames as $langId => $appName)
534 if (isset($langData[$langId]))
536 $langData[$langId][
'APP_NAME'] = $appName;
540 foreach ($langData as $toAdd)
542 Internal\Entity\RestAppLangTable::add($toAdd);
546 private static function updateSenderLang($langFields,
$clientId)
548 $fields = [
'NAME',
'DESCRIPTION'];
552 if (isset($langFields[$field]) && !is_array($langFields[$field]))
554 $langData[
'**'][$field] = $langFields[$field];
557 if (is_array($langFields[$field]))
559 foreach ($langFields[$field] as
$lang =>
$name)
566 $appNames = static::getAppNames(
$clientId);
567 foreach ($appNames as $langId => $appName)
569 if (isset($langData[$langId]))
571 $langData[$langId][
'APP_NAME'] = $appName;
575 foreach ($langData as
$lang => $toUpdate)
577 if (empty(array_intersect_key($toUpdate, array_flip(
$fields))))
582 $toUpdate[
'APP_ID'] = $langFields[
'APP_ID'];
583 $toUpdate[
'LANGUAGE_ID'] =
$lang;
585 $existingLang = Internal\Entity\RestAppLangTable::getList([
588 '=APP_ID' => $langFields[
'APP_ID'],
589 '=LANGUAGE_ID' =>
$lang
595 Internal\Entity\RestAppLangTable::update($existingLang[
'ID'], $toUpdate);
599 Internal\Entity\RestAppLangTable::add($toUpdate);
604 private static function getAppNames(
$clientId)
606 $iterator = \Bitrix\Rest\AppTable::getList(
611 'select' => [
'ID',
'APP_NAME',
'CODE'],
616 '**' =>
$app[
'APP_NAME'] ?
$app[
'APP_NAME'] :
$app[
'CODE']
619 $orm = \Bitrix\Rest\AppLangTable::getList([
621 '=APP_ID' =>
$app[
'ID']
623 'select' => [
'LANGUAGE_ID',
'MENU_NAME']
626 while ($row = $orm->fetch())
628 $result[mb_strtolower($row[
'LANGUAGE_ID'])] = $row[
'MENU_NAME'];
631 if (isset(
$result[LANGUAGE_ID]))
static getList(array $parameters=array())
static update($primary, array $data)
static deleteByApp($appId)
static loadByExternalId(string $senderId, string $externalId, ?string $from=null)
static getDescriptions(?string $language=null)
static onRestAppUpdate(array $fields)
static onRestServiceBuildDescription()
static onRestAppDelete(array $fields)
const ERROR_SENDER_ADD_FAILURE
static getSenderList($params, $n, $server)
const ERROR_SENDER_UPDATE_FAILURE
const ERROR_SENDER_VALIDATION_FAILURE
const ERROR_SENDER_NOT_FOUND
static updateSender($params, $n, $server)
const ERROR_HANDLER_URL_MATCH
const ERROR_MESSAGE_STATUS_INCORRECT
const ERROR_SENDER_ALREADY_INSTALLED
const ERROR_UNSUPPORTED_PROTOCOL
const ERROR_SENDER_OTHER_PARAMS_REQUIRED
static getMessageStatus(array $params, int $n, CRestServer $server)
const ERROR_MESSAGE_NOT_FOUND
static deleteSender($params, $n, $server)
const ERROR_SENDER_CODE_REQUIRED
static updateMessageStatus($params, $n, $server)
const ERROR_WRONG_HANDLER_URL
static addSender($params, $n, $server)
static resolveStatus($serviceStatus)
static getByClientId($clientId)
static checkCallback($handlerUrl, $appInfo=array(), $checkInstallUrl=true)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if(!defined('SITE_ID')) $lang
AddEventToStatFile($module, $action, $tag, $label, $action_type='', $user_id=null)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
if( $guestStatuses !=='') if(!is_array($guestStatuses)) $statusList