• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Chat/Permission.php
  • Класс: BitrixImV2ChatPermission
  • Вызов: Permission::getByChatTypes
public function getByChatTypes(): array
{
	if (isset(self::$permissionsByChatTypes))
	{
		return self::$permissionsByChatTypes;
	}

	$generalChat = GeneralChat::get();
	$roleForPostToGeneral = Chat::ROLE_MEMBER;
	if ($generalChat !== null)
	{
		$roleForPostToGeneral = $generalChat->getCanPost();
	}

	$default = [
		self::ACTION_CHANGE_AVATAR => Chat::ROLE_MEMBER,
		self::ACTION_RENAME => Chat::ROLE_MEMBER,
		self::ACTION_EXTEND => Chat::ROLE_MEMBER,
		self::ACTION_CALL => Chat::ROLE_MEMBER,
		self::ACTION_MUTE => Chat::ROLE_MEMBER,
		self::ACTION_LEAVE => Chat::ROLE_MEMBER,
		self::ACTION_LEAVE_OWNER => Chat::ROLE_MEMBER,
		self::ACTION_SEND => Chat::ROLE_MEMBER,
		self::ACTION_USER_LIST => Chat::ROLE_MEMBER,
	];

	self::$permissionsByChatTypes[self::TYPE_DEFAULT] = $default;

	self::$permissionsByChatTypes[self::TYPE_GENERAL] = [
		self::ACTION_CHANGE_AVATAR => Chat::ROLE_NONE,
		self::ACTION_RENAME => Chat::ROLE_NONE,
		self::ACTION_EXTEND => Chat::ROLE_NONE,
		self::ACTION_LEAVE => Chat::ROLE_NONE,
		self::ACTION_LEAVE_OWNER => Chat::ROLE_NONE,
		self::ACTION_SEND => $roleForPostToGeneral,
	];

	self::$permissionsByChatTypes[self::TYPE_ANNOUNCEMENT] = [
		self::ACTION_LEAVE_OWNER => Chat::ROLE_OWNER,
		self::ACTION_SEND => Chat::ROLE_MANAGER,
	];

	if (Loader::includeModule('imbot'))
	{
		self::$permissionsByChatTypes[BitrixImBotServiceNotifier::CHAT_ENTITY_TYPE] = [
			self::ACTION_CHANGE_AVATAR => Chat::ROLE_NONE,
			self::ACTION_RENAME => Chat::ROLE_NONE,
			self::ACTION_LEAVE_OWNER => Chat::ROLE_NONE,
		];

		self::$permissionsByChatTypes[BitrixImBotBotSupport24::CHAT_ENTITY_TYPE] = [
			self::ACTION_CHANGE_AVATAR => Chat::ROLE_NONE,
			self::ACTION_EXTEND => Chat::ROLE_NONE,
			self::ACTION_CALL => Chat::ROLE_NONE,
			self::ACTION_MUTE => Chat::ROLE_NONE,
			self::ACTION_LEAVE => Chat::ROLE_NONE,
			self::ACTION_LEAVE_OWNER => Chat::ROLE_NONE,
			self::ACTION_USER_LIST => Chat::ROLE_NONE,
		];
	}

	if (Loader::includeModule('socialnetwork'))
	{
		self::$permissionsByChatTypes[self::TYPE_SONET] = [
			self::ACTION_CHANGE_AVATAR => Chat::ROLE_NONE,
			self::ACTION_RENAME => Chat::ROLE_NONE,
			self::ACTION_EXTEND => Chat::ROLE_NONE,
			self::ACTION_LEAVE => Chat::ROLE_NONE,
			self::ACTION_LEAVE_OWNER => Chat::ROLE_NONE,
		];
	}

	if (Loader::includeModule('tasks'))
	{
		self::$permissionsByChatTypes[self::TYPE_TASKS] = $default;
	}

	if (Loader::includeModule('calendar'))
	{
		self::$permissionsByChatTypes[CCalendar::CALENDAR_CHAT_ENTITY_TYPE] = $default;
	}

	if (BitrixMainLoader::includeModule('crm'))
	{
		self::$permissionsByChatTypes[self::TYPE_CRM] = [
			self::ACTION_CHANGE_AVATAR => Chat::ROLE_NONE,
			self::ACTION_RENAME => Chat::ROLE_NONE,
			self::ACTION_LEAVE_OWNER => Chat::ROLE_NONE,
		];
	}

	if (BitrixMainLoader::includeModule('voximplant'))
	{
		self::$permissionsByChatTypes[self::TYPE_CALL] = [
			self::ACTION_EXTEND => Chat::ROLE_NONE,
			self::ACTION_CALL => Chat::ROLE_NONE,
			self::ACTION_MUTE => Chat::ROLE_NONE,
			self::ACTION_LEAVE => Chat::ROLE_NONE,
			self::ACTION_LEAVE_OWNER => Chat::ROLE_NONE,
		];
	}

	foreach (self::$permissionsByChatTypes as $code => $value)
	{
		self::$permissionsByChatTypes[$code] = array_merge($default, $value);
	}

	if ($this->jsonFormat)
	{
		return $this->converter->process(self::$permissionsByChatTypes);
	}

	return self::$permissionsByChatTypes;
}