/** * Renders a raw fieldset of a F0FForm and returns the corresponding HTML * * @param \stdClass &$fieldset The fieldset to render * @param Form &$form The form to render * @param DataModel $model The model providing our data * @param string $formType The form type e.g. 'edit' or 'read' * @param boolean $showHeader Should I render the fieldset's header? * @param string $innerHtml 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) { $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); /** * The following code is backwards incompatible. Most forms don't require a description in their form * fields. Having to use emptydescription="1" on each one of them is an overkill. Removed. */ /* $emptydescription = $form->getFieldAttribute($field->fieldname, 'emptydescription', false, $field->group); if (empty($description) && !$emptydescription) { $description = strtoupper($input->get('option') . '_' . $model->getName() . '_' . $field->id . '_DESC'); } */ // Do we have field "prepend" and "append" text? $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; }