1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
department.php
См. документацию.
1<?php
2
4
6
7class Department extends Handler
8{
9 public const DO_UPDATE_ALL_EVENTS = true;
10
15 public static function onAfterUserAdd($arFields)
16 {
17 if (!($arFields['RESULT'] ?? null) || !Loader::includeModule("iblock"))
18 {
19 return;
20 }
21
22 $departmentIBlockId = (int)\Bitrix\Main\Config\Option::get('intranet', 'iblock_structure', 0);
23 if ($departmentIBlockId <= 0)
24 {
25 return;
26 }
27
28 if(!empty($arFields['UF_DEPARTMENT']))
29 {
30 $arFieldsDepartments =
31 is_array($arFields['UF_DEPARTMENT']) ? $arFields['UF_DEPARTMENT'] : [$arFields['UF_DEPARTMENT']]
32 ;
33
34 self::$storedData = self::getAffectedDepartments($arFieldsDepartments, $departmentIBlockId);
35 }
36
37 self::sendBatchOfMessagesToQueue(self::prepareBatchOfMessagesData());
38 }
39
44 public static function onBeforeUserUpdate($arFields): void
45 {
46 if (
47 (!isset($arFields['UF_DEPARTMENT']) && !isset($arFields['ACTIVE']))
48 || empty($arFields['ID'])
49 || !Loader::includeModule("iblock")
50 )
51 {
52 return;
53 }
54
55 $departmentIBlockId = (int)\Bitrix\Main\Config\Option::get('intranet', 'iblock_structure', 0);
56 if ($departmentIBlockId <= 0)
57 {
58 return;
59 }
60
61 $user = \CUser::GetList(
62 'ID',
63 'ASC',
64 ['ID' => $arFields['ID']],
65 ['FIELDS' => ['ID'], 'SELECT' => ['UF_DEPARTMENT']]
66 )->Fetch();
67
68 if (!isset($user['UF_DEPARTMENT']))
69 {
70 $oldDepartments = [];
71 }
72 elseif (is_array($user['UF_DEPARTMENT']))
73 {
74 $oldDepartments = $user['UF_DEPARTMENT'];
75 }
76 else
77 {
78 $oldDepartments = [$user['UF_DEPARTMENT']];
79 }
80
81 if (!isset($arFields['UF_DEPARTMENT']))
82 {
83 $newDepartments = [];
84 }
85 elseif (is_array($arFields['UF_DEPARTMENT']))
86 {
87 $newDepartments = $arFields['UF_DEPARTMENT'];
88 }
89 else
90 {
91 $newDepartments = [$arFields['UF_DEPARTMENT']];
92 }
93
94 if (!self::isUserDepartmentsUpdated($oldDepartments, $newDepartments))
95 {
96 return;
97 }
98
99 $departments = array_unique(
100 array_merge(
101 $newDepartments,
102 $oldDepartments,
103 )
104 );
105
106 self::$storedData = self::getAffectedDepartments($departments, $departmentIBlockId);
107 }
108
109 private static function isUserDepartmentsUpdated(array $oldValue, array $newValue): bool
110 {
111 return self::convertArrayValuesToInteger($oldValue) !== self::convertArrayValuesToInteger($newValue);
112 }
113
114 private static function convertArrayValuesToInteger(array $array): array
115 {
116 return array_map(static function($value){
117 return (int)$value;
118 }, $array);
119 }
120
125 public static function onAfterUserUpdate($arFields): void
126 {
127 if (empty(self::$storedData) || !($arFields['RESULT'] ?? null) ||!Loader::includeModule("iblock"))
128 {
129 return;
130 }
131
132 self::sendBatchOfMessagesToQueue(self::prepareBatchOfMessagesData());
133 }
134
139 public static function onBeforeUserDelete(int $userId): void
140 {
141 if ($userId <= 0 || !\Bitrix\Main\Loader::includeModule("iblock"))
142 {
143 return;
144 }
145
146 $user = \CUser::GetByID($userId)->Fetch();
147
148 $departmentIBlockId = (int)\Bitrix\Main\Config\Option::get('intranet', 'iblock_structure', 0);
149 if ($departmentIBlockId > 0 && !empty($user['UF_DEPARTMENT']))
150 {
151 self::$storedData = self::getAffectedDepartments($user['UF_DEPARTMENT'], $departmentIBlockId);
152 }
153 }
154
159 public static function onAfterUserDelete($userId): void
160 {
161 if (!Loader::includeModule("iblock") || \CUser::GetByID($userId)->Fetch())
162 {
163 return;
164 }
165
166 self::sendBatchOfMessagesToQueue(self::prepareBatchOfMessagesData());
167 }
168
173 public static function OnAfterIBlockSectionAdd($arFields): void
174 {
175 if (
176 empty($arFields['IBLOCK_ID'])
177 || empty($arFields['IBLOCK_SECTION_ID'])
178 || !Loader::includeModule("iblock")
179 || !self::isDepartmentIBlock($arFields['IBLOCK_ID'])
180 )
181 {
182 return;
183 }
184
185 self::$storedData = self::getAffectedDepartments($arFields['IBLOCK_SECTION_ID'], $arFields['IBLOCK_ID']);
186
187 self::sendBatchOfMessagesToQueue(self::prepareBatchOfMessagesData());
188 }
189
194 public static function onBeforeIBlockSectionUpdate($arFields): void
195 {
196 if (
197 empty($arFields['ID'])
198 ||empty($arFields['IBLOCK_ID'])
199 || empty($arFields['IBLOCK_SECTION_ID'])
200 || !Loader::includeModule("iblock")
201 || !self::isDepartmentIBlock($arFields['IBLOCK_ID'])
202 )
203 {
204 return;
205 }
206
207 $updatingDepartment = \CIBlockSection::GetByID($arFields['ID'])->Fetch();
208 if (($arFields['IBLOCK_SECTION_ID']) === $updatingDepartment['IBLOCK_SECTION_ID'])
209 {
210 return;
211 }
212
213 $departments = array_unique(
214 array_merge(
215 [$arFields['IBLOCK_SECTION_ID']],
216 [$updatingDepartment['IBLOCK_SECTION_ID']],
217 )
218 );
219
220 self::$storedData = self::getAffectedDepartments($departments, $arFields['IBLOCK_ID']);
221 }
222
227 public static function onAfterIBlockSectionUpdate($arFields): void
228 {
229 if (empty(self::$storedData) || !($arFields['RESULT'] ?? null) || !Loader::includeModule("iblock"))
230 {
231 return;
232 }
233
234 self::sendBatchOfMessagesToQueue(self::prepareBatchOfMessagesData());
235 }
236
242 private static function getAffectedDepartments($departments, int $departmentIBlockId): array
243 {
244 if (!is_array($departments))
245 {
246 $departments = [$departments];
247 }
248
249 $affectedDepartments = [];
250
251 foreach ($departments as $departmentId)
252 {
253 $result = \CIBlockSection::GetNavChain($departmentIBlockId, $departmentId, ['ID'], true);
254 foreach ($result as $affectedDepartment)
255 {
256 if(!in_array($affectedDepartment, $affectedDepartments))
257 {
258 $affectedDepartments[] = $affectedDepartment;
259 }
260 }
261 }
262
263 return $affectedDepartments;
264 }
265
269 private static function prepareBatchOfMessagesData(): array
270 {
271 $data = [];
272 foreach (self::$storedData as $affectedDepartment)
273 {
274 if (!empty($affectedDepartment['ID']))
275 {
276 $data[] = [
277 'entityType' => self::DEPARTMENT_TYPE,
278 'entityId' => $affectedDepartment['ID'],
279 ];
280 }
281 }
282
283 if(self::DO_UPDATE_ALL_EVENTS)
284 {
285 $data[] = [
286 'entityType' => self::ALL_USERS_TYPE,
287 ];
288 }
289
290 return $data;
291 }
292
297 private static function isDepartmentIBlock(int $IBlockId): bool
298 {
299 $departmentIBlockId = (int)\Bitrix\Main\Config\Option::get('intranet', 'iblock_structure', 0);
300
301 return $departmentIBlockId > 0 && $departmentIBlockId === $IBlockId;
302 }
303}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static OnAfterIBlockSectionAdd($arFields)
Определения department.php:173
static onBeforeIBlockSectionUpdate($arFields)
Определения department.php:194
static onAfterIBlockSectionUpdate($arFields)
Определения department.php:227
static onBeforeUserDelete(int $userId)
Определения department.php:139
static sendBatchOfMessagesToQueue(array $data)
Определения handler.php:17
Определения loader.php:13
$arFields
Определения dblapprove.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$user
Определения mysql_to_pgsql.php:33
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393