![]() 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/View/Element/Html/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Framework\View\Element\Html; /** * HTML select element block * * @api */ class Select extends \Magento\Framework\View\Element\AbstractBlock { /** * Options * * @var array */ protected $_options = []; /** * Get options of the element * * @return array */ public function getOptions() { return $this->_options; } /** * Set options for the HTML select * * @param array $options * @return $this */ public function setOptions($options) { $this->_options = $options; return $this; } /** * Add an option to HTML select * * @param string $value HTML value * @param string $label HTML label * @param array $params HTML attributes * @return $this */ public function addOption($value, $label, $params = []) { $this->_options[] = ['value' => $value, 'label' => $label, 'params' => $params]; return $this; } /** * Set element's HTML ID * * @param string $elementId ID * @return $this */ public function setId($elementId) { $this->setData('id', $elementId); return $this; } /** * Set element's CSS class * * @param string $class Class * @return $this */ public function setClass($class) { $this->setData('class', $class); return $this; } /** * Set element's HTML title * * @param string $title Title * @return $this */ public function setTitle($title) { $this->setData('title', $title); return $this; } /** * HTML ID of the element * * @return string */ public function getId() { return $this->getData('id'); } /** * CSS class of the element * * @return string */ public function getClass() { return $this->getData('class'); } /** * Returns HTML title of the element * * @return string */ public function getTitle() { return $this->getData('title'); } /** * Render HTML * * @return string * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function _toHtml() { if (!$this->_beforeToHtml()) { return ''; } $html = '<select name="' . $this->getName() . '" id="' . $this->getId() . '" class="' . $this->getClass() . '" title="' . $this->escapeHtml($this->getTitle()) . '" ' . $this->getExtraParams() . '>'; $values = $this->getValue(); if (!is_array($values)) { $values = (array)$values; } $isArrayOption = true; foreach ($this->getOptions() as $key => $option) { $optgroupName = ''; if ($isArrayOption && is_array($option)) { $value = $option['value']; $label = (string)$option['label']; $optgroupName = isset($option['optgroup-name']) ? $option['optgroup-name'] : $label; $params = !empty($option['params']) ? $option['params'] : []; } else { $value = (string)$key; $label = (string)$option; $isArrayOption = false; $params = []; } if (is_array($value)) { $html .= '<optgroup label="' . $this->escapeHtml($label) . '" data-optgroup-name="' . $this->escapeHtml($optgroupName) . '">'; foreach ($value as $keyGroup => $optionGroup) { if (!is_array($optionGroup)) { $optionGroup = ['value' => $keyGroup, 'label' => $optionGroup]; } $html .= $this->_optionToHtml($optionGroup, in_array($optionGroup['value'], $values)); } $html .= '</optgroup>'; } else { $html .= $this->_optionToHtml( ['value' => $value, 'label' => $label, 'params' => $params], in_array($value, $values) ); } } $html .= '</select>'; return $html; } /** * Return option HTML node * * @param array $option * @param boolean $selected * @return string */ protected function _optionToHtml($option, $selected = false) { $selectedHtml = $selected ? ' selected="selected"' : ''; if ($this->getIsRenderToJsTemplate() === true) { $selectedHtml .= ' <%= option_extra_attrs.option_' . self::calcOptionHash($option['value']) . ' %>'; } $params = ''; if (!empty($option['params']) && is_array($option['params'])) { foreach ($option['params'] as $key => $value) { if (is_array($value)) { foreach ($value as $keyMulti => $valueMulti) { $params .= sprintf(' %s="%s" ', $keyMulti, $this->escapeHtml($valueMulti)); } } else { $params .= sprintf(' %s="%s" ', $key, $this->escapeHtml($value)); } } } return sprintf( '<option value="%s"%s %s>%s</option>', $this->escapeHtml($option['value']), $selectedHtml, $params, $this->escapeHtml($option['label']) ); } /** * Alias for toHtml() * * @return string */ public function getHtml() { return $this->toHtml(); } /** * Calculate CRC32 hash for option value * * @param string $optionValue Value of the option * @return string */ public function calcOptionHash($optionValue) { return sprintf('%u', crc32($this->getName() . $this->getId() . $optionValue)); } }