- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/user_group.php
- Класс: CAllSocNetUserToGroup
- Вызов: CAllSocNetUserToGroup::InitUserPerms
static function InitUserPerms($userId, $groupFields, $isCurrentUserAdmin)
{
global $arSocNetAllowedInitiatePerms;
global $arSocNetAllowedSpamPerms;
$arReturn = array();
$userId = (int)$userId;
$groupId = (int)$groupFields["ID"];
$groupOwnerId = (int)$groupFields["OWNER_ID"];
$groupInitiatePerms = Trim($groupFields["INITIATE_PERMS"]);
$groupVisible = Trim($groupFields["VISIBLE"]);
$groupOpened = Trim($groupFields["OPENED"]);
$groupSpamPerms = Trim(($groupFields["SPAM_PERMS"] ?? ''));
if ($groupId <= 0 || $groupOwnerId <= 0 || !in_array($groupInitiatePerms, $arSocNetAllowedInitiatePerms))
{
return false;
}
$arReturn["Operations"] = [];
if (!in_array($groupSpamPerms, $arSocNetAllowedSpamPerms))
{
$groupSpamPerms = "K";
}
// UserRole - User role in group. False if user is not group member.
// UserIsMember - True in user is group member.
// UserIsAuto - True in user is group auto member.
// UserIsOwner - True if user is group owner.
// UserCanInitiate - True if user can invite friends to group.
// UserCanViewGroup - True if user can view group.
// UserCanAutoJoinGroup - True if user can join group automatically.
// UserCanModifyGroup - True if user can modify group.
// UserCanModerateGroup - True if user can moderate group.
if ($userId <= 0)
{
$arReturn["UserRole"] = false;
$arReturn["UserIsMember"] = false;
$arReturn["UserIsAutoMember"] = false;
$arReturn["UserIsOwner"] = false;
$arReturn['UserIsScrumMaster'] = false;
$arReturn["UserCanInitiate"] = false;
$arReturn["UserCanProcessRequestsIn"] = false;
$arReturn["UserCanViewGroup"] = ($groupVisible === "Y");
$arReturn["UserCanAutoJoinGroup"] = false;
$arReturn["UserCanModifyGroup"] = false;
$arReturn["UserCanModerateGroup"] = false;
$arReturn["UserCanSpamGroup"] = false;
$arReturn["InitiatedByType"] = false;
$arReturn["InitiatedByUserId"] = false;
$arReturn["Operations"]["viewsystemevents"] = false;
}
else
{
if (!isset($groupFields['SCRUM']))
{
$group = Workgroup::getById($groupFields['ID']);
$groupFields['SCRUM'] = ($group && $group->isScrumProject() ? 'Y' : 'N');
}
if (!isset($groupFields['SCRUM_MASTER_ID']))
{
$group = Workgroup::getById($groupFields['ID']);
$groupFields['SCRUM_MASTER_ID'] = ($group ? $group->getScrumMaster() : 0);
}
$arUserRoleExtended = CSocNetUserToGroup::GetUserRole($userId, $groupId, true);
$arReturn["UserRole"] = $arUserRoleExtended["ROLE"];
$arReturn["UserIsMember"] = (
$arReturn["UserRole"]
&& in_array($arReturn["UserRole"], UserToGroupTable::getRolesMember(), true)
);
$arReturn["UserIsAutoMember"] = (
$arReturn["UserIsMember"]
&& $arUserRoleExtended["AUTO_MEMBER"] === "Y"
);
$arReturn["InitiatedByType"] = false;
$arReturn["InitiatedByUserId"] = false;
if ($arReturn["UserRole"] === UserToGroupTable::ROLE_REQUEST)
{
$dbRelation = CSocNetUserToGroup::GetList(
[],
[ 'USER_ID' => $userId, 'GROUP_ID' => $groupId ],
false,
false,
[ 'INITIATED_BY_TYPE', 'INITIATED_BY_USER_ID' ]
);
if ($arRelation = $dbRelation->Fetch())
{
$arReturn["InitiatedByType"] = $arRelation["INITIATED_BY_TYPE"];
$arReturn["InitiatedByUserId"] = (int)$arRelation['INITIATED_BY_USER_ID'];
}
}
$arReturn["UserIsOwner"] = ($userId === $groupOwnerId);
$arReturn['UserIsScrumMaster'] = (
$groupFields['SCRUM'] === 'Y'
&& (int)$groupFields['SCRUM_MASTER_ID'] === $userId
);
if ($isCurrentUserAdmin)
{
$arReturn["UserCanInitiate"] = true;
$arReturn["UserCanProcessRequestsIn"] = true;
$arReturn["UserCanViewGroup"] = true;
$arReturn["UserCanAutoJoinGroup"] = true;
$arReturn["UserCanModifyGroup"] = true;
$arReturn["UserCanModerateGroup"] = true;
$arReturn["UserCanSpamGroup"] = true;
$arReturn["Operations"]["viewsystemevents"] = true;
}
elseif ($arReturn["UserIsMember"])
{
$arReturn["UserCanInitiate"] = (
(
$groupInitiatePerms === UserToGroupTable::ROLE_OWNER
&& $arReturn['UserIsOwner']
)
|| (
$groupInitiatePerms === UserToGroupTable::ROLE_MODERATOR
&& in_array($arReturn['UserRole'], [
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
], true)
)
|| ($groupInitiatePerms === UserToGroupTable::ROLE_USER)
);
$arReturn['UserCanProcessRequestsIn'] = (
$arReturn['UserCanInitiate']
&& in_array($arReturn['UserRole'], [
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
], true)
);
$arReturn["UserCanViewGroup"] = true;
$arReturn["UserCanAutoJoinGroup"] = false;
$arReturn["UserCanModifyGroup"] = $arReturn["UserIsOwner"];
if (
!$arReturn['UserCanModifyGroup']
&& $groupFields['SCRUM'] === 'Y'
)
{
if (!isset($groupFields['SCRUM_MASTER_ID']))
{
$group = Workgroup::getById($groupFields['ID']);
$groupFields['SCRUM_MASTER_ID'] = ($group ? $group->getScrumMaster() : 0);
}
$arReturn['UserCanModifyGroup'] = ((int)$groupFields['SCRUM_MASTER_ID'] === $userId);
}
$arReturn["UserCanModerateGroup"] = (in_array($arReturn['UserRole'], [
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
], true));
$arReturn['UserCanSpamGroup'] = (
(
$groupSpamPerms === UserToGroupTable::ROLE_OWNER
&& $arReturn['UserIsOwner']
)
|| (
$groupSpamPerms === UserToGroupTable::ROLE_MODERATOR
&& in_array($arReturn["UserRole"], [
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
], true)
)
|| $groupSpamPerms === UserToGroupTable::ROLE_USER
|| $groupSpamPerms === SONET_ROLES_ALL
);
$arReturn["Operations"]["viewsystemevents"] = true;
}
else
{
$arReturn["UserCanInitiate"] = false;
$arReturn["UserCanViewGroup"] = ($groupVisible === "Y");
$arReturn["UserCanAutoJoinGroup"] = ($arReturn["UserCanViewGroup"] && ($groupOpened === "Y"));
$arReturn["UserCanModifyGroup"] = false;
$arReturn["UserCanModerateGroup"] = false;
$arReturn["UserCanSpamGroup"] = ($groupSpamPerms === SONET_ROLES_ALL);
$arReturn["Operations"]["viewsystemevents"] = false;
}
}
if (Loader::includeModule('extranet') && CExtranet::IsExtranetSite())
{
$arReturn["UserCanSpamGroup"] = true;
}
if (!CBXFeatures::IsFeatureEnabled("WebMessenger"))
{
$arReturn["UserCanSpamGroup"] = false;
}
return $arReturn;
}