13 private const UPDATE_UI = [
21 private const UPDATE_USERS_ADD = [
25 private const UPDATE_USERS_DELETE = [
29 private const UPDATE_SETTINGS = [
35 'setManageUsersDelete',
38 'setDisappearingDate',
44 $currentUser = $this->
getAction()->getCurrentUser();
45 $arguments = $this->
getAction()->getArguments();
49 $chat = $arguments[
'chat'];
51 if (!$chat->getChatId())
56 return new EventResult(EventResult::ERROR,
null,
null, $this);
59 if ($currentUser->isAdmin())
64 if ($chat->getAuthorId() === (
int)$currentUser->getId())
69 $actionName = $this->
getAction()->getName();
70 if ($this->inArrayCaseInsensitive($actionName, self::UPDATE_UI,
true))
72 $manageRights = $chat->getManageUI();
75 if ($this->inArrayCaseInsensitive($actionName, self::UPDATE_USERS_ADD,
true))
77 $manageRights = $chat->getManageUsersAdd();
80 if ($this->inArrayCaseInsensitive($actionName, self::UPDATE_USERS_DELETE,
true))
82 $deleteUser = $arguments[
'userId'] ??
null;
84 if ((
int)$deleteUser === (
int)$currentUser->getId())
89 $manageRights = $chat->getManageUsersDelete();
92 if ($this->inArrayCaseInsensitive($actionName, self::UPDATE_SETTINGS,
true))
94 $manageRights = $chat->getManageSettings();
97 if ($manageRights === Chat::MANAGE_RIGHTS_MEMBER)
102 $selfRelation = $chat->getSelfRelation();
104 $manageRights === Chat::MANAGE_RIGHTS_MANAGERS
105 && $selfRelation->getManager()
114 return new EventResult(EventResult::ERROR,
null,
null, $this);
123 private function inArrayCaseInsensitive(
string $needle,
array $haystack,
bool $strict =
true):
bool
125 $needle = mb_strtolower($needle);
126 $haystack = array_map(
'mb_strtolower', $haystack);
128 return in_array($needle, $haystack, $strict);
onBeforeAction(Event $event)