You are here

function commerce_backoffice_pre_render_add_fieldset_markup in Commerce Backoffice 7

Move form elements into fieldsets for presentation purposes.

Entity forms use #tree = TRUE to keep their values in a hierarchy for easier storage. Moving the form elements into fieldsets during form building would break up that hierarchy, so it's not an option for Field API fields. Therefore, we wait until the pre_render stage, where any changes we make affect presentation only and aren't reflected in $form_state['values'].

1 string reference to 'commerce_backoffice_pre_render_add_fieldset_markup'
commerce_backoffice_product_form_alter in ./commerce_backoffice_product.module
Implements hook_form_views_form_alter().

File

./commerce_backoffice.module, line 98

Code

function commerce_backoffice_pre_render_add_fieldset_markup($form) {
  $sort = array();
  foreach (element_children($form) as $key) {
    $element = $form[$key];

    // In our form builder functions, we added an arbitrary #fieldset property
    // to any element that belongs in a fieldset. If this form element has that
    // property, move it into its fieldset.
    if (isset($element['#fieldset']) && isset($form[$element['#fieldset']])) {
      $form[$element['#fieldset']][$key] = $element;

      // Remove the original element this duplicates.
      unset($form[$key]);

      // Mark the fieldset for sorting.
      if (!in_array($key, $sort)) {
        $sort[] = $element['#fieldset'];
      }
    }
  }

  // Sort all fieldsets, so that element #weight stays respected.
  foreach ($sort as $key) {
    uasort($form[$key], 'element_sort');
  }
  return $form;
}