function flexiform_multistep_step_form in Flexiform 7
Form constructor for a specific step of a multistep flexiform.
1 string reference to 'flexiform_multistep_step_form'
- flexiform_multistep_wrapper in flexiform_multistep/
flexiform_multistep.pages.inc - Page callback for CTools Multistep Forms.
File
- flexiform_multistep/
flexiform_multistep.pages.inc, line 116 - Page callbacks for Flexiform Multistep.
Code
function flexiform_multistep_step_form($form, &$form_state, $flexiform, $base_entity) {
// Get hold of the full form.
$form = drupal_retrieve_form('flexiform__' . $flexiform->form, $form_state);
// Add the flexiform state to the object.
$form_state['object']['flexiform_state'] = $form_state['flexiform_state'];
// Clear out the standard submission buttons.
unset($form['actions']);
// Get our current group.
$form_state['step_group'] = $form_state['form_info']['forms'][$form_state['step']]['group'];
// Set up the more advanced trail.
if (!empty($form['ctools_trail'])) {
unset($form['ctools_trail']['#markup']);
$form['ctools_trail']['#theme'] = 'item_list';
$form['ctools_trail']['#type'] = 'ol';
$form['ctools_trail']['#attributes']['class'][] = 'flexiform-multistep-progress';
$form['ctools_trail']['#attributes']['class'][] = 'clearfix';
$form['ctools_trail']['#attributes']['class'][] = 'inline';
$past_current = FALSE;
foreach ($form_state['form_info']['forms'] as $step => $info) {
$item = array(
'class' => array(
$info['group']->group_name,
),
);
if (!$past_current) {
$params = ctools_wizard_get_path($form_state['form_info'], $step);
$params[] = array();
$item['class'][] = 'available';
$item['data'] = l($info['group']->label, $params[0], $params[1]);
}
else {
$item['data'] = '<span>' . $info['group']->label . '</span>';
}
if ($step == $form_state['step']) {
$item['class'][] = 'active';
$past_current = TRUE;
}
$form['ctools_trail']['#items'][$step] = $item;
}
}
// Clear out the multi step field groups and groups that are not part of this
// step.
foreach ($form['#groups'] as $name => $group) {
if ($group->format_type == 'flexiform_step') {
unset($form['#groups'][$name]);
unset($form['#fieldgroups'][$name]);
foreach ($form['#group_children'] as $child => $parent) {
if ($parent == $name) {
unset($form['#group_children'][$child]);
}
}
}
}
// Set the page title if requested.
if (!empty($form_state['step_group']->format_settings['instance_settings']['page_title'])) {
drupal_set_title($form_state['step_group']->format_settings['instance_settings']['page_title']);
}
// Hide any elements that aren't in this step.
// First, get a list of all of the children of this step group.
$step_children = flexiform_multistep_field_group_descendants($form['#groups'], $form_state['step_group']);
// Remove groups that are not a child of this step.
foreach ($form['#groups'] as $name => $group) {
if (!in_array($name, $step_children)) {
unset($form['#groups'][$name]);
unset($form['#fieldgroups'][$name]);
}
}
$old_form = $form;
foreach (element_children($form) as $key) {
// Preserve special items.
if (in_array($key, array(
'ctools_trail',
'buttons',
))) {
continue;
}
if (!in_array($key, $step_children)) {
unset($form[$key]);
}
else {
if (module_exists('flexiform_conditional_fields')) {
$el_settings = $form[$key]['#flexiform_element']
->getSettings();
if (empty($el_settings['conditional_fields'])) {
continue;
}
foreach ($el_settings['conditional_fields'] as $dependency_key => $options) {
list($dependee) = explode('|', $dependency_key);
if (in_array($dependee, $step_children)) {
// If the dependee is also on this page then we don't need to do
// anything.
continue;
}
$condition_met = FALSE;
$dependee_element = $old_form[$dependee];
if (!empty($dependee_element[$dependee_element['#language']])) {
$dependee_element = $dependee_element[$dependee_element['#language']];
}
$values = array();
if (element_children($dependee_element)) {
}
else {
$values = $dependee_element['#default_value'];
if (!is_array($values)) {
$values = array(
$dependee_element['#delta'] => $values,
);
}
foreach ($values as $delta => $value) {
if (!is_array($value)) {
$values[$delta] = array(
$dependee_element['#value_key'] => $value,
);
}
}
}
switch ($options['condition']) {
case '!empty':
$condition_met = !empty($values);
break;
case 'empty':
$condition_met = empty($values);
break;
case 'focused':
break;
case '!focused':
$condition_met = TRUE;
break;
case 'checked':
$condition_met = $dependee_element['#type'] == 'checkbox' && $dependee_element['#default_value'] == 1;
break;
case '!checked':
$condition_met = $dependee_element['#type'] == 'checkbox' && !$dependee_element['#default_value'] == 1;
break;
case 'value':
if ($values == $options['value']) {
$condition_met = TRUE;
}
break;
}
if ($condition_met) {
switch ($options['state']) {
case 'visible':
break;
case '!visible':
$form[$key]['#access'] = FALSE;
break;
case '!disabled':
$form[$key]['#disabled'] = FALSE;
break;
case 'disabled':
$form[$key]['#disabled'] = TRUE;
break;
case '!required':
$form[$key]['#required'] = TRUE;
break;
case 'required':
$form[$key]['#required'] = FALSE;
break;
}
}
else {
switch ($options['state']) {
case 'visible':
$form[$key]['#access'] = FALSE;
break;
case '!visible':
break;
case '!disabled':
$form[$key]['#disabled'] = TRUE;
break;
case 'disabled':
$form[$key]['#disabled'] = FALSE;
break;
case '!required':
$form[$key]['#required'] = TRUE;
break;
case 'required':
$form[$key]['#required'] = FALSE;
break;
}
}
}
}
}
}
return $form;
}