_jsHelper = $jsHelper; $this->_authSession = $authSession; parent::__construct($context, $data); } /** * Render fieldset html * * @param AbstractElement $element * @return string */ public function render(AbstractElement $element) { $this->setElement($element); $header = $this->_getHeaderHtml($element); $elements = $this->_getChildrenElementsHtml($element); $footer = $this->_getFooterHtml($element); return $header . $elements . $footer; } /** * @param AbstractElement $element * @return string * @since 100.1.0 */ protected function _getChildrenElementsHtml(AbstractElement $element) { $elements = ''; foreach ($element->getElements() as $field) { if ($field instanceof \Magento\Framework\Data\Form\Element\Fieldset) { $elements .= '' . '' . $field->toHtml() . ''; } else { $elements .= $field->toHtml(); } } return $elements; } /** * Return header html for fieldset * * @param AbstractElement $element * @return string */ protected function _getHeaderHtml($element) { if ($element->getIsNested()) { $html = '
'; } else { $html = '
'; } $html .= '
' . ''; $html .= $this->_getHeaderTitleHtml($element); $html .= '
'; $html .= ''; $html .= '
'; $html .= '' . $element->getLegend() . ''; $html .= $this->_getHeaderCommentHtml($element); // field label column $html .= ''; if ($this->getRequest()->getParam('website') || $this->getRequest()->getParam('store')) { $html .= ''; } $html .= ''; return $html; } /** * Get frontend class * * @param AbstractElement $element * @return string */ protected function _getFrontendClass($element) { $group = $element->getGroup(); $cssClass = isset($group['fieldset_css']) ? $group['fieldset_css'] : ''; return 'section-config' . (empty($cssClass) ? '' : ' ' . $cssClass); } /** * Return header title part of html for fieldset * * @param AbstractElement $element * @return string */ protected function _getHeaderTitleHtml($element) { return '' . $element->getLegend() . ''; } /** * Return header comment part of html for fieldset * * @param AbstractElement $element * @return string */ protected function _getHeaderCommentHtml($element) { return $element->getComment() ? '
' . $element->getComment() . '
' : ''; } /** * Return full css class name for form fieldset * * @return string */ protected function _getFieldsetCss() { /** @var \Magento\Config\Model\Config\Structure\Element\Group $group */ $group = $this->getGroup(); $configCss = $group->getFieldsetCss(); return 'config admin__collapsible-block' . ($configCss ? ' ' . $configCss : ''); } /** * Return footer html for fieldset * Add extra tooltip comments to elements * * @param AbstractElement $element * @return string */ protected function _getFooterHtml($element) { $html = '
'; foreach ($element->getElements() as $field) { if ($field->getTooltip()) { $html .= sprintf( '', $field->getId(), $field->getTooltip() ); } } $html .= '
' . $this->_getExtraJs($element); if ($element->getIsNested()) { $html .= ''; } else { $html .= '
'; } return $html; } /** * Return js code for fieldset: * - observe fieldset rows; * - apply collapse; * * @param AbstractElement $element * @return string */ protected function _getExtraJs($element) { $htmlId = $element->getHtmlId(); $output = "require(['prototype'], function(){Fieldset.applyCollapse('{$htmlId}');});"; return $this->_jsHelper->getScript($output); } /** * Collapsed or expanded fieldset when page loaded? * * @param AbstractElement $element * @return bool */ protected function _isCollapseState($element) { if ($element->getExpanded() || ($element->getForm() && $element->getForm()->getElements()->count() === 1) ) { return true; } $extra = $this->_authSession->getUser()->getExtra(); if (isset($extra['configState'][$element->getId()])) { return $extra['configState'][$element->getId()]; } return $this->isCollapsedDefault; } }