403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/socialnetwork/lib/component/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/socialnetwork/lib/component/workgroupuserlist.php
<?php

namespace Bitrix\Socialnetwork\Component;

use Bitrix\Main\ErrorCollection;
use Bitrix\Main\Error;
use Bitrix\Main\ModuleManager;
use Bitrix\Main\Filter;
use Bitrix\Main\Localization\Loc;
use Bitrix\Socialnetwork\Internals\Counter\CounterDictionary;
use Bitrix\Socialnetwork\Item\Workgroup\AccessManager;
use Bitrix\Socialnetwork\UserToGroupTable;

class WorkgroupUserList extends \CBitrixComponent implements \Bitrix\Main\Engine\Contract\Controllerable, \Bitrix\Main\Errorable
{
	public const AVAILABLE_ACTION_VIEW_PROFILE = 'view_profile';
	public const AVAILABLE_ACTION_SET_OWNER = 'set_owner';
	public const AVAILABLE_ACTION_SET_SCRUM_MASTER = 'set_scrum_master';
	public const AVAILABLE_ACTION_EXCLUDE = 'exclude';
	public const AVAILABLE_ACTION_SET_MODERATOR = 'set_moderator';
	public const AVAILABLE_ACTION_REMOVE_MODERATOR = 'remove_moderator';
	public const AVAILABLE_ACTION_PROCESS_INCOMING_REQUEST = 'process_incoming_request';
	public const AVAILABLE_ACTION_DELETE_OUTGOING_REQUEST = 'delete_outgoing_request';
	public const AVAILABLE_ACTION_DELETE_INCOMING_REQUEST = 'delete_incoming_request';
	public const AVAILABLE_ACTION_REINVITE = 'reinvite';

	public const AJAX_ACTION_SET_OWNER = 'setOwner';
	public const AJAX_ACTION_SET_SCRUM_MASTER = 'setScrumMaster';
	public const AJAX_ACTION_SET_MODERATOR = 'setModerator';
	public const AJAX_ACTION_REMOVE_MODERATOR = 'removeModerator';
	public const AJAX_ACTION_EXCLUDE = 'exclude';
	public const AJAX_ACTION_DELETE_OUTGOING_REQUEST = 'deleteOutgoingRequest';
	public const AJAX_ACTION_DELETE_INCOMING_REQUEST = 'deleteIncomingRequest';
	public const AJAX_ACTION_ACCEPT_INCOMING_REQUEST = 'acceptIncomingRequest';
	public const AJAX_ACTION_REJECT_INCOMING_REQUEST = 'rejectIncomingRequest';
	public const AJAX_ACTION_REINVITE = 'reinvite';

	protected const PRESET_ALL = 'all';
	protected const PRESET_COMPANY = 'company';
	protected const PRESET_REQUESTS_IN = 'requests_in';
	protected const PRESET_REQUESTS_OUT = 'requests_out';
	protected const PRESET_EXTERNAL = 'external';
	protected const PRESET_AUTO = 'auto';

	protected static $gridId = 'SOCIALNETWORK_WORKGROUP_USER_LIST';
	protected static $filterId = 'SOCIALNETWORK_WORKGROUP_USER_LIST';

	/** @var ErrorCollection errorCollection */
	protected $errorCollection = null;

	public function configureActions()
	{
		return [
		];
	}

	public function __construct($component = null)
	{
		parent::__construct($component);

		$this->errorCollection = new ErrorCollection();
	}

	/**
	 * Adds error to error collection.
	 * @param Error $error Error.
	 *
	 * @return $this
	 */
	protected function addError(Error $error)
	{
		$this->errorCollection[] = $error;

		return $this;
	}

	public function getErrorByCode($code)
	{
		return $this->errorCollection->getErrorByCode($code);
	}

	/**
	 * Getting array of errors.
	 * @return Error[]
	 */
	public function getErrors()
	{
		return $this->errorCollection->toArray();
	}

	protected function printErrors(): void
	{
		foreach ($this->errorCollection as $error)
		{
			ShowError($error);
		}
	}

	public static function getActions(array $params = []): array
	{
		$result = [
			self::AVAILABLE_ACTION_VIEW_PROFILE,
		];

		$groupId = (int)$params['GROUP_ID'];
		$group = $params['GROUP'];
		$currentUserRelation = $params['CURRENT_RELATION'];
		$relation = $params['RELATION'];

		$accessManager = new AccessManager(
			$group,
			$relation,
			$currentUserRelation,
		);

		if ($accessManager->canSetOwner())
		{
			$result[] = self::AVAILABLE_ACTION_SET_OWNER;
		}

		if ($accessManager->canSetScrumMaster())
		{
			$result[] = self::AVAILABLE_ACTION_SET_SCRUM_MASTER;
		}

		if ($accessManager->canSetModerator())
		{
			$result[] = self::AVAILABLE_ACTION_SET_MODERATOR;
		}
		elseif ($accessManager->canRemoveModerator())
		{
			$result[] = self::AVAILABLE_ACTION_REMOVE_MODERATOR;
		}

		$canDeleteOutgoingRequest = $accessManager->canDeleteOutgoingRequest();
		if ($accessManager->canDeleteOutgoingRequest())
		{
			$result[] = self::AVAILABLE_ACTION_DELETE_OUTGOING_REQUEST;
		}
		elseif ($accessManager->canExclude())
		{
			$result[] = self::AVAILABLE_ACTION_EXCLUDE;
		}

		if ($accessManager->canProcessIncomingRequest())
		{
			$result[] = self::AVAILABLE_ACTION_PROCESS_INCOMING_REQUEST;
		}

		if (
			$canDeleteOutgoingRequest
			&& ModuleManager::isModuleInstalled('intranet')
			&& !empty($relation->getUser()->getConfirmCode())
		)
		{
			$result[] = self::AVAILABLE_ACTION_REINVITE;
		}

		if ($accessManager->canDeleteIncomingRequest())
		{
			$result[] = self::AVAILABLE_ACTION_DELETE_INCOMING_REQUEST;
		}

		return $result;
	}

	public static function prepareFilterResult(
		array $result,
		array $groupPerms,
		string $mode = ''
	): array
	{
		$entityFilter = Filter\Factory::createEntityFilter(
			UserToGroupTable::getUfId(),
			[
				'ID' => self::$filterId,
			]
		);
		$result['FILTER'] = $entityFilter->getFieldArrays();

		$result['GRID_ID'] = self::$gridId;
		$result['FILTER_ID'] = self::$filterId;

		$result['CURRENT_PRESET_ID'] = self::getCurrentPresetId($mode);
		$result['CURRENT_COUNTER'] = self::getCounter($mode);
		$result['CUSTOM_FILTER'] = self::getCurrentCustomFilter($mode);
		$result['FILTER_PRESETS'] = self::getFilterPresets($result['CURRENT_PRESET_ID'], $groupPerms);

		return $result;
	}

	private static function getCurrentPresetId(string $mode): string
	{
		switch ($mode)
		{
			case 'MEMBERS':
				$result = self::PRESET_COMPANY;
				break;
			case 'REQUESTS_IN':
				$result = self::PRESET_REQUESTS_IN;
				break;
			case 'REQUESTS_OUT':
				$result = self::PRESET_REQUESTS_OUT;
				break;
			default:
				$result = 'tmp_filter';
		}

		return $result;
	}

	private static function getCounter(string $mode): string
	{
		switch ($mode)
		{
			case 'REQUESTS_IN':
				$result = CounterDictionary::COUNTER_WORKGROUP_REQUESTS_IN;
				break;
			case 'REQUESTS_OUT':
				$result = CounterDictionary::COUNTER_WORKGROUP_REQUESTS_OUT;
				break;
			default:
				$result = '';
		}

		return $result;
	}

	private static function getCurrentCustomFilter(string $mode): array
	{
		switch ($mode)
		{
			case 'MODERATORS':
				$result = [
					'ROLE' => [ UserToGroupTable::ROLE_MODERATOR ],
				];
				break;
			default:
				$result = [];
		}

		return $result;
	}

	private static function getFilterPresets(string $currentPresetId, array $groupPerms): array
	{
		$result = [];

		$extranetAvailable = \Bitrix\Main\Filter\UserDataProvider::getExtranetAvailability();

		$result[self::PRESET_ALL] = [
			'name' => Loc::getMessage('SOCIALNETWORK_GROUP_USER_LIST_FILTER_PRESET_ALL'),
			'fields' => [],
			'default' => ($currentPresetId === self::PRESET_ALL),
		];

		$companyFilter = [
			'FIRED' => 'N',
			'ROLE' => UserToGroupTable::getRolesMember(),
		];
		if ($extranetAvailable)
		{
			$companyFilter['EXTRANET'] = 'N';
		}

		$result[self::PRESET_COMPANY] = [
			'name' => (
			$extranetAvailable
				? Loc::getMessage('SOCIALNETWORK_GROUP_USER_LIST_FILTER_PRESET_COMPANY')
				: Loc::getMessage('SOCIALNETWORK_GROUP_USER_LIST_FILTER_PRESET_MEMBERS')
			),
			'fields' => $companyFilter,
			'default' => ($currentPresetId === self::PRESET_COMPANY),
		];

		if ($extranetAvailable)
		{
			$result[self::PRESET_EXTERNAL] = [
				'name' => Loc::getMessage('SOCIALNETWORK_GROUP_USER_LIST_FILTER_PRESET_EXTERNAL'),
				'fields' => [
					'EXTRANET' => 'Y',
					'FIRED' => 'N',
					'ROLE' => UserToGroupTable::getRolesMember(),
				],
				'default' => false,
			];
		}

		if ($groupPerms['UserCanProcessRequestsIn'] ?? null)
		{
			$result[self::PRESET_REQUESTS_IN] = [
				'name' => Loc::getMessage('SOCIALNETWORK_GROUP_USER_LIST_FILTER_PRESET_REQUESTS_IN'),
				'fields' => [
					'ROLE' => [ UserToGroupTable::ROLE_REQUEST ],
					'FIRED' => 'N',
					'INITIATED_BY_TYPE' => UserToGroupTable::INITIATED_BY_USER,
				],
				'default' => ($currentPresetId === self::PRESET_REQUESTS_IN),
			];
		}

		if ($groupPerms['UserCanInitiate'])
		{
			$result[self::PRESET_REQUESTS_OUT] = [
				'name' => Loc::getMessage('SOCIALNETWORK_GROUP_USER_LIST_FILTER_PRESET_REQUESTS_OUT'),
				'fields' => [
					'ROLE' => [ UserToGroupTable::ROLE_REQUEST ],
					'FIRED' => 'N',
					'INITIATED_BY_TYPE' => UserToGroupTable::INITIATED_BY_GROUP,
				],
				'default' => ($currentPresetId === self::PRESET_REQUESTS_OUT),
			];
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit