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/component/plain/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/yandex.market/lib/component/plain/editform.php
<?php

namespace Yandex\Market\Component\Plain;

use Yandex\Market;
use Bitrix\Main;

abstract class EditForm extends Market\Component\Base\EditForm
{
	protected $fields;
	protected $userFields;

	public function __construct(\CBitrixComponent $component, array $componentParameters = [])
	{
		parent::__construct($component, $componentParameters);

		$this->fields = isset($componentParameters['FIELDS']) ? $this->prepareFields($componentParameters['FIELDS']) : null;
		$this->userFields = new Market\Component\Molecules\UserFields();
	}

	public function prepareComponentParams(array $componentParameters)
	{
		$componentParameters['TABS'] = $this->prepareTabs($componentParameters['TABS'], $this->fields);

		return $componentParameters;
	}

	protected function prepareFields(array $fields)
	{
		$fields = $this->extendFields($fields);
		$fields = $this->sortFields($fields);

		return $fields;
	}

	protected function extendFields(array $fields)
	{
		$result = [];

		foreach ($fields as $name => $field)
		{
			$userField = $field;

			if (!isset($field['USER_TYPE']) && isset($field['TYPE']))
			{
				$userField['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType($field['TYPE']);
			}

			if (
				isset($userField['HIDDEN'], $userField['USER_TYPE']['CLASS_NAME'])
				&& $userField['HIDDEN'] === 'H'
				&& method_exists($userField['USER_TYPE']['CLASS_NAME'], 'GetList')
			)
			{
				$className = $userField['USER_TYPE']['CLASS_NAME'];
				$values = $className::GetList($userField);
				$values = Market\Ui\UserField\Helper\Enum::toArray($values);

				$userField['HIDDEN'] = empty($values) ? 'Y' : 'N';
			}

			$userField += [
				'TAB' => 'COMMON',
				'MULTIPLE' => 'N',
				'EDIT_IN_LIST' => 'Y',
				'EDIT_FORM_LABEL' => $field['NAME'],
				'FIELD_NAME' => $name,
				'SETTINGS' => [],
			];

			$result[$name] = $userField;
		}

		return $result;
	}

	protected function sortFields(array $fields)
	{
		$fieldsWithSort = array_filter($fields, static function($tab) { return isset($tab['SORT']); });

		if (count($fieldsWithSort) > 0)
		{
			uasort($fields, static function($fieldA, $fieldB) {
				$sortA = isset($fieldA['SORT']) ? $fieldA['SORT'] : 5000;
				$sortB = isset($fieldB['SORT']) ? $fieldB['SORT'] : 5000;

				if ($sortA === $sortB) { return 0; }

				return $sortA < $sortB ? -1 : 1;
			});
		}

		return $fields;
	}

	protected function prepareTabs(array $tabs, array $fields = null)
	{
		$tabs = $this->extendTabs($tabs, $fields);
		$tabs = $this->sortTabs($tabs);

		return $tabs;
	}

	/** @noinspection SlowArrayOperationsInLoopInspection */
	protected function extendTabs(array $tabs, array $fields = null)
	{
		if ($fields === null) { return $tabs; }

		$result = [];
		$usedFields = [];

		foreach ($tabs as $tabKey => $tab)
		{
			// fields

			if (!isset($tab['fields']))
			{
				$tabCode = !is_numeric($tabKey) ? $tabKey : 'COMMON';
				$tabFields = $this->getFieldCodesForTab($fields, $tabCode);

				$tab['fields'] = array_diff($tabFields, $usedFields);
			}

			$usedFields = array_merge($usedFields, $tab['fields']);

			// export

			$result[] = $tab;
		}

		return $result;
	}

	protected function sortTabs(array $tabs)
	{
		$tabsWithSort = array_filter($tabs, static function($tab) { return isset($tab['sort']); });

		if (count($tabsWithSort) > 0)
		{
			uasort($tabs, static function($tabA, $tabB) {
				$sortA = isset($tabA['sort']) ? $tabA['sort'] : 5000;
				$sortB = isset($tabB['sort']) ? $tabB['sort'] : 5000;

				if ($sortA === $sortB) { return 0; }

				return $sortA < $sortB ? -1 : 1;
			});
		}

		return $tabs;
	}

	protected function getFieldCodesForTab($fields, $tabCode)
	{
		$result = [];

		foreach ($fields as $fieldCode => $field)
		{
			$fieldTab = isset($field['TAB']) ? $field['TAB'] : 'COMMON';

			if ($fieldTab === $tabCode)
			{
				$result[] = $fieldCode;
			}
		}

		return $result;
	}

	public function modifyRequest(array $request, array $fields)
	{
		return $this->userFields->sanitize($request, $fields);
	}

	public function extend(array $data, array $fields)
	{
		$result = $this->restoreDefaultsForHiddenFields($data, $fields);

		return $result;
	}

	protected function restoreDefaultsForHiddenFields(array $data, array $fields)
	{
		$result = $data;

		foreach ($fields as $field)
		{
			if (empty($field['DEPEND_HIDDEN']) || !isset($field['SETTINGS']['DEFAULT_VALUE'])) { continue; }

			$fieldValue = array_key_exists($field['FIELD_NAME'], $data) ? $data[$field['FIELD_NAME']] : $field['VALUE'];

			if ($fieldValue === false)
			{
				$result[$field['FIELD_NAME']] = $field['SETTINGS']['DEFAULT_VALUE'];
			}
		}

		return $result;
	}

	public function validate(array $data, array $fields)
	{
		$result = new Main\Entity\Result();
		$this->userFields->validate($result, $data, $fields);

		return $result;
	}

	protected function sliceFieldsDependHidden($fields, $values)
	{
		$result = $values;

		foreach ($fields as $fieldName => $field)
		{
			if (empty($field['DEPEND_HIDDEN'])) { continue; }

			Market\Utils\Field::unsetChainValue($result, $fieldName, Market\Utils\Field::GLUE_BRACKET);
		}

		return $result;
	}

	protected function applyUserFieldsOnBeforeSave($fields, $values, $primary = null)
	{
		$originalValues = array_map(
			function(array $field) { return $this->component->getOriginalValue($field); },
			$fields
		);

		return $this->userFields->beforeSave($fields, $values, $primary, $originalValues);
	}

	public function getFields(array $select = [], array $item = null)
	{
		$result = $this->fields;
		$result = $this->applyFieldsSelect($result, $select);
		$result = $this->applyFieldsDeprecated($result, $item);

		return $result;
	}

	protected function applyFieldsSelect(array $fields, array $select)
	{
		if (empty($select)) { return $fields; }

		$selectMap = array_flip($select);

		return array_intersect_key($fields, $selectMap);
	}

	protected function applyFieldsDeprecated(array $fields, $item = null)
	{
		if ($this->needShowDeprecated()) { return $fields; }

		$nextOverrides = [];

		foreach ($fields as &$field)
		{
			if (!empty($nextOverrides))
			{
				$field += $nextOverrides;
				$nextOverrides = [];
			}

			if (!isset($field['DEPRECATED']) || $field['DEPRECATED'] !== 'Y') { continue; }

			$value = $item !== null
				? Market\Utils\Field::getChainValue($item, $field['FIELD_NAME'], Market\Utils\Field::GLUE_BRACKET)
				: null;

			if (empty($value))
			{
				$field['HIDDEN'] = 'Y';
				$nextOverrides += array_intersect_key($field, [
					'INTRO' => true,
				]);
			}
		}
		unset($field);

		return $fields;
	}

	protected function needShowDeprecated()
	{
		$request = Main\Application::getInstance()->getContext()->getRequest();

		return $request->get('deprecated') === 'Y';
	}

	protected function getAllFields()
	{
		return (array)$this->getComponentParam('FIELDS');
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit