1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
eventcategoryattendees.php
См. документацию.
1<?php
2
3namespace Bitrix\Calendar\Integration\Im;
4
5use Bitrix\Calendar\Core\Common;
6use Bitrix\Calendar\EventCategory\Dto\EventCategoryAttendeesUpdateDto;
7use Bitrix\Calendar\EventCategory\Enum\AttendeesUpdateTypeEnum;
8use Bitrix\Calendar\Integration\Im\EventCategoryAttendees\JobUserStorage;
9use Bitrix\Calendar\Internals\Log\Logger;
10use Bitrix\Calendar\OpenEvents\Item\Category;
11use Bitrix\Calendar\OpenEvents\Provider;
12use Bitrix\Calendar\OpenEvents\Service\CategoryAttendeeService;
13use Bitrix\Calendar\OpenEvents\Service\CategoryBanService;
14use Bitrix\Main;
15
17{
18 private const LOG_MARKER = 'DEBUG_CALENDAR_IM_CHAT_ATTENDEE_PROCESSOR';
19 private static ?Logger $logger = null;
20 private static ?JobUserStorage $usersStorage = null;
21
22 public static function onChannelUsersAdd(array $eventData): void
23 {
24 try
25 {
26 $updateDto = new EventCategoryAttendeesUpdateDto(
27 $eventData['CHAT_ID'],
28 AttendeesUpdateTypeEnum::TYPE_ADD
29 );
30
31 self::onChannelUsersUpdate($updateDto, $eventData['NEW_USERS']);
32 }
33 catch (\Throwable $e)
34 {
35 self::getLogger()->log($e);
36 }
37 }
38
39 public static function onChannelUserDelete(array $eventData): void
40 {
41 try
42 {
43 $updateDto = new EventCategoryAttendeesUpdateDto(
44 $eventData['CHAT_ID'],
45 AttendeesUpdateTypeEnum::TYPE_DELETE
46 );
47 self::onChannelUsersUpdate($updateDto, [$eventData['USER_ID']]);
48 }
49 catch (\Throwable $e)
50 {
51 self::getLogger()->log($e);
52 }
53 }
54
55 public static function applyChannelUsersUpdateToCategory(
57 ): void
58 {
59 $categoryProvider = new Provider\CategoryProvider(Common::SYSTEM_USER_ID);
60
61 $eventCategory = $categoryProvider->getByChannelId($updateDto->chatId) ?? null;
62
63 if (!$eventCategory)
64 {
65 self::getLogger()->log([
66 'message' => 'event category not exist for connected channel',
67 ...$updateDto->toArray()
68 ]);
69
70 return;
71 }
72
73 try
74 {
75 if ($eventCategory->closed)
76 {
77 self::processClosedEventCategory($eventCategory, $updateDto);
78 }
79 else
80 {
81 self::processOpenEventCategory($eventCategory, $updateDto);
82 }
83 } catch (\Throwable $e)
84 {
85 self::getLogger()->log($e);
86 }
87 }
88
89 private static function onChannelUsersUpdate(EventCategoryAttendeesUpdateDto $updateDto, array $userIds): void
90 {
91 $isBackgroundJobAlreadyScheduled = self::getJobStorage()->has($updateDto);
92 self::getJobStorage()->add($updateDto, $userIds);
93 if ($isBackgroundJobAlreadyScheduled)
94 {
95 return;
96 }
97
98 self::addBackgroundJob($updateDto);
99 }
100
101 private static function addBackgroundJob(EventCategoryAttendeesUpdateDto $updateDto)
102 {
103 Main\Application::getInstance()->addBackgroundJob(
104 job: [self::class, 'applyChannelUsersUpdateToCategory'],
105 args: [$updateDto],
106 );
107 }
108
109 private static function processClosedEventCategory(
110 Category $eventCategory,
111 EventCategoryAttendeesUpdateDto $updateDto,
112 ): void
113 {
114 $categoryAttendeeService = CategoryAttendeeService::getInstance();
115 switch ($updateDto->type)
116 {
117 case AttendeesUpdateTypeEnum::TYPE_ADD:
118 $categoryAttendeeService->addAttendeesToCategoryByChunk(
119 $eventCategory->id,
120 self::getJobStorage()->get($updateDto),
121 );
122 break;
123 case AttendeesUpdateTypeEnum::TYPE_DELETE:
124 $categoryAttendeeService->deleteAttendeesFromCategory(
125 $eventCategory->id,
126 self::getJobStorage()->get($updateDto),
127 );
128 break;
129 default:
130 return;
131 }
132
133 self::getJobStorage()->clear($updateDto);
134 }
135
136 private static function processOpenEventCategory(
137 Category $eventCategory,
139 ): void
140 {
141 switch ($updateDto->type)
142 {
143 case AttendeesUpdateTypeEnum::TYPE_DELETE:
144 $categoryBanService = CategoryBanService::getInstance();
145 $categoryBanService->banCategoryMulti($eventCategory->id, self::getJobStorage()->get($updateDto));
146 break;
147 }
148 }
149
150 private static function getLogger(): Logger
151 {
152 self::$logger ??= new Logger(self::LOG_MARKER);
153
154 return self::$logger;
155 }
156
157 private static function getJobStorage(): JobUserStorage
158 {
159 self::$usersStorage ??= new JobUserStorage();
160
161 return self::$usersStorage;
162 }
163}
static applyChannelUsersUpdateToCategory(EventCategoryAttendeesUpdateDto $updateDto,)
Определения eventcategoryattendees.php:55
static getInstance()
Определения application.php:98
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804