function elements_table_process in Elements 7
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.
1 string reference to 'elements_table_process'
- elements_element_info in ./
elements.module - Implements hook_element_info().
File
- ./
elements.module, line 389
Code
function elements_table_process($element, &$form_state) {
if ($element['#tableselect']) {
if ($element['#multiple']) {
$value = is_array($element['#value']) ? $element['#value'] : array();
}
else {
$element['#js_select'] = FALSE;
}
// Add a "Select all" checkbox column to the header.
// @todo D8: Rename into #select_all?
if ($element['#js_select']) {
$element['#attached']['js'][] = 'misc/tableselect.js';
array_unshift($element['#header'], array(
'class' => array(
'select-all',
),
));
}
else {
array_unshift($element['#header'], '');
}
if (!isset($element['#default_value']) || $element['#default_value'] === 0) {
$element['#default_value'] = array();
}
// Create a checkbox or radio for each row in a way that the value of the
// tableselect element behaves as if it had been of #type checkboxes or
// radios.
foreach (element_children($element) as $key) {
// Do not overwrite manually created children.
if (!isset($element[$key]['select'])) {
// Determine option label; either an assumed 'title' column, or the
// first available column containing a #title or #markup.
// @todo Consider to add an optional $element[$key]['#title_key']
// defaulting to 'title'?
$title = '';
if (!empty($element[$key]['title']['#title'])) {
$title = $element[$key]['title']['#title'];
}
else {
foreach (element_children($element[$key]) as $column) {
if (isset($element[$key][$column]['#title'])) {
$title = $element[$key][$column]['#title'];
break;
}
if (isset($element[$key][$column]['#markup'])) {
$title = $element[$key][$column]['#markup'];
break;
}
}
}
if ($title !== '') {
$title = t('Update !title', array(
'!title' => $title,
));
}
// Prepend the select column to existing columns.
$element[$key] = array(
'select' => array(),
) + $element[$key];
$element[$key]['select'] += array(
'#type' => $element['#multiple'] ? 'checkbox' : 'radio',
'#title' => $title,
'#title_display' => 'invisible',
// @todo If rows happen to use numeric indexes instead of string keys,
// this results in a first row with $key === 0, which is always FALSE.
'#return_value' => $key,
'#attributes' => $element['#attributes'],
);
$element_parents = array_merge($element['#parents'], array(
$key,
));
if ($element['#multiple']) {
$element[$key]['select']['#default_value'] = isset($value[$key]) ? $key : NULL;
$element[$key]['select']['#parents'] = $element_parents;
}
else {
$element[$key]['select']['#default_value'] = $element['#default_value'] == $key ? $key : NULL;
$element[$key]['select']['#parents'] = $element['#parents'];
$element[$key]['select']['#id'] = drupal_html_id('edit-' . implode('-', $element_parents));
}
}
}
}
return $element;
}