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 : |
<?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'); } }