Field.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Config\Block\System\Config\Form;
  7. /**
  8. * Render field html element in Stores Configuration
  9. *
  10. * @api
  11. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  12. * @SuppressWarnings(PHPMD.NumberOfChildren)
  13. * @since 100.0.2
  14. */
  15. class Field extends \Magento\Backend\Block\Template implements
  16. \Magento\Framework\Data\Form\Element\Renderer\RendererInterface
  17. {
  18. /**
  19. * Retrieve element HTML markup
  20. *
  21. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  22. * @return string
  23. */
  24. protected function _getElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
  25. {
  26. return $element->getElementHtml();
  27. }
  28. /**
  29. * Retrieve HTML markup for given form element
  30. *
  31. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  32. * @return string
  33. */
  34. public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element)
  35. {
  36. $isCheckboxRequired = $this->_isInheritCheckboxRequired($element);
  37. // Disable element if value is inherited from other scope. Flag has to be set before the value is rendered.
  38. if ($element->getInherit() == 1 && $isCheckboxRequired) {
  39. $element->setDisabled(true);
  40. }
  41. $html = '<td class="label"><label for="' .
  42. $element->getHtmlId() . '"><span' .
  43. $this->_renderScopeLabel($element) . '>' .
  44. $element->getLabel() .
  45. '</span></label></td>';
  46. $html .= $this->_renderValue($element);
  47. if ($isCheckboxRequired) {
  48. $html .= $this->_renderInheritCheckbox($element);
  49. }
  50. $html .= $this->_renderHint($element);
  51. return $this->_decorateRowHtml($element, $html);
  52. }
  53. /**
  54. * Render element value
  55. *
  56. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  57. * @return string
  58. */
  59. protected function _renderValue(\Magento\Framework\Data\Form\Element\AbstractElement $element)
  60. {
  61. if ($element->getTooltip()) {
  62. $html = '<td class="value with-tooltip">';
  63. $html .= $this->_getElementHtml($element);
  64. $html .= '<div class="tooltip"><span class="help"><span></span></span>';
  65. $html .= '<div class="tooltip-content">' . $element->getTooltip() . '</div></div>';
  66. } else {
  67. $html = '<td class="value">';
  68. $html .= $this->_getElementHtml($element);
  69. }
  70. if ($element->getComment()) {
  71. $html .= '<p class="note"><span>' . $element->getComment() . '</span></p>';
  72. }
  73. $html .= '</td>';
  74. return $html;
  75. }
  76. /**
  77. * Render inheritance checkbox (Use Default or Use Website)
  78. *
  79. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  80. * @return string
  81. */
  82. protected function _renderInheritCheckbox(\Magento\Framework\Data\Form\Element\AbstractElement $element)
  83. {
  84. $htmlId = $element->getHtmlId();
  85. $namePrefix = preg_replace('#\[value\](\[\])?$#', '', $element->getName());
  86. $checkedHtml = $element->getInherit() == 1 ? 'checked="checked"' : '';
  87. $disabled = $element->getIsDisableInheritance() == true ? ' disabled="disabled"' : '';
  88. $html = '<td class="use-default">';
  89. $html .= '<input id="' .
  90. $htmlId .
  91. '_inherit" name="' .
  92. $namePrefix .
  93. '[inherit]" type="checkbox" value="1"' .
  94. ' class="checkbox config-inherit" ' .
  95. $checkedHtml . $disabled .
  96. ' onclick="toggleValueElements(this, Element.previous(this.parentNode))" /> ';
  97. $html .= '<label for="' . $htmlId . '_inherit" class="inherit">' . $this->_getInheritCheckboxLabel(
  98. $element
  99. ) . '</label>';
  100. $html .= '</td>';
  101. return $html;
  102. }
  103. /**
  104. * Check if inheritance checkbox has to be rendered
  105. *
  106. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  107. * @return bool
  108. */
  109. protected function _isInheritCheckboxRequired(\Magento\Framework\Data\Form\Element\AbstractElement $element)
  110. {
  111. return $element->getCanUseWebsiteValue()
  112. || $element->getCanUseDefaultValue()
  113. || $element->getCanRestoreToDefault();
  114. }
  115. /**
  116. * Retrieve label for the inheritance checkbox
  117. *
  118. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  119. * @return string
  120. */
  121. protected function _getInheritCheckboxLabel(\Magento\Framework\Data\Form\Element\AbstractElement $element)
  122. {
  123. $checkboxLabel = __('Use system value');
  124. if ($element->getCanUseDefaultValue()) {
  125. $checkboxLabel = __('Use Default');
  126. }
  127. if ($element->getCanUseWebsiteValue()) {
  128. $checkboxLabel = __('Use Website');
  129. }
  130. return $checkboxLabel;
  131. }
  132. /**
  133. * Render scope label
  134. *
  135. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  136. * @return string
  137. */
  138. protected function _renderScopeLabel(\Magento\Framework\Data\Form\Element\AbstractElement $element)
  139. {
  140. $scopeString = '';
  141. if ($element->getScope() && false == $this->_storeManager->isSingleStoreMode()) {
  142. $scopeString .= ' data-config-scope="' . $element->getScopeLabel() . '"';
  143. }
  144. return $scopeString;
  145. }
  146. /**
  147. * Render field hint
  148. *
  149. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  150. * @return string
  151. */
  152. protected function _renderHint(\Magento\Framework\Data\Form\Element\AbstractElement $element)
  153. {
  154. $html = '<td class="">';
  155. if ($element->getHint()) {
  156. $html .= '<div class="hint"><div style="display: none;">' . $element->getHint() . '</div></div>';
  157. }
  158. $html .= '</td>';
  159. return $html;
  160. }
  161. /**
  162. * Decorate field row html
  163. *
  164. * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
  165. * @param string $html
  166. * @return string
  167. */
  168. protected function _decorateRowHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element, $html)
  169. {
  170. return '<tr id="row_' . $element->getHtmlId() . '">' . $html . '</tr>';
  171. }
  172. }