12 Bitrix\Main\Localization\Loc,
13 Bitrix\Main\DB\Exception;
14Loc::loadMessages(__FILE__);
24 $command = mb_substr(
$fields[
'COMMAND'], 0, 1) ==
'/'? mb_substr(
$fields[
'COMMAND'], 1) :
$fields[
'COMMAND'];
32 $common = isset(
$fields[
'COMMON']) &&
$fields[
'COMMON'] ==
'Y'?
'Y':
'N';
38 $hidden = isset(
$fields[
'HIDDEN']) &&
$fields[
'HIDDEN'] ==
'Y'?
'Y':
'N';
39 $sonetSupport = isset(
$fields[
'SONET_SUPPORT']) &&
$fields[
'SONET_SUPPORT'] ==
'Y'?
'Y':
'N';
40 $extranetSupport = isset(
$fields[
'EXTRANET_SUPPORT']) &&
$fields[
'EXTRANET_SUPPORT'] ==
'Y'?
'Y':
'N';
44 $methodCommandAdd = isset(
$fields[
'METHOD_COMMAND_ADD'])?
$fields[
'METHOD_COMMAND_ADD']:
'';
45 $methodLangGet = isset(
$fields[
'METHOD_LANG_GET'])?
$fields[
'METHOD_LANG_GET']:
'';
57 if (empty($appId) || empty($langSet) && $hidden ==
'N')
64 if (empty($class) || empty($methodCommandAdd))
68 if (empty($methodLangGet))
74 $commands = self::getListCache();
75 foreach ($commands as $cmd)
79 if ($botId == $cmd[
'BOT_ID'] && $command == $cmd[
'COMMAND'])
86 if ($appId == $cmd[
'APP_ID'] && $command == $cmd[
'COMMAND'])
91 else if (
$moduleId == $cmd[
'MODULE_ID'] && $command == $cmd[
'COMMAND'])
97 $result = \Bitrix\Im\Model\CommandTable::add(Array(
100 'COMMAND' => $command,
103 'SONET_SUPPORT' => $sonetSupport,
104 'EXTRANET_SUPPORT' => $extranetSupport,
106 'METHOD_COMMAND_ADD' => $methodCommandAdd,
107 'METHOD_LANG_GET' => $methodLangGet,
114 $cache = \Bitrix\Main\Data\Cache::createInstance();
115 $cache->cleanDir(self::CACHE_PATH);
121 foreach ($langSet as
$lang)
123 if (!isset(
$lang[
'LANGUAGE_ID']) || empty(
$lang[
'LANGUAGE_ID']))
126 if (!isset(
$lang[
'TITLE']) && empty(
$lang[
'TITLE']))
131 \Bitrix\Im\Model\CommandLangTable::add(
array(
132 'COMMAND_ID' => $commandId,
133 'LANGUAGE_ID' => mb_strtolower(
$lang[
'LANGUAGE_ID']),
134 'TITLE' =>
$lang[
'TITLE'],
135 'PARAMS' => isset(
$lang[
'PARAMS'])?
$lang[
'PARAMS']:
''
149 $commandId = intval($command[
'COMMAND_ID']);
150 $moduleId = isset($command[
'MODULE_ID'])? $command[
'MODULE_ID']:
'';
151 $appId = isset($command[
'APP_ID'])? $command[
'APP_ID']:
'';
153 if (intval($commandId) <= 0)
156 if (!isset($command[
'FORCE']) || $command[
'FORCE'] ==
'N')
158 $commands = self::getListCache();
159 if (!isset($commands[$commandId]))
165 if ($appId <>
'' && $commands[$commandId][
'APP_ID'] != $appId)
169 \Bitrix\Im\Model\CommandTable::delete($commandId);
171 $orm = \Bitrix\Im\Model\CommandLangTable::getList(Array(
172 'filter' => Array(
'=COMMAND_ID' => $commandId)
174 while ($row = $orm->fetch())
176 \Bitrix\Im\Model\CommandLangTable::delete($row[
'ID']);
179 $cache = \Bitrix\Main\Data\Cache::createInstance();
180 $cache->cleanDir(self::CACHE_PATH);
184 \CPullStack::AddShared(Array(
186 'command' =>
'commandDelete',
188 'commandId' => $commandId
199 $commandId = $command[
'COMMAND_ID'];
200 $moduleId = isset($command[
'MODULE_ID'])? $command[
'MODULE_ID']:
'';
201 $appId = isset($command[
'APP_ID'])? $command[
'APP_ID']:
'';
203 if (intval($commandId) <= 0)
206 $commands = self::getListCache();
207 if (!isset($commands[$commandId]))
213 if ($appId <>
'' && $commands[$commandId][
'APP_ID'] != $appId)
216 if (isset($updateFields[
'LANG']) && $commands[$commandId][
'MODULE_ID'] ==
'rest')
218 $orm = \Bitrix\Im\Model\CommandLangTable::getList(Array(
219 'filter' => Array(
'=COMMAND_ID' => $commandId)
221 while ($row = $orm->fetch())
223 \Bitrix\Im\Model\CommandLangTable::delete($row[
'ID']);
225 foreach ($updateFields[
'LANG'] as
$lang)
227 if (!isset(
$lang[
'LANGUAGE_ID']) || empty(
$lang[
'LANGUAGE_ID']))
230 if (!isset(
$lang[
'TITLE']) && empty(
$lang[
'TITLE']))
235 \Bitrix\Im\Model\CommandLangTable::add(
array(
236 'COMMAND_ID' => $commandId,
237 'LANGUAGE_ID' => mb_strtolower(
$lang[
'LANGUAGE_ID']),
238 'TITLE' =>
$lang[
'TITLE'],
239 'PARAMS' => isset(
$lang[
'PARAMS'])?
$lang[
'PARAMS']:
''
249 if (isset($updateFields[
'CLASS']) && !empty($updateFields[
'CLASS']))
251 $update[
'CLASS'] = $updateFields[
'CLASS'];
253 if (isset($updateFields[
'METHOD_COMMAND_ADD']))
255 $update[
'METHOD_COMMAND_ADD'] = $updateFields[
'METHOD_COMMAND_ADD'];
257 if (isset($updateFields[
'METHOD_LANG_GET']))
259 $update[
'METHOD_LANG_GET'] = $updateFields[
'METHOD_LANG_GET'];
261 if (isset($updateFields[
'COMMON']))
263 if ($commands[$commandId][
'BOT_ID'] <= 0)
265 $update[
'COMMON'] =
'Y';
269 $update[
'COMMON'] = $updateFields[
'COMMON'] ==
'Y'?
'Y':
'N';
272 if (isset($updateFields[
'HIDDEN']))
274 $update[
'HIDDEN'] = $updateFields[
'HIDDEN'] ==
'Y'?
'Y':
'N';
276 if (isset($updateFields[
'EXTRANET_SUPPORT']))
278 $update[
'EXTRANET_SUPPORT'] = $updateFields[
'EXTRANET_SUPPORT'] ==
'Y'?
'Y':
'N';
280 if (isset($updateFields[
'SONET_SUPPORT']))
282 $update[
'SONET_SUPPORT'] = $updateFields[
'SONET_SUPPORT'] ==
'Y'?
'Y':
'N';
286 \Bitrix\Im\Model\CommandTable::update($commandId, $update);
288 $cache = \Bitrix\Main\Data\Cache::createInstance();
289 $cache->cleanDir(self::CACHE_PATH);
300 if ($skipCommand ===
'Y' || $isSystem ===
'Y')
305 $commands = self::getListCache();
306 if (empty($commands))
311 $commandList = Array();
313 if (preg_match_all(
"/^\\/(?P<COMMAND>[^\\040\\n]*)(\\040?)(?P<PARAMS>.*)$/m",
$message,
$matches))
315 foreach(
$matches[
'COMMAND'] as $idx => $cmd)
317 $commandData = self::findCommands(Array(
'COMMAND' => $cmd,
'EXEC_PARAMS' =>
$matches[
'PARAMS'][$idx],
'MESSAGE_FIELDS' =>
$messageFields));
323 $commandList = array_merge($commandList, $commandData);
326 if (empty($commandList))
341 foreach ($commandList as
$params)
348 if (isset($executed[
$hash]) && $executed[
$hash])
352 $executed[
$hash] =
true;
377 \Bitrix\Im\Model\BotTable::update(
$params[
'BOT_ID'],
array(
403 $commandId = intval(
$access[
'COMMAND_ID']);
410 $commands = self::getListCache();
411 if (!isset($commands[$commandId]))
417 if ($appId <>
'' && $commands[$commandId][
'APP_ID'] != $appId)
420 $botId = intval($commands[$commandId][
'BOT_ID']);
422 $orm = \Bitrix\Im\Model\MessageTable::getById(
$messageId);
426 $orm = \Bitrix\Im\Model\ChatTable::getById(
$message[
'CHAT_ID']);
427 if (!($chat = $orm->fetch()))
430 $relations = \CIMChat::GetRelationById(
$message[
'CHAT_ID'],
false,
true,
false);
432 $chatWithBot =
false;
433 foreach ($relations as
$userId => $relation)
440 if (
$message[
'AUTHOR_ID'] == $botId)
443 if ($botId != $relation[
'USER_ID'])
449 else if (
$message[
'AUTHOR_ID'] != $relation[
'USER_ID'])
458 $grantAccess =
false;
466 $grantAccess =
false;
467 if (preg_match_all(
"/^\\/(?P<COMMAND>[^\\040\\n]*)(\\040?)(?P<PARAMS>.*)$/m",
$message[
'MESSAGE'],
$matches))
469 foreach(
$matches[
'COMMAND'] as $idx => $cmd)
471 if ($commands[$commandId][
'COMMAND'] == $cmd)
495 "FROM_USER_ID" => $botId,
496 "TO_CHAT_ID" => $chatId,
509 "FROM_USER_ID" => $botId,
510 "TO_CHAT_ID" => $chatId,
522 $ar[
'MESSAGE'] = Loc::getMessage(
"COMMAND_BOT_ANSWER", Array(
"#BOT_NAME#" =>
"[USER=".$botId.
"][/USER]")) .
"\n " .
$ar[
'MESSAGE'];
526 $ar[
'MESSAGE'] =
"[B]".Loc::getMessage(
"COMMAND_SYSTEM_ANSWER", Array(
"#COMMAND#" =>
"/".$commands[$commandId][
'COMMAND'])).
"[/B]\n ".
$ar[
'MESSAGE'];
532 $ar[
'URL_PREVIEW'] =
'N';
535 $ar[
'SKIP_USER_CHECK'] =
'Y';
536 $ar[
'SKIP_COMMAND'] =
'Y';
538 $id = \CIMChat::AddMessage(
$ar);
551 \CModule::IncludeModule(
'imbot');
556 "TO_USER_ID" =>
$message[
'AUTHOR_ID'],
568 "FROM_USER_ID" =>
$message[
'AUTHOR_ID'],
580 $ar[
'MESSAGE'] = Loc::getMessage(
"COMMAND_BOT_ANSWER", Array(
"#BOT_NAME#" =>
"[USER=".$botId.
"][/USER]")) .
"\n " .
$ar[
'MESSAGE'];
584 $ar[
'MESSAGE'] =
"[B]".Loc::getMessage(
"COMMAND_SYSTEM_ANSWER", Array(
"#COMMAND#" =>
"/".$commands[$commandId][
'COMMAND'])).
"[/B]\n ".
$ar[
'MESSAGE'];
590 $ar[
'URL_PREVIEW'] =
'N';
593 $ar[
'SKIP_COMMAND'] =
'Y';
608 $dialogId =
'chat'.$messageFields[
'TO_CHAT_ID'];
614 private static function findCommands(
$fields)
616 $command = mb_substr(
$fields[
'COMMAND'], 0, 1) ==
'/'? mb_substr(
$fields[
'COMMAND'], 1) :
$fields[
'COMMAND'];
617 $execParams = isset(
$fields[
'EXEC_PARAMS'])?
$fields[
'EXEC_PARAMS']:
'';
622 $relations = \CIMChat::GetRelationById(
$messageFields[
'TO_CHAT_ID'],
false,
true,
false);
631 $commands = self::getListCache();
632 $bots = Bot::getListCache();
633 foreach ($commands as $value)
637 $chatEntityType ===
'LIVECHAT'
638 || ($chatEntityType ===
'LINES' && $bots[$value[
'BOT_ID']][
'OPENLINE'] !=
'Y')
643 if ($value[
'COMMAND'] == $command)
645 if ($value[
'EXTRANET_SUPPORT'] ==
'N' && $isExtranet)
649 if ($value[
'COMMON'] ==
'N')
660 if (!isset($relations[$value[
'BOT_ID']]))
676 private static function mergeWithDefaultCommands($commands)
678 $defaultCommands = Array(
679 Array(
'COMMAND' =>
'me',
'TITLE' => Loc::getMessage(
"COMMAND_DEF_ME_TITLE"),
'PARAMS' => Loc::getMessage(
"COMMAND_DEF_ME_PARAMS"),
'HIDDEN' =>
'N',
'EXTRANET_SUPPORT' =>
'Y'),
680 Array(
'COMMAND' =>
'loud',
'TITLE' => Loc::getMessage(
"COMMAND_DEF_LOUD_TITLE"),
'PARAMS' => Loc::getMessage(
"COMMAND_DEF_LOUD_PARAMS"),
'HIDDEN' =>
'N',
'EXTRANET_SUPPORT' =>
'Y'),
681 Array(
'COMMAND' =>
'>>',
'TITLE' => Loc::getMessage(
"COMMAND_DEF_QUOTE_TITLE"),
'PARAMS' => Loc::getMessage(
"COMMAND_DEF_QUOTE_PARAMS"),
'HIDDEN' =>
'N',
'EXTRANET_SUPPORT' =>
'Y'),
682 Array(
'COMMAND' =>
'rename',
'TITLE' => Loc::getMessage(
"COMMAND_DEF_RENAME_TITLE"),
'PARAMS' => Loc::getMessage(
"COMMAND_DEF_RENAME_PARAMS"),
'HIDDEN' =>
'N',
'EXTRANET_SUPPORT' =>
'Y',
'CATEGORY' => Loc::getMessage(
"COMMAND_DEF_CATEGORY_CHAT"),
'CONTEXT' =>
'chat'),
683 Array(
'COMMAND' =>
'getDialogId',
'TITLE' => Loc::getMessage(
"COMMAND_DEF_DIALOGID_TITLE"),
'HIDDEN' =>
'N',
'EXTRANET_SUPPORT' =>
'N',
'CATEGORY' => Loc::getMessage(
"COMMAND_DEF_CATEGORY_CHAT")),
684 Array(
'COMMAND' =>
'webrtcDebug',
'TITLE' => Loc::getMessage(
"COMMAND_DEF_WD_TITLE"),
'HIDDEN' =>
'N',
'EXTRANET_SUPPORT' =>
'Y',
'CATEGORY' => Loc::getMessage(
"COMMAND_DEF_CATEGORY_DEBUG"),
'CONTEXT' =>
'call'),
687 $imCommands = Array();
688 foreach ($defaultCommands as
$i => $command)
690 $newCommand[
'ID'] =
'def'.$i;
691 $newCommand[
'BOT_ID'] = 0;
692 $newCommand[
'APP_ID'] =
'';
693 $newCommand[
'COMMAND'] = $command[
'COMMAND'];
694 $newCommand[
'HIDDEN'] = isset($command[
'HIDDEN'])? $command[
'HIDDEN']:
'N';
695 $newCommand[
'COMMON'] =
'Y';
696 $newCommand[
'EXTRANET_SUPPORT'] = isset($command[
'EXTRANET_SUPPORT'])? $command[
'EXTRANET_SUPPORT']:
'N';
697 $newCommand[
'SONET_SUPPORT'] = isset($command[
'SONET_SUPPORT'])? $command[
'SONET_SUPPORT']:
'N';
698 $newCommand[
'CLASS'] =
'';
699 $newCommand[
'METHOD_COMMAND_ADD'] =
'';
700 $newCommand[
'METHOD_LANG_GET'] =
'';
701 if (!$command[
'TITLE'])
703 $newCommand[
'HIDDEN'] =
'Y';
705 $newCommand[
'MODULE_ID'] =
'im';
706 $newCommand[
'COMMAND_ID'] = $newCommand[
'ID'];
707 $newCommand[
'CATEGORY'] = isset($command[
'CATEGORY'])? $command[
'CATEGORY']: Loc::getMessage(
'COMMAND_IM_CATEGORY');
708 $newCommand[
'CONTEXT'] = isset($command[
'CONTEXT'])? $command[
'CONTEXT']:
'';
709 $newCommand[
'TITLE'] = isset($command[
'TITLE'])? $command[
'TITLE']:
'';
710 $newCommand[
'PARAMS'] = isset($command[
'PARAMS'])? $command[
'PARAMS']:
'';
712 $imCommands[$newCommand[
'COMMAND_ID']] = $newCommand;
716 if (is_array($commands))
718 foreach ($commands as
$i => $v)
729 $cache = \Bitrix\Main\Data\Cache::createInstance();
730 if($cache->initCache(self::CACHE_TTL,
'list_v5_'.$lang, self::CACHE_PATH))
736 $loadRestLang =
false;
738 $orm = \Bitrix\Im\Model\CommandTable::getList();
739 while ($row = $orm->fetch())
741 $row[
'COMMAND_ID'] = $row[
'ID'];
742 $row[
'CONTEXT'] =
'';
744 if ($row[
'BOT_ID'] > 0)
748 else if ($row[
'MODULE_ID'] ==
'im')
750 $row[
'CATEGORY'] = Loc::getMessage(
'COMMAND_IM_CATEGORY');
754 $moduleClass = new \CModule();
755 $module = $moduleClass->createModuleObject($row[
'MODULE_ID']);
756 $row[
'CATEGORY'] = $module->MODULE_NAME;
759 if (!empty($row[
'CLASS']) && !empty($row[
'METHOD_LANG_GET']))
763 $localize = call_user_func_array(
array($row[
"CLASS"], $row[
"METHOD_LANG_GET"]), Array($row[
'COMMAND'],
$lang));
766 $row[
'TITLE'] = $localize[
'TITLE'];
767 $row[
'PARAMS'] = $localize[
'PARAMS'];
771 $row[
'HIDDEN'] =
'Y';
772 $row[
'METHOD_LANG_GET'] =
'';
777 $row[
'HIDDEN'] =
'Y';
778 $row[
'METHOD_LANG_GET'] =
'';
785 if ($row[
'MODULE_ID'] ==
'rest')
787 $loadRestLang =
true;
788 if ($row[
'BOT_ID'] <= 0 && $row[
'APP_ID'])
790 $res = \Bitrix\Rest\AppTable::getList([
791 'filter' =>
array(
'=CLIENT_ID' => $row[
'APP_ID']),
795 $row[
'CATEGORY'] = !empty(
$app[
'APP_NAME'])
797 : (!empty(
$app[
'APP_NAME_DEFAULT'])
798 ?
$app[
'APP_NAME_DEFAULT']
806 $result[$row[
'COMMAND_ID']] = $row;
812 $orm = \Bitrix\Im\Model\CommandLangTable::getList();
813 while ($row = $orm->fetch())
815 if (!isset(
$result[$row[
'COMMAND_ID']]))
818 $langSet[$row[
'COMMAND_ID']][$row[
'LANGUAGE_ID']][
'TITLE'] = $row[
'TITLE'];
819 $langSet[$row[
'COMMAND_ID']][$row[
'LANGUAGE_ID']][
'PARAMS'] = $row[
'PARAMS'];
822 $langAlter = \Bitrix\Im\Bot::getDefaultLanguage();
823 foreach (
$result as $commandId => $commandData)
825 if (isset($langSet[$commandId][
$lang]))
827 $result[$commandId][
'TITLE'] = $langSet[$commandId][
$lang][
'TITLE'];
828 $result[$commandId][
'PARAMS'] = $langSet[$commandId][
$lang][
'PARAMS'];
830 else if (isset($langSet[$commandId][$langAlter]))
832 $result[$commandId][
'TITLE'] = $langSet[$commandId][$langAlter][
'TITLE'];
833 $result[$commandId][
'PARAMS'] = $langSet[$commandId][$langAlter][
'PARAMS'];
835 else if (isset($langSet[$commandId]))
837 $langSetCommand = array_values($langSet[$commandId]);
838 $result[$commandId][
'TITLE'] = $langSetCommand[0][
'TITLE'];
839 $result[$commandId][
'PARAMS'] = $langSetCommand[0][
'PARAMS'];
845 if (empty($value[
'TITLE']))
848 $row[
'METHOD_LANG_GET'] =
'';
857 Array(
'MODULE_ID' => SORT_ASC),
866 $cache->startDataCache();
876 $commands = self::getListCache(
$lang);
879 foreach ($commands as $command)
881 if ($command[
'HIDDEN'] ==
'Y')
885 'id' => $command[
'COMMAND_ID'],
886 'bot_id' => $command[
'BOT_ID'],
887 'command' =>
'/'.$command[
'COMMAND'],
888 'category' => $command[
'CATEGORY'],
889 'common' => $command[
'COMMON'] ==
'Y',
890 'context' => $command[
'CONTEXT'],
891 'title' => $command[
'TITLE'],
892 'params' => $command[
'PARAMS'],
893 'extranet' => $command[
'EXTRANET_SUPPORT'] ==
'Y',
902 $commands = self::getListCache(
$lang);
905 foreach ($commands as $command)
907 if ($command[
'HIDDEN'] ==
'Y')
910 if ($command[
'SONET_SUPPORT'] !=
'Y')
914 'id' => $command[
'COMMAND_ID'],
915 'command' =>
'/'.$command[
'COMMAND'],
916 'title' => $command[
'TITLE'],
917 'params' => $command[
'PARAMS'],
918 'extranet' => $command[
'EXTRANET_SUPPORT'] ==
'Y',
927 $cache = \Bitrix\Main\Data\Cache::createInstance();
928 $cache->cleanDir(self::CACHE_PATH);
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static add($botId, $dialogId)
static addMessage(array $access, array $messageFields)
static update(array $command, array $updateFields)
static getListSonetForJs($lang=LANGUAGE_ID)
static getListCache($lang=LANGUAGE_ID)
static getListForJs($lang=LANGUAGE_ID)
static getDialogId($messageFields)
static onCommandAdd($messageId, $messageFields)
static unRegister(array $command)
static getChatId($dialogId, $userId=null)
static getInstance($userId=null)
static includeModule($moduleName)
static sortByColumn(array &$array, $columns, $callbacks='', $defaultValueIfNotSetValue=null, $preserveKeys=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!defined('SITE_ID')) $lang
if(!is_array($deviceNotifyCodes)) $access
ExecuteModuleEventEx($arEvent, $arParams=[])
if(empty($signedUserToken)) $key
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']