![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/Data/Form/Element/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\Data\Form\Element; use Magento\Framework\App\ObjectManager; use Magento\Framework\Escaper; use Magento\Framework\Math\Random; use Magento\Framework\View\Helper\SecureHtmlRenderer; /** * Form select element * * @api * @author Magento Core Team <[email protected]> * @since 100.0.2 */ class Select extends AbstractElement { /** * @var SecureHtmlRenderer */ private $secureRenderer; /** * @var Random */ private $random; /** * @param Factory $factoryElement * @param CollectionFactory $factoryCollection * @param Escaper $escaper * @param array $data * @param SecureHtmlRenderer|null $secureRenderer * @param Random|null $random */ public function __construct( Factory $factoryElement, CollectionFactory $factoryCollection, Escaper $escaper, $data = [], ?SecureHtmlRenderer $secureRenderer = null, ?Random $random = null ) { $secureRenderer = $secureRenderer ?? ObjectManager::getInstance()->get(SecureHtmlRenderer::class); $random = $random ?? ObjectManager::getInstance()->get(Random::class); parent::__construct($factoryElement, $factoryCollection, $escaper, $data, $secureRenderer, $random); $this->setType('select'); $this->setExtType('combobox'); $this->_prepareOptions(); $this->secureRenderer = $secureRenderer; $this->random = $random; } /** * Get the element Html. * * @return string */ public function getElementHtml() { $this->addClass('select admin__control-select'); $html = ''; if ($this->getBeforeElementHtml()) { $html .= '<label class="addbefore" for="' . $this->getHtmlId() . '">' . $this->getBeforeElementHtml() . '</label>'; } $html .= '<select id="' . $this->getHtmlId() . '" name="' . $this->getName() . '" ' . $this->serialize( $this->getHtmlAttributes() ) . $this->_getUiId() . '>' . "\n"; $value = $this->getValue(); if (!is_array($value)) { $value = [$value]; } if ($values = $this->getValues()) { foreach ($values as $key => $option) { if (!is_array($option)) { $html .= $this->_optionToHtml(['value' => $key, 'label' => $option], $value); } elseif (is_array($option['value'])) { $html .= '<optgroup label="' . $option['label'] . '">' . "\n"; foreach ($option['value'] as $groupItem) { $html .= $this->_optionToHtml($groupItem, $value); } $html .= '</optgroup>' . "\n"; } else { $html .= $this->_optionToHtml($option, $value); } } } $html .= '</select>' . "\n"; if ($this->getAfterElementHtml()) { $html .= '<label class="addafter" for="' . $this->getHtmlId() . '">' . "\n{$this->getAfterElementHtml()}\n" . '</label>' . "\n"; } return $html; } /** * Format an option as Html * * @param array $option * @param array $selected * @return string */ protected function _optionToHtml($option, $selected) { if (is_array($option['value'])) { $html = '<optgroup label="' . $option['label'] . '">' . "\n"; foreach ($option['value'] as $groupItem) { $html .= $this->_optionToHtml($groupItem, $selected); } $html .= '</optgroup>' . "\n"; } else { $optionId = 'optId' .$this->random->getRandomString(8); $html = '<option value="' . $this->_escape($option['value']) . '" id="' .$optionId .'" '; $html .= isset($option['title']) ? 'title="' . $this->_escape($option['title']) . '"' : ''; if (in_array($option['value'], $selected)) { $html .= ' selected="selected"'; } $html .= '>' . $this->_escape($option['label']) . '</option>' . "\n"; if (!empty($option['style'])) { $html .= $this->secureRenderer->renderStyleAsTag($option['style'], "#$optionId"); } } return $html; } /** * Prepare options. * * @return void */ protected function _prepareOptions() { $values = $this->getValues(); if (empty($values)) { $options = $this->getOptions(); if (is_array($options)) { $values = []; foreach ($options as $value => $label) { $values[] = ['value' => $value, 'label' => $label]; } } elseif (is_string($options)) { $values = [['value' => $options, 'label' => $options]]; } $this->setValues($values); } } /** * Get the Html attributes. * * @return string[] */ public function getHtmlAttributes() { return [ 'title', 'class', 'style', 'onclick', 'onchange', 'disabled', 'readonly', 'tabindex', 'data-form-part', 'data-role', 'data-action' ]; } }