function msnf_field_ui_overview_form_alter in Multistep Nodeform 7
Function to alter the fields overview screen.
1 call to msnf_field_ui_overview_form_alter()
- msnf_form_field_ui_field_overview_form_alter in ./
msnf.module - Implements hook_form_FORM_ID_alter().
File
- includes/
msnf.field_ui.inc, line 37 - msnf.field_ui.inc is a file that contains most functions needed on the Fields UI Manage forms (display and fields).
Code
function msnf_field_ui_overview_form_alter(&$form, &$form_state) {
// Only start altering the form if we need to.
if (!isset($form['#entity_type']) || $form['#entity_type'] != 'node' || empty($form['#fields']) && empty($form['#extra'])) {
return;
}
// Get form params.
$params = msnf_field_ui_form_params($form);
// Add some things to be able to preserve synced usage of field_ui.
// This key is used to store the current updated field.
$form_state += array(
'formatter_settings_edit' => NULL,
);
// Add AJAX wrapper.
$form['fields']['#prefix'] = '<div id="field-display-overview-wrapper">';
$form['fields']['#suffix'] = '</div>';
$form['#steps'] = array_keys($params->steps);
$table =& $form['fields'];
// Add a region for 'add_new' rows, but only when fields are available and
// thus regions.
if (isset($table['#regions'])) {
$table['#regions'] += array(
'add_new' => array(
'title' => ' ',
),
);
}
// Extend available parenting options.
foreach ($params->steps as $name => $step) {
$table['#parent_options'][$name] = $step->label;
}
$table['#parent_options']['_add_new_step'] = t('Add new step');
// Update existing rows accordingly to the parents.
foreach (element_children($table) as $name) {
$table[$name]['parent_wrapper']['parent']['#options'] = $table['#parent_options'];
// Inherit the value of the parent when default value is empty.
if (empty($table[$name]['parent_wrapper']['parent']['#default_value'])) {
$table[$name]['parent_wrapper']['parent']['#default_value'] = isset($params->parents[$name]) ? $params->parents[$name] : '';
}
}
// Get formatter options.
$formatter_options = msnf_field_formatter_options();
$refresh_rows = isset($form_state['values']['refresh_rows']) ? $form_state['values']['refresh_rows'] : (isset($form_state['input']['refresh_rows']) ? $form_state['input']['refresh_rows'] : NULL);
// Create the step rows and check actions.
foreach (array_keys($params->steps) as $name) {
// Get step either from form state or params.
if (isset($form_state['msnf_step'][$name])) {
$step =& $form_state['msnf_step'][$name];
}
else {
$step =& $params->steps[$name];
}
// Check the currently selected formatter, and merge persisted values for
// formatter settings for the step.
// This needs to be done first, so all fields are updated before creating
// form elements.
if (isset($refresh_rows) && $refresh_rows == $name) {
$settings = isset($form_state['values']['fields'][$name]) ? $form_state['values']['fields'][$name] : (isset($form_state['input']['fields'][$name]) ? $form_state['input']['fields'][$name] : NULL);
if (array_key_exists('settings_edit', $settings)) {
$step = $form_state['msnf_step'][$name];
}
msnf_formatter_row_update($step, $settings);
}
// Save the step when the configuration is submitted.
if (!empty($form_state['values'][$name . '_formatter_settings_update'])) {
msnf_formatter_settings_update($step, $form_state['values']['fields'][$name]);
}
// After all updates are finished, let the form_state know.
$form_state['msnf_step'][$name] = $step;
// Get the settings form.
$settings = msnf_format_settings_form($step);
$id = strtr($name, '_', '-');
$js_rows_data[$id] = array(
'type' => 'group',
'name' => $name,
);
// A group cannot be selected as its own parent.
$parent_options = $table['#parent_options'];
unset($parent_options[$name]);
$table[$name] = array(
'#attributes' => array(
'class' => array(
'draggable',
'msnf-step',
),
'id' => $id,
),
'#row_type' => 'formstep',
'#region_callback' => $params->region_callback,
'#js_settings' => array(
'rowHandler' => 'group',
),
'human_name' => array(
'#markup' => isset($step->label) ? check_plain(t($step->label)) : '',
'#prefix' => '<span class="step-label">',
'#suffix' => '</span>',
),
'weight' => array(
'#type' => 'textfield',
'#default_value' => $step->weight,
'#size' => 3,
'#attributes' => array(
'class' => array(
'field-weight',
),
),
),
'parent_wrapper' => array(
'parent' => array(
'#type' => 'select',
'#options' => $parent_options,
'#empty_value' => '',
'#default_value' => isset($params->parents[$name]) ? $params->parents[$name] : '',
'#attributes' => array(
'class' => array(
'field-parent',
),
),
'#parents' => array(
'fields',
$name,
'parent',
),
),
'hidden_name' => array(
'#type' => 'hidden',
'#default_value' => $name,
'#attributes' => array(
'class' => array(
'field-name',
),
),
),
),
);
$table[$name] += array(
'step_name' => array(
'#markup' => check_plain($name),
),
'format' => array(
'type' => array(
'#type' => 'select',
'#options' => $formatter_options,
'#default_value' => $step->format_type,
'#attributes' => array(
'class' => array(
'msnf-step-type',
),
),
),
),
);
$base_button = array(
'#submit' => array(
'field_ui_display_overview_multistep_submit',
),
'#ajax' => array(
'callback' => 'field_ui_display_overview_multistep_js',
'wrapper' => 'field-display-overview-wrapper',
'effect' => 'fade',
),
'#field_name' => $name,
);
if ($form_state['formatter_settings_edit'] == $name) {
$table[$name]['format']['#cell_attributes'] = array(
'colspan' => 3,
);
$table[$name]['format']['format_settings'] = array(
'#type' => 'container',
'#attributes' => array(
'class' => array(
'field-formatter-settings-edit-form',
),
),
'#parents' => array(
'fields',
$name,
'format_settings',
),
'#weight' => -5,
'label' => array(
'#markup' => t('Step format:') . ' <span class="formatter-name">' . $step->format_type . '</span>',
),
// Create a settings form where hooks can pick in.
'settings' => $settings,
'actions' => array(
'#type' => 'actions',
'save_settings' => $base_button + array(
'#type' => 'submit',
'#name' => $name . '_formatter_settings_update',
'#value' => t('Update'),
'#op' => 'update',
),
'cancel_settings' => $base_button + array(
'#type' => 'submit',
'#name' => $name . '_formatter_settings_cancel',
'#value' => t('Cancel'),
'#op' => 'cancel',
// Do not check errors for the 'Cancel' button.
'#limit_validation_errors' => array(),
),
),
);
$table[$name]['#attributes']['class'][] = 'field-formatter-settings-editing';
$table[$name]['format']['type']['#attributes']['class'] = array(
'element-invisible',
);
}
else {
// After saving, the settings are updated here aswell. First we create
// the element for the table cell.
$table[$name]['settings_summary'] = array(
'#markup' => '',
);
if (!empty($step->format_settings)) {
$table[$name]['settings_summary'] = msnf_format_settings_summary($name, $step);
}
// Add the configure button.
$table[$name]['settings_edit'] = $base_button + array(
'#type' => 'image_button',
'#name' => $name . '_step_settings_edit',
'#src' => 'misc/configure.png',
'#attributes' => array(
'class' => array(
'field-formatter-settings-edit',
),
'alt' => t('Edit'),
),
'#op' => 'edit',
// Do not check errors for the 'Edit' button.
'#limit_validation_errors' => array(),
'#prefix' => '<div class="field-formatter-settings-edit-wrapper">',
'#suffix' => '</div>',
);
}
$table[$name] += array(
'delete' => array(
'#markup' => l(t('delete'), $params->admin_path . '/steps/' . $name . '/delete/form'),
),
);
}
// Additional row: add new step.
$parent_options = $table['#parent_options'];
unset($parent_options['_add_new_step']);
$table['_add_new_step'] = msnf_add_row('_add_new_step', $parent_options, $params);
$table['_add_new_step'] += array(
'format' => array(
'type' => array(
'#type' => 'select',
'#options' => $formatter_options,
'#default_value' => 'default',
),
),
'settings_summary' => array(),
'settings_edit' => array(),
);
// @see field_ui.admin.inc
$form['refresh_rows'] = array(
'#type' => 'hidden',
);
$form['refresh'] = array(
'#type' => 'submit',
'#value' => t('Refresh'),
'#op' => 'refresh_table',
'#submit' => array(
'field_ui_display_overview_multistep_submit',
),
'#ajax' => array(
'callback' => 'field_ui_display_overview_multistep_js',
'wrapper' => 'field-display-overview-wrapper',
'effect' => 'fade',
// The button stays hidden, so we hide the AJAX spinner too. Ad-hoc
// spinners will be added manually by the client-side script.
'progress' => 'none',
),
);
$form['#attached']['css'][] = drupal_get_path('module', 'msnf') . '/theme/msnf.field_ui.css';
$form['#attached']['js'][] = drupal_get_path('module', 'msnf') . '/js/msnf.field_ui.js';
$form['#validate'][] = 'msnf_field_overview_validate';
$form['#submit'][] = 'msnf_field_overview_submit';
}