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/yandex.market/lib/export/entity/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/yandex.market/lib/export/entity/data.php
<?php

namespace Yandex\Market\Export\Entity;

use Bitrix\Main;
use Yandex\Market;

Main\Localization\Loc::loadMessages(__FILE__);

class Data
{
	const TYPE_STRING = 'S';
	const TYPE_NUMBER = 'N';
	const TYPE_ENUM = 'L';
	const TYPE_IBLOCK_ELEMENT = 'E';
	const TYPE_IBLOCK_SECTION = 'G';
	/** @deprecated */
	const TYPE_SERVICE_CATEGORY = 'SERVICE_CATEGORY';
	const TYPE_MARKET_CATEGORY = 'MARKET_CATEGORY';
	const TYPE_MARKET_PARAMETERS = 'MARKET_PARAMETERS';
	const TYPE_FILE = 'F';
	const TYPE_BOOLEAN = 'BOOLEAN';
	const TYPE_URL = 'URL';
	const TYPE_DATE = 'DATE';
	const TYPE_DATETIME = 'DATETIME';
	const TYPE_CURRENCY = 'CURRENCY';
	const TYPE_CURRENCY_CONVERT = 'CURRENCY_CONVERT';
	const TYPE_DELIVERY_OPTIONS = 'DELIVERY_OPTIONS';
	const TYPE_DISTINCT = 'DISTINCT';

	const COMPARE_EQUAL = 'equal';
	const COMPARE_NOT_EQUAL = 'notEqual';
	const COMPARE_MORE = 'more';
	const COMPARE_MORE_OR_EQUAL = 'moreOrEqual';
	const COMPARE_LESS = 'less';
	const COMPARE_LESS_OR_EQUAL = 'lessOrEqual';
	const COMPARE_LIKE = 'like';
	const COMPARE_NOT_LIKE = 'notLike';
	const COMPARE_IN = 'in';
	const COMPARE_NOT_IN = 'notIn';
	const COMPARE_NOT_IN_STRICT = 'notInStrict';
	const COMPARE_COMPLEX = 'complex';
	const COMPARE_EMPTY = 'empty';
	const COMPARE_NOT_EMPTY = 'notEmpty';

	const SPECIAL_VALUE_EMPTY = 'special:empty';

	protected static $likeSpecialChars = [ '_', '%' ];

	public static function getType($type)
	{
		$typeList = static::getTypeList();

		if (!isset($typeList[$type]))
		{
			$langPrefix = static::getLangPrefix();

			throw new Main\SystemException(
				Market\Config::getLang($langPrefix . 'TYPE_UNDEFINED')
			);
		}

		return $typeList[$type];
	}

	/** @noinspection PhpDeprecationInspection */
	public static function getTypeList()
	{
		$stringDataTypes = [
			Market\Type\Manager::TYPE_STRING,
			Market\Type\Manager::TYPE_NUMBER,
			Market\Type\Manager::TYPE_COUNT,
			Market\Type\Manager::TYPE_VAT,
			Market\Type\Manager::TYPE_BARCODE,
			Market\Type\Manager::TYPE_HTML,
			Market\Type\Manager::TYPE_DATE,
			Market\Type\Manager::TYPE_DATEPERIOD,
			Market\Type\Manager::TYPE_PERIOD,
			Market\Type\Manager::TYPE_CURRENCY,
			Market\Type\Manager::TYPE_BOOLEAN,
			Market\Type\Manager::TYPE_AGE,
			Market\Type\Manager::TYPE_DIMENSIONS,
			Market\Type\Manager::TYPE_RECORDING_LENGTH,
			Market\Type\Manager::TYPE_ENUM,
			Market\Type\Manager::TYPE_DAYS,
			Market\Type\Manager::TYPE_TN_VED_CODE,
			Market\Type\Manager::TYPE_WEEKDAY,
		];

		if (Market\Config::isExpertMode())
		{
			$stringDataTypes[] = Market\Type\Manager::TYPE_URL;
		}

		return [
			static::TYPE_STRING => [
				'DATA' => array_merge(
					$stringDataTypes,
					[ Market\Type\Manager::TYPE_FILE ]
				),
				'COMPARE' => [
					static::COMPARE_EQUAL,
					static::COMPARE_NOT_EQUAL,
					static::COMPARE_LIKE,
					static::COMPARE_NOT_LIKE,
					static::COMPARE_COMPLEX,
                    static::COMPARE_IN,
                    static::COMPARE_NOT_IN,
					static::COMPARE_NOT_IN_STRICT,
					static::COMPARE_EMPTY,
					static::COMPARE_NOT_EMPTY
				]
			],
			static::TYPE_NUMBER => [
				'DATA' => [
					Market\Type\Manager::TYPE_STRING,
					Market\Type\Manager::TYPE_NUMBER,
					Market\Type\Manager::TYPE_COUNT,
					Market\Type\Manager::TYPE_VAT,
					Market\Type\Manager::TYPE_BARCODE,
					Market\Type\Manager::TYPE_BOOLEAN,
					Market\Type\Manager::TYPE_AGE,
					Market\Type\Manager::TYPE_DAYS,
					Market\Type\Manager::TYPE_TN_VED_CODE,
					Market\Type\Manager::TYPE_WEEKDAY,
					Market\Type\Manager::TYPE_DATEPERIOD,
					Market\Type\Manager::TYPE_PERIOD,
				],
				'COMPARE' => [
					static::COMPARE_EQUAL,
					static::COMPARE_NOT_EQUAL,
					static::COMPARE_MORE,
					static::COMPARE_MORE_OR_EQUAL,
					static::COMPARE_LESS,
					static::COMPARE_LESS_OR_EQUAL,
                    static::COMPARE_COMPLEX,
                    static::COMPARE_IN,
                    static::COMPARE_NOT_IN,
					static::COMPARE_NOT_IN_STRICT,
                    static::COMPARE_EMPTY,
                    static::COMPARE_NOT_EMPTY
				]
			],
			static::TYPE_ENUM => [
				'DATA' => $stringDataTypes,
				'COMPARE' => [
					static::COMPARE_IN,
					static::COMPARE_NOT_IN,
					static::COMPARE_NOT_IN_STRICT,
					static::COMPARE_EMPTY,
					static::COMPARE_NOT_EMPTY
				]
			],
			static::TYPE_IBLOCK_ELEMENT => [
				'DATA' => $stringDataTypes,
				'COMPARE' => [
					static::COMPARE_IN,
					static::COMPARE_NOT_IN,
					static::COMPARE_NOT_IN_STRICT,
					static::COMPARE_EMPTY,
					static::COMPARE_NOT_EMPTY
				]
			],
			static::TYPE_IBLOCK_SECTION => [
				'DATA' => [
					Market\Type\Manager::TYPE_CATEGORY
				],
				'COMPARE' => [
					static::COMPARE_IN,
					static::COMPARE_NOT_IN,
					static::COMPARE_NOT_IN_STRICT,
					static::COMPARE_EMPTY,
					static::COMPARE_NOT_EMPTY
				]
			],
			static::TYPE_SERVICE_CATEGORY => [
				'DATA' => [
					Market\Type\Manager::TYPE_CATEGORY
				],
				'COMPARE' => [
					static::COMPARE_IN,
					static::COMPARE_NOT_IN,
					static::COMPARE_EMPTY,
					static::COMPARE_NOT_EMPTY
				]
			],
			static::TYPE_FILE => [
				'DATA' => [
					Market\Type\Manager::TYPE_FILE
				],
				'COMPARE' => [
					static::COMPARE_EQUAL,
					static::COMPARE_NOT_EQUAL
				]
			],
			static::TYPE_BOOLEAN => [
				'DATA' => $stringDataTypes,
				'COMPARE' => [
					static::COMPARE_EQUAL,
					static::COMPARE_NOT_EQUAL
				]
			],
			static::TYPE_URL => [
				'DATA' => [
					Market\Type\Manager::TYPE_URL
				],
				'COMPARE' => [
					static::COMPARE_EQUAL,
					static::COMPARE_NOT_EQUAL,
					static::COMPARE_LIKE,
					static::COMPARE_NOT_LIKE,
                    static::COMPARE_IN,
                    static::COMPARE_NOT_IN,
				]
			],
			static::TYPE_DATE => [
				'DATA' => [
					Market\Type\Manager::TYPE_DATE,
					Market\Type\Manager::TYPE_DATEPERIOD,
					Market\Type\Manager::TYPE_STRING
				],
				'COMPARE' => [
					static::COMPARE_EQUAL,
					static::COMPARE_NOT_EQUAL,
					static::COMPARE_MORE,
					static::COMPARE_MORE_OR_EQUAL,
					static::COMPARE_LESS,
					static::COMPARE_LESS_OR_EQUAL,
                    static::COMPARE_COMPLEX,
                    static::COMPARE_IN,
                    static::COMPARE_NOT_IN,
                    static::COMPARE_EMPTY,
                    static::COMPARE_NOT_EMPTY
				]
			],
			static::TYPE_DATETIME => [
				'DATA' => [
					Market\Type\Manager::TYPE_DATE,
                    Market\Type\Manager::TYPE_DATEPERIOD,
					Market\Type\Manager::TYPE_STRING
				],
				'COMPARE' => [
					static::COMPARE_EQUAL,
					static::COMPARE_NOT_EQUAL,
					static::COMPARE_MORE,
					static::COMPARE_MORE_OR_EQUAL,
					static::COMPARE_LESS,
					static::COMPARE_LESS_OR_EQUAL,
                    static::COMPARE_COMPLEX,
                    static::COMPARE_IN,
                    static::COMPARE_NOT_IN,
                    static::COMPARE_EMPTY,
                    static::COMPARE_NOT_EMPTY
				]
			],
			static::TYPE_CURRENCY => [
				'DATA' => [
					Market\Type\Manager::TYPE_CURRENCY,
					Market\Type\Manager::TYPE_STRING,
				],
				'COMPARE' => [
					static::COMPARE_IN,
					static::COMPARE_NOT_IN
				]
			],
			static::TYPE_CURRENCY_CONVERT => [
				'DATA' => [
					Market\Type\Manager::TYPE_CURRENCY,
				],
				'COMPARE' => []
			],
			static::TYPE_DELIVERY_OPTIONS => [
				'DATA' => [
					Market\Type\Manager::TYPE_DELIVERY_OPTIONS
				],
				'COMPARE' => []
			],
			static::TYPE_DISTINCT => [
				'DATA' => [],
				'COMPARE' => [
					static::COMPARE_EQUAL,
				]
			],
		];
	}

	public static function getDataTypes($dataType)
	{
		$typeList = static::getTypeList();
		$result = [];

		foreach ($typeList as $type => $config)
		{
			if (!isset($config['DATA']) || in_array($dataType, $config['DATA']))
			{
				$result[] = $type;
			}
		}

		return $result;
	}

	public static function getCompare($compare)
	{
		$compareList = static::getCompareList();

		if (!isset($compareList[$compare]))
		{
			$langPrefix = static::getLangPrefix();

			throw new Main\SystemException(
				Market\Config::getLang($langPrefix . 'COMPARE_UNDEFINED')
			);
		}

		return $compareList[$compare];
	}

	public static function getCompareTypes($compare)
	{
		$typeList = static::getTypeList();
		$result = [];

		foreach ($typeList as $type => $data)
		{
			foreach ($data['COMPARE'] as $typeCompare)
			{
				if ($typeCompare === $compare)
				{
					$result[] = $type;
					break;
				}
			}
		}

		return $result;
	}

	public static function getCompareList()
	{
		return [
			static::COMPARE_EQUAL => [
				'QUERY' => '=',
				'MULTIPLE' => false
			],
			static::COMPARE_NOT_EQUAL => [
				'QUERY' => '!',
				'MULTIPLE' => false
			],
			static::COMPARE_MORE => [
				'QUERY' => '>',
				'MULTIPLE' => false
			],
			static::COMPARE_MORE_OR_EQUAL => [
				'QUERY' => '>=',
				'MULTIPLE' => false
			],
			static::COMPARE_LESS => [
				'QUERY' => '<',
				'MULTIPLE' => false
			],
			static::COMPARE_LESS_OR_EQUAL => [
				'QUERY' => '<=',
				'MULTIPLE' => false
			],
			static::COMPARE_LIKE => [
				'QUERY' => '%',
				'MULTIPLE' => false
			],
			static::COMPARE_NOT_LIKE => [
				'QUERY' => '!%',
				'MULTIPLE' => false
			],
			static::COMPARE_IN => [
				'QUERY' => '',
				'MULTIPLE' => true
			],
			static::COMPARE_NOT_IN => [
				'QUERY' => '!',
				'MULTIPLE' => true
			],
			static::COMPARE_NOT_IN_STRICT => [
				'QUERY' => '!',
				'MULTIPLE' => true,
				'STRICT' => true,
				'HIDDEN' => !Market\Config::isExpertMode(),
			],
			static::COMPARE_COMPLEX => [
				'QUERY' => '?',
				'MULTIPLE' => false
			],
			static::COMPARE_EMPTY => [
				'QUERY' => '',
				'MULTIPLE' => false,
				'DEFINED' => static::SPECIAL_VALUE_EMPTY
			],
			static::COMPARE_NOT_EMPTY => [
				'QUERY' => '!',
				'MULTIPLE' => false,
				'DEFINED' => static::SPECIAL_VALUE_EMPTY
			]
		];
	}

	public static function getCompareTitle($compare)
	{
		$langPrefix = static::getLangPrefix();
		$compareUpper = Market\Data\TextString::toUpper($compare);

		return Market\Config::getLang($langPrefix . 'COMPARE_' . $compareUpper);
	}

	public static function optimizeCompareQuery($compareData, $compareValue)
	{
		$isNonStrictQuery = ($compareData['QUERY'] === '' || $compareData['QUERY'] === '!');
		$result = null;

		if ($isNonStrictQuery && !isset($compareData['DEFINED']) && !static::hasLikeSpecialChar($compareValue))
		{
			$result = $compareData;
			$result['QUERY'] .= '=';
		}

		return $result;
	}

	/** @noinspection PhpDeprecationInspection */
	public static function convertUserTypeToDataType($userTypeId)
	{
		$map = [
			'string' => static::TYPE_STRING,
			'integer' => static::TYPE_NUMBER,
			'double' => static::TYPE_NUMBER,
			'enumeration' => static::TYPE_ENUM,
			'hlblock' => static::TYPE_ENUM,
			'url' => static::TYPE_URL,
			'file' => static::TYPE_FILE,
			'boolean' => static::TYPE_BOOLEAN,
			'date' => static::TYPE_DATE,
			'datetime' => static::TYPE_DATETIME,
			'iblock_element' => static::TYPE_IBLOCK_ELEMENT,
			'iblock_section' => static::TYPE_IBLOCK_SECTION,
			'ym_service_category' => static::TYPE_SERVICE_CATEGORY
		];

		return isset($map[$userTypeId]) ? $map[$userTypeId] : static::TYPE_STRING;
	}

	protected static function getLangPrefix()
	{
		return 'EXPORT_ENTITY_DATA_';
	}

	protected static function hasLikeSpecialChar($compareValue)
	{
		$result = false;

		if (is_array($compareValue))
		{
			foreach ($compareValue as $option)
			{
				if (static::testVariableForLikeSpecialChar($option))
				{
					$result = true;
					break;
				}
			}
		}
		else if (static::testVariableForLikeSpecialChar($compareValue))
		{
			$result = true;
		}

		return $result;
	}

	protected static function testVariableForLikeSpecialChar($string)
	{
		$result = false;

		if (is_string($string))
		{
			foreach (static::$likeSpecialChars as $char)
			{
				if (Market\Data\TextString::getPosition($string, $char) !== false)
				{
					$result = true;
					break;
				}
			}
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit