• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/lib/controller/usertogroup.php
  • Класс: BitrixSocialnetworkControllerUserToGroup
  • Вызов: UserToGroup::fillActions
private function fillActions(array $relations): array
{
	$userId = (int)$this->getCurrentUser()->getId();
	$permissions = [];

	foreach ($relations as $id => $relation)
	{
		$projectId = (int)$relation['GROUP_ID'];

		if (!array_key_exists($projectId, $permissions))
		{
			$permissions[$projectId] = HelperWorkgroup::getPermissions(['groupId' => $projectId]);
		}

		$projectPermissions = $permissions[$projectId];
		$canModifyGroup = $projectPermissions['UserCanModifyGroup'];
		$canInitiate = $projectPermissions['UserCanInitiate'];
		$canProcessRequestsIn = $projectPermissions['UserCanProcessRequestsIn'];

		$role = $relation['ROLE'];
		$memberId = (int)$relation['USER_ID'];
		$isAutoMember = ($relation['AUTO_MEMBER'] === 'Y');
		$initiatedByType = $relation['INITIATED_BY_TYPE'];

		$relations[$id]['ACTIONS'] = [
			'SET_OWNER' => (
				$canModifyGroup
				&& $projectPermissions['UserIsOwner']
				&& in_array($role, [UserToGroupTable::ROLE_MODERATOR, UserToGroupTable::ROLE_USER], true)
			),
			'SET_MODERATOR' => (
				$canModifyGroup
				&& $role === UserToGroupTable::ROLE_USER
			),
			'REMOVE_MODERATOR' => (
				$canModifyGroup
				&& $role === UserToGroupTable::ROLE_MODERATOR
			),
			'EXCLUDE' => (
				$canModifyGroup
				&& !$isAutoMember
				&& $memberId !== $userId
				&& in_array($role, [UserToGroupTable::ROLE_MODERATOR, UserToGroupTable::ROLE_USER], true)
			),
			'REPEAT_INVITE' => (
				$canInitiate
				&& $role === UserToGroupTable::ROLE_REQUEST
				&& $initiatedByType === UserToGroupTable::INITIATED_BY_GROUP
			),
			'CANCEL_INVITE' => (
				$canInitiate
				&& $role === UserToGroupTable::ROLE_REQUEST
				&& $initiatedByType === UserToGroupTable::INITIATED_BY_GROUP
			),
			'ACCEPT_REQUEST' => (
				$canProcessRequestsIn
				&& $role === UserToGroupTable::ROLE_REQUEST
				&& $initiatedByType === UserToGroupTable::INITIATED_BY_USER
			),
			'DENY_REQUEST' => (
				$canProcessRequestsIn
				&& $role === UserToGroupTable::ROLE_REQUEST
				&& $initiatedByType === UserToGroupTable::INITIATED_BY_USER
			),
		];
	}

	return $relations;
}