コード例 #1
0
ファイル: AkeebaStrapper.php プロジェクト: Joal01/fof
 /**
  * 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;
 }