1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
usertogroup.php
См. документацию.
1<?php
2
9namespace Bitrix\Socialnetwork\Item;
10
11use Bitrix\Main\Application;
12use Bitrix\Main\Config\Option;
13use Bitrix\Main\Loader;
14use Bitrix\Main\Localization\Loc;
15use Bitrix\Main\ModuleManager;
16use Bitrix\Socialnetwork\Collab\Collab;
17use Bitrix\Socialnetwork\Collab\Integration\IM\ActionMessageFactory;
18use Bitrix\Socialnetwork\Collab\Integration\IM\ActionType;
19use Bitrix\Socialnetwork\Collab\Url\UrlManager;
20use Bitrix\Socialnetwork\Internals\Registry\GroupRegistry;
21use Bitrix\Socialnetwork\WorkgroupTable;
22use Bitrix\Socialnetwork\UserToGroupTable;
23use Bitrix\Socialnetwork\Integration;
24
25Loc::loadMessages(__FILE__);
26
28{
29 public const CHAT_ACTION_IN = 'in';
30 public const CHAT_ACTION_OUT = 'out';
31
32 public static function addRelationAutoMembership($params): void
33 {
34 global $USER;
35
36 if (!empty($params['CURRENT_USER_ID']))
37 {
38 $currentUserId = (int)$params['CURRENT_USER_ID'];
39 }
40 elseif (is_object($USER))
41 {
42 $currentUserId = $USER->getId();
43 }
44
45 if ($currentUserId <= 0)
46 {
47 return;
48 }
49
50 static $helper = false;
51
52 $userId = (int)($params['USER_ID'] ?? 0);
53 $groupId = (int)($params['GROUP_ID'] ?? 0);
54 $value = (isset($params['VALUE']) && in_array($params['VALUE'], WorkgroupTable::getAutoMembershipValuesAll(), true) ? $params['VALUE'] : 'Y');
55 $notyfy = (isset($params['NOTIFY']) && $params['NOTIFY'] === "N" ? $params['NOTIFY'] : 'Y');
56
57 if (
58 $userId <= 0
59 || $groupId <= 0
60 )
61 {
62 return;
63 }
64
65 if (!$helper)
66 {
67 $connection = Application::getConnection();
68 $helper = $connection->getSqlHelper();
69 }
70
71 $addFields = [
72 'AUTO_MEMBER' => $value,
73 'USER_ID' => $userId,
74 'GROUP_ID' => $groupId,
75 'ROLE' => (
76 isset($params['ROLE'])
77 && in_array($params['ROLE'], UserToGroupTable::getRolesAll(), true)
78 ? $params['ROLE']
80 ),
81 'INITIATED_BY_TYPE' => UserToGroupTable::INITIATED_BY_GROUP,
82 'INITIATED_BY_USER_ID' => $currentUserId,
83 '=DATE_CREATE' => $helper->getCurrentDateTimeFunction(),
84 '=DATE_UPDATE' => $helper->getCurrentDateTimeFunction(),
85 ];
86
87 $relationId = \CSocNetUserToGroup::add($addFields);
88
89 if (
90 !$notyfy
91 || $relationId <= 0
92 || $value !== 'Y'
93 )
94 {
95 return;
96 }
97
98 self::notifyAutoMembership([
99 'GROUP_ID' => $groupId,
100 'USER_ID' => $userId,
101 'RELATION_ID' => $relationId,
102 ]);
103
104 self::addInfoToChat([
105 'group_id' => $groupId,
106 'user_id' => $userId,
107 'action' => self::CHAT_ACTION_IN,
108 'role' => $addFields['ROLE'],
109 ]);
110 }
111
112 public static function changeRelationAutoMembership($params): void
113 {
114 static $helper = false;
115
116 $relationId = (int)($params['RELATION_ID'] ?? 0);
117 $userId = (int)($params['USER_ID'] ?? 0);
118 $groupId = (int)($params['GROUP_ID'] ?? 0);
119 $value = (
120 isset($params['VALUE'])
121 && in_array($params['VALUE'], WorkgroupTable::getAutoMembershipValuesAll(), true)
122 ? $params['VALUE']
123 : 'Y'
124 );
125 $notyfy = (isset($params['NOTIFY']) && $params['NOTIFY'] === 'N' ? $params['NOTIFY'] : 'Y');
126
127 if ($relationId <= 0)
128 {
129 return;
130 }
131
132 if (!$helper)
133 {
134 $connection = Application::getConnection();
135 $helper = $connection->getSqlHelper();
136 }
137
138 $updateFields = [
139 'AUTO_MEMBER' => $value,
140 '=DATE_UPDATE' => $helper->getCurrentDateTimeFunction(),
141 ];
142 if (
143 isset($params['ROLE'])
144 && in_array($params['ROLE'], UserToGroupTable::getRolesAll(), true)
145 )
146 {
147 $updateFields['ROLE'] = $params['ROLE'];
148 }
149 \CSocNetUserToGroup::update($relationId, $updateFields);
150
151 if (
152 !$notyfy
153 || $userId <= 0
154 || $groupId <= 0
155 || $value !== 'Y'
156 )
157 {
158 return;
159 }
160
161 self::notifyAutoMembership([
162 'GROUP_ID' => $groupId,
163 'USER_ID' => $userId,
164 'RELATION_ID' => $relationId,
165 ]);
166
167 self::addInfoToChat([
168 'group_id' => $groupId,
169 'user_id' => $userId,
170 'action' => self::CHAT_ACTION_IN,
171 'role' => ($params['ROLE'] ?? false),
172 ]);
173 }
174
175 private static function notifyAutoMembership($params): void
176 {
177 $userId = (int)($params['USER_ID'] ?? 0);
178 $groupId = (int)($params['GROUP_ID'] ?? 0);
179 $relationId = (int)($params['RELATION_ID'] ?? 0);
180
181 if (
182 $userId <= 0
183 || $groupId <= 0
184 || $relationId <= 0
185 || !Loader::includeModule('im')
186 )
187 {
188 return;
189 }
190 $groupItem = Workgroup::getById($groupId);
191 $groupFields = $groupItem->getFields();
192 $groupUrlData = $groupItem->getGroupUrlData([
193 'USER_ID' => $userId,
194 ]);
195
196 $suffix = static::getChatMessageCodeSuffix($groupItem);
197 $code = 'SOCIALNETWORK_ITEM_USERTOGROUP_AUTO_MEMBER_ADD_IM' . $suffix;
198
199 if ($groupItem instanceof Collab)
200 {
201 $url = UrlManager::getCollabUrl($groupItem);
202 }
203 else
204 {
205 $url = $groupUrlData['DOMAIN'] . $groupUrlData['URL'];
206 }
207
209 "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,
210 "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
211 "FROM_USER_ID" => $groupFields["OWNER_ID"],
212 "TO_USER_ID" => $userId,
213 "NOTIFY_MODULE" => "socialnetwork",
214 "NOTIFY_EVENT" => "invite_group",
215 "NOTIFY_TAG" => "SOCNET|INVITE_GROUP|" . $userId . '|' . $relationId,
216 "NOTIFY_MESSAGE" => fn (?string $languageId = null) => Loc::getMessage($code, [
217 "#GROUP_NAME#" => "<a href=\"". $url . "\" class=\"bx-notifier-item-action\">" . htmlspecialcharsEx($groupFields["NAME"]) . '</a>',
218 ],
219 $languageId
220 ),
221 "NOTIFY_MESSAGE_OUT" => fn (?string $languageId = null) => Loc::getMessage("SOCIALNETWORK_ITEM_USERTOGROUP_AUTO_MEMBER_ADD_IM", [
222 "#GROUP_NAME#" => htmlspecialcharsEx($groupFields["NAME"]),
223 ],
224 $languageId
225 ) . ' (' . $groupUrlData['SERVER_NAME'] . $groupUrlData['URL'] . ')'
226 ];
227
228 \CIMNotify::deleteBySubTag('SOCNET|REQUEST_GROUP|' . $userId . '|' . $groupId . '|' . $relationId);
229 \CIMNotify::add($messageFields);
230 }
231
232 public static function onAfterUserAdd(&$fields): void
233 {
234 if (
235 !isset($fields['ID'])
236 || $fields['ID'] <= 0
237 || (
238 isset($fields['ACTIVE'])
239 && $fields['ACTIVE'] !== 'Y'
240 )
241 || !self::checkUF()
242 )
243 {
244 return;
245 }
246
247 $deparmentIdList = [];
248 if (
249 isset($fields['UF_DEPARTMENT'])
250 && is_array($fields['UF_DEPARTMENT'])
251 && (int)($fields['UF_DEPARTMENT'][0] ?? 0) > 0
252 )
253 {
254 $deparmentIdList = $fields['UF_DEPARTMENT'];
255 }
256
257 if (Loader::includeModule('intranet'))
258 {
259 $deparmentIdList = array_merge($deparmentIdList, \CIntranetUtils::getSubordinateDepartments($fields['ID'], false));
260 }
261
262 $deparmentIdList = array_unique($deparmentIdList);
263
264 if (
265 empty($deparmentIdList)
266 || !ModuleManager::isModuleInstalled('intranet')
267 || !Loader::includeModule('iblock')
268 )
269 {
270 return;
271 }
272
273 $groupList = self::getConnectedGroups($deparmentIdList);
274 if (empty($groupList))
275 {
276 return;
277 }
278
279 foreach($groupList as $groupId)
280 {
281 self::addRelationAutoMembership([
282 'USER_ID' => $fields['ID'],
283 'GROUP_ID' => $groupId,
284 'NOTIFY' => 'N',
285 ]);
286 }
287 }
288
289 public static function onAfterUserUpdate(&$userFields): void
290 {
291 if (!self::checkUF())
292 {
293 return;
294 }
295
296 if (
297 (int)$userFields['ID'] <= 0
298 || !isset($userFields['UF_DEPARTMENT'])
299 || !ModuleManager::isModuleInstalled('intranet')
300 || !Loader::includeModule('iblock')
301 )
302 {
303 return;
304 }
305
306 $oldGroupList = [];
307 $oldGroupAutoList = [];
308 $newGroupList = [];
309
310 $res = UserToGroupTable::getList([
311 'filter' => [
312 'USER_ID' => (int)$userFields['ID']
313 ],
314 'select' => [ 'GROUP_ID', 'AUTO_MEMBER' ]
315 ]);
316
317 while($relation = $res->fetch())
318 {
319 $oldGroupList[] = $relation['GROUP_ID'];
320 if ($relation['AUTO_MEMBER'] === 'Y')
321 {
322 $oldGroupAutoList[] = $relation['GROUP_ID'];
323 }
324 }
325 $oldGroupList = array_unique($oldGroupList);
326 $oldGroupAutoList = array_unique($oldGroupAutoList);
327
328 if (
329 !empty($userFields['UF_DEPARTMENT'])
330 && is_array($userFields['UF_DEPARTMENT'])
331 )
332 {
333 $userFields['UF_DEPARTMENT'] = array_values($userFields['UF_DEPARTMENT']);
334 }
335
336 $departmentList = (
337 !is_array($userFields['UF_DEPARTMENT'])
338 || empty($userFields['UF_DEPARTMENT'])
339 || (int)$userFields['UF_DEPARTMENT'][0] <= 0
340 ? []
341 : $userFields['UF_DEPARTMENT']
342 );
343
344 if (Loader::includeModule('intranet'))
345 {
346 $departmentList = array_merge($departmentList, \CIntranetUtils::getSubordinateDepartments($userFields['ID'], false));
347 }
348 $departmentList = array_unique($departmentList);
349
350 if (!empty($departmentList))
351 {
352 $newGroupList = self::getConnectedGroups($departmentList);
353 }
354 $groupListPlus = array_diff($newGroupList, $oldGroupList);
355 $groupListMinus = array_diff($oldGroupAutoList, $newGroupList);
356 $groupListMinus = array_diff($groupListMinus, $groupListPlus);
357
358 if (!empty($groupListMinus))
359 {
360 $res = UserToGroupTable::getList([
361 'filter' => [
362 '=USER_ID' => (int)$userFields['ID'],
363 '@GROUP_ID' => $groupListMinus,
365 'AUTO_MEMBER' => 'Y'
366 ],
367 'select' => [ 'ID' ],
368 ]);
369 while($relation = $res->fetch())
370 {
371 \CSocNetUserToGroup::delete($relation['ID']);
372 }
373 }
374
375 $changeList = $addList = $noChangeList = [];
376 if (!empty($groupListPlus))
377 {
378 $res = UserToGroupTable::getList([
379 'filter' => [
380 '=USER_ID' => (int)$userFields["ID"],
381 '@GROUP_ID' => $groupListPlus,
383 ],
384 'select' => [ 'ID', 'GROUP_ID', 'AUTO_MEMBER' ],
385 ]);
386
387 while ($relation = $res->fetch())
388 {
389 if (
390 $relation['AUTO_MEMBER'] === 'Y'
391 || $relation['ROLE'] === UserToGroupTable::ROLE_OWNER
392 )
393 {
394 $noChangeList[] = $relation['GROUP_ID'];
395 }
396 else // UserToGroupTable::ROLE_MODERATOR, UserToGroupTable::ROLE_USER, AUTO_MEMBER = 'N'
397 {
398 $noChangeList[] = $relation['GROUP_ID'];
399 self::changeRelationAutoMembership([
400 'RELATION_ID' => (int)$relation['ID'],
401 'USER_ID' => (int)$userFields["ID"],
402 'GROUP_ID' => (int)$relation['GROUP_ID'],
403 'ROLE' => $relation['ROLE'],
404 'VALUE' => 'Y',
405 'NOTIFY' => 'N',
406 ]);
407 }
408 }
409
410 $groupListPlus = array_diff($groupListPlus, $noChangeList);
411 }
412
413 if (!empty($groupListPlus))
414 {
415 $res = UserToGroupTable::getList([
416 'filter' => [
417 '=USER_ID' => (int)$userFields['ID'],
418 '@GROUP_ID' => $groupListPlus,
420 'AUTO_MEMBER' => 'N',
421 ],
422 'select' => [ 'ID', 'USER_ID', 'GROUP_ID' ],
423 ]);
424
425 while ($relation = $res->fetch())
426 {
427 $changeList[] = (int)$relation['GROUP_ID'];
428 self::changeRelationAutoMembership([
429 'RELATION_ID' => (int)$relation['ID'],
430 'USER_ID' => (int)$relation['USER_ID'],
431 'GROUP_ID' => (int)$relation['GROUP_ID'],
433 'VALUE' => 'Y',
434 ]);
435 }
436 $addList = array_diff($groupListPlus, $changeList);
437 }
438
439 foreach ($addList as $addGroupId)
440 {
441 self::addRelationAutoMembership([
442 'USER_ID' => (int)$userFields['ID'],
443 'GROUP_ID' => $addGroupId,
445 'VALUE' => 'Y',
446 ]);
447 }
448 }
449
450 public static function getConnectedGroups($departmentList): array
451 {
452 static $structureIBlockId = false;
453 static $departmentChainCache = [];
454
455 $result = [];
456
457 if ($structureIBlockId === false)
458 {
459 $structureIBlockId = (int)Option::get('intranet', 'iblock_structure', 0);
460 }
461
462 if ((int)$structureIBlockId <= 0)
463 {
464 return $result;
465 }
466
467 $userDepartmentList = [];
468
469 foreach($departmentList as $departmentId)
470 {
471 $departmentChain = [];
472 if (isset($departmentChainCache[$departmentId]))
473 {
474 $departmentChain = $departmentChainCache[$departmentId];
475 }
476 else
477 {
478 $res = \CIBlockSection::getNavChain($structureIBlockId, $departmentId, [ 'ID' ]);
479 while ($section = $res->fetch())
480 {
481 if ((int)$section['ID'] > 0)
482 {
483 $departmentChain[] = (int)$section['ID'];
484 }
485 }
486 $departmentChainCache[$departmentId] = $departmentChain;
487 }
488 $userDepartmentList = array_merge($userDepartmentList, $departmentChain);
489 }
490
491 $userDepartmentList = array_unique($userDepartmentList);
492
493 if (!empty($userDepartmentList))
494 {
495 $res = WorkgroupTable::getList([
496 'filter' => [
497 '@UF_SG_DEPT' => $userDepartmentList,
498 ],
499 'select' => [ 'ID' ],
500 ]);
501 while ($group = $res->fetch())
502 {
503 if ((int)$group['ID'] > 0)
504 {
505 $result[] = (int)$group['ID'];
506 }
507 }
508 }
509
510 return array_unique($result);
511 }
512
513 private static function checkUF(): bool
514 {
515 $res = \CUserTypeEntity::getList([], [
516 'ENTITY_ID' => 'SONET_GROUP',
517 'FIELD_NAME' => 'UF_SG_DEPT'
518 ]);
519 return ($res && ($res->fetch()));
520 }
521
522 public static function addInfoToChat($params = [])
523 {
524 if (
525 !is_array($params)
526 || !isset($params['group_id'], $params['user_id'], $params['action'])
527 || (int)$params['group_id'] <= 0
528 || (int)$params['user_id'] <= 0
529 || !Loader::includeModule('im')
530 )
531 {
532 return false;
533 }
534
535 $groupId = (int)$params['group_id'];
536 $userId = (int)$params['user_id'];
537 $action = (string)$params['action'];
538
539 $group = GroupRegistry::getInstance()->get($groupId);
540
541 if ($group === null)
542 {
543 return false;
544 }
545
546 if (!$group->isCollab() && !Integration\Im\Chat\Workgroup::getUseChat())
547 {
548 return false;
549 }
550
551 if ($group->isCollab() && ActionType::isValid($action))
552 {
553 $factory = ActionMessageFactory::getInstance();
554 $message = $factory->getActionMessage(ActionType::from($action), $groupId, $userId);
555
556 $recipientIds = (array)($params['recipientIds'] ?? []);
557
558 return $message->send($recipientIds, $params);
559 }
560
561 if (!in_array($action, self::getChatActionList(), true))
562 {
563 return false;
564 }
565
566 $role = ($params['role'] ?? false);
567
568 $sendMessage = (
569 !isset($params['sendMessage'])
570 || $params['sendMessage']
571 );
572
574 'group_id' => $groupId,
575 'skipAvailabilityCheck' => true,
576 ]);
577
578 if (
579 empty($chatData)
580 || empty($chatData[$groupId])
581 || (int)$chatData[$groupId] <= 0
582 )
583 {
584 return false;
585 }
586
587 $res = \CUser::getById($userId);
588 $user = $res->fetch();
589
590 if (
591 empty($user)
592 || (
593 isset($user['ACTIVE'])
594 && $user['ACTIVE'] === 'N'
595 )
596 )
597 {
598 return false;
599 }
600
601 $suffix = static::getChatMessageCodeSuffix($group);
602
603 $userName = \CUser::formatName(\CSite::getNameFormat(), $user, true, false);
604 switch($user['PERSONAL_GENDER'])
605 {
606 case "M":
607 $genderSuffix = '_M';
608 break;
609 case "F":
610 $genderSuffix = '_F';
611 break;
612 default:
613 $genderSuffix = '';
614 }
615
616 $chatId = $chatData[$groupId];
617 $chat = new \CIMChat(0);
618
619 switch ($params['action'])
620 {
621 case self::CHAT_ACTION_IN:
622 if ($chat->addUser($chatId, $userId, false, true, true))
623 {
624 if ($role === UserToGroupTable::ROLE_USER)
625 {
626 \Bitrix\Im\Chat::mute($chatId, true, $userId);
627 }
628
629 $chatMessage = str_replace('#USER_NAME#', $userName, Loc::getMessage('SOCIALNETWORK_ITEM_USERTOGROUP_CHAT_USER_ADD' . $suffix . $genderSuffix));
630 }
631 else
632 {
633 $sendMessage = false;
634 }
635 break;
636 case self::CHAT_ACTION_OUT:
637 if ($chat->deleteUser($chatId, $userId, false, true))
638 {
639 $chatMessage = str_replace('#USER_NAME#', $userName, Loc::getMessage('SOCIALNETWORK_ITEM_USERTOGROUP_CHAT_USER_DELETE' . $suffix . $genderSuffix));
640 }
641 else
642 {
643 $sendMessage = false;
644 }
645 break;
646
647 default:
648 $chatMessage = '';
649 $sendMessage = false;
650 }
651
652 if ($sendMessage)
653 {
654 $chatMessageFields = [
655 "MESSAGE" => $chatMessage,
656 "SYSTEM" => "Y",
657 "INCREMENT_COUNTER" => "N",
658 "PUSH" => "N"
659 ];
660
661 $availableChatData = Integration\Im\Chat\Workgroup::getChatData([
662 'group_id' => $groupId,
663 ]);
664
665 if (
666 !empty($availableChatData)
667 && !empty($availableChatData[$groupId])
668 && (int)$availableChatData[$groupId] > 0
669 )
670 {
671 return \CIMChat::addMessage(array_merge(
672 $chatMessageFields, [
673 'TO_CHAT_ID' => $chatId,
674 ]
675 ));
676 }
677 }
678 else
679 {
680 return true;
681 }
682
683 return false;
684 }
685
686 private static function getChatMessageCodeSuffix(Workgroup $group): string
687 {
688 return match (true) {
689 $group->isProject() => '_PROJECT',
690 $group->isCollab() => '_COLLAB',
691 default => '',
692 };
693 }
694
695 private static function getChatActionList(): array
696 {
697 return [self::CHAT_ACTION_IN, self::CHAT_ACTION_OUT];
698 }
699
700 public static function addModerators($params = []): bool
701 {
702 global $USER;
703
704 $result = false;
705
706 if (
707 !is_array($params)
708 || !isset($params['group_id'], $params['user_id'])
709 || (int)$params['group_id'] <= 0
710 || empty($params['user_id'])
711 )
712 {
713 return $result;
714 }
715
716 $groupId = (int)$params['group_id'];
717 $userIdList = (
718 is_array($params['user_id'])
719 ? $params['user_id']
720 : [ $params['user_id'] ]
721 );
722 $currentUserId = (
723 isset($params['current_user_id'])
724 && (int)$params['current_user_id'] > 0
725 ? (int)$params['current_user_id']
726 : (
727 is_object($USER)
728 && $USER->isAuthorized()
729 ? $USER->getId()
730 : false
731 )
732 );
733
734 if (!$currentUserId)
735 {
736 return $result;
737 }
738
739 $ownerRelationIdList = [];
740 $memberRelationIdList = [];
741 $otherRelationIdList = [];
742
743 $resRelation = UserToGroupTable::getList([
744 'filter' => [
745 'GROUP_ID' => $groupId,
746 '@USER_ID' => $userIdList
747 ],
748 'select' => [ 'ID', 'USER_ID', 'ROLE' ],
749 ]);
750
751 while ($relation = $resRelation->fetch())
752 {
753 if ($relation['ROLE'] === UserToGroupTable::ROLE_USER)
754 {
755 $memberRelationIdList[$relation['USER_ID']] = $relation['ID'];
756 }
757 elseif ($relation['ROLE'] === UserToGroupTable::ROLE_OWNER)
758 {
759 $ownerRelationIdList[$relation['USER_ID']] = $relation['ID'];
760 }
761 else // ban, request
762 {
763 $otherRelationIdList[$relation['USER_ID']] = $relation['ID'];
764 }
765 }
766
767 if (!empty($memberRelationIdList))
768 {
769 \CSocNetUserToGroup::transferMember2Moderator($currentUserId, $groupId, $memberRelationIdList);
770 }
771
772 foreach ($userIdList as $userId)
773 {
774 if (
775 !array_key_exists($userId, $memberRelationIdList)
776 && !array_key_exists($userId, $ownerRelationIdList)
777 )
778 {
779 if (array_key_exists($userId, $otherRelationIdList))
780 {
781 $relationId = \CSocNetUserToGroup::update($otherRelationIdList[$userId], [
783 '=DATE_UPDATE' => \CDatabase::CurrentTimeFunction(),
784 ]);
785 }
786 else
787 {
788 $relationId = \CSocNetUserToGroup::add([
789 'USER_ID' => $userId,
790 'GROUP_ID' => $groupId,
792 '=DATE_CREATE' => \CDatabase::CurrentTimeFunction(),
793 '=DATE_UPDATE' => \CDatabase::CurrentTimeFunction(),
794 'MESSAGE' => '',
795 'INITIATED_BY_TYPE' => UserToGroupTable::INITIATED_BY_GROUP,
796 'INITIATED_BY_USER_ID' => $currentUserId,
797 'SEND_MAIL' => 'N',
798 ]);
799 }
800
801 if ($relationId)
802 {
803 \CSocNetUserToGroup::notifyModeratorAdded([
804 'userId' => $currentUserId,
805 'groupId' => $groupId,
806 'relationId' => $relationId
807 ]);
808 }
809 }
810 }
811
812 return true;
813 }
814
815}
$connection
Определения actionsdefinitions.php:38
$messageFields
Определения callback_ednaru.php:22
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
static mute($chatId, $action, $userId=null)
Определения chat.php:278
static getById($id)
Определения datamanager.php:364
static changeRelationAutoMembership($params)
Определения usertogroup.php:112
static addRelationAutoMembership($params)
Определения usertogroup.php:32
static getConnectedGroups($departmentList)
Определения usertogroup.php:450
static onAfterUserAdd(&$fields)
Определения usertogroup.php:232
static addModerators($params=[])
Определения usertogroup.php:700
static onAfterUserUpdate(&$userFields)
Определения usertogroup.php:289
static addInfoToChat($params=[])
Определения usertogroup.php:522
static getAutoMembershipValuesAll()
Определения workgroup.php:53
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
const IM_MESSAGE_SYSTEM
Определения include.php:21
const IM_NOTIFY_SYSTEM
Определения include.php:38
global $USER
Определения csv_new_run.php:40
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
htmlspecialcharsEx($str)
Определения tools.php:2685
$user
Определения mysql_to_pgsql.php:33
$message
Определения payment.php:8
return false
Определения prolog_main_admin.php:185
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
else $userName
Определения order_form.php:75
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$action
Определения file_dialog.php:21
$url
Определения iframe.php:7
$fields
Определения yandex_run.php:501