1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
LiveFeedPreProcessor.php
См. документацию.
1<?php
2
3namespace Bitrix\Socialnetwork\Space\List\RecentActivity\Event\PreProcessor;
4
5use Bitrix\Socialnetwork\Internals\EventService\EventDictionary;
6use Bitrix\Socialnetwork\Internals\EventService\Push\PushEventDictionary;
7use Bitrix\Socialnetwork\Item\LogRight;
8use Bitrix\Socialnetwork\Space\List\RecentActivity\Dictionary;
9use Bitrix\Socialnetwork\Space\List\RecentActivity\Event\Trait\LogRightTrait;
10
12{
13 use LogRightTrait;
14
15 public function isAvailable(): bool
16 {
17 return true;
18 }
19
20 protected function getTypeId(): string
21 {
22 return Dictionary::ENTITY_TYPE['livefeed'];
23 }
24
25 private function doSkipEventProcessing(?string $eventId): bool
26 {
27 return in_array($eventId, ['calendar', 'tasks'], true);
28 }
29
30 public function process(): void
31 {
32 $eventId = $this->event->getData()['EVENT_ID'] ?? null;
33 if ($this->doSkipEventProcessing($eventId))
34 {
35 return;
36 }
37
38 switch ($this->event->getType())
39 {
40 case EventDictionary::EVENT_SPACE_LIVEFEED_POST_UPD:
41 $this->onLiveFeedPostUpdate();
42 break;
43 default:
44 break;
45 }
46 }
47
48 private function onLiveFeedPostUpdate(): void
49 {
50 $sonetLogId = (int)($this->event->getData()['SONET_LOG_ID'] ?? null);
51 $eventId = $this->event->getData()['EVENT_ID'] ?? null;
52 $logRightsBeforeUpdate = $this->event->getData()['LOG_RIGHTS_BEFORE_UPDATE'] ?? null;
53
54 $isItPossibleToHaveRemovedUsers = is_array($logRightsBeforeUpdate) && !empty($logRightsBeforeUpdate);
55 if ($sonetLogId <= 0 || !$isItPossibleToHaveRemovedUsers || !is_string($eventId))
56 {
57 return;
58 }
59
60 $logRightsAfterUpdate = LogRight::get($sonetLogId);
61
62 sort($logRightsAfterUpdate);
63 sort($logRightsBeforeUpdate);
64
65 if ($logRightsBeforeUpdate === $logRightsAfterUpdate)
66 {
67 return;
68 }
69
70 $usersBeforeUpdate = LogRight::getUserIdsByLogRights($logRightsBeforeUpdate);
71
72 $this->processRemovedFromRecipientsSpaces(
73 $sonetLogId,
74 $logRightsBeforeUpdate,
75 $logRightsAfterUpdate,
76 $usersBeforeUpdate
77 );
78
79 $this->processRemovedFromRecipientsUsers($sonetLogId, $eventId, $logRightsAfterUpdate, $usersBeforeUpdate);
80 }
81
82 private function processRemovedFromRecipientsSpaces(
83 int $sonetLogId,
84 array $logRightsBeforeUpdate,
85 array $logRightsAfterUpdate,
86 array $usersBeforeUpdate,
87 ): void
88 {
89 $removedLogRights = array_diff($logRightsBeforeUpdate, $logRightsAfterUpdate);
90
91 $removedGroupIds = [];
92 foreach ($removedLogRights as $logRight)
93 {
94 $groupId = $this->getGroupIdFromLogRight($logRight);
95
96 if ($groupId > 0)
97 {
98 $removedGroupIds[] = $groupId;
99 }
100 }
101
102 $removedGroupIds = array_unique($removedGroupIds);
103
104 if (empty($removedGroupIds))
105 {
106 return;
107 }
108
109 foreach ($removedGroupIds as $removedGroupId)
110 {
111 $this->service->deleteBySpaceId($removedGroupId, $this->getTypeId(), $sonetLogId);
112 }
113
114 $this->pushEvent(
115 $usersBeforeUpdate,
116 PushEventDictionary::EVENT_SPACE_RECENT_ACTIVITY_REMOVE_FROM_SPACE,
117 ['spaceIdsToReload' => $removedGroupIds],
118 );
119 }
120
121 private function processRemovedFromRecipientsUsers(
122 int $sonetLogId,
123 string $eventId,
124 array $logRightsAfterUpdate,
125 array $usersBeforeUpdate
126 )
127 {
128 $usersAfterUpdate = LogRight::getUserIdsByLogRights($logRightsAfterUpdate);
129
130 sort($usersBeforeUpdate);
131 sort($usersAfterUpdate);
132
133 $lostAccessUsers = array_values(array_diff($usersBeforeUpdate, $usersAfterUpdate));
134
135 if (empty($lostAccessUsers))
136 {
137 return;
138 }
139
140 \Bitrix\Socialnetwork\Internals\EventService\Service::addEvent(
141 EventDictionary::EVENT_SPACE_LIVEFEED_POST_REMOVE_USERS,
142 [
143 'SONET_LOG_ID' => $sonetLogId,
144 'EVENT_ID' => $eventId,
145 'RECEPIENTS' => $lostAccessUsers,
146 ]
147 );
148 }
149}
static getUserIdsByLogRights(array $logRights)
Определения logright.php:47
static get(int $logId=0)
Определения logright.php:15
pushEvent(array $recipients, string $eventType, array $params)
Определения AbstractPreProcessor.php:22
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804