| Current Path : /home/rtorresani/www/vendor/magento/module-config/Block/System/Config/Form/ |
| Current File : //home/rtorresani/www/vendor/magento/module-config/Block/System/Config/Form/Field.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Config\Block\System\Config\Form;
use Magento\Framework\App\ObjectManager;
use Magento\Backend\Block\Template\Context;
use Magento\Framework\View\Helper\SecureHtmlRenderer;
/**
* Render field html element in Stores Configuration
*
* @api
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @SuppressWarnings(PHPMD.NumberOfChildren)
* @since 100.0.2
*/
class Field extends \Magento\Backend\Block\Template implements
\Magento\Framework\Data\Form\Element\Renderer\RendererInterface
{
/**
* @var SecureHtmlRenderer
*/
private $secureRenderer;
/**
* @param Context $context
* @param array $data
* @param SecureHtmlRenderer|null $secureRenderer
*/
public function __construct(
Context $context,
array $data = [],
?SecureHtmlRenderer $secureRenderer = null
) {
parent::__construct($context, $data);
$this->secureRenderer = $secureRenderer ?? ObjectManager::getInstance()->get(SecureHtmlRenderer::class);
}
/**
* Retrieve element HTML markup
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
*/
protected function _getElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
return $element->getElementHtml();
}
/**
* Retrieve HTML markup for given form element
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
*/
public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
$isCheckboxRequired = $this->_isInheritCheckboxRequired($element);
// Disable element if value is inherited from other scope. Flag has to be set before the value is rendered.
if ($element->getInherit() == 1 && $isCheckboxRequired) {
$element->setDisabled(true);
}
if ($element->getIsDisableInheritance()) {
$element->setReadonly(true);
}
$html = '<td class="label"><label for="' .
$element->getHtmlId() . '"><span' .
$this->_renderScopeLabel($element) . '>' .
$element->getLabel() .
'</span></label></td>';
$html .= $this->_renderValue($element);
if ($isCheckboxRequired) {
$html .= $this->_renderInheritCheckbox($element);
}
$html .= $this->_renderHint($element);
return $this->_decorateRowHtml($element, $html);
}
/**
* Render element value
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
*/
protected function _renderValue(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
if ($element->getTooltip()) {
$html = '<td class="value with-tooltip">';
$html .= $this->_getElementHtml($element);
$html .= '<div class="tooltip"><span class="help"><span></span></span>';
$html .= '<div class="tooltip-content">' . $element->getTooltip() . '</div></div>';
} else {
$html = '<td class="value">';
$html .= $this->_getElementHtml($element);
}
if ($element->getComment()) {
$html .= '<p class="note"><span>' . $element->getComment() . '</span></p>';
}
$html .= '</td>';
return $html;
}
/**
* Render inheritance checkbox (Use Default or Use Website)
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
*/
protected function _renderInheritCheckbox(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
$htmlId = $element->getHtmlId();
$namePrefix = preg_replace('#\[value\](\[\])?$#', '', $element->getName());
$checkedHtml = $element->getInherit() == 1 ? 'checked="checked"' : '';
$disabled = $element->getIsDisableInheritance() == true ? ' disabled="disabled" readonly="1"' : '';
$html = '<td class="use-default">';
$html .= '<input id="' .
$htmlId .
'_inherit" name="' .
$namePrefix .
'[inherit]" type="checkbox" value="1"' .
' class="checkbox config-inherit" ' .
$checkedHtml . $disabled .
' />';
$html .= /* @noEscape */ $this->secureRenderer->renderEventListenerAsTag(
'onclick',
"toggleValueElements(this, Element.previous(this.parentNode))",
'input#' . $htmlId . '_inherit'
);
$html .= '<label for="' . $htmlId . '_inherit" class="inherit">' . $this->_getInheritCheckboxLabel(
$element
) . '</label>';
$html .= '</td>';
return $html;
}
/**
* Check if inheritance checkbox has to be rendered
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return bool
*/
protected function _isInheritCheckboxRequired(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
return $element->getCanUseWebsiteValue()
|| $element->getCanUseDefaultValue()
|| $element->getCanRestoreToDefault();
}
/**
* Retrieve label for the inheritance checkbox
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
*/
protected function _getInheritCheckboxLabel(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
$checkboxLabel = __('Use system value');
if ($element->getCanUseDefaultValue()) {
$checkboxLabel = __('Use Default');
}
if ($element->getCanUseWebsiteValue()) {
$checkboxLabel = __('Use Website');
}
return $checkboxLabel;
}
/**
* Render scope label
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
*/
protected function _renderScopeLabel(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
$scopeString = '';
if ($element->getScope() && false == $this->_storeManager->isSingleStoreMode()) {
$scopeString .= ' data-config-scope="' . $element->getScopeLabel() . '"';
}
return $scopeString;
}
/**
* Render field hint
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
*/
protected function _renderHint(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
$html = '<td class="">';
if ($element->getHint()) {
$html .= '<div class="hint"><div id="hint_' . $element->getHtmlId() . '">' .
$element->getHint() . '</div></div>';
$html .= /* @noEscape */ $this->secureRenderer->renderStyleAsTag(
"display: none;",
'div#hint_' . $element->getHtmlId()
);
}
$html .= '</td>';
return $html;
}
/**
* Decorate field row html
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @param string $html
* @return string
*/
protected function _decorateRowHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element, $html)
{
return '<tr id="row_' . $element->getHtmlId() . '">' . $html . '</tr>';
}
}