1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
CheckChatUpdate.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Controller\Filter;
4
5use Bitrix\Im\V2\Chat;
6use Bitrix\Im\V2\Chat\ChatError;
7use Bitrix\Main\Engine\ActionFilter\Base;
8use Bitrix\Main\Event;
9use Bitrix\Main\EventResult;
10
11class CheckChatUpdate extends Base
12{
13 private const UPDATE_UI = [
14 'setTitle',
15 'setDescription',
16 'setColor',
17 'setAvatar',
18 'setAvatarId',
19 ];
20
21 private const UPDATE_USERS_ADD = [
22 'addUsers',
23 ];
24
25 private const UPDATE_USERS_DELETE = [
26 'deleteUser',
27 ];
28
29 private const UPDATE_SETTINGS = [
30 'setOwner',
31 'setManagers',
32 'addManagers',
33 'deleteManagers',
34 'setManageUsersAdd',
35 'setManageUsersDelete',
36 'setManageUI',
37 'setManageSettings',
38 'setDisappearingDate',
39 'setManageMessages',
40 ];
41
42 public function onBeforeAction(Event $event)
43 {
44 $currentUser = $this->getAction()->getCurrentUser();
45 $arguments = $this->getAction()->getArguments();
49 $chat = $arguments['chat'];
50
51 if (!$chat->getChatId())
52 {
53 $this->addError(new ChatError(
55 ));
56 return new EventResult(EventResult::ERROR, null, null, $this);
57 }
58
59 if ($currentUser->isAdmin())
60 {
61 return null;
62 }
63
64 if ($chat->getAuthorId() === (int)$currentUser->getId())
65 {
66 return null;
67 }
68
69 $actionName = $this->getAction()->getName();
70 if ($this->inArrayCaseInsensitive($actionName, self::UPDATE_UI, true))
71 {
72 $manageRights = $chat->getManageUI();
73 }
74
75 if ($this->inArrayCaseInsensitive($actionName, self::UPDATE_USERS_ADD, true))
76 {
77 $manageRights = $chat->getManageUsersAdd();
78 }
79
80 if ($this->inArrayCaseInsensitive($actionName, self::UPDATE_USERS_DELETE, true))
81 {
82 $deleteUser = $arguments['userId'] ?? null;
83
84 if ((int)$deleteUser === (int)$currentUser->getId())
85 {
86 return null;
87 }
88
89 $manageRights = $chat->getManageUsersDelete();
90 }
91
92 if ($this->inArrayCaseInsensitive($actionName, self::UPDATE_SETTINGS, true))
93 {
94 $manageRights = $chat->getManageSettings();
95 }
96
97 if ($manageRights === Chat::MANAGE_RIGHTS_MEMBER)
98 {
99 return null;
100 }
101
102 $selfRelation = $chat->getSelfRelation();
103 if (
104 $manageRights === Chat::MANAGE_RIGHTS_MANAGERS
105 && $selfRelation->getManager()
106 )
107 {
108 return null;
109 }
110
111 $this->addError(new ChatError(
113 ));
114 return new EventResult(EventResult::ERROR, null, null, $this);
115 }
116
123 private function inArrayCaseInsensitive(string $needle, array $haystack, bool $strict = true): bool
124 {
125 $needle = mb_strtolower($needle);
126 $haystack = array_map('mb_strtolower', $haystack);
127
128 return in_array($needle, $haystack, $strict);
129 }
130}
const ACCESS_DENIED
Определения ChatError.php:19
addError(Error $error)
Определения base.php:80
onBeforeAction(Event $event)
Определения base.php:66
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$event
Определения prolog_after.php:141