• Модуль: imbot
  • Путь к файлу: ~/bitrix/modules/imbot/lib/itr/designer.php
  • Класс: BitrixImBotItrDesigner
  • Вызов: Designer::execMenuItem
private function execMenuItem($itemId = '')
{
	if ($itemId === '')
	{
		return true;
	}
	else if ($itemId === "0")
	{
		$this->skipShowMenu = true;
	}

	if (!isset($this->menuItems[$this->currentMenu][$itemId]))
	{
		return false;
	}

	$menuItemAction = $this->menuItems[$this->currentMenu][$itemId]['ACTION'];

	if ($menuItemAction['HIDE_MENU'])
	{
		$this->skipShowMenu = true;
	}

	if (isset($menuItemAction['TEXT']))
	{
		$messageText = str_replace('#USER_NAME#', $this->userData->getName(), $menuItemAction['TEXT']);

		BitrixImBot::addMessage(Array('BOT_ID' => $this->botId), Array(
			'DIALOG_ID' => $this->dialogId,
			'MESSAGE' => $messageText
		));
	}

	if ($menuItemAction['TYPE'] == Item::TYPE_MENU)
	{
		$this->setCurrentMenu($menuItemAction['MENU']);
	}
	else if ($menuItemAction['TYPE'] == Item::TYPE_QUEUE)
	{
		$chat = new BitrixImopenlinesChat(mb_substr($this->dialogId, 4));
		$chat->endBotSession();
	}
	else if ($menuItemAction['TYPE'] == Item::TYPE_USER)
	{
		$chat = new BitrixImopenlinesChat(mb_substr($this->dialogId, 4));
		$chat->transfer(Array(
			'FROM' => $this->botId,
			'TO' => $menuItemAction['USER_ID'],
			'MODE' => BitrixImopenlinesChat::TRANSFER_MODE_BOT,
			'LEAVE' => $menuItemAction['LEAVE']? 'Y': 'N'
		));
	}
	else if ($menuItemAction['TYPE'] == Item::TYPE_BOT)
	{
		$botId = 0;
		$bots = BitrixImBot::getListCache();
		foreach ($bots as $botData)
		{
			if ($botData['CODE'] == $menuItemAction['BOT_CODE'] && $botData['OPENLINE'] == 'Y')
			{
				$botId = $botData['BOT_ID'];
				break;
			}
		}
		if ($botId)
		{
			$chat = new CIMChat($this->botId);
			$chat->AddUser(mb_substr($this->dialogId, 4), $botId);
			$chat->DeleteUser(mb_substr($this->dialogId, 4), $this->botId);
		}
		else if ($menuItemAction['ERROR_TEXT'])
		{
			$messageText = str_replace('#USER_NAME#', $this->userData->getName(), $menuItemAction['ERROR_TEXT']);
			BitrixImBot::addMessage(Array('BOT_ID' => $this->botId), Array(
				'DIALOG_ID' => $this->dialogId,
				'MESSAGE' => $messageText
			));
			$this->skipShowMenu = false;
		}
	}
	else if ($menuItemAction['TYPE'] == Item::TYPE_FINISH)
	{
		$chat = new BitrixImopenlinesChat(mb_substr($this->dialogId, 4));
		$chat->answer($this->botId);
		$chat->finish();
	}
	else if ($menuItemAction['TYPE'] == Item::TYPE_FUNCTION)
	{
		$menuItemAction['FUNCTION']($this);
	}

	return true;
}