1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
CategoryAttendeeService.php
См. документацию.
1<?php
2
4
7use Bitrix\Calendar\Core\Event\Event as CalendarEvent;
13
15{
16 private static array $cache = [];
17
18 private static ?self $instance;
19
20 public static function getInstance(): self
21 {
22 self::$instance ??= new self();
23
24 return self::$instance;
25 }
26
28 int $userId,
29 EventCategory $eventCategory,
30 array $attendeeEntities
31 ): array
32 {
33 // TODO: fix or remove attendee codes field
34// $attendeeService = new AttendeeService();
35// $attendeeCodes = $attendeeService->getAttendeeAccessCodes($attendeeEntities, $userId);
36// $attendeeUserIds = \CCalendar::GetDestinationUsers($attendeeCodes);
37// $eventCategory->setAccessCodes($attendeeCodes);
38// $eventCategory->getAttendees()->setAttendeesId($attendeeUserIds);
39 $attendeeIds = array_map('intval', $attendeeEntities);
40 $eventCategory->getAttendees()->setAttendeesId($attendeeIds);
41
42 return $attendeeIds;
43 }
44
45 public function addAttendeesToCategory(int $eventCategoryId, array $attendeeUserIds): void
46 {
47 $rowsToAdd = [];
48 foreach ($attendeeUserIds as $attendee)
49 {
50 $rowsToAdd[] = [
51 'CATEGORY_ID' => $eventCategoryId,
52 'USER_ID' => $attendee,
53 ];
54 }
55 if ($rowsToAdd)
56 {
57 OpenEventCategoryAttendeeTable::insertIgnoreMulti($rowsToAdd);
58 }
59 }
60
62 int $eventCategoryId,
63 array $attendeeUserIds,
64 int $chunkSize = 200
65 ): void
66 {
67 if (count($attendeeUserIds) > $chunkSize * 1.1)
68 {
69 $chunks = array_chunk($attendeeUserIds, $chunkSize);
70 }
71 else
72 {
73 $chunks = [$attendeeUserIds];
74 }
75
76 foreach ($chunks as $chunk)
77 {
78 $this->addAttendeesToCategory($eventCategoryId, $chunk);
79 }
80 }
81
83 int $userId,
84 EventCategory $eventCategory,
85 array $attendeeEntities
86 ): void
87 {
88 $attendeeService = new AttendeeService();
89 $newAccessCodes = $attendeeService->getAttendeeAccessCodes($attendeeEntities, $userId);
90 $oldAccessCodes = $eventCategory->getAccessCodes();
91 if ($oldAccessCodes === $newAccessCodes)
92 {
93 return;
94 }
95
96 $eventCategory->setAccessCodes($newAccessCodes);
97
98 $oldAttendeeIds = \CCalendar::GetDestinationUsers($oldAccessCodes);
99 $newAttendeeIds = \CCalendar::GetDestinationUsers($newAccessCodes);
100
101 $excluded = array_diff($oldAttendeeIds, $newAttendeeIds);
102 if ($excluded)
103 {
104 $this->deleteAttendeesFromCategory($eventCategory->getId(), $excluded);
105 }
106
107 $included = array_diff($newAttendeeIds, $oldAttendeeIds);
108 if ($included)
109 {
110 $this->addAttendeesToCategory($eventCategory->getId(), $included);
111 }
112 }
113
114 public function deleteAttendeesFromCategory(int $eventCategoryId, array $excludedUserIds): void
115 {
116 OpenEventCategoryAttendeeTable::deleteByFilter([
117 'CATEGORY_ID' => $eventCategoryId,
118 'USER_ID' => $excludedUserIds,
119 ]);
120
121 (new AfterEventCategoryAttendeesDelete($eventCategoryId, $excludedUserIds))->emit();
122 }
123
124 public function createSystem(int $categoryId): void
125 {
127 $mapperFactory = ServiceLocator::getInstance()->get('calendar.service.mappers.factory');
129 $eventCategory = $mapperFactory->getEventCategory()->getById($categoryId);
130 if ($eventCategory->getClosed())
131 {
132 return;
133 }
134
135 OpenEventCategoryAttendeeTable::add([
136 'CATEGORY_ID' => $eventCategory->getId(),
137 'USER_ID' => Common::SYSTEM_USER_ID,
138 ]);
139 }
140
141 public function isAttendee(int $categoryId, int $userId): bool
142 {
143 $key = $this->getKey($categoryId, $userId);
144
145 if (!isset(self::$cache[$key]))
146 {
147 self::$cache[$key] = (bool)OpenEventCategoryAttendeeTable::query()
148 ->addSelect('ID')
149 ->where('CATEGORY_ID', $categoryId)
150 ->where('USER_ID', $userId)
151 ->setLimit(1)
152 ->fetch();
153 }
154
155 return self::$cache[$key];
156 }
157
158 private function getKey(int $categoryId, int $userId): string
159 {
160 return sprintf('is_attendee:%d:%d', $categoryId, $userId);
161 }
162
163 private function __construct()
164 {
165 }
166}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
setAccessCodes(?array $accessCodes)
Определения eventcategory.php:103
processAttendeesForExistCategory(int $userId, EventCategory $eventCategory, array $attendeeEntities)
Определения CategoryAttendeeService.php:82
addAttendeesToCategory(int $eventCategoryId, array $attendeeUserIds)
Определения CategoryAttendeeService.php:45
addAttendeesToCategoryByChunk(int $eventCategoryId, array $attendeeUserIds, int $chunkSize=200)
Определения CategoryAttendeeService.php:61
deleteAttendeesFromCategory(int $eventCategoryId, array $excludedUserIds)
Определения CategoryAttendeeService.php:114
processAttendeesForNewCategory(int $userId, EventCategory $eventCategory, array $attendeeEntities)
Определения CategoryAttendeeService.php:27
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
if(empty($signedUserToken)) $key
Определения quickway.php:257
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936