1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
user.php
См. документацию.
1<?php
2namespace Bitrix\Bizproc\Service;
3
4use Bitrix\Bizproc\FieldType;
5use Bitrix\Main;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\HumanResources\Service\Container;
8use Bitrix\HumanResources\Item\NodeMember;
9use Bitrix\HumanResources\Compatibility\Utils\DepartmentBackwardAccessCode;
10use Bitrix\Main\UserGroupTable;
11
13{
14 protected const DEPARTMENT_MODULE_ID = 'intranet';
15 protected const DEPARTMENT_OPTION_NAME = 'iblock_structure';
16
17 protected array $users = [];
18
19 public function getUserDepartments(int $userId): array
20 {
21 // it's OK for now to use old api
22 return $this->getUserDepartmentsOld($userId);
23 }
24
25 public function getUserInfo(int $userId): ?array
26 {
27 if ($userId <= 0)
28 {
29 return null;
30 }
31
32 if (isset($this->users[$userId]))
33 {
34 return $this->users[$userId];
35 }
36
37 $userFields = $this->getUserUserFields();
38
39 return $this->loadUser($userId, $userFields);
40 }
41
42 public function getUserExtendedFields(): array
43 {
44 $fields = $this->getUserUserFields();
45
46 if ($this->canUseIntranet())
47 {
48 $fields['UF_DEPARTMENT'] = [
49 'Name' => Loc::getMessage('BP_SERVICE_USER_DEPARTMENT_1'),
50 'Type' => 'int',
51 'Multiple' => true,
52 ];
53
54 $fields['UF_DEPARTMENT_PRINTABLE'] = [
55 'Name' => Loc::getMessage('BP_SERVICE_USER_DEPARTMENT_PRINTABLE_1'),
56 'Type' => 'string',
57 'Multiple' => true,
58 ];
59
60 $fields['IS_ABSENT'] = [
61 'Name' => Loc::getMessage('BP_SERVICE_USER_IS_ABSENT'),
62 'Type' => 'bool',
63 ];
64
65 if ($this->canUseIblockApi() || $this->canUseHumanResources())
66 {
67 $fields['UF_HEAD'] = [
68 'Name' => Loc::getMessage('BP_SERVICE_USER_HEAD'),
69 'Type' => 'user',
70 'Multiple' => true,
71 ];
72 }
73 }
74
75 if ($this->canUseTimeman())
76 {
77 $fields['TIMEMAN_STATUS'] = [
78 'Name' => Loc::getMessage('BP_SERVICE_USER_TIMEMAN_STATUS'),
79 'Type' => 'select',
80 'Options' => [
81 'EXPIRED' => Loc::getMessage('BP_SERVICE_USER_TIMEMAN_STATUS_EXPIRED'),
82 'OPENED' => Loc::getMessage('BP_SERVICE_USER_TIMEMAN_STATUS_OPENED'),
83 'PAUSED' => Loc::getMessage('BP_SERVICE_USER_TIMEMAN_STATUS_PAUSED'),
84 'CLOSED' => Loc::getMessage('BP_SERVICE_USER_TIMEMAN_STATUS_CLOSED'),
85 ],
86 ];
87 }
88
89 if ($this->canUseHumanResources())
90 {
91 $fields['HR_NODE_IDS'] = [
92 'Name' => Loc::getMessage('BP_SERVICE_USER_HR_NODE_IDS'),
93 'Type' => 'int',
94 'Multiple' => true,
95 ];
96 $fields['HR_NODE'] = [
97 'Name' => Loc::getMessage('BP_SERVICE_USER_HR_NODE'),
98 'Type' => 'user',
99 'Multiple' => true,
100 ];
101 }
102
103 return $fields;
104 }
105
106 public function getUserBaseFields(): array
107 {
108 return [
109 'ACTIVE' => [
110 'Name' => Loc::getMessage('BP_SERVICE_USER_ACTIVE'),
111 'Type' => 'bool',
112 ],
113 'EMAIL' => [
114 'Name' => Loc::getMessage('BP_SERVICE_USER_EMAIL'),
115 'Type' => 'string',
116 ],
117 'WORK_PHONE' => [
118 'Name' => Loc::getMessage('BP_SERVICE_USER_WORK_PHONE'),
119 'Type' => 'string',
120 ],
121 'PERSONAL_MOBILE' => [
122 'Name' => Loc::getMessage('BP_SERVICE_USER_PERSONAL_MOBILE'),
123 'Type' => 'string',
124 ],
125 'UF_PHONE_INNER' => [
126 'Name' => Loc::getMessage('BP_SERVICE_USER_UF_PHONE_INNER'),
127 'Type' => 'string',
128 ],
129 'LOGIN' => [
130 'Name' => Loc::getMessage('BP_SERVICE_USER_LOGIN'),
131 'Type' => 'string',
132 ],
133 'NAME' => [
134 'Name' => Loc::getMessage('BP_SERVICE_USER_NAME'),
135 'Type' => 'string',
136 ],
137 'LAST_NAME' => [
138 'Name' => Loc::getMessage('BP_SERVICE_USER_LAST_NAME'),
139 'Type' => 'string',
140 ],
141 'SECOND_NAME' => [
142 'Name' => Loc::getMessage('BP_SERVICE_USER_SECOND_NAME'),
143 'Type' => 'string',
144 ],
145 'WORK_POSITION' => [
146 'Name' => Loc::getMessage('BP_SERVICE_USER_WORK_POSITION'),
147 'Type' => 'string',
148 ],
149 'PERSONAL_BIRTHDAY' => [
150 'Name' => Loc::getMessage('BP_SERVICE_USER_PERSONAL_BIRTHDAY'),
151 'Type' => 'date',
152 ],
153 'PERSONAL_WWW' => [
154 'Name' => Loc::getMessage('BP_SERVICE_USER_PERSONAL_WWW'),
155 'Type' => 'string',
156 ],
157 'PERSONAL_CITY' => [
158 'Name' => Loc::getMessage('BP_SERVICE_USER_PERSONAL_CITY'),
159 'Type' => 'string',
160 ],
161 'UF_DEPARTMENT' => [
162 'Name' => Loc::getMessage('BP_SERVICE_USER_DEPARTMENT_1'),
163 'Type' => 'int',
164 'Multiple' => true,
165 ],
166 'UF_SKYPE' => [
167 'Name' => Loc::getMessage('BP_SERVICE_USER_UF_SKYPE'),
168 'Type' => 'string',
169 ],
170 'UF_TWITTER' => [
171 'Name' => Loc::getMessage('BP_SERVICE_USER_UF_TWITTER'),
172 'Type' => 'string',
173 ],
174 'UF_FACEBOOK' => [
175 'Name' => Loc::getMessage('BP_SERVICE_USER_UF_FACEBOOK'),
176 'Type' => 'string',
177 ],
178 'UF_LINKEDIN' => [
179 'Name' => Loc::getMessage('BP_SERVICE_USER_UF_LINKEDIN'),
180 'Type' => 'string',
181 ],
182 'UF_XING' => [
183 'Name' => Loc::getMessage('BP_SERVICE_USER_UF_XING'),
184 'Type' => 'string',
185 ],
186 'UF_WEB_SITES' => [
187 'Name' => Loc::getMessage('BP_SERVICE_USER_UF_WEB_SITES'),
188 'Type' => 'string',
189 ],
190 ];
191 }
192
194 {
195 $chains = [];
196
197 foreach ($this->getUserDepartments($userId) as $departmentId)
198 {
199 $chains[] = $this->getDepartmentChain($departmentId);
200 }
201
202 return $chains;
203 }
204
205 public function getDepartmentChain(int $departmentId): array
206 {
207 if (!$this->canUseHumanResources())
208 {
209 return $this->getDepartmentChainOld($departmentId);
210 }
211
212 $chain = [];
213 $node = $this->getDepartmentNode($departmentId);
214
215 if ($node)
216 {
217 $nodes = Container::getNodeRepository()->getParentOf(
218 $node,
219 \Bitrix\HumanResources\Enum\DepthLevel::FULL,
220 );
221 foreach ($nodes as $parent)
222 {
223 $idByAccessCode = DepartmentBackwardAccessCode::extractIdFromCode($parent->accessCode);
224 if ($idByAccessCode !== null)
225 {
226 $chain[] = $idByAccessCode;
227 }
228 }
229 }
230
231 return $chain;
232 }
233
234 public function getUserHeads(int $userId): array
235 {
236 $heads = [];
237 $userDepartments = $this->getUserDepartmentChains($userId);
238
239 foreach ($userDepartments as $chain)
240 {
241 foreach ($chain as $deptId)
242 {
243 $departmentHead = $this->getDepartmentHead($deptId);
244
245 if (!$departmentHead || $departmentHead === $userId)
246 {
247 continue;
248 }
249
250 $heads[] = $departmentHead;
251 break;
252 }
253 }
254
255 return array_unique($heads);
256 }
257
258 public function getDepartmentHead(int $departmentId): ?int
259 {
260 if (!$this->canUseHumanResources())
261 {
262 return $this->getDepartmentHeadOld($departmentId);
263 }
264
265 $node = $this->getDepartmentNode($departmentId);
266 if (!$node)
267 {
268 return null;
269 }
270
271 $head = current(Container::getNodeMemberService()->getDefaultHeadRoleEmployees($node->id)->getItemMap());
272
273 return $head->entityId ?? null;
274 }
275
276 public function getUserSchedule(int $userId): Sub\UserSchedule
277 {
278 return new Sub\UserSchedule($userId);
279 }
280
281 protected function getDepartmentIblockId(): int
282 {
283 return (int) Main\Config\Option::get(
284 static::DEPARTMENT_MODULE_ID,
285 static::DEPARTMENT_OPTION_NAME
286 );
287 }
288
289 private function canUseHumanResources(): bool
290 {
291 return Main\Loader::includeModule('humanresources');
292 }
293
294 private function canUseIblockApi()
295 {
296 return Main\Loader::includeModule('iblock');
297 }
298
299 private function canUseIntranet()
300 {
301 return Main\Loader::includeModule('intranet');
302 }
303
304 private function canUseTimeman()
305 {
306 return \CBPHelper::isWorkTimeAvailable();
307 }
308
309 public function getUserUserFields(): array
310 {
311 static $fields;
312
313 if (isset($fields))
314 {
315 return $fields;
316 }
317
318 $fields = [];
319
320 $userFields = Main\UserFieldTable::getList([
321 'select' => array_merge(
322 ['ID', 'FIELD_NAME', 'USER_TYPE_ID', 'MULTIPLE'],
324 ),
325 'filter' => [
326 '=ENTITY_ID' => 'USER',
327 '%=FIELD_NAME' => 'UF_USR_%',
328 ],
329 'runtime' => [
330 Main\UserFieldTable::getLabelsReference('LABELS', \LANGUAGE_ID),
331 ],
332 ])->fetchAll();
333
334
335 foreach ($userFields as $field)
336 {
337 $fieldName = $field['FIELD_NAME'];
338 $fieldType = FieldType::convertUfType($field['USER_TYPE_ID']) ?? "UF:{$field['USER_TYPE_ID']}";
339
340 $name = empty($field['LIST_COLUMN_LABEL']) ? $field['FIELD_NAME'] : $field['LIST_COLUMN_LABEL'];
341
342 $fields[$fieldName] = [
343 'Name' => $name,
344 'Type' => $fieldType,
345 'Multiple' => $field['MULTIPLE'] === 'Y',
346 ];
347
348 if ($fields[$fieldName]['Type'] === 'select')
349 {
350 $fieldData = Main\UserFieldTable::getFieldData($field['ID']);
351 $fields[$fieldName]['Options'] = array_combine(
352 array_column($fieldData['ENUM'], 'XML_ID'),
353 array_column($fieldData['ENUM'], 'VALUE'),
354 );
355 $fields[$fieldName]['Settings'] = ['ENUM' => $fieldData['ENUM']];
356 }
357 }
358
359 return $fields;
360 }
361
362 public function extractUsersFromDepartment(int $departmentId, bool $recursive = false): ?array
363 {
364 if (!$this->canUseHumanResources())
365 {
366 return $this->extractUsersFromDepartmentOld($departmentId, $recursive);
367 }
368
369 $node = $this->getDepartmentNode($departmentId);
370 if (!$node)
371 {
372 return null;
373 }
374
375 return $this->extractUsersFromHrNode($node->id, $recursive);
376 }
377
378 public function extractUsersFromGroup(int $groupId): array
379 {
380 if ($groupId <= 0)
381 {
382 return [];
383 }
384
385 $userIds =
386 array_column(
387 UserGroupTable::query()
388 ->setSelect(['USER_ID'])
389 ->where('GROUP_ID', $groupId)
390 ->setOrder(['USER_ID' => 'ASC'])
391 ->exec()
392 ->fetchAll(),
393 'USER_ID'
394 )
395 ;
396
398
399 return $userIds;
400 }
401
402 public function extractUsersFromAllDepartments(): bool | array
403 {
404 if (!$this->canUseHumanResources())
405 {
406 return $this->extractUsersFromAllDepartmentsOld();
407 }
408
409 $rootNode = \Bitrix\HumanResources\Util\StructureHelper::getRootStructureDepartment();
410 if ($rootNode)
411 {
412 $employees = Container::getNodeMemberService()->getAllEmployees($rootNode->id, true);
413
414 $result = array_map(static fn(NodeMember $item) => $item->entityId, [...$employees->getItemMap()]);
416
417 return $result;
418 }
419
420 return false;
421 }
422
428 private function extractUsersFromAllDepartmentsOld(): bool | array
429 {
430 if (Main\Loader::includeModule('intranet'))
431 {
432 $result = [];
433 $iterator = \CUser::GetList(
434 'ID',
435 'ASC',
436 ['ACTIVE' => 'Y', '>UF_DEPARTMENT' => 0],
437 ['FIELDS' => ['ID']]
438 );
439 while ($user = $iterator->Fetch())
440 {
441 $result[] = (int)$user['ID'];
442 }
443
444 return $result;
445 }
446
447 return false;
448 }
449
450 public function extractUsersFromSocNetGroup(int $groupId, string $role = 'K'): bool | array
451 {
452 if (Main\Loader::includeModule('socialnetwork'))
453 {
454 $result = [];
455 $iterator = \CSocNetUserToGroup::GetList(
456 ['USER_ID' => 'ASC'],
457 ['=GROUP_ID' => $groupId, '<=ROLE' => $role, 'USER_ACTIVE' => 'Y'],
458 false,
459 false,
460 ['USER_ID']
461 );
462 while ($user = $iterator->Fetch())
463 {
464 $result[] = (int)$user['USER_ID'];
465 }
466
467 return $result;
468 }
469
470 return false;
471 }
472
473 public function extractUsersFromHrNode(int $nodeId, bool $recursive = true): ?array
474 {
475 if ($nodeId <= 0 || !$this->canUseHumanResources())
476 {
477 return null;
478 }
479
480 $employeesCollection = Container::getNodeMemberService()->getPagedEmployees($nodeId, $recursive);
481
482 return array_values(
483 array_unique(
484 array_map(static fn(NodeMember $item) => $item->entityId, [...$employeesCollection->getItemMap()])
485 )
486 );
487 }
488
489 private function convertValues(array &$values, array $userFields): void
490 {
491 foreach ($userFields as $id => $field)
492 {
493 if ($field['Type'] === 'bool')
494 {
495 $values[$id] = \CBPHelper::getBool($values[$id]) ? 'Y' : 'N';
496 }
497 elseif ($field['Type'] === 'select')
498 {
499 $values[$id] = $this->convertSelectValue($values[$id], $field);
500 }
501 }
502
503 if (!empty($values['UF_DEPARTMENT']))
504 {
505 $values['UF_DEPARTMENT_PRINTABLE'] = $this->loadDepartmentNames($values['UF_DEPARTMENT']);
506 }
507 }
508
509 private function convertSelectValue($value, $field)
510 {
511 $enumIds = array_combine(
512 array_column($field['Settings']['ENUM'], 'XML_ID'),
513 array_column($field['Settings']['ENUM'], 'ID'),
514 );
515
516 if (is_array($value))
517 {
518 $xmlIds = [];
519 foreach ($value as $val)
520 {
521 $xmlIds[] = array_search($val, $enumIds);
522 }
523
524 return array_filter($xmlIds, fn($id) => $id !== false);
525 }
526
527 $xmlId = array_search($value, $enumIds);
528
529 return $xmlId !== false ? $xmlId : '';
530 }
531
532 private function convertUserValue($value): array
533 {
534 $users = [];
535
536 $value = is_array($value) ? $value : [$value];
537 foreach ($value as $userId)
538 {
539 if (is_int($userId))
540 {
541 $users[] = 'user_' . $userId;
542 }
543 }
544
545 return $users;
546 }
547
548 private function loadUser(int $userId, array $fields): ?array
549 {
550 $dbUsers = \CUser::GetList(
551 'id',
552 'asc',
553 ['ID_EQUAL_EXACT' => $userId],
554 [
555 'FIELDS' => [
556 'ID',
557 'EMAIL',
558 'WORK_PHONE',
559 'PERSONAL_MOBILE',
560 'PERSONAL_BIRTHDAY',
561 'LOGIN',
562 'ACTIVE',
563 'NAME',
564 'LAST_NAME',
565 'SECOND_NAME',
566 'WORK_POSITION',
567 'PERSONAL_WWW',
568 'PERSONAL_CITY',
569 ],
570 'SELECT' => [
571 'UF_DEPARTMENT',
572 'UF_SKYPE',
573 'UF_TWITTER',
574 'UF_FACEBOOK',
575 'UF_LINKEDIN',
576 'UF_XING',
577 'UF_WEB_SITES',
578 'UF_PHONE_INNER',
579 ...array_keys($fields),
580 ],
581 ]
582 );
583
584 $user = $dbUsers->fetch();
585
586 if (is_array($user))
587 {
588 if ($this->canUseHumanResources())
589 {
590 $user['HR_NODE_IDS'] =
591 array_map(
592 static fn (\Bitrix\HumanResources\Item\Node $node) => $node->id,
593 [...Container::getNodeRepository()->findAllByUserId($userId)->getItemMap()]
594 )
595 ;
596 $user['HR_NODE'] = array_map(static fn(int $id) => 'group_hr' . $id, $user['HR_NODE_IDS']);
597 }
598
599 $this->convertValues($user, $fields);
600 $this->users[$userId] = $user;
601
602 $schedule = $this->getUserSchedule($userId);
603 $this->users[$userId]['IS_ABSENT'] = $schedule->isAbsent();
604 $this->users[$userId]['TIMEMAN_STATUS'] = $schedule->getWorkDayStatus();
605 $this->users[$userId]['UF_HEAD'] = $this->convertUserValue($this->getUserHeads($userId));
606
607 return $this->users[$userId];
608 }
609
610 return null;
611 }
612
613 private function loadDepartmentNames(array $ids): array
614 {
615 if (!$this->canUseHumanResources())
616 {
617 return $this->loadDepartmentNamesOld($ids);
618 }
619
620 $codes = array_map(
621 static fn($id) => DepartmentBackwardAccessCode::makeById($id),
622 $ids
623 );
624
625 $collection = Container::getNodeRepository()->findAllByAccessCodes($codes);
626 $names = [];
627 foreach ($collection as $node)
628 {
629 $names[DepartmentBackwardAccessCode::extractIdFromCode($node->accessCode)] = $node->name;
630 }
631
632 return array_values(array_filter(
633 array_map(
634 static fn($id) => $names[$id] ?? null,
635 $ids
636 )
637 ));
638 }
639
640 private function getDepartmentNode(int $departmentId): ?\Bitrix\HumanResources\Item\Node
641 {
642 return Container::getNodeRepository()->getByAccessCode(DepartmentBackwardAccessCode::makeById($departmentId));
643 }
644
651 private function extractUsersFromDepartmentOld(int $departmentId, bool $recursive = false): ?array
652 {
653 if (!$this->canUseIntranet() || !$this->canUseIblockApi())
654 {
655 return null;
656 }
657
659 $departmentIds = [$departmentId];
660
661 if ($recursive)
662 {
663 $iterator = \CIBlockSection::GetList(
664 ['ID' => 'ASC'],
665 ['=IBLOCK_ID' => $iblockId, 'ID' => $departmentId],
666 false,
667 ['ID', 'LEFT_MARGIN', 'RIGHT_MARGIN', 'DEPTH_LEVEL']
668 );
669 $section = $iterator->fetch();
670 $filter = [
671 '=IBLOCK_ID' => $iblockId,
672 ">LEFT_MARGIN" => $section["LEFT_MARGIN"],
673 "<RIGHT_MARGIN" => $section["RIGHT_MARGIN"],
674 ">DEPTH_LEVEL" => $section['DEPTH_LEVEL'],
675 ];
676 $iterator = \CIBlockSection::GetList(["left_margin" => "asc"], $filter, false, ['ID']);
677 while ($section = $iterator->fetch())
678 {
679 $departmentIds[] = $section['ID'];
680 }
681 unset($iterator, $section, $filter);
682 }
683 $result = [];
684 $iterator = \CUser::GetList("departmentId", "asc",
685 ['ACTIVE' => 'Y', 'UF_DEPARTMENT' => $departmentIds],
686 ['FIELDS' => ['ID']]
687 );
688 while ($user = $iterator->fetch())
689 {
690 $result[] = (int)$user['ID'];
691 }
692
693 return $result;
694 }
695
702 private function loadDepartmentNamesOld(array $ids): array
703 {
704 $names = [];
705
706 if (!Main\Loader::includeModule('intranet') || !Main\Loader::includeModule('iblock'))
707 {
708 return $names;
709 }
710
712
713 $iterator = \CIBlockSection::GetList(
714 ['ID' => 'ASC'],
715 [
716 '=IBLOCK_ID' => $iblockId,
717 'ID' => $ids,
718 'CHECK_PERMISSIONS' => 'N',
719 ],
720 false,
721 ['ID', 'NAME']
722 );
723
724 while ($row = $iterator->fetch())
725 {
726 $names[$row['ID']] = $row['NAME'];
727 }
728
729 return array_values(array_filter(
730 array_map(
731 fn($id) => $names[$id] ?? null,
732 $ids
733 )
734 ));
735 }
736
742 private function getUserDepartmentsOld(int $userId): array
743 {
744 if (isset($this->users[$userId]['UF_DEPARTMENT']))
745 {
746 return is_array($this->users[$userId]['UF_DEPARTMENT']) ? $this->users[$userId]['UF_DEPARTMENT'] : [];
747 }
748
749 $departments = [];
750 $result = \CUser::getList(
751 'id', 'asc',
752 ['ID_EQUAL_EXACT' => $userId],
753 ['FIELDS' => ['ID'], 'SELECT' => ['UF_DEPARTMENT']]
754 );
755
756 if ($user = $result->fetch())
757 {
758 if (isset($user['UF_DEPARTMENT']))
759 {
760 $user['UF_DEPARTMENT'] = (array) $user['UF_DEPARTMENT'];
761 foreach ($user['UF_DEPARTMENT'] as $dpt)
762 {
763 $departments[] = (int) $dpt;
764 }
765 }
766 }
767
768 return $departments;
769 }
770
776 private function getDepartmentChainOld(int $departmentId): array
777 {
778 $chain = [];
779
780 if (!$this->canUseIblockApi())
781 {
782 return $chain;
783 }
784
785 $departmentIblockId = $this->getDepartmentIblockId();
786 $chain = \CIBlockSection::getNavChain($departmentIblockId, $departmentId, ['ID'], true);
787
788 $chain = array_map(
789 static fn($value) => (int)$value['ID'],
790 $chain
791 );
792
793 return array_reverse($chain);
794 }
795
801 private function getDepartmentHeadOld(int $departmentId): ?int
802 {
803 if (!$this->canUseIblockApi())
804 {
805 return null;
806 }
807
808 $departmentIblockId = $this->getDepartmentIblockId();
809 $sectionResult = \CIBlockSection::GetList(
810 [],
811 ['IBLOCK_ID' => $departmentIblockId, 'ID' => $departmentId],
812 false,
813 ['ID', 'UF_HEAD']
814 );
815 $section = $sectionResult->fetch();
816
817 return $section ? (int) $section['UF_HEAD'] : null;
818 }
819}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static convertUfType(string $type)
Определения fieldtype.php:504
extractUsersFromHrNode(int $nodeId, bool $recursive=true)
Определения user.php:473
getUserDepartments(int $userId)
Определения user.php:19
const DEPARTMENT_OPTION_NAME
Определения user.php:15
getUserInfo(int $userId)
Определения user.php:25
getUserBaseFields()
Определения user.php:106
getUserSchedule(int $userId)
Определения user.php:276
extractUsersFromGroup(int $groupId)
Определения user.php:378
extractUsersFromSocNetGroup(int $groupId, string $role='K')
Определения user.php:450
getUserExtendedFields()
Определения user.php:42
extractUsersFromAllDepartments()
Определения user.php:402
getUserDepartmentChains(int $userId)
Определения user.php:193
getUserUserFields()
Определения user.php:309
getUserHeads(int $userId)
Определения user.php:234
array $users
Определения user.php:17
const DEPARTMENT_MODULE_ID
Определения user.php:14
getDepartmentIblockId()
Определения user.php:281
extractUsersFromDepartment(int $departmentId, bool $recursive=false)
Определения user.php:362
getDepartmentHead(int $departmentId)
Определения user.php:258
getDepartmentChain(int $departmentId)
Определения user.php:205
static get($moduleId, $name, $default="", $siteId=false)
Определения option.php:30
static includeModule($moduleName)
Определения loader.php:67
static getList(array $parameters=array())
Определения datamanager.php:431
static normalizeArrayValuesByInt(&$map, $sorted=true)
Определения collection.php:150
static getLabelsSelect(string $referenceName=null)
Определения userfield.php:138
static getLabelsReference(string $referenceName=null, string $languageId=null)
Определения userfield.php:103
static getFieldData(int $id)
Определения userfield.php:154
</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
$iblockId
Определения iblock_catalog_edit.php:30
$filter
Определения iblock_catalog_list.php:54
$name
Определения menu_edit.php:35
$value
Определения Param.php:39
$user
Определения mysql_to_pgsql.php:33
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$val
Определения options.php:1793
$iterator
Определения yandex_run.php:610
$fields
Определения yandex_run.php:501