- Модуль: socialnetwork
- Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_destination.php
- Класс: CSocNetLogDestination
- Вызов: CSocNetLogDestination::GetSocnetGroupFilteredByInitiatePerms
static function GetSocnetGroupFilteredByInitiatePerms(&$arGroups)
{
global $USER;
$arGroupsIDs = array();
foreach($arGroups as $value)
{
$arGroupsIDs[] = $value["id"];
}
if (count($arGroupsIDs) <= 0)
{
return;
}
if (
$USER->IsAdmin()
|| CSocNetUser::IsCurrentUserModuleAdmin(CSite::GetDefSite())
)
{
return;
}
$groupsList = array();
$userRolesList = array();
$res = BitrixSocialnetworkWorkgroupTable::getList(array(
'filter' => array(
'@ID' => $arGroupsIDs
),
'select' => array('ID', 'OWNER_ID', 'INITIATE_PERMS')
));
while ($group = $res->fetch())
{
$groupsList[$group['ID']] = array(
'OWNER_ID' => $group['OWNER_ID'],
'INITIATE_PERMS' => $group['INITIATE_PERMS']
);
}
$res = UserToGroupTable::getList(array(
'filter' => array(
'USER_ID' => $USER->getId(),
'@GROUP_ID' => $arGroupsIDs
),
'select' => array('GROUP_ID', 'ROLE')
));
while ($relation = $res->fetch())
{
$userRolesList[$relation['GROUP_ID']] = $relation['ROLE'];
}
$userId = $USER->getId();
foreach ($arGroups as $key => $group)
{
$groupId = $group["id"];
$canInitiate = (
(
isset($groupsList[$groupId])
&& $groupsList[$groupId]["INITIATE_PERMS"] == UserToGroupTable::ROLE_OWNER
&& $userId == $groupsList[$groupId]["OWNER_ID"]
)
|| (
isset($groupsList[$groupId])
&& $groupsList[$groupId]["INITIATE_PERMS"] == UserToGroupTable::ROLE_MODERATOR
&& isset($userRolesList[$groupId])
&& in_array($userRolesList[$groupId], array(
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR
))
)
|| (
isset($groupsList[$groupId])
&& $groupsList[$groupId]["INITIATE_PERMS"] == UserToGroupTable::ROLE_USER
&& isset($userRolesList[$groupId])
&& in_array($userRolesList[$groupId], array(
UserToGroupTable::ROLE_OWNER,
UserToGroupTable::ROLE_MODERATOR,
UserToGroupTable::ROLE_USER
))
)
);
if (!$canInitiate)
{
unset($arGroups[$key]);
}
}
}