* @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; use Joomla\CMS\Factory; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\Layout\LayoutHelper; $app = Factory::getApplication(); $form = $displayData->getForm(); $fieldSets = $form->getFieldsets(); $helper = $displayData->get('useCoreUI', false) ? 'uitab' : 'bootstrap'; if (empty($fieldSets)) { return; } $ignoreFieldsets = $displayData->get('ignore_fieldsets') ?: array(); $outputFieldsets = $displayData->get('output_fieldsets') ?: array(); $ignoreFieldsetFields = $displayData->get('ignore_fieldset_fields') ?: array(); $ignoreFields = $displayData->get('ignore_fields') ?: array(); $extraFields = $displayData->get('extra_fields') ?: array(); $tabName = $displayData->get('tab_name') ?: 'myTab'; // These are required to preserve data on save when fields are not displayed. $hiddenFieldsets = $displayData->get('hiddenFieldsets') ?: array(); // These are required to configure showing and hiding fields in the editor. $configFieldsets = $displayData->get('configFieldsets') ?: array(); // Handle the hidden fieldsets when show_options is set false if (!$displayData->get('show_options', 1)) { // The HTML buffer $html = array(); // Loop over the fieldsets foreach ($fieldSets as $name => $fieldSet) { // Check if the fieldset should be ignored if (in_array($name, $ignoreFieldsets, true)) { continue; } // If it is a hidden fieldset, render the inputs if (in_array($name, $hiddenFieldsets)) { // Loop over the fields foreach ($form->getFieldset($name) as $field) { // Add only the input on the buffer $html[] = $field->input; } // Make sure the fieldset is not rendered twice $ignoreFieldsets[] = $name; } // Check if it is the correct fieldset to ignore if (strpos($name, 'basic') === 0) { // Ignore only the fieldsets which are defined by the options not the custom fields ones $ignoreFieldsets[] = $name; } } // Echo the hidden fieldsets echo implode('', $html); } $opentab = false; $xml = $form->getXml(); // Loop again over the fieldsets foreach ($fieldSets as $name => $fieldSet) { // Ensure any fieldsets we don't want to show are skipped (including repeating formfield fieldsets) if ( (isset($fieldSet->repeat) && $fieldSet->repeat === true) || in_array($name, $ignoreFieldsets) || (!empty($configFieldsets) && in_array($name, $configFieldsets, true)) || (!empty($hiddenFieldsets) && in_array($name, $hiddenFieldsets, true)) ) { continue; } // Determine the label if (!empty($fieldSet->label)) { $label = Text::_($fieldSet->label); } else { $label = strtoupper('JGLOBAL_FIELDSET_' . $name); if (Text::_($label) === $label) { $label = strtoupper($app->input->get('option') . '_' . $name . '_FIELDSET_LABEL'); } $label = Text::_($label); } $hasChildren = $xml->xpath('//fieldset[@name="' . $name . '"]//fieldset[not(ancestor::field/form/*)]'); $hasParent = $xml->xpath('//fieldset//fieldset[@name="' . $name . '"]'); $isGrandchild = $xml->xpath('//fieldset//fieldset//fieldset[@name="' . $name . '"]'); if (!$isGrandchild && $hasParent) { echo '
'; echo '' . $label . ''; // Include the description when available if (!empty($fieldSet->description)) { echo '
'; echo '' . Text::_('INFO') . ' '; echo Text::_($fieldSet->description); echo '
'; } echo '
'; } elseif (!$hasParent) { // Tabs if ($opentab) { if ($opentab > 1) { echo '
'; echo '
'; } // End previous tab echo HTMLHelper::_($helper . '.endTab'); } // Start the tab echo HTMLHelper::_($helper . '.addTab', $tabName, 'attrib-' . $name, $label); $opentab = 1; // Directly add a fieldset if we have no children if (!$hasChildren) { echo '
'; echo '' . $label . ''; // Include the description when available if (!empty($fieldSet->description)) { echo '
'; echo '' . Text::_('INFO') . ' '; echo Text::_($fieldSet->description); echo '
'; } echo '
'; $opentab = 2; } elseif (!empty($fieldSet->description)) { // Include the description when available echo '
'; echo '' . Text::_('INFO') . ' '; echo Text::_($fieldSet->description); echo '
'; } } // We're on the deepest level => output fields if (!$hasChildren) { // The name of the fieldset to render $displayData->fieldset = $name; // Force to show the options $displayData->showOptions = true; // Render the fieldset echo LayoutHelper::render('joomla.edit.fieldset', $displayData); } // Close open fieldset if (!$isGrandchild && $hasParent) { echo '
'; echo '
'; } } if ($opentab) { if ($opentab > 1) { echo ''; echo ''; } // End previous tab echo HTMLHelper::_($helper . '.endTab'); }