FOF30\Render\AkeebaStrapper::renderFieldset PHP Method

renderFieldset() public method

Renders a raw fieldset of a F0FForm and returns the corresponding HTML
public renderFieldset ( stdClass &$fieldset, Form &$form, DataModel $model, string $formType, boolean $showHeader = true, string &$innerHtml = null ) : string
$fieldset stdClass
$form FOF30\Form\Form
$model FOF30\Model\DataModel The model providing our data
$formType string The form type e.g. 'edit' or 'read'
$showHeader boolean Should I render the fieldset's header?
$innerHtml string Render inner tab if set
return string The HTML rendering of the fieldset
    public function renderFieldset(\stdClass &$fieldset, Form &$form, DataModel $model, $formType, $showHeader = true, &$innerHtml = null)
    {
        $html = '';
        $fields = $form->getFieldset($fieldset->name);
        if (isset($fieldset->class)) {
            $class = 'class="' . $fieldset->class . '"';
        } else {
            $class = '';
        }
        if (isset($innerHtml[$fieldset->name])) {
            $innerclass = isset($fieldset->innerclass) ? ' class="' . $fieldset->innerclass . '"' : '';
            $html .= "\t" . '<div id="' . $fieldset->name . '" ' . $class . '>' . "\n";
            $html .= "\t\t" . '<div' . $innerclass . '>' . "\n";
        } else {
            $html .= "\t" . '<div id="' . $fieldset->name . '" ' . $class . '>' . "\n";
        }
        $isTabbedFieldset = $this->isTabFieldset($fieldset);
        if (isset($fieldset->label) && !empty($fieldset->label) && !$isTabbedFieldset) {
            $html .= "\t\t" . '<h3>' . \JText::_($fieldset->label) . '</h3>' . "\n";
        }
        // Add an external view template, if specified
        $sourceTemplate = isset($fieldset->source) ? $fieldset->source : null;
        $sourceView = isset($fieldset->source_view) ? $fieldset->source_view : null;
        $sourceViewType = isset($fieldset->source_view_type) ? $fieldset->source_view_type : 'html';
        $sourceComponent = isset($fieldset->source_component) ? $fieldset->source_component : null;
        if (!empty($sourceTemplate)) {
            $sourceContainer = empty($sourceComponent) ? $this->container : Container::getInstance($sourceComponent);
            if (empty($sourceView)) {
                $viewObject = new View($sourceContainer, array('name' => 'FAKE_FORM_VIEW'));
            } else {
                $viewObject = $sourceContainer->factory->view($sourceView, $sourceViewType);
            }
            $viewObject->populateFromModel($model);
            $html .= $viewObject->loadAnyTemplate($sourceTemplate, array('model' => $model, 'form' => $form, 'fieldset' => $fieldset, 'formType' => $formType, 'innerHtml' => $innerHtml));
        }
        // Add the fieldset fields
        if (!empty($fields)) {
            foreach ($fields as $field) {
                // TODO see \JFormField::renderField
                $groupClass = $form->getFieldAttribute($field->fieldname, 'groupclass', '', $field->group);
                // Auto-generate label and description if needed
                // Field label
                $title = $form->getFieldAttribute($field->fieldname, 'label', '', $field->group);
                $emptylabel = $form->getFieldAttribute($field->fieldname, 'emptylabel', false, $field->group);
                $label_placement = $form->getFieldAttribute($field->fieldname, 'label_placement', null, $field->group);
                if (empty($title) && !$emptylabel) {
                    $model->getName();
                    $title = strtoupper($this->container->componentName . '_' . $model->getName() . '_' . $field->id . '_LABEL');
                }
                if (empty($label_placement)) {
                    $label_placement = !empty($title) ? 'left' : 'none';
                }
                // Field description
                $description = $form->getFieldAttribute($field->fieldname, 'description', '', $field->group);
                $prependText = $form->getFieldAttribute($field->fieldname, 'prepend_text', '', $field->group);
                $appendText = $form->getFieldAttribute($field->fieldname, 'append_text', '', $field->group);
                if (!empty($prependText)) {
                    $prependText = \JText::_($prependText);
                }
                if (!empty($appendText)) {
                    $appendText = \JText::_($appendText);
                }
                $inputField = '';
                if ($formType == 'read') {
                    $inputField = $field->static;
                }
                if ($formType == 'edit') {
                    $inputField = $field->input;
                }
                if ($prependText || $appendText) {
                    $wrapperClass = $prependText ? 'input-prepend' : '';
                    $wrapperClass .= $appendText ? 'input-append' : '';
                }
                $renderedLabel = !empty($title) ? $this->renderFieldsetLabel($field, $form, $title) : '';
                $renderedLabel = $label_placement == 'empty' ? '' : $renderedLabel;
                switch ($label_placement) {
                    case 'left':
                    case 'empty':
                        $html .= "\t\t\t" . '<div class="control-group ' . $groupClass . '">' . "\n";
                        $html .= "\t\t\t" . $renderedLabel;
                        $html .= "\t\t\t\t" . '<div class="controls">' . "\n";
                        break;
                    case 'top':
                        $html .= "\t\t\t" . '<div class="' . $groupClass . '">' . "\n";
                        $html .= "\t\t\t" . $renderedLabel . "<br/>\n";
                        break;
                }
                if ($prependText || $appendText) {
                    $html .= "\t\t\t\t<div class=\"{$wrapperClass}\">\n";
                }
                if ($prependText) {
                    $html .= "\t\t\t\t\t<span class=\"add-on\">{$prependText}</span>\n";
                }
                $html .= "\t\t\t\t\t" . $inputField . "\n";
                if ($appendText) {
                    $html .= "\t\t\t\t\t<span class=\"add-on\">{$appendText}</span>\n";
                }
                if ($prependText || $appendText) {
                    $html .= "\t\t\t\t</div>\n";
                }
                if (!empty($description)) {
                    $html .= "\t\t\t\t" . '<span class="help-block">';
                    $html .= \JText::_($description) . '</span>' . "\n";
                }
                switch ($label_placement) {
                    case 'left':
                    case 'empty':
                        $html .= "\t\t\t\t" . '</div>' . "\n";
                        $html .= "\t\t\t" . '</div>' . "\n";
                        break;
                    case 'top':
                        $html .= "\t\t\t" . '</div>' . "\n";
                        break;
                    case 'bottom':
                        $html .= "\t\t\t" . '<br/>' . "\n";
                        $html .= "\t\t\t" . $renderedLabel . "\n";
                        $html .= "\t\t\t" . '</div>' . "\n";
                }
            }
        }
        if (isset($innerHtml[$fieldset->name])) {
            $html .= "\t\t" . '</div>' . "\n";
            $html .= implode('', $innerHtml[$fieldset->name]) . "\n";
            $html .= "\t" . '</div>' . "\n";
        } else {
            $html .= "\t" . '</div>' . "\n";
        }
        return $html;
    }