function form_process_tableselect

Creates checkbox or radio elements to populate a tableselect table.

Parameters

$element: An associative array containing the properties and children of the tableselect element.

Return value

The processed element.

Related topics

1 string reference to 'form_process_tableselect'
system_element_info in modules/system/system.module
Implements hook_element_info().

File

includes/form.inc, line 3553

Code

function form_process_tableselect($element) {
    if ($element['#multiple']) {
        $value = is_array($element['#value']) ? $element['#value'] : array();
    }
    else {
        // Advanced selection behavior makes no sense for radios.
        $element['#js_select'] = FALSE;
    }
    $element['#tree'] = TRUE;
    if (count($element['#options']) > 0) {
        if (!isset($element['#default_value']) || $element['#default_value'] === 0) {
            $element['#default_value'] = array();
        }
        // Create a checkbox or radio for each item in #options in such a way that
        // the value of the tableselect element behaves as if it had been of type
        // checkboxes or radios.
        foreach ($element['#options'] as $key => $choice) {
            // Do not overwrite manually created children.
            if (!isset($element[$key])) {
                if ($element['#multiple']) {
                    $title = '';
                    if (!empty($element['#options'][$key]['title']['data']['#title'])) {
                        $title = t('Update @title', array(
                            '@title' => $element['#options'][$key]['title']['data']['#title'],
                        ));
                    }
                    $element[$key] = array(
                        '#type' => 'checkbox',
                        '#title' => $title,
                        '#title_display' => 'invisible',
                        '#return_value' => $key,
                        '#default_value' => isset($value[$key]) ? $key : NULL,
                        '#attributes' => $element['#attributes'],
                        '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL,
                    );
                }
                else {
                    // Generate the parents as the autogenerator does, so we will have a
                    // unique id for each radio button.
                    $parents_for_id = array_merge($element['#parents'], array(
                        $key,
                    ));
                    $element[$key] = array(
                        '#type' => 'radio',
                        '#title' => '',
                        '#return_value' => $key,
                        '#default_value' => $element['#default_value'] == $key ? $key : NULL,
                        '#attributes' => $element['#attributes'],
                        '#parents' => $element['#parents'],
                        '#id' => drupal_html_id('edit-' . implode('-', $parents_for_id)),
                        '#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL,
                    );
                }
                if (isset($element['#options'][$key]['#weight'])) {
                    $element[$key]['#weight'] = $element['#options'][$key]['#weight'];
                }
            }
        }
    }
    else {
        $element['#value'] = array();
    }
    return $element;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.