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/promo/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

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

namespace Yandex\Market\Export\Promo;

use Bitrix\Main;
use Bitrix\Currency;
use Yandex\Market;

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

class Table extends Market\Reference\Storage\Table
{
	const PROMO_TYPE_PROMO_CODE = 'promo code';
	const PROMO_TYPE_FLASH_DISCOUNT = 'flash discount';
	const PROMO_TYPE_GIFT_N_PLUS_M = 'n plus m';
	const PROMO_TYPE_GIFT_WITH_PURCHASE = 'gift with purchase';
	const PROMO_TYPE_BONUS_CARD = 'bonus card';

	const DISCOUNT_UNIT_PERCENT = 'percent';
	const DISCOUNT_UNIT_CURRENCY = 'currency';

	public static function getTableName()
	{
		return 'yamarket_export_promo';
	}

	public static function getUfId()
	{
		return 'YAMARKET_EXPORT_PROMO';
	}

	public static function getMap()
	{
		return [
			new Main\Entity\IntegerField('ID', [
				'autocomplete' => true,
				'primary' => true
			]),
			new Main\Entity\BooleanField('ACTIVE', [
				'default_value' => static::BOOLEAN_Y,
				'values' => [
					static::BOOLEAN_N,
					static::BOOLEAN_Y
				]
			]),
			new Main\Entity\StringField('NAME', [
				'required' => true,
				'validation' => [__CLASS__, 'validateName']
			]),
			new Main\Entity\StringField('URL', [
				'required' => true,
				'validation' => [__CLASS__, 'validateUrl']
			]),
			new Main\Entity\TextField('DESCRIPTION', [
				'validation' => [__CLASS__, 'validateDescription']
			]),
			new Main\Entity\StringField('PROMO_TYPE', [
				'required' => true,
                'validation' => [__CLASS__, 'validatePromoType']
			]),

			new Main\Entity\BooleanField('SETUP_EXPORT_ALL', [
				'default_value' => static::BOOLEAN_N,
				'values' => [
					static::BOOLEAN_N,
					static::BOOLEAN_Y
				]
			]),
			new Main\Entity\ReferenceField('SETUP_LINK', Internals\SetupLinkTable::class, [
				'=this.ID' => 'ref.PROMO_ID'
			]),
			new Main\Entity\ReferenceField('SETUP', Market\Export\Setup\Table::class, [
				'=this.SETUP_LINK.SETUP_ID' => 'ref.ID',
			]),

			new Main\Entity\StringField('EXTERNAL_ID', [
				'default_value' => '',
				'validation' => [__CLASS__, 'validateExternalId']
			]),

			new Main\Entity\TextField(
				'EXTERNAL_SETTINGS',
				Market\Reference\Storage\Field\Serializer::getParameters()
			),

			new Main\Entity\DatetimeField('START_DATE', array_merge(
				Market\Reference\Storage\Field\DateTimeStrict::getParameters(),
				[
					'validation' => [__CLASS__, 'validateStartDate'],
                ]
			)),
			new Main\Entity\DatetimeField('FINISH_DATE', Market\Reference\Storage\Field\DateTimeStrict::getParameters()),

			new Main\Entity\EnumField('DISCOUNT_UNIT', [
				'default_value' => static::DISCOUNT_UNIT_PERCENT,
				'values' => [
					static::DISCOUNT_UNIT_PERCENT,
					static::DISCOUNT_UNIT_CURRENCY
				]
			]),
			new Main\Entity\StringField('DISCOUNT_CURRENCY', [
				'default_value' => '',
				'validation' => [__CLASS__, 'validateDiscountCurrency']
            ]),
			new Main\Entity\FloatField('DISCOUNT_VALUE', array_merge(
				Market\Reference\Storage\Field\NumberStrict::getParameters(),
				[
					'default_value' => 5,
					'scale' => 2,
					'validation' => [__CLASS__, 'validatePositiveFloat']
				]
			)),

			new Main\Entity\StringField('PROMO_CODE', [
				'default_value' => '',
				'validation' => [__CLASS__, 'validatePromoCode']
			]),

			new Main\Entity\IntegerField('GIFT_REQUIRED_QUANTITY', array_merge(
				Market\Reference\Storage\Field\NumberStrict::getParameters(),
				[
			        'default_value' => 1,
					'validation' => [__CLASS__, 'validatePositiveInteger']
                ]
			)),
			new Main\Entity\IntegerField('GIFT_FREE_QUANTITY', array_merge(
				Market\Reference\Storage\Field\NumberStrict::getParameters(),
				[
	                'default_value' => 1,
					'validation' => [__CLASS__, 'validatePositiveInteger']
	            ]
			)),

			new Main\Entity\ReferenceField('PROMO_PRODUCT', Market\Export\PromoProduct\Table::class, [
				'=this.ID' => 'ref.PROMO_ID'
			]),

			new Main\Entity\ReferenceField('PROMO_GIFT', Market\Export\PromoGift\Table::class, [
				'=this.ID' => 'ref.PROMO_ID'
			])
		];
	}

	public static function getReference($primary = null)
	{
		return [
			'SETUP_LINK' => [
				'TABLE' => Internals\SetupLinkTable::class,
				'LINK_FIELD' => 'PROMO_ID',
				'LINK' => [
					'PROMO_ID' => $primary
				]
			],
			'PROMO_PRODUCT' => [
				'TABLE' => Market\Export\PromoProduct\Table::class,
				'LINK_FIELD' => 'PROMO_ID',
				'LINK' => [
					'PROMO_ID' => $primary
				]
			],
			'PROMO_GIFT' => [
				'TABLE' => Market\Export\PromoGift\Table::class,
				'LINK_FIELD' => 'PROMO_ID',
				'LINK' => [
					'PROMO_ID' => $primary
				]
			]
		];
	}

	public static function migrate(Main\DB\Connection $connection)
	{
		parent::migrate($connection);
		static::migrateExternalIdType($connection);
	}

	protected static function migrateExternalIdType(Main\DB\Connection $connection)
	{
		$sqlHelper = $connection->getSqlHelper();
		$tableName = static::getTableName();
		$columnName = 'EXTERNAL_ID';

		$queryColumns = $connection->query(sprintf('SHOW COLUMNS FROM %s LIKE "%s"',
			$sqlHelper->quote($tableName),
			$sqlHelper->forSql($columnName)
		));
		$column = $queryColumns->fetch();

		if (
			isset($column['Type'])
			&& Market\Data\TextString::getPositionCaseInsensitive($column['Type'], 'int') !== false
		)
		{
			$entity = static::getEntity();
			$field = $entity->getField($columnName);

			if (!($field instanceof Main\Entity\ScalarField))
			{
				throw new Main\SystemException('EXTERNAL_ID must be scalar');
			}

			$columnType = $sqlHelper->getColumnTypeByField($field);

			$connection->queryExecute(sprintf(
				'ALTER TABLE %s MODIFY COLUMN %s %s',
				$sqlHelper->quote($tableName),
				$sqlHelper->quote($columnName),
				$columnType
			));
		}
	}

	public static function getMapDescription()
	{
		$result = parent::getMapDescription();
		$result['NAME'] = static::extendNameDescription($result['NAME']);

        if (isset($result['PROMO_TYPE']))
        {
            $result['PROMO_TYPE']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('enumeration');
            $result['PROMO_TYPE']['VALUES'] = Discount\Manager::getTypeEnum();
        }

		if (isset($result['DESCRIPTION']))
		{
			$result['DESCRIPTION']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('html');
		}

		if (isset($result['SETUP']))
		{
			$result['SETUP']['MULTIPLE'] = 'Y';
			$result['SETUP']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('setupLink');
			$result['SETUP']['SETTINGS'] = [
				'ENTITY_TYPE' => Market\Export\Run\Manager::ENTITY_TYPE_PROMO,
			];
		}

		if (isset($result['START_DATE']))
		{
			$result['START_DATE']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('datetime');
		}

		if (isset($result['FINISH_DATE']))
		{
			$result['FINISH_DATE']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('datetime');
		}

        if (isset($result['DISCOUNT_CURRENCY']) && Main\Loader::includeModule('currency'))
        {
            $currencyList = [];

            $queryCurrencyList = Currency\CurrencyTable::getList([
                'select' => [ 'CURRENCY', 'SORT', 'BASE' ]
            ]);

            while ($currency = $queryCurrencyList->fetch())
            {
                $currencyList[] = $currency;
            }

            if (!empty($currencyList))
            {
                uasort($currencyList, function($a, $b) {
                    $isABase = ($a['BASE'] === 'Y');
                    $isBBase = ($b['BASE'] === 'Y');
                    $result = 0;

                    if ($isABase === $isBBase)
                    {
                        $aSort = (int)$a['SORT'];
                        $bSort = (int)$b['SORT'];

                        if ($aSort !== $bSort)
                        {
                            $result = ($aSort < $bSort ? -1 : 1);
                        }
                    }
                    else
                    {
                        $result = ($isABase ? -1 : 1);
                    }

                    return $result;
                });

                $result['DISCOUNT_CURRENCY']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('enumeration');
                $result['DISCOUNT_CURRENCY']['MANDATORY'] = 'Y';
                $result['DISCOUNT_CURRENCY']['VALUES'] = [];

                foreach ($currencyList as $currency)
                {
                    $result['DISCOUNT_CURRENCY']['VALUES'][] = [
                        'ID' => $currency['CURRENCY'],
                        'VALUE' => $currency['CURRENCY']
                    ];
                }
            }
        }

		return $result;
	}

	protected static function extendNameDescription($field)
	{
		$field['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('name');

		return $field;
	}

	public static function loadExternalReference($primaryList, $select = null, $isCopy = false)
	{
		$result = parent::loadExternalReference($primaryList, $select, $isCopy);

		if (!empty($primaryList))
		{
			$referenceMap = [
				'SETUP' => 'loadExternalReferenceSetup',
			];

			foreach ($referenceMap as $field => $method)
			{
				if (empty($select) || in_array($field, $select))
				{
					$referenceDataList = static::$method($primaryList);

					foreach ($referenceDataList as $primary => $referenceValue)
					{
						if (!isset($result[$primary]))
						{
							$result[$primary] = [];
						}

						$result[$primary][$field] = $referenceValue;
					}
				}
			}
		}

		return $result;
	}

	protected static function loadExternalReferenceSetup($primaryList)
	{
		$result = [];

		// load row data

		$query = Internals\SetupLinkTable::getList([
			'filter' => [
				'=PROMO_ID' => $primaryList,
			],
			'select' => [
				'ID',
				'PROMO_ID',
				'SETUP_ID',
			],
		]);

		while ($row = $query->fetch())
		{
			if (!isset($result[$row['PROMO_ID']]))
			{
				$result[$row['PROMO_ID']] = [];
			}

			$result[$row['PROMO_ID']][$row['ID']] = $row['SETUP_ID'];
		}

		return $result;
	}

	public static function saveExtractReference(array &$data)
	{
		$result = parent::saveExtractReference($data);

		if (array_key_exists('SETUP', $data))
		{
			unset($data['SETUP']);
		}

		return $result;
	}

    protected static function onBeforeRemove($primary)
    {
        /** @var Model $model */
        $model = Model::loadById($primary);

        $model->onBeforeRemove();
    }

    protected static function onAfterSave($primary)
    {
        /** @var Model $model */
        $model = Model::loadById($primary);

        $model->onAfterSave();
    }

	public static function validateName()
	{
		return [
			new Main\Entity\Validator\Length(null, 255)
		];
	}

	public static function validatePromoCode()
	{
		return [
			new Main\Entity\Validator\Length(null, 20)
		];
	}

	public static function validateUrl()
	{
		return [
			function ($value, $primary, $row, $field)
            {
		        $result = false;

		        if (filter_var($value, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED))
                {
                    $result = true;
                }
		        else
                {
                    $valueWithDomain =
	                    'http://local.site'
	                    . (Market\Data\TextString::getPosition($value, '/') === 0 ? '' : '/')
	                    . $value;

                    if (filter_var($valueWithDomain, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED))
                    {
                        $result = true;
                    }
                }

		        if (!$result)
                {
                    $result = Market\Config::getLang('EXPORT_PROMO_VALIDATE_URL_REQUIRE_PATH');
                }

		        return $result;
		    }
		];
	}

	public static function validateDescription()
	{
		return [
			new Main\Entity\Validator\Length(null, 500)
		];
	}

    public static function validatePromoType()
    {
        return [
            new Main\Entity\Validator\Length(null, 25)
        ];
    }

    public static function validateExternalId()
    {
        return [
            new Main\Entity\Validator\Length(null, 25)
        ];
    }

    public static function validateDiscountCurrency()
    {
        return [
            new Main\Entity\Validator\Length(null, 10)
        ];
    }

    public static function validatePositiveInteger()
    {
        return [
            function($value, $primary, $row, $field)
			{
				/** @var $field Main\Entity\ScalarField */
				$result = true;
				$valueString = (string)$value;

				if ($valueString !== '')
				{
					$valueInteger = (int)$value;

					if ((string)$valueInteger !== $valueString)
					{
						$result = Market\Config::getLang('EXPORT_PROMO_VALIDATE_POSITIVE_INTEGER_NOT_NUMBER', [
							'#NAME#' => $field->getTitle()
						]);
					}
					else if ($valueInteger <= 0)
					{
						$result = Market\Config::getLang('EXPORT_PROMO_VALIDATE_POSITIVE_INTEGER_NOT_POSITIVE', [
							'#NAME#' => $field->getTitle()
						]);
					}
				}

				return $result;
			}
        ];
    }

    public static function validatePositiveFloat()
    {
        return [
            function($value, $primary, $row, $field)
			{
				/** @var $field Main\Entity\ScalarField */
				$result = true;
				$valueString = (string)$value;

				if ($valueString !== '')
				{
					$valueFloat = (float)$value;

					if ((string)$valueFloat !== $valueString)
					{
						$result = Market\Config::getLang('EXPORT_PROMO_VALIDATE_POSITIVE_FLOAT_NOT_NUMBER', [
							'#NAME#' => $field->getTitle()
						]);
					}
					else if ($valueFloat <= 0)
					{
						$result = Market\Config::getLang('EXPORT_PROMO_VALIDATE_POSITIVE_FLOAT_NOT_POSITIVE', [
							'#NAME#' => $field->getTitle()
						]);
					}
				}

				return $result;
			}
        ];
    }

    public static function validateStartDate()
    {
        return [
            function ($value, $primary, $row, $field)
            {
                $result = true;

                if (
                    !empty($value) && $value instanceof Main\Type\Date
                    && !empty($row['FINISH_DATE']) && $row['FINISH_DATE'] instanceof Main\Type\Date
                    && $row['FINISH_DATE']->getTimestamp() <= $value->getTimestamp()
                )
                {
                    $result = Market\Config::getLang('EXPORT_PROMO_VALIDATE_START_DATE_MUST_LESS_FINISH_DATE');
                }

                return $result;
            }
        ];
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit