17use Bitrix\Socialnetwork\Integration;
24Loc::loadMessages(__FILE__);
41 if (
$ACTION !==
"ADD" && (
int)$id <= 0)
43 $APPLICATION->ThrowException(
"System error 870164",
"ERROR");
48 (isset($relationFields[
'USER_ID']) ||
$ACTION ===
"ADD")
49 && (
int)$relationFields[
"USER_ID"] <= 0
52 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_EMPTY_USER_ID'),
'EMPTY_USER_ID');
56 if (isset($relationFields[
'USER_ID']))
58 $res = CUser::getList(
61 [
'ID_EQUAL_EXACT' => $relationFields[
"USER_ID"]],
66 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_ERROR_NO_USER_ID'),
'ERROR_NO_USER_ID');
72 (isset($relationFields[
'GROUP_ID']) ||
$ACTION ===
"ADD")
73 && (
int)$relationFields[
"GROUP_ID"] <= 0
76 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_EMPTY_GROUP_ID'),
'EMPTY_GROUP_ID');
81 isset($relationFields[
"GROUP_ID"])
82 && !CSocNetGroup::getById($relationFields[
"GROUP_ID"])
85 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_ERROR_NO_GROUP_ID'),
'ERROR_NO_GROUP_ID');
90 (isset($relationFields[
"ROLE"]) ||
$ACTION ===
"ADD")
91 && $relationFields[
"ROLE"] ===
''
94 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_EMPTY_ROLE'),
'EMPTY_ROLE');
99 isset($relationFields[
"ROLE"])
105 $relationFields[
"ROLE"],
106 Loc::getMessage(
'SONET_UG_ERROR_NO_ROLE')
112 (isset($relationFields[
"INITIATED_BY_TYPE"]) ||
$ACTION ===
"ADD")
113 && (
string)$relationFields[
"INITIATED_BY_TYPE"] ===
''
116 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_EMPTY_INITIATED_BY_TYPE'),
'EMPTY_INITIATED_BY_TYPE');
121 isset($relationFields[
"INITIATED_BY_TYPE"])
127 $relationFields[
"INITIATED_BY_TYPE"],
128 Loc::getMessage(
'SONET_UG_ERROR_NO_INITIATED_BY_TYPE')
129 ),
'ERROR_NO_INITIATED_BY_TYPE');
134 (isset($relationFields[
'INITIATED_BY_USER_ID']) ||
$ACTION ===
"ADD")
135 && (
int)$relationFields[
'INITIATED_BY_USER_ID'] <= 0
139 Loc::getMessage(
'SONET_UG_EMPTY_INITIATED_BY_USER_ID'),
140 'EMPTY_INITIATED_BY_USER_ID'
145 if (isset($relationFields[
"INITIATED_BY_USER_ID"]))
147 $res = CUser::GetByID($relationFields[
"INITIATED_BY_USER_ID"]);
151 Loc::getMessage(
'SONET_UG_ERROR_NO_INITIATED_BY_USER_ID'),
152 'ERROR_NO_INITIATED_BY_USER_ID'
159 isset($relationFields[
'DATE_CREATE'])
160 && !
$DB->IsDate($relationFields[
'DATE_CREATE'],
false, LANG,
'FULL')
163 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_EMPTY_DATE_CREATE'),
'EMPTY_DATE_CREATE');
168 isset($relationFields[
'DATE_UPDATE'])
169 && !
$DB->IsDate($relationFields[
'DATE_UPDATE'],
false, LANG,
'FULL')
172 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_EMPTY_DATE_UPDATE'),
'EMPTY_DATE_UPDATE');
177 isset($relationFields[
'DATE_LAST_VIEW'])
178 && !
$DB->IsDate($relationFields[
'DATE_LAST_VIEW'],
false, LANG,
'FULL')
181 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_EMPTY_DATE_LAST_VIEW'),
'EMPTY_DATE_LAST_VIEW');
187 isset($relationFields[
"SEND_MAIL"])
188 && $relationFields[
"SEND_MAIL"] !==
"N"
190 || !isset($relationFields[
'SEND_MAIL'])
193 $relationFields[
"SEND_MAIL"] =
"Y";
201 $sendExclude =
false,
202 bool $skipChatMessage =
false,
203 bool $skipStatistics =
false,
204 bool $delayEvents =
false
209 if (!CSocNetGroup::__ValidateID($id))
216 $relationFields = CSocNetUserToGroup::GetByID($id);
217 if (!$relationFields)
219 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_NO_USER2GROUP'),
'ERROR_NO_USER2GROUP');
224 while ($eventFields =
$res->Fetch())
232 $events =
GetModuleEvents(
"socialnetwork",
"OnSocNetUserToGroupDelete");
233 while ($eventFields = $events->Fetch())
246 'GROUP_ID' => $relationFields[
'GROUP_ID'],
247 'USER_ID' => $relationFields[
'USER_ID'],
248 'ROLE' => $relationFields[
'ROLE'] ??
null,
249 'INITIATED_BY_TYPE' => $relationFields[
'INITIATED_BY_TYPE'] ??
null,
253 'GROUP_ID' => $relationFields[
'GROUP_ID'],
254 'USER_ID' => $relationFields[
'USER_ID'],
259 CIMNotify::DeleteByTag(
"SOCNET|INVITE_GROUP|" . (
int)$relationFields[
'USER_ID'] .
"|" . (
int)$id);
262 $bSuccess =
$DB->Query(
"DELETE FROM b_sonet_user2group WHERE ID = ".$id.
"",
true);
264 if (!$skipStatistics)
266 CSocNetGroup::SetStat($relationFields[
"GROUP_ID"]);
271 $event =
new Event(
'socialnetwork',
'OnAfterSocNetUserToGroupDelete', $relationFields);
275 static::delayJob(
static fn () =>
$event->send());
282 $roleCacheKey = $relationFields[
'USER_ID'] .
'_' . $relationFields[
'GROUP_ID'];
283 if (isset(self::$roleCache[$roleCacheKey]))
285 unset(self::$roleCache[$roleCacheKey]);
288 if ($bSuccess && defined(
"BX_COMP_MANAGED_CACHE"))
290 $CACHE_MANAGER->ClearByTag(
"sonet_user2group_G".$relationFields[
"GROUP_ID"]);
291 $CACHE_MANAGER->ClearByTag(
"sonet_user2group_U".$relationFields[
"USER_ID"]);
297 && in_array($relationFields[
'ROLE'], [
303 $chatNotificationResult =
false;
308 'group_id' => $relationFields[
"GROUP_ID"],
309 'user_id' => $relationFields[
"USER_ID"],
311 'sendMessage' => $sendExclude,
317 "TO_USER_ID" => $relationFields[
"USER_ID"],
320 "NOTIFY_MODULE" =>
"socialnetwork",
321 "NOTIFY_EVENT" =>
"invite_group",
322 "NOTIFY_TAG" =>
"SOCNET|INVITE_GROUP|" . (int)$relationFields[
"USER_ID"] .
"|" . (
int)$relationFields[
"ID"],
323 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) => Loc::getMessage(
324 'SONET_UG_EXCLUDE_MESSAGE',
325 [
"#NAME#" => $relationFields[
"GROUP_NAME"]],
330 CIMNotify::Add($arMessageFields);
336 && !$chatNotificationResult
339 CSocNetUserToGroup::notifyImToModerators([
341 "RELATION_ID" => $relationFields[
"ID"],
342 "USER_ID" => $relationFields[
"USER_ID"],
343 "GROUP_ID" => $relationFields[
"GROUP_ID"],
344 "GROUP_NAME" => $relationFields[
"GROUP_NAME"],
351 'GROUP_ID' => (
int)$relationFields[
'GROUP_ID'],
352 'USER_ID' => (
int)$relationFields[
'USER_ID'],
353 'ROLE' => $relationFields[
'ROLE'],
354 'INITIATED_BY_TYPE' => ($relationFields[
'INITIATED_BY_TYPE']),
355 'RELATION_ID' => (
int)$relationFields[
'ID'],
365 if (!CSocNetGroup::__ValidateID(
$userId))
376 while ($relationFields =
$res->fetch())
378 $groupIdList[] = (int)$relationFields[
"GROUP_ID"];
381 $DB->Query(
"DELETE FROM b_sonet_user2group WHERE USER_ID = ".
$userId.
"",
true);
383 foreach ($groupIdList as $groupId)
385 CSocNetGroup::SetStat($groupId);
388 self::$roleCache =
array();
401 if (!CSocNetGroup::__ValidateID($id))
408 $res = CSocNetUserToGroup::GetList(
415 'ROLE',
'DATE_CREATE',
'DATE_UPDATE',
'INITIATED_BY_TYPE',
'INITIATED_BY_USER_ID',
'MESSAGE',
417 'GROUP_ID',
'GROUP_VISIBLE',
'GROUP_NAME',
420 if ($relationFields =
$res->fetch())
422 if (!empty($relationFields[
'GROUP_NAME']))
424 $relationFields[
'GROUP_NAME'] = Emoji::decode(
htmlspecialcharsEx($relationFields[
'GROUP_NAME']));
427 return $relationFields;
435 return UserToGroupTable::query()
436 ->setSelect([
'USER_ID',
'GROUP_ID',
'ROLE',
'AUTO_MEMBER' ])
437 ->where(
'GROUP_ID', $groupId)
454 'GROUP_ID' => $groupId,
458 'INITIATED_BY_USER_ID' =>
$userId,
462 return UserToGroupTable::addMulti($users,
true);
468 $lockName =
'socnet_update_group_users_lock_' . $groupId;
470 if (!
$connection->lock($lockName, static::LOCK_TIMEOUT))
478 $oldUserIds = array_map(
'intval', array_column($oldUsers,
'USER_ID'));
480 $newUserIds = array_map(
'intval', $userIds);
481 $usersToAdd = array_diff($newUserIds, $oldUserIds);
507 if (isset(
$_REQUEST[
'arSocNetUserInRoleCache']))
509 self::$roleCache = [];
512 if (is_array($groupId))
516 $groupIdListToGet = [];
517 foreach ($groupId as $TmpGroupID)
519 $cacheKey =
$userId .
'_' . $TmpGroupID;
520 if (!isset(self::$roleCache[$cacheKey]))
522 $groupIdListToGet[] = $TmpGroupID;
526 if (
count($groupIdListToGet) > 0)
528 $res = CSocNetUserToGroup::getList(
532 'GROUP_ID' => $groupIdListToGet,
536 [
'GROUP_ID',
'ROLE',
'AUTO_MEMBER' ]
539 while ($relationFields =
$res->fetch())
541 $arRolesFromDB[$relationFields[
"GROUP_ID"]] = [
542 "ROLE" => $relationFields[
"ROLE"],
543 "AUTO_MEMBER" => $relationFields[
"AUTO_MEMBER"],
547 foreach ($groupIdListToGet as $TmpGroupID)
549 self::$roleCache[
$userId.
"_".$TmpGroupID] = (
550 array_key_exists($TmpGroupID, $arRolesFromDB)
552 "ROLE" => $arRolesFromDB[$TmpGroupID][
"ROLE"],
553 "AUTO_MEMBER" => $arRolesFromDB[$TmpGroupID][
"AUTO_MEMBER"],
563 foreach ($groupId as $currentGroupId)
571 ? self::$roleCache[
$userId .
'_' . $currentGroupId]
572 : self::$roleCache[
$userId .
'_' . $currentGroupId][
'ROLE']
579 $groupId = (int)$groupId;
585 if (!array_key_exists(
$userId.
"_".$groupId, self::$roleCache))
587 $res = CSocNetUserToGroup::GetList(
592 array(
"ROLE",
"AUTO_MEMBER")
594 if ($relationFields =
$res->Fetch())
597 "ROLE" => $relationFields[
"ROLE"],
598 "AUTO_MEMBER" => $relationFields[
"AUTO_MEMBER"]
605 "AUTO_MEMBER" =>
false
612 ? self::$roleCache[
$userId.
"_".$groupId]
613 : self::$roleCache[
$userId.
"_".$groupId][
"ROLE"]
620 public static function SendEvent($userGroupID, $mailTemplate =
"SONET_INVITE_GROUP"): bool
622 $userGroupID = (int)$userGroupID;
623 if ($userGroupID <= 0)
628 $dbRelation = CSocNetUserToGroup::GetList(
630 [
'ID' => $userGroupID ],
635 'ROLE',
'DATE_CREATE',
'MESSAGE',
'INITIATED_BY_TYPE',
'INITIATED_BY_USER_ID',
636 'USER_ID',
'USER_NAME',
'USER_LAST_NAME',
'USER_EMAIL',
'USER_LID',
637 'GROUP_ID',
'GROUP_NAME',
640 $arRelation = $dbRelation->Fetch();
646 $arUserGroup =
array();
650 $arUserGroup = CUser::GetUserGroup($arRelation[
"USER_ID"]);
656 $rsGroupSite = CSocNetGroup::GetSite($arRelation[
"GROUP_ID"]);
657 while ($arGroupSite = $rsGroupSite->Fetch())
659 if ($bExtranetInstalled)
663 CExtranet::IsExtranetSite($arGroupSite[
"LID"])
664 && in_array(CExtranet::GetExtranetUserGroupID(), $arUserGroup)
668 !CExtranet::IsExtranetSite($arGroupSite[
"LID"])
669 && !in_array(CExtranet::GetExtranetUserGroupID(), $arUserGroup)
689 $requestsPagePath = str_replace(
691 $arRelation[
"USER_ID"],
697 ?
"/company/personal/user/#USER_ID#/requests/"
698 :
"/club/user/#USER_ID#/requests/"
704 $arUserInitiatedForEmail =
array(
"NAME"=>
"",
"LAST_NAME"=>
"");
706 if ((
int)$arRelation[
"INITIATED_BY_USER_ID"] > 0):
708 $dbUserInitiated = CUser::GetList(
711 array(
"ID" => $arRelation[
"INITIATED_BY_USER_ID"])
714 if ($arUserInitiated = $dbUserInitiated->Fetch())
716 $arUserInitiatedForEmail = [
717 'NAME' => $arUserInitiated[
'NAME'],
718 'LAST_NAME' => $arUserInitiated[
'LAST_NAME'],
725 "RELATION_ID" => $userGroupID,
726 "URL" => $requestsPagePath,
727 "GROUP_ID" => $arRelation[
"GROUP_ID"],
728 "USER_ID" => $arRelation[
"USER_ID"],
729 "GROUP_NAME" => Emoji::decode($arRelation[
"GROUP_NAME"]),
730 "USER_NAME" => $arRelation[
"USER_NAME"],
731 "USER_LAST_NAME" => $arRelation[
"USER_LAST_NAME"],
732 "USER_EMAIL" => $arRelation[
"USER_EMAIL"],
733 "INITIATED_USER_NAME" => $arUserInitiatedForEmail[
"NAME"],
734 "INITIATED_USER_LAST_NAME" => $arUserInitiatedForEmail[
"LAST_NAME"],
735 "MESSAGE" => $arRelation[
"MESSAGE"]
753 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UR_EMPTY_USERID'),
'ERROR_USERID');
757 $groupId = (int)$groupId;
760 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UR_EMPTY_GROUPID'),
'ERROR_GROUPID');
764 $groupFields = WorkgroupTable::getList([
772 'filter' => [
'ID' => $groupId],
776 || !is_array($groupFields)
777 || $groupFields[
"ACTIVE"] !==
"Y"
780 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UG_ERROR_NO_GROUP_ID'),
'ERROR_NO_GROUP');
786 "GROUP_ID" => $groupId,
788 "=DATE_CREATE" => CDatabase::CurrentTimeFunction(),
789 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
792 "INITIATED_BY_USER_ID" =>
$userId
794 if ($groupFields[
"OPENED"] ===
"Y")
799 $ID = CSocNetUserToGroup::Add($relationFields);
809 $errorMessage = Loc::getMessage(
"SONET_UR_ERROR_CREATE_USER2GROUP");
817 'groupId' => $groupId,
821 if ($groupFields[
"OPENED"] ===
"Y")
831 'group_id' => $groupId,
834 'role' => $relationFields[
'ROLE'],
837 if (!$chatNotificationResult)
839 CSocNetUserToGroup::notifyImToModerators([
841 "RELATION_ID" =>
$ID,
843 "GROUP_ID" => $groupId,
844 "GROUP_NAME" => $groupFields[
"NAME"],
850 trim($requestConfirmUrl) !==
''
857 $dbSite = CSite::GetByID(
SITE_ID);
858 $arSite = $dbSite->Fetch();
860 if ($serverName ===
'')
862 if (defined(
"SITE_SERVER_NAME") && SITE_SERVER_NAME !==
'')
864 $serverName = SITE_SERVER_NAME;
868 $serverName = Option::get(
"main",
"server_name");
871 if ($serverName ===
'')
873 $serverName =
$_SERVER[
"SERVER_NAME"];
876 $serverName = (CMain::IsHTTPS() ?
"https" :
"http").
"://".$serverName;
886 $res = CSocNetUserToGroup::GetList(
887 array(
"USER_ID" =>
"ASC"),
889 "GROUP_ID" => $groupId,
890 "<=ROLE" => $FilterRole,
895 array(
"ID",
"USER_ID",
"USER_NAME",
"USER_LAST_NAME",
"USER_EMAIL")
899 $groupSiteId = CSocNetGroup::GetDefaultSiteId($groupId, $groupFields[
"SITE_ID"] ??
false);
900 $workgroupsPage = COption::GetOptionString(
"socialnetwork",
"workgroups_page",
"/workgroups/",
SITE_ID);
901 $groupUrlTemplate = Path::get(
'group_path_template');
902 $groupUrlTemplate =
"#GROUPS_PATH#" . mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage));
903 $groupUrl = str_replace(
array(
"#group_id#",
"#GROUP_ID#"), $groupId, $groupUrlTemplate);
905 while ($recipientRelationFields =
$res->fetch())
909 "GROUP_URL" => $groupUrl,
911 $recipientRelationFields[
"USER_ID"],
914 $groupUrl =
$arTmp[
"URLS"][
"GROUP_URL"];
916 mb_strpos($groupUrl,
"http://") === 0
917 || mb_strpos($groupUrl,
"https://") === 0
921 && !empty(
$arTmp[
"DOMAIN"])
922 ?
"//".$arTmp[
"DOMAIN"]
928 "TO_USER_ID" => $recipientRelationFields[
"USER_ID"],
931 "NOTIFY_MODULE" =>
"socialnetwork",
932 "NOTIFY_EVENT" =>
"invite_group_btn",
933 "NOTIFY_TAG" =>
"SOCNET|REQUEST_GROUP|" .
$userId .
"|" . $groupId .
"|" .
$ID .
"|" . $recipientRelationFields[
"USER_ID"],
934 "NOTIFY_SUB_TAG" =>
"SOCNET|REQUEST_GROUP|" .
$userId.
"|" . $groupId .
"|" .
$ID,
935 "NOTIFY_TITLE" => str_replace(
937 truncateText($groupFields[
"NAME"], 150),
938 Loc::getMessage(
'SONET_UG_REQUEST_CONFIRM_TEXT_EMPTY')
940 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) => str_replace(
947 "<a href=\"".$domainName.$groupUrl.
"\" class=\"bx-notifier-item-action\">".$groupFields[
"NAME"].
"</a>"
950 ? Loc::getMessage(
'SONET_UG_REQUEST_CONFIRM_TEXT_EMPTY',
null, $languageId)
951 : Loc::getMessage(
'SONET_UG_REQUEST_CONFIRM_TEXT',
null, $languageId)
954 "NOTIFY_BUTTONS" => [
956 "TITLE" => Loc::getMessage(
'SONET_UG_REQUEST_CONFIRM'),
961 "TITLE" => Loc::getMessage(
'SONET_UG_REQUEST_REJECT'),
968 $groupUrl = $serverName.str_replace(
"#group_id#", $groupId, Path::get(
'group_path_template'));
970 $messageFields[
"NOTIFY_MESSAGE_OUT"] = fn (?
string $languageId =
null) => str_replace(
977 "<a href=\"".$domainName.$groupUrl.
"\" class=\"bx-notifier-item-action\">".$groupFields[
"NAME"].
"</a>"
980 ? Loc::getMessage(
'SONET_UG_REQUEST_CONFIRM_TEXT_EMPTY',
null, $languageId)
981 : Loc::getMessage(
'SONET_UG_REQUEST_CONFIRM_TEXT',
null, $languageId)
984 .
"\n\n".Loc::getMessage(
"SONET_UG_GROUP_LINK",
null, $languageId).$groupUrl
985 .
"\n\n".Loc::getMessage(
"SONET_UG_REQUEST_CONFIRM_REJECT",
null, $languageId).
": ".$requestConfirmUrl
1000 $senderUserId = (int)$senderUserId;
1001 if ($senderUserId <= 0)
1003 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UR_EMPTY_USERID'),
"ERROR_SENDERID");
1010 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UR_EMPTY_USERID"),
"ERROR_USERID");
1014 $groupId = (int)$groupId;
1017 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UR_EMPTY_GROUPID"),
"ERROR_GROUPID");
1021 $groupFields = WorkgroupTable::getList([
1027 'filter' => [
'ID' => $groupId],
1029 if (!$groupFields || !is_array($groupFields))
1031 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UG_ERROR_NO_GROUP_ID"),
"ERROR_NO_GROUP");
1035 $arGroupSites =
array();
1036 $rsGroupSite = CSocNetGroup::GetSite($groupId);
1037 while ($arGroupSite = $rsGroupSite->Fetch())
1039 $arGroupSites[] = $arGroupSite[
"LID"];
1046 || CSocNetUser::IsCurrentUserModuleAdmin($arGroupSites)
1052 && $senderUserId === (
int)$groupFields[
"OWNER_ID"]
1068 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UG_ERROR_NO_PERMS"),
"ERROR_NO_PERMS");
1072 $relationFields =
array(
1074 "GROUP_ID" => $groupId,
1076 "=DATE_CREATE" => CDatabase::CurrentTimeFunction(),
1077 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
1078 "MESSAGE" => str_replace(
1079 [
"#TEXT#",
"#GROUP_NAME#" ],
1080 [
$message, $groupFields[
"NAME"] ],
1083 ? Loc::getMessage(
"SONET_UG_INVITE_CONFIRM_TEXT_EMPTY")
1084 : Loc::getMessage(
"SONET_UG_INVITE_CONFIRM_TEXT")
1088 "INITIATED_BY_USER_ID" => $senderUserId,
1089 "SEND_MAIL" => ($sendMail ?
"Y" :
"N")
1091 $relationId = CSocNetUserToGroup::Add($relationFields);
1102 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_CREATE_USER2GROUP');
1109 $userIsConfirmed =
true;
1111 $rsInvitedUser = CUser::getList(
1119 'LAST_ACTIVITY_DATE',
1122 'SELECT' => [
'UF_DEPARTMENT'],
1125 $arInvitedUser = $rsInvitedUser->Fetch();
1129 !is_array($arInvitedUser[
"UF_DEPARTMENT"])
1130 || (
int) ($arInvitedUser[
"UF_DEPARTMENT"][0] ??
null) <= 0
1132 && ($arInvitedUser[
"LAST_LOGIN"] <= 0)
1133 && $arInvitedUser[
"LAST_ACTIVITY_DATE"] ==
''
1136 $userIsConfirmed =
false;
1146 "TO_USER_ID" => (int)$relationFields[
'USER_ID'],
1147 "FROM_USER_ID" => (
int)$relationFields[
'INITIATED_BY_USER_ID'],
1149 "NOTIFY_MODULE" =>
"socialnetwork",
1150 "NOTIFY_EVENT" =>
"invite_group_btn",
1151 "NOTIFY_TAG" =>
"SOCNET|INVITE_GROUP|" .
$userId .
"|" . $relationId,
1152 "NOTIFY_TITLE" => fn (?
string $languageId =
null) => str_replace(
1154 truncateText($groupFields[
"NAME"], 150),
1155 Loc::getMessage(
"SONET_UG_INVITE_CONFIRM_TEXT_EMPTY",
null, $languageId)
1157 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) => str_replace(
1158 [
"#TEXT#",
"#GROUP_NAME#" ],
1159 [
$message, $groupFields[
"NAME"] ],
1162 ? Loc::getMessage(
"SONET_UG_INVITE_CONFIRM_TEXT_EMPTY",
null, $languageId)
1163 : Loc::getMessage(
"SONET_UG_INVITE_CONFIRM_TEXT",
null, $languageId)
1166 "NOTIFY_BUTTONS" => [
1168 'TITLE' => Loc::getMessage(
'SONET_UG_INVITE_CONFIRM'),
1173 'TITLE' => Loc::getMessage(
'SONET_UG_INVITE_REJECT'),
1182 !is_array($arInvitedUser[
"UF_DEPARTMENT"])
1183 || (int)$arInvitedUser[
"UF_DEPARTMENT"][0] <= 0
1186 ? CExtranet::GetExtranetSiteID()
1190 $dbSite = CSite::GetByID(
$siteId);
1191 $arSite = $dbSite->Fetch();
1197 defined(
"SITE_SERVER_NAME")
1198 && SITE_SERVER_NAME !==
''
1200 : Option::get(
'main',
'server_name')
1206 $serverName =
$_SERVER[
"SERVER_NAME"];
1209 $serverName = (CMain::IsHTTPS() ?
"https" :
"http").
"://".$serverName;
1211 $requestUrl = Option::get(
1213 "user_request_page",
1216 ?
"/company/personal/user/#USER_ID#/requests/"
1217 :
"/club/user/#USER_ID#/requests/"
1222 $requestUrl = $serverName.str_replace(
array(
"#USER_ID#",
"#user_id#"),
$userId, $requestUrl);
1223 $groupUrl = $serverName.str_replace(
"#group_id#", $groupId, Path::get(
'group_path_template',
$siteId));
1225 $messageFields[
'NOTIFY_MESSAGE_OUT'] = fn (?
string $languageId =
null) =>
1227 [
"#TEXT#",
"#GROUP_NAME#" ],
1228 [
$message, $groupFields[
"NAME"] ],
1231 ? Loc::getMessage(
"SONET_UG_INVITE_CONFIRM_TEXT_EMPTY",
null, $languageId)
1232 : Loc::getMessage(
"SONET_UG_INVITE_CONFIRM_TEXT",
null, $languageId)
1235 .
"\n\n" . Loc::getMessage(
'SONET_UG_GROUP_LINK',
null, $languageId) . $groupUrl
1236 .
"\n\n" . Loc::getMessage(
'SONET_UG_INVITE_CONFIRM',
null, $languageId) .
": " . $requestUrl .
'?INVITE_GROUP=' . $relationId .
'&CONFIRM=Y'
1237 .
"\n\n" . Loc::getMessage(
'SONET_UG_INVITE_REJECT',
null, $languageId) .
": " . $requestUrl .
'?INVITE_GROUP=' . $relationId .
'&CONFIRM=N'
1243 $events =
GetModuleEvents(
"socialnetwork",
"OnSocNetSendRequestToJoinGroup");
1244 while ($arEvent = $events->Fetch())
1261 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UR_EMPTY_USERID"),
"ERROR_USERID");
1265 $groupId = (int)$groupId;
1268 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UR_EMPTY_GROUPID"),
"ERROR_GROUPID");
1272 if (!is_array($relationIdList))
1277 $arGroup = CSocNetGroup::getById($groupId);
1278 if (!$arGroup || !is_array($arGroup))
1280 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UG_ERROR_NO_GROUP_ID"),
"ERROR_NO_GROUP");
1284 $groupSiteIdList =
array();
1285 $res = CSocNetGroup::GetSite($groupId);
1286 while ($groupSiteFields =
$res->fetch())
1288 $groupSiteIdList[] = $groupSiteFields[
"LID"];
1298 || CSocNetUser::IsCurrentUserModuleAdmin($groupSiteIdList)
1304 &&
$userId === (
int)$arGroup[
"OWNER_ID"]
1320 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UG_ERROR_NO_PERMS"),
"ERROR_NO_PERMS");
1325 $arSuccessRelations =
array();
1326 $chatNotificationResult =
false;
1328 foreach ($relationIdList as $relationId)
1330 $relationId = (int)$relationId;
1331 if ($relationId <= 0)
1336 $relationFields = CSocNetUserToGroup::GetByID($relationId);
1337 if (!$relationFields)
1343 (
int)$relationFields[
"GROUP_ID"] !== $groupId
1353 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
1355 if (CSocNetUserToGroup::Update($relationFields[
"ID"],
$arFields))
1357 $arSuccessRelations[] = $relationFields;
1365 'group_id' => $groupId,
1366 'user_id' => $relationFields[
"USER_ID"],
1372 !$chatNotificationResult
1376 $groupSiteId = CSocNetGroup::GetDefaultSiteId($groupId, $arGroup[
"SITE_ID"]);
1377 $workgroupsPage = COption::GetOptionString(
"socialnetwork",
"workgroups_page",
"/workgroups/",
SITE_ID);
1378 $groupUrlTemplate = Path::get(
'group_path_template');
1379 $groupUrlTemplate =
"#GROUPS_PATH#".mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage));
1382 "GROUP_URL" => str_replace(
array(
"#group_id#",
"#GROUP_ID#"), $groupId, $groupUrlTemplate)
1384 $relationFields[
"USER_ID"],
1387 $groupUrl =
$arTmp[
"URLS"][
"GROUP_URL"];
1390 mb_strpos($groupUrl,
"http://") === 0
1391 || mb_strpos($groupUrl,
"https://") === 0
1396 mb_strpos($groupUrl,
"http://") === 0
1397 || mb_strpos($groupUrl,
"https://") === 0
1401 && !empty(
$arTmp[
"DOMAIN"])
1402 ?
"//".$arTmp[
"DOMAIN"]
1407 $arMessageFields =
array(
1409 "TO_USER_ID" => $relationFields[
"USER_ID"],
1412 "NOTIFY_MODULE" =>
"socialnetwork",
1413 "NOTIFY_EVENT" =>
"invite_group",
1414 "NOTIFY_TAG" =>
"SOCNET|INVITE_GROUP|" . (
int)$relationFields[
"USER_ID"] .
"|" . (
int)$relationFields[
"ID"],
1415 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) =>
1417 "SONET_UG_CONFIRM_MEMBER_MESSAGE_G",
1418 [
'#NAME#' =>
"<a href=\"".$domainName.$groupUrl.
"\" class=\"bx-notifier-item-action\">".$arGroup[
"NAME"].
"</a>"],
1422 "NOTIFY_MESSAGE_OUT" => fn (?
string $languageId =
null) =>
1424 "SONET_UG_CONFIRM_MEMBER_MESSAGE_G",
1425 [
'#NAME#' => $arGroup[
'NAME']],
1428 .
" (".$serverName.$groupUrl.
")"
1431 CIMNotify::DeleteBySubTag(
"SOCNET|REQUEST_GROUP|".$relationFields[
"USER_ID"].
"|".$relationFields[
"GROUP_ID"].
"|".$relationFields[
"ID"]);
1432 CIMNotify::Add($arMessageFields);
1438 'module_id' =>
'socialnetwork',
1439 'command' =>
'workgroup_request_accepted',
1441 'initiatedByType' => $relationFields[
'INITIATED_BY_TYPE'],
1447 'groupId' => (
int)$relationFields[
'GROUP_ID'],
1448 'userId' => (
int)$relationFields[
'USER_ID'],
1461 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_CREATE_USER2GROUP');
1470 !empty($arSuccessRelations)
1471 && !$chatNotificationResult
1474 foreach ($arSuccessRelations as $arRel)
1476 CSocNetUserToGroup::notifyImToModerators(
array(
1478 "RELATION_ID" => $arRel[
"ID"],
1479 "USER_ID" => $arRel[
"USER_ID"],
1480 "GROUP_ID" => $arRel[
"GROUP_ID"],
1481 "GROUP_NAME" => $arRel[
"GROUP_NAME"],
1497 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UR_EMPTY_USERID'),
"ERROR_USERID");
1501 $groupId = (int)$groupId;
1504 $APPLICATION->ThrowException(Loc::getMessage(
'SONET_UR_EMPTY_GROUPID'),
"ERROR_GROUPID");
1508 if (!is_array($relationIdList))
1513 $groupFields = WorkgroupTable::getList([
1519 'filter' => [
'ID' => $groupId],
1521 if (!$groupFields || !is_array($groupFields))
1523 $APPLICATION->ThrowException(Loc::getMessage(
"SONET_UG_ERROR_NO_GROUP_ID"),
"ERROR_NO_GROUP");
1527 $groupSiteIdList = [];
1528 $rsGroupSite = CSocNetGroup::GetSite($groupId);
1529 while ($groupSiteFields = $rsGroupSite->fetch())
1531 $groupSiteIdList[] = $groupSiteFields[
"LID"];
1538 || CSocNetUser::IsCurrentUserModuleAdmin($groupSiteIdList)
1544 &&
$userId === (
int)$groupFields[
"OWNER_ID"]
1565 foreach ($relationIdList as $relationId)
1567 $relationId = (int)$relationId;
1568 if ($relationId <= 0)
1573 $arRelation = CSocNetUserToGroup::GetByID($relationId);
1580 (
int)$arRelation[
"GROUP_ID"] !== $groupId
1590 $arMessageFields =
array(
1592 "TO_USER_ID" => $arRelation[
"USER_ID"],
1593 "MESSAGE" => fn (?
string $languageId =
null) =>
1595 'SONET_UG_REJECT_MEMBER_MESSAGE_G',
1597 '#NAME#' => $groupFields[
'NAME']
1602 "=DATE_CREATE" => CDatabase::CurrentTimeFunction(),
1608 'groupId' => (
int)$groupId,
1609 'userId' => (
int)$arRelation[
'USER_ID'],
1621 $errorMessage = Loc::getMessage(
"SONET_UR_ERROR_CREATE_USER2GROUP");
1636 $targetUserID = (int)$targetUserID;
1637 if ($targetUserID <= 0)
1643 $relationID = (int)$relationID;
1644 if ($relationID <= 0)
1650 $dbResult = CSocNetUserToGroup::GetList(
1653 "ID" => $relationID,
1654 "USER_ID" => $targetUserID,
1660 array(
"ID",
"USER_ID",
"INITIATED_BY_USER_ID",
"GROUP_ID",
"GROUP_VISIBLE",
"GROUP_SITE_ID",
"GROUP_NAME")
1672 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
1676 $events =
GetModuleEvents(
"socialnetwork",
"OnSocNetUserConfirmRequestToBeMember");
1677 while ($arEvent = $events->Fetch())
1686 'GROUP_ID' => (
int)
$arResult[
'GROUP_ID'],
1687 'RECEPIENTS' => array_map(
function ($row) {
return $row[
'USER_ID']; }, $moderators),
1691 if ($bAutoSubscribe)
1698 $groupSiteId = CSocNetGroup::GetDefaultSiteId(
$arResult[
"GROUP_ID"],
$arResult[
"GROUP_SITE_ID"]);
1700 CIMNotify::DeleteByTag(
"SOCNET|INVITE_GROUP|" . (
int)$targetUserID .
"|" . (
int)$relationID);
1702 $workgroupsPage = COption::GetOptionString(
"socialnetwork",
"workgroups_page",
"/workgroups/", $groupSiteId);
1703 $groupUrlTemplate = Path::get(
'group_path_template', $groupSiteId);
1704 $groupUrlTemplate =
"#GROUPS_PATH#".mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage));
1705 $groupUrl = str_replace(
array(
"#group_id#",
"#GROUP_ID#"),
$arResult[
"GROUP_ID"], $groupUrlTemplate);
1709 "GROUP_URL" => $groupUrl
1716 mb_strpos(
$url,
"http://") === 0
1717 || mb_strpos(
$url,
"https://") === 0
1722 mb_strpos(
$url,
"http://") === 0
1723 || mb_strpos(
$url,
"https://") === 0
1727 && !empty(
$arTmp[
"DOMAIN"])
1728 ?
"//".$arTmp[
"DOMAIN"]
1733 $arMessageFields =
array(
1737 "NOTIFY_MODULE" =>
"socialnetwork",
1738 "NOTIFY_EVENT" =>
"invite_group",
1739 "NOTIFY_TAG" =>
"SOCNET|INVITE_GROUP|" . (
int)
$arResult[
'USER_ID'] .
"|". $relationID,
1740 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) =>
1742 "SONET_UG_CONFIRM_MEMBER_MESSAGE_G",
1743 [
'#NAME#' =>
"<a href=\"".$domainName.$url.
"\" class=\"bx-notifier-item-action\">".
$arResult[
"GROUP_NAME"].
"</a>"],
1747 "NOTIFY_MESSAGE_OUT" => fn (?
string $languageId =
null) =>
1749 "SONET_UG_CONFIRM_MEMBER_MESSAGE_G",
1753 .
" (".$serverName.$url.
")"
1756 CIMNotify::Add($arMessageFields);
1758 $collab = CollabRegistry::getInstance()->get(
$arResult[
"GROUP_ID"]);
1759 if ($collab !==
null)
1762 $chatNotificationResult = ActionMessageFactory::getInstance()
1763 ->getActionMessage(ActionType::AcceptUser, $collab->getId(), $senderId)
1776 if (!$chatNotificationResult)
1778 $arMessageFields =
array(
1780 "TO_USER_ID" =>
$arResult[
"INITIATED_BY_USER_ID"],
1783 "NOTIFY_MODULE" =>
"socialnetwork",
1784 "NOTIFY_EVENT" =>
"invite_group",
1785 "NOTIFY_TAG" =>
"SOCNET|INVITE_GROUP_SUCCESS|" . (
int)
$arResult[
"GROUP_ID"],
1786 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) =>
1788 "SONET_UG_CONFIRM_MEMBER_MESSAGE_MSGVER_1",
1789 [
"#NAME#" =>
"<a href=\"".$domainName.$url.
"\" class=\"bx-notifier-item-action\">".
$arResult[
"GROUP_NAME"].
"</a>"],
1793 "NOTIFY_MESSAGE_OUT" => fn (?
string $languageId =
null) =>
1795 "SONET_UG_CONFIRM_MEMBER_MESSAGE_MSGVER_1",
1799 .
" (".$serverName .
$url.
")",
1801 CIMNotify::Add($arMessageFields);
1823 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_CREATE_USER2GROUP');
1845 $targetUserID = (int)$targetUserID;
1846 if ($targetUserID <= 0)
1852 $relationID = (int)$relationID;
1853 if ($relationID <= 0)
1859 $dbResult = CSocNetUserToGroup::GetList(
1862 "ID" => $relationID,
1863 "USER_ID" => $targetUserID,
1869 array(
"ID",
"USER_ID",
"GROUP_ID",
"GROUP_SITE_ID",
"INITIATED_BY_USER_ID",
"GROUP_NAME")
1881 $events =
GetModuleEvents(
"socialnetwork",
"OnSocNetUserRejectRequestToBeMember");
1882 while ($arEvent = $events->Fetch())
1889 $groupSiteId = CSocNetGroup::GetDefaultSiteId(
$arResult[
"GROUP_ID"],
$arResult[
"GROUP_SITE_ID"]);
1890 $groupUrl = str_replace(
1891 [
"#group_id#",
"#GROUP_ID#" ],
1893 Path::get(
'group_path_template', $groupSiteId)
1897 "GROUP_URL" => $groupUrl
1904 mb_strpos(
$url,
"http://") === 0
1905 || mb_strpos(
$url,
"https://") === 0
1910 mb_strpos(
$url,
"http://") === 0
1911 || mb_strpos(
$url,
"https://") === 0
1915 && !empty(
$arTmp[
"DOMAIN"])
1916 ?
"//".$arTmp[
"DOMAIN"]
1921 $arMessageFields =
array(
1923 "TO_USER_ID" =>
$arResult[
"INITIATED_BY_USER_ID"],
1926 "NOTIFY_MODULE" =>
"socialnetwork",
1927 "NOTIFY_EVENT" =>
"invite_group",
1928 "NOTIFY_TAG" =>
"SOCNET|INVITE_GROUP_REJECT|" . (
int)
$arResult[
"GROUP_ID"],
1929 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) =>
1931 "SONET_UG_REJECT_MEMBER_MESSAGE_MSGVER_1",
1932 [
"#NAME#" =>
"<a href=\"".$domainName.$url.
"\" class=\"bx-notifier-item-action\">".
$arResult[
"GROUP_NAME"].
"</a>"],
1936 "NOTIFY_MESSAGE_OUT" => fn (?
string $languageId =
null) =>
1938 "SONET_UG_REJECT_MEMBER_MESSAGE_MSGVER_1",
1941 ) .
" (".$serverName.$url.
")"
1945 CIMNotify::Add($arMessageFields);
1957 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_CREATE_USER2GROUP');
1979 $userID = (int)$userID;
1986 $groupId = (int)$groupId;
1993 if (!is_array($relationIdList))
1998 $arGroup = WorkgroupTable::getList([
2003 'filter' => [
'ID' => $groupId],
2005 if (!$arGroup || !is_array($arGroup))
2012 $arSuccessRelations =
array();
2013 $bIMIncluded =
false;
2018 $bIMIncluded =
true;
2019 $groupSiteId = CSocNetGroup::GetDefaultSiteId($groupId, $arGroup[
"SITE_ID"]);
2022 $workgroupsPage = COption::GetOptionString(
"socialnetwork",
"workgroups_page",
"/workgroups/", $groupSiteId);
2023 $groupUrlTemplate = Path::get(
'group_path_template', $groupSiteId);
2024 $groupUrlTemplate =
"#GROUPS_PATH#".mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage));
2025 $groupUrl = str_replace(
array(
"#group_id#",
"#GROUP_ID#"), $groupId, $groupUrlTemplate);
2026 $relationsToUpdateCount = 0;
2028 foreach ($relationIdList as $relationId)
2030 $relationId = (int)$relationId;
2031 if ($relationId <= 0)
2036 $arRelation = CSocNetUserToGroup::GetByID($relationId);
2039 || (
int)$arRelation[
"GROUP_ID"] !== $groupId
2046 $relationsToUpdateCount++;
2050 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
2052 if (CSocNetUserToGroup::Update($arRelation[
"ID"],
$arFields))
2054 $arSuccessRelations[] = $arRelation;
2060 "GROUP_URL" => $groupUrl
2062 $arRelation[
"USER_ID"],
2065 $groupUrl =
$arTmp[
"URLS"][
"GROUP_URL"];
2067 mb_strpos($groupUrl,
"http://") === 0
2068 || mb_strpos($groupUrl,
"https://") === 0
2073 mb_strpos($groupUrl,
"http://") === 0
2074 || mb_strpos($groupUrl,
"https://") === 0
2078 && !empty(
$arTmp[
"DOMAIN"])
2079 ?
"//".$arTmp[
"DOMAIN"]
2084 $arMessageFields =
array(
2085 "TO_USER_ID" => $arRelation[
"USER_ID"],
2086 "FROM_USER_ID" => $userID,
2088 "NOTIFY_MODULE" =>
"socialnetwork",
2089 "NOTIFY_EVENT" =>
"moderators_group",
2090 "NOTIFY_TAG" =>
"SOCNET|MOD_GROUP|" . (
int)$userID .
"|" . $groupId .
"|" . $arRelation[
"ID"] .
"|" . $arRelation[
"USER_ID"],
2091 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) =>
2093 "SONET_UG_MOD2MEMBER_MESSAGE",
2094 [
'#NAME#' =>
"<a href=\"".$domainName.$groupUrl.
"\" class=\"bx-notifier-item-action\">".$arGroup[
"NAME"].
"</a>"],
2098 "NOTIFY_MESSAGE_OUT" => fn (?
string $languageId =
null) =>
2100 "SONET_UG_MOD2MEMBER_MESSAGE",
2101 [
'#NAME#' => $arGroup[
"NAME"]],
2104 .
" (".$serverName.$groupUrl.
")"
2108 CIMNotify::Add($arMessageFields);
2120 $errorMessage = Loc::getMessage(
"SONET_UR_ERROR_CREATE_USER2GROUP");
2128 if ($relationsToUpdateCount <= 0)
2130 $APPLICATION->ThrowException(
GetMessage(
"SONET_UR_ERROR_MEM2MOD_EMPTY_CORRECT_LIST"),
"MOD2MEM_EMPTY_CORRECT_LIST");
2134 $successfulUserIdList =
array();
2135 foreach ($arSuccessRelations as $arRel)
2137 $arNotifyParams =
array(
2138 "TYPE" =>
"unmoderate",
2139 "RELATION_ID" => $arRel[
"ID"],
2140 "USER_ID" => $arRel[
"USER_ID"],
2141 "GROUP_ID" => $arRel[
"GROUP_ID"],
2142 "GROUP_NAME" => $arRel[
"GROUP_NAME"],
2147 $successfulUserIdList[] = $arRel[
"USER_ID"];
2150 $successfulUserIdList = array_unique($successfulUserIdList);
2152 if (!empty($successfulUserIdList))
2155 'group_id' => $groupId,
2156 'user_id' => $successfulUserIdList,
2163 &&
count($arSuccessRelations) <= 0
2166 $APPLICATION->ThrowException(
GetMessage(
"SONET_UR_ERROR_MOD2MEM_INCORRECT_PARAMS"),
"MOD2MEM_INCORRECT_PARAMS");
2177 $userID = (int)$userID;
2184 $groupId = (int)$groupId;
2191 if (!is_array($relationIdList))
2196 $arGroup = CSocNetGroup::GetByID($groupId);
2197 if (!$arGroup || !is_array($arGroup))
2204 $arSuccessRelations =
array();
2206 $relationsToUpdateCount = 0;
2208 foreach ($relationIdList as $relationId)
2210 $relationId = (int)$relationId;
2211 if ($relationId <= 0)
2216 $arRelation = CSocNetUserToGroup::GetByID($relationId);
2219 || (
int)$arRelation[
"GROUP_ID"] !== $groupId
2226 $relationsToUpdateCount++;
2230 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
2232 if (CSocNetUserToGroup::update($arRelation[
"ID"],
$arFields))
2234 $arSuccessRelations[] = $arRelation;
2236 'userId' => $userID,
2237 'groupId' => $groupId,
2238 'relationFields' => $arRelation,
2239 'groupFields' => $arGroup
2251 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_CREATE_USER2GROUP');
2259 if ($relationsToUpdateCount <= 0)
2261 $APPLICATION->ThrowException(
GetMessage(
"SONET_UR_ERROR_MEM2MOD_EMPTY_CORRECT_LIST"),
"MOD2MEM_EMPTY_CORRECT_LIST");
2265 $successfulUserIdList =
array();
2266 foreach ($arSuccessRelations as $arRel)
2268 $arNotifyParams =
array(
2269 "TYPE" =>
"moderate",
2270 "RELATION_ID" => $arRel[
"ID"],
2271 "USER_ID" => $arRel[
"USER_ID"],
2272 "GROUP_ID" => $arRel[
"GROUP_ID"],
2273 "GROUP_NAME" => $arRel[
"GROUP_NAME"],
2274 "EXCLUDE_USERS" =>
array($arRel[
"USER_ID"],
$USER->GetID())
2277 CSocNetSubscription::Set($arRel[
"USER_ID"],
"SG".$arRel[
"GROUP_ID"],
"Y");
2279 $successfulUserIdList[] = $arRel[
"USER_ID"];
2282 $successfulUserIdList = array_unique($successfulUserIdList);
2284 if (!empty($successfulUserIdList))
2287 'group_id' => $groupId,
2288 'user_id' => $successfulUserIdList,
2295 &&
count($arSuccessRelations) <= 0
2305 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_MEM2MOD_INCORRECT_PARAMS');
2315 public static function BanMember($userID, $groupId, $relationIdList, $currentUserIsAdmin): bool
2319 $userID = (int)$userID;
2326 $groupId = (int)$groupId;
2333 if (!is_array($relationIdList))
2338 $arGroup = CSocNetGroup::GetByID($groupId);
2339 if (!$arGroup || !is_array($arGroup))
2347 if (!$arUserPerms[
"UserCanModifyGroup"] && !$arUserPerms[
"UserCanModerateGroup"])
2354 foreach ($relationIdList as $relationId)
2356 $relationId = (int)$relationId;
2357 if ($relationId <= 0)
2362 $arRelation = CSocNetUserToGroup::GetByID($relationId);
2369 (
int)$arRelation[
"GROUP_ID"] !== $groupId
2378 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
2380 if (CSocNetUserToGroup::Update($arRelation[
"ID"],
$arFields))
2382 $arMessageFields =
array(
2383 "FROM_USER_ID" => $userID,
2384 "TO_USER_ID" => $arRelation[
"USER_ID"],
2385 "MESSAGE" => fn (?
string $languageId =
null) => Loc::getMessage(
2386 "SONET_UG_BANMEMBER_MESSAGE",
2388 "#NAME#" => $arGroup[
"NAME"]
2392 "=DATE_CREATE" => CDatabase::CurrentTimeFunction(),
2396 CSocNetSubscription::DeleteEx($arRelation[
"USER_ID"],
"SG".$arRelation[
"GROUP_ID"]);
2399 'group_id' => $groupId,
2400 'user_id' => $arRelation[
"USER_ID"],
2413 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_CREATE_USER2GROUP');
2424 public static function UnBanMember($userID, $groupId, $relationIdList, $currentUserIsAdmin): bool
2428 $userID = (int)$userID;
2435 $groupId = (int)$groupId;
2442 if (!is_array($relationIdList))
2447 $arGroup = CSocNetGroup::GetByID($groupId);
2448 if (!$arGroup || !is_array($arGroup))
2456 if (!$arUserPerms[
"UserCanModifyGroup"] && !$arUserPerms[
"UserCanModerateGroup"])
2463 foreach ($relationIdList as $relationId)
2465 $relationId = (int)$relationId;
2466 if ($relationId <= 0)
2471 $arRelation = CSocNetUserToGroup::GetByID($relationId);
2478 (
int)$arRelation[
"GROUP_ID"] !== $groupId
2487 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
2489 if (CSocNetUserToGroup::Update($arRelation[
"ID"],
$arFields))
2492 "FROM_USER_ID" => $userID,
2493 "TO_USER_ID" => $arRelation[
"USER_ID"],
2494 "MESSAGE" => fn (?
string $languageId =
null) => Loc::getMessage(
2495 "SONET_UG_UNBANMEMBER_MESSAGE",
2497 "#NAME#" => $arGroup[
"NAME"]
2501 "=DATE_CREATE" => CDatabase::CurrentTimeFunction(),
2506 'group_id' => $groupId,
2507 'user_id' => $userID,
2521 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_CREATE_USER2GROUP');
2532 public static function SetOwner(
$userId, $groupId, $groupFields = [],
bool $skipChatMessage =
false): bool
2536 if (empty($groupFields))
2538 $groupFields = WorkgroupTable::getList([
2545 'filter' => [
'ID' => $groupId],
2549 if (empty($groupFields))
2555 $DB->StartTransaction();
2558 $res = CSocNetUserToGroup::GetList(
2561 "USER_ID" => $groupFields[
"OWNER_ID"],
2562 "GROUP_ID" => $groupId,
2566 array(
'ID',
'USER_ID')
2568 if ($existingRelationFields =
$res->fetch())
2572 $workgroup = WorkgroupTable::getList([
2573 'select' => [
'SCRUM_MASTER_ID'],
2574 'filter' => [
'ID' => $groupId],
2578 && $workgroup->getScrumMasterId() === (
int)$existingRelationFields[
'USER_ID']
2584 $relationFields =
array(
2586 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
2588 "INITIATED_BY_USER_ID" =>
$USER->GetID(),
2591 if (!CSocNetUserToGroup::Update($existingRelationFields[
"ID"], $relationFields))
2599 $errorMessage = Loc::getMessage(
'SONET_UG_ERROR_CANNOT_UPDATE_CURRENT_OWNER');
2611 $res = CSocNetUserToGroup::GetList(
2615 'GROUP_ID' => $groupId,
2621 if ($existingRelationFields =
$res->Fetch())
2623 $relationFields =
array(
2625 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
2627 "INITIATED_BY_USER_ID" =>
$USER->GetID(),
2628 "AUTO_MEMBER" =>
"N"
2631 if (!CSocNetUserToGroup::Update($existingRelationFields[
"ID"], $relationFields))
2639 $errorMessage = Loc::getMessage(
'SONET_UG_ERROR_CANNOT_UPDATE_NEW_OWNER_RELATION');
2650 'group_id' => $groupId,
2653 'role' => $relationFields[
'ROLE'],
2659 CIMNotify::deleteByTag(
'SOCNET|INVITE_GROUP|' . (
int)
$userId .
'|' . (
int)$existingRelationFields[
'ID']);
2664 $relationFields =
array(
2666 "GROUP_ID" => $groupId,
2668 "=DATE_CREATE" => CDatabase::CurrentTimeFunction(),
2669 "=DATE_UPDATE" => CDatabase::CurrentTimeFunction(),
2671 "INITIATED_BY_USER_ID" =>
$USER->GetID(),
2675 if (!CSocNetUserToGroup::Add($relationFields))
2683 $errorMessage = Loc::getMessage(
'SONET_UG_ERROR_CANNOT_ADD_NEW_OWNER_RELATION');
2691 if (!$skipChatMessage)
2694 'group_id' => $groupId,
2697 'role' => $relationFields[
'ROLE'],
2702 $GROUP_ID = CSocNetGroup::Update($groupId,
array(
"OWNER_ID" =>
$userId));
2703 if (!$GROUP_ID || $GROUP_ID <= 0)
2711 $errorMessage = Loc::getMessage(
'SONET_UG_ERROR_CANNOT_UPDATE_GROUP');
2719 $bIMIncluded =
false;
2725 $bIMIncluded =
true;
2726 $groupSiteId = CSocNetGroup::GetDefaultSiteId($groupId, $groupFields[
"SITE_ID"] ??
false);
2727 $workgroupsPage = COption::GetOptionString(
"socialnetwork",
"workgroups_page",
"/workgroups/", $groupSiteId);
2728 $groupUrlTemplate = Path::get(
'group_path_template', $groupSiteId);
2729 $groupUrlTemplate =
"#GROUPS_PATH#".mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage));
2730 $groupUrl = str_replace(
array(
"#group_id#",
"#GROUP_ID#"), $groupId, $groupUrlTemplate);
2738 "GROUP_URL" => $groupUrl
2740 $groupFields[
"OWNER_ID"],
2743 $groupUrl =
$arTmp[
"URLS"][
"GROUP_URL"];
2745 mb_strpos($groupUrl,
"http://") === 0
2746 || mb_strpos($groupUrl,
"https://") === 0
2751 $notifyNewOwnerMessageKey =
'SONET_UG_OWNER2MEMBER_MESSAGE';
2752 if (($groupFields[
'TYPE'] ??
null) ===
Workgroup\Type::Collab->value)
2754 $notifyNewOwnerMessageKey =
'SONET_UG_OWNER2MEMBER_MESSAGE_COLLAB';
2757 "TO_USER_ID" => $groupFields[
"OWNER_ID"],
2758 "FROM_USER_ID" =>
$USER->GetID(),
2760 "NOTIFY_MODULE" =>
"socialnetwork",
2761 "NOTIFY_EVENT" =>
"owner_group",
2762 "NOTIFY_TAG" =>
"SOCNET|OWNER_GROUP|".$groupId,
2763 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) =>
2765 $notifyNewOwnerMessageKey,
2766 [
'#NAME#' =>
"<a href=\"".$groupUrl.
"\" class=\"bx-notifier-item-action\">".$groupFields[
"NAME"].
"</a>"],
2770 "NOTIFY_MESSAGE_OUT" => function (?
string $languageId =
null) use ($groupFields, $serverName, $groupUrl) {
2772 "SONET_UG_OWNER2MEMBER_MESSAGE",
2773 [
"#NAME#" => $groupFields[
'NAME']],
2777 return $message .
" (" . $serverName . $groupUrl .
")";
2790 "GROUP_URL" => $groupUrl
2795 $groupUrl =
$arTmp[
"URLS"][
"GROUP_URL"];
2798 mb_strpos($groupUrl,
"http://") === 0
2799 || mb_strpos($groupUrl,
"https://") === 0
2806 $serverName =
$arTmp[
"SERVER_NAME"];
2809 $notifyOldOwnerMessageKey =
'SONET_UG_MEMBER2OWNER_MESSAGE';
2810 if (($groupFields[
'TYPE'] ??
null) ===
Workgroup\Type::Collab->value)
2812 $notifyOldOwnerMessageKey =
'SONET_UG_MEMBER2OWNER_MESSAGE_COLLAB';
2817 "FROM_USER_ID" =>
$USER->GetID(),
2819 "NOTIFY_MODULE" =>
"socialnetwork",
2820 "NOTIFY_EVENT" =>
"owner_group",
2821 "NOTIFY_TAG" =>
"SOCNET|OWNER_GROUP|".$groupId,
2822 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) =>
2824 $notifyOldOwnerMessageKey,
2825 [
"#NAME#" =>
"<a href=\"".$groupUrl.
"\" class=\"bx-notifier-item-action\">".$groupFields[
"NAME"].
"</a>"],
2829 "NOTIFY_MESSAGE_OUT" => function (?
string $languageId =
null) use ($groupFields, $serverName, $groupUrl) {
2831 "SONET_UG_MEMBER2OWNER_MESSAGE",
2832 [
"#NAME#" => $groupFields[
'NAME']],
2836 return $message .
" (" . $serverName . $groupUrl .
")";
2843 $notificationParams =
array(
2845 "RELATION_ID" => $existingRelationFields[
"ID"] ??
null,
2847 "GROUP_ID" => $groupId,
2853 CSocNetSubscription::Set(
$userId,
"SG".$groupId,
"Y");
2870 $groupId = (int)$groupId;
2877 $res = CSocNetUserToGroup::GetList(
2880 "GROUP_ID" => $groupId,
2885 [
'ID',
'USER_ID',
'ROLE',
'GROUP_VISIBLE',
'GROUP_NAME',
'GROUP_SCRUM_MASTER_ID' ]
2888 if ($relationFields =
$res->Fetch())
2890 if (!in_array($relationFields[
"ROLE"], [
2898 if ((
int)$relationFields[
'USER_ID'] === (
int)$relationFields[
'GROUP_SCRUM_MASTER_ID'])
2903 if (!empty($relationFields[
'GROUP_NAME']))
2905 $relationFields[
'GROUP_NAME'] = Emoji::decode($relationFields[
'GROUP_NAME']);
2910 CSocNetSubscription::DeleteEx(
$userId,
"SG".$groupId);
2915 'group_id' => $groupId,
2920 if (!$chatNotificationResult)
2922 CSocNetUserToGroup::notifyImToModerators(
array(
2924 "RELATION_ID" => $relationFields[
"ID"],
2926 "GROUP_ID" => $groupId,
2927 "GROUP_NAME" => $relationFields[
"GROUP_NAME"]
2941 $errorMessage = Loc::getMessage(
'SONET_UR_ERROR_CREATE_USER2GROUP');
2964 $arReturn =
array();
2967 $groupId = (int)$groupFields[
"ID"];
2968 $groupOwnerId = (int)$groupFields[
"OWNER_ID"];
2969 $groupInitiatePerms = Trim($groupFields[
"INITIATE_PERMS"]);
2970 $groupVisible = Trim($groupFields[
"VISIBLE"]);
2971 $groupOpened = Trim($groupFields[
"OPENED"]);
2972 $groupSpamPerms = Trim(($groupFields[
"SPAM_PERMS"] ??
''));
2979 $arReturn[
"Operations"] = [];
2983 $groupSpamPerms =
"K";
2998 $arReturn[
"UserRole"] =
false;
2999 $arReturn[
"UserIsMember"] =
false;
3000 $arReturn[
"UserIsAutoMember"] =
false;
3001 $arReturn[
"UserIsOwner"] =
false;
3002 $arReturn[
'UserIsScrumMaster'] =
false;
3003 $arReturn[
"UserCanInitiate"] =
false;
3004 $arReturn[
"UserCanProcessRequestsIn"] =
false;
3005 $arReturn[
"UserCanViewGroup"] = ($groupVisible ===
"Y");
3006 $arReturn[
"UserCanAutoJoinGroup"] =
false;
3007 $arReturn[
"UserCanModifyGroup"] =
false;
3008 $arReturn[
"UserCanModerateGroup"] =
false;
3009 $arReturn[
"UserCanSpamGroup"] =
false;
3010 $arReturn[
"InitiatedByType"] =
false;
3011 $arReturn[
"InitiatedByUserId"] =
false;
3012 $arReturn[
"Operations"][
"viewsystemevents"] =
false;
3016 if (!isset($groupFields[
'SCRUM']))
3018 $group = Workgroup::getById($groupFields[
'ID']);
3019 $groupFields[
'SCRUM'] = ($group && $group->isScrumProject() ?
'Y' :
'N');
3022 if (!isset($groupFields[
'SCRUM_MASTER_ID']))
3024 $group = Workgroup::getById($groupFields[
'ID']);
3025 $groupFields[
'SCRUM_MASTER_ID'] = ($group ? $group->getScrumMaster() : 0);
3029 $arReturn[
"UserRole"] = $arUserRoleExtended[
"ROLE"];
3031 $arReturn[
"UserIsMember"] = (
3032 $arReturn[
"UserRole"]
3035 $arReturn[
"UserIsAutoMember"] = (
3036 $arReturn[
"UserIsMember"]
3037 && $arUserRoleExtended[
"AUTO_MEMBER"] ===
"Y"
3040 $arReturn[
"InitiatedByType"] =
false;
3041 $arReturn[
"InitiatedByUserId"] =
false;
3044 $dbRelation = CSocNetUserToGroup::GetList(
3046 [
'USER_ID' =>
$userId,
'GROUP_ID' => $groupId ],
3049 [
'INITIATED_BY_TYPE',
'INITIATED_BY_USER_ID' ]
3051 if ($arRelation = $dbRelation->Fetch())
3053 $arReturn[
"InitiatedByType"] = $arRelation[
"INITIATED_BY_TYPE"];
3054 $arReturn[
"InitiatedByUserId"] = (int)$arRelation[
'INITIATED_BY_USER_ID'];
3058 $arReturn[
"UserIsOwner"] = (
$userId === $groupOwnerId);
3059 $arReturn[
'UserIsScrumMaster'] = (
3060 $groupFields[
'SCRUM'] ===
'Y'
3061 && (int)$groupFields[
'SCRUM_MASTER_ID'] ===
$userId
3064 if ($isCurrentUserAdmin)
3066 $arReturn[
"UserCanInitiate"] =
true;
3067 $arReturn[
"UserCanProcessRequestsIn"] =
true;
3068 $arReturn[
"UserCanViewGroup"] =
true;
3069 $arReturn[
"UserCanAutoJoinGroup"] =
true;
3070 $arReturn[
"UserCanModifyGroup"] =
true;
3071 $arReturn[
"UserCanModerateGroup"] =
true;
3072 $arReturn[
"UserCanSpamGroup"] =
true;
3073 $arReturn[
"Operations"][
"viewsystemevents"] =
true;
3075 elseif ($arReturn[
"UserIsMember"])
3077 $arReturn[
"UserCanInitiate"] = (
3080 && $arReturn[
'UserIsOwner']
3084 && in_array($arReturn[
'UserRole'], [
3091 $arReturn[
'UserCanProcessRequestsIn'] = (
3092 $arReturn[
'UserCanInitiate']
3093 && in_array($arReturn[
'UserRole'], [
3098 $arReturn[
"UserCanViewGroup"] =
true;
3099 $arReturn[
"UserCanAutoJoinGroup"] =
false;
3100 $arReturn[
"UserCanModifyGroup"] = $arReturn[
"UserIsOwner"];
3102 !$arReturn[
'UserCanModifyGroup']
3103 && $groupFields[
'SCRUM'] ===
'Y'
3106 if (!isset($groupFields[
'SCRUM_MASTER_ID']))
3108 $group = Workgroup::getById($groupFields[
'ID']);
3109 $groupFields[
'SCRUM_MASTER_ID'] = ($group ? $group->getScrumMaster() : 0);
3112 $arReturn[
'UserCanModifyGroup'] = ((int)$groupFields[
'SCRUM_MASTER_ID'] ===
$userId);
3114 $arReturn[
"UserCanModerateGroup"] = (in_array($arReturn[
'UserRole'], [
3118 $arReturn[
'UserCanSpamGroup'] = (
3121 && $arReturn[
'UserIsOwner']
3125 && in_array($arReturn[
"UserRole"], [
3133 $arReturn[
"Operations"][
"viewsystemevents"] =
true;
3137 $arReturn[
"UserCanInitiate"] =
false;
3138 $arReturn[
"UserCanViewGroup"] = ($groupVisible ===
"Y");
3139 $arReturn[
"UserCanAutoJoinGroup"] = ($arReturn[
"UserCanViewGroup"] && ($groupOpened ===
"Y"));
3140 $arReturn[
"UserCanModifyGroup"] =
false;
3141 $arReturn[
"UserCanModerateGroup"] =
false;
3142 $arReturn[
"UserCanSpamGroup"] = ($groupSpamPerms ===
SONET_ROLES_ALL);
3143 $arReturn[
"Operations"][
"viewsystemevents"] =
false;
3149 $arReturn[
"UserCanSpamGroup"] =
true;
3154 $arReturn[
"UserCanSpamGroup"] =
false;
3164 $userID = (int)$userID;
3172 "SELECT COUNT(ID) as CNT ".
3173 "FROM b_sonet_user2group ".
3174 "WHERE USER_ID = ".$userID.
" ".
3197 $userID = (int)$userID;
3213 $userID = (int)$userID;
3229 $userID = (int)$userID;
3243 if ($module ===
"socialnetwork")
3245 $arTag = explode(
"|", $tag);
3248 && $arTag[1] ===
'INVITE_GROUP'
3264 && $arTag[1] ===
"REQUEST_GROUP"
3278 CIMNotify::DeleteBySubTag(
"SOCNET|REQUEST_GROUP|".$arTag[2].
"|".$arTag[3].
"|".$arTag[4]);
3296 !is_array($arNotifyParams)
3298 $arNotifyParams[
"TYPE"],
3299 $arNotifyParams[
"USER_ID"],
3300 $arNotifyParams[
"GROUP_ID"],
3301 $arNotifyParams[
"RELATION_ID"],
3302 $arNotifyParams[
"GROUP_NAME"]
3304 || (
int)$arNotifyParams[
"USER_ID"] <= 0
3305 || (
int)$arNotifyParams[
"GROUP_ID"] <= 0
3306 || (
int)$arNotifyParams[
"RELATION_ID"] <= 0
3307 || (
string)$arNotifyParams[
"GROUP_NAME"] ===
''
3308 || !in_array($arNotifyParams[
"TYPE"], [
3321 $fromUserId =
false;
3322 $messageCode =
false;
3323 $schemaCode =
false;
3326 switch ($arNotifyParams[
"TYPE"])
3329 $fromUserId = $arNotifyParams[
"USER_ID"];
3330 $messageCode =
"SONET_UG_IM_JOIN";
3331 $schemaCode =
"inout_group";
3332 $notifyTag =
"INOUT_GROUP";
3335 $fromUserId = $arNotifyParams[
"USER_ID"];
3336 $messageCode =
"SONET_UG_IM_UNJOIN";
3337 $schemaCode =
"inout_group";
3338 $notifyTag =
"INOUT_GROUP";
3341 $fromUserId = $arNotifyParams[
"USER_ID"];
3342 $messageCode =
"SONET_UG_IM_EXCLUDE";
3343 $schemaCode =
"inout_group";
3344 $notifyTag =
"INOUT_GROUP";
3347 $fromUserId = $arNotifyParams[
"USER_ID"];
3348 $messageCode =
"SONET_UG_IM_MODERATE";
3349 $schemaCode =
"moderators_group";
3350 $notifyTag =
"MOD_GROUP";
3353 $fromUserId = $arNotifyParams[
"USER_ID"];
3354 $messageCode =
"SONET_UG_IM_UNMODERATE";
3355 $schemaCode =
"moderators_group";
3356 $notifyTag =
"MOD_GROUP";
3359 $fromUserId = $arNotifyParams[
"USER_ID"];
3360 $messageCode =
"SONET_UG_IM_OWNER";
3361 $schemaCode =
"owner_group";
3362 $notifyTag =
"OWNER_GROUP";
3367 $gender_suffix =
"";
3368 $rsUser = CUser::GetByID($arNotifyParams[
"USER_ID"]);
3369 if ($arUser = $rsUser->Fetch())
3371 switch ($arUser[
"PERSONAL_GENDER"])
3374 $gender_suffix =
"_M";
3377 $gender_suffix =
"_F";
3380 $gender_suffix =
"";
3386 $rsUserToGroup = CSocNetUserToGroup::GetList(
3389 "GROUP_ID" => $arNotifyParams[
"GROUP_ID"],
3390 "USER_ACTIVE" =>
"Y",
3397 while ($arUserToGroup = $rsUserToGroup->Fetch())
3399 $arToUserID[] = (int)$arUserToGroup[
"USER_ID"];
3402 $arMessageFields =
array(
3404 "FROM_USER_ID" => $fromUserId,
3406 "NOTIFY_MODULE" =>
"socialnetwork",
3407 "NOTIFY_EVENT" => $schemaCode,
3408 "NOTIFY_TAG" =>
"SOCNET|" . $notifyTag .
"|" . (
int)$arNotifyParams[
"USER_ID"]
3409 .
"|" . (
int)$arNotifyParams[
"GROUP_ID"] .
"|" . (
int)$arNotifyParams[
"RELATION_ID"],
3412 $groups_path = COption::GetOptionString(
"socialnetwork",
"workgroups_page",
SITE_DIR.
"workgroups/");
3413 $group_url_template = str_replace(
3416 Path::get(
'group_path_template')
3419 $groupUrl = str_replace(
3421 $arNotifyParams[
"GROUP_ID"],
3425 foreach ($arToUserID as $to_user_id)
3428 $to_user_id === (
int)$fromUserId
3430 is_array($arNotifyParams[
"EXCLUDE_USERS"] ??
null)
3431 && in_array($to_user_id, $arNotifyParams[
"EXCLUDE_USERS"])
3438 $arMessageFields[
"TO_USER_ID"] = $to_user_id;
3441 "GROUP_PAGE" => $groupUrl
3447 $arMessageFields[
"NOTIFY_MESSAGE"] = fn (?
string $languageId =
null) =>
3449 $messageCode.$gender_suffix,
3451 "#group_name#" =>
"<a href=\"".$arTmp[
"URLS"][
"GROUP_PAGE"].
"\" class=\"bx-notifier-item-action\">".$arNotifyParams[
"GROUP_NAME"].
"</a>",
3456 $arMessageFields[
"NOTIFY_MESSAGE_OUT"] = fn (?
string $languageId =
null) =>
3458 $messageCode.$gender_suffix,
3460 "#group_name#" => $arNotifyParams[
"GROUP_NAME"],
3464 .
" (".
$arTmp[
"SERVER_NAME"].$arTmp[
"URLS"][
"GROUP_PAGE"].
")"
3467 CIMNotify::Add($arMessageFields);
3478 static $groupCache =
array();
3481 $relationFields = (!empty(
$params[
'relationFields']) && is_array(
$params[
'relationFields']) ?
$params[
'relationFields'] :
array());
3486 : (!empty($groupFields[
'ID']) ? (int)$groupFields[
'ID'] : 0)
3491 : (!empty($relationFields[
'ID']) ? (int)$relationFields[
'ID'] : 0)
3499 if (isset($groupCache[$groupId]))
3501 $groupFields = $groupCache[$groupId];
3509 'select' =>
array(
'ID',
'NAME',
'SITE_ID')
3511 $groupFields = $groupCache[$groupId] =
$res->fetch();
3516 empty($relationFields)
3522 '=ID' => $relationId
3524 'select' =>
array(
'ID',
'USER_ID')
3526 $relationFields =
$res->fetch();
3531 || empty($relationFields)
3532 || empty($relationFields[
'ID'])
3533 || empty($relationFields[
'USER_ID'])
3534 || empty($groupFields)
3541 $groupSiteId = CSocNetGroup::getDefaultSiteId($groupId, $groupFields[
"SITE_ID"] ??
false);
3543 $workgroupsPage = COption::getOptionString(
"socialnetwork",
"workgroups_page",
"/workgroups/",
SITE_ID);
3544 $groupUrlTemplate = Path::get(
'group_path_template');
3545 $groupUrlTemplate =
"#GROUPS_PATH#".mb_substr($groupUrlTemplate, mb_strlen($workgroupsPage));
3546 $groupUrl = str_replace(
array(
"#group_id#",
"#GROUP_ID#"), $groupId, $groupUrlTemplate);
3548 $arTmp = CSocNetLogTools::processPath(
3550 "GROUP_URL" => $groupUrl
3552 $relationFields[
"USER_ID"],
3555 $groupUrl =
$arTmp[
"URLS"][
"GROUP_URL"];
3558 mb_strpos($groupUrl,
"http://") === 0
3559 || mb_strpos($groupUrl,
"https://") === 0
3564 mb_strpos($groupUrl,
"http://") === 0
3565 || mb_strpos($groupUrl,
"https://") === 0
3569 && !empty(
$arTmp[
"DOMAIN"])
3570 ?
"//".$arTmp[
"DOMAIN"]
3575 $arMessageFields =
array(
3576 "TO_USER_ID" => $relationFields[
"USER_ID"],
3579 "NOTIFY_MODULE" =>
"socialnetwork",
3580 "NOTIFY_EVENT" =>
"moderators_group",
3581 "NOTIFY_TAG" =>
"SOCNET|MOD_GROUP|" .
$userId .
"|".$groupId.
"|".$relationFields[
"ID"].
"|".$relationFields[
"USER_ID"],
3582 "NOTIFY_MESSAGE" => fn (?
string $languageId =
null) =>
3584 "SONET_UG_MEMBER2MOD_MESSAGE",
3585 [
'#NAME#' =>
"<a href=\"".$domainName.$groupUrl.
"\" class=\"bx-notifier-item-action\">".$groupFields[
"NAME"].
"</a>"],
3589 "NOTIFY_MESSAGE_OUT" => fn (?
string $languageId =
null) =>
3591 "SONET_UG_MEMBER2MOD_MESSAGE",
3592 [
'#NAME#' => $groupFields[
"NAME"]],
3595 .
" (".$serverName.$groupUrl.
")"
3598 CIMNotify::add($arMessageFields);
3601 protected static function delayJob(callable $job): void
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getConnection($name="")
static includeModule($moduleName)
static isModuleInstalled($moduleName)
static normalizeArrayValuesByInt(&$map, $sorted=true)
static add($recipient, array $parameters, $channelType=\CPullChannel::TYPE_PRIVATE)
static setChatManagers($params)
static addEvent(string $type, array $data)
const EVENT_WORKGROUP_MEMBER_REQUEST_CONFIRM
const EVENT_WORKGROUP_USER_DELETE
const EVENT_SPACE_USER_ROLE_CHANGE
static addEvent(string $type, array $data)
static addInfoToChat($params=[])
static getGroupModerators(int $groupId)
static AutoSubscribe($userID, $entityType, $entityID)
static __SpeedFileDelete($userID)
static addUniqueUsersToGroup(int $groupId, array $userIds)
static ConfirmRequestToBeMember($userId, $groupId, $relationIdList, $autoSubscribe=true)
static BanMember($userID, $groupId, $relationIdList, $currentUserIsAdmin)
static SendRequestToJoinGroup($senderUserId, $userId, $groupId, $message, $sendMail=true)
static RejectRequestToBeMember($userId, $groupId, $relationIdList)
static NotifyImToModerators($arNotifyParams)
static SpeedFileExists($userID)
static CheckFields($ACTION, &$relationFields, $id=0)
static TransferModerator2Member($userID, $groupId, $relationIdList)
static Delete( $id, $sendExclude=false, bool $skipChatMessage=false, bool $skipStatistics=false, bool $delayEvents=false)
static __SpeedFileCheckMessages($userID)
static UnBanMember($userID, $groupId, $relationIdList, $currentUserIsAdmin)
static GetUserRole($userId, $groupId, $extendedReturn=false)
static SendRequestToBeMember($userId, $groupId, $message, $requestConfirmUrl="", $autoSubscribe=true)
static UserConfirmRequestToBeMember($targetUserID, $relationID, $bAutoSubscribe=true)
static InitUserPerms($userId, $groupFields, $isCurrentUserAdmin)
static DeleteRelation($userId, $groupId)
static SendEvent($userGroupID, $mailTemplate="SONET_INVITE_GROUP")
static getMessage($message)
static notifyModeratorAdded($params)
static AddUsersToGroup(int $groupId, array $userIds)
static GetGroupUsers(int $groupId)
const EVENTS_JOB_PRIORITY
static DeleteNoDemand($userId)
static UserRejectRequestToBeMember($targetUserID, $relationID)
static TransferMember2Moderator($userID, $groupId, $relationIdList)
static SetOwner($userId, $groupId, $groupFields=[], bool $skipChatMessage=false)
static delayJob(callable $job)
static OnBeforeConfirmNotify($module, $tag, $value)
static __SpeedFileCreate($userID)
static IsFeatureEnabled($_1488512778)
static OnUserRelationsChange($user_id)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
$_SERVER["DOCUMENT_ROOT"]
const SITE_DIR(!defined('LANG'))
ExecuteModuleEventEx($arEvent, $arParams=[])
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if(!function_exists(__NAMESPACE__.'\\___972068685'))
if(intval($iTestTransaction) > 0) $arTmp
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
global $arSocNetAllowedSpamPerms
global $arSocNetAllowedInitiatePerms
global $arSocNetAllowedInitiatedByType
global $arSocNetAllowedRolesForUserInGroup
const SONET_INITIATED_BY_GROUP
const SONET_MESSAGE_SYSTEM
const SONET_INITIATED_BY_USER