function flexiform_conditional_fields_flexiform_element_configure_form in Flexiform 7
Add the conditional fields form.
1 call to flexiform_conditional_fields_flexiform_element_configure_form()
- flexiform_conditional_fields_form_flexiform_field_configure_form_alter in flexiform_conditional_fields/
flexiform_conditional_fields.module - Alter the configuration form for flexiform elements.
File
- flexiform_conditional_fields/
flexiform_conditional_fields.admin.inc, line 10 - Admin UI for flexiform_conditional_fields.
Code
function flexiform_conditional_fields_flexiform_element_configure_form($form, &$form_state, $complete_form) {
$element = $complete_form['#flexiform_element'];
$flexiform = $complete_form['#flexiform'];
$settings = $element
->getSettings();
$dependent = $element_namespace = $element
->getElementNamespace();
$dependees = !empty($settings['conditional_fields']) ? $settings['conditional_fields'] : array();
$form['table'] = array(
'#theme' => 'table',
'#header' => array(
t('Dependees'),
array(
'data' => t('Description'),
'colspan' => 2,
),
array(
'data' => t('Operations'),
'colspan' => 2,
),
),
'#rows' => array(),
'#attributes' => array(
'class' => array(
'conditional-fields-overview',
),
),
'dependencies' => array(),
);
$form['table']['#attached']['css'][] = drupal_get_path('module', 'conditional_fields') . '/conditional_fields.css';
if (!empty($dependees)) {
$destination = drupal_get_destination();
$grouping_count = array();
// Enable row grouping by operator.
$first_row = $show_AND = $show_OR = $show_XOR = TRUE;
if (!isset($grouping_count[$dependent])) {
$grouping_count[$dependent] = array(
'AND' => 0,
'OR' => 0,
'XOR' => 0,
);
foreach ($dependees as $options) {
$grouping_count[$dependent][$options['grouping']]++;
}
}
foreach ($dependees as $dependency_key => $options) {
list($dependee) = explode('|', $dependency_key);
if (empty($flexiform->elements[$dependee])) {
unset($flexiform->elements[$element_namespace]['conditional_fields'][$dependency_key]);
unset($dependees[$dependency_key]);
continue;
}
$form['table'][$dependency_key] = array();
$dependee_count = count($dependees);
$dependee_element = FlexiformElement::getElement($flexiform, $dependee);
$row = array(
'dependee' => array(
'#markup' => check_plain($dependee_element
->label() . ' (' . $dependee . ')'),
),
);
// To avoid clutter, collect information about groupings so we can show each
// operator once per dependent.
if ($dependee_count > 1) {
if (${'show_' . $options['grouping']}) {
$row['group'] = array(
'#markup' => $options['grouping'],
'#rowspan' => $grouping_count[$dependent][$options['grouping']],
);
${'show_' . $options['grouping']} = FALSE;
}
$row['description']['#colspan'] = 1;
}
else {
$row['description']['#colspan'] = 2;
}
$row['description']['#markup'] = conditional_fields_dependency_description($dependee_element
->label(), $element
->label(), $options);
$row['edit'] = array(
'#type' => 'link',
'#title' => t('edit'),
'#href' => 'admin/structure/flexiforms/manage/' . $flexiform->form . '/form-fields/' . $element_namespace . '/conditional-fields/' . $dependency_key . '/edit',
'#options' => array(
'query' => $destination,
'attributes' => array(
'title' => t('Edit dependency settings.'),
),
),
'#query' => drupal_get_destination(),
);
$row['delete'] = array(
'#type' => 'link',
'#title' => t('delete'),
'#href' => 'admin/structure/flexiforms/manage/' . $flexiform->form . '/form-fields/' . $element_namespace . '/conditional-fields/' . $dependency_key . '/delete',
'#options' => array(
'query' => $destination,
'attributes' => array(
'title' => t('Delete dependency.'),
),
),
);
if (!empty($row['group'])) {
$form['table'][$dependency_key] = array(
'dependee' => &$row['dependee'],
'group' => &$row['group'],
'description' => &$row['description'],
'edit' => &$row['edit'],
'delete' => &$row['delete'],
);
$form['table']['#rows'][$dependency_key] = array(
'dependee' => array(
'data' => &$row['dependee'],
),
'group' => array(
'data' => &$row['group'],
),
'description' => array(
'data' => &$row['description'],
'colspan' => $row['description']['#colspan'],
),
'edit' => array(
'data' => &$row['edit'],
),
'delete' => array(
'data' => &$row['delete'],
),
);
}
else {
$form['table'][$dependency_key] = array(
'dependee' => &$row['dependee'],
'description' => &$row['description'],
'edit' => &$row['edit'],
'delete' => &$row['delete'],
);
$form['table']['#rows'][$dependency_key] = array(
'dependee' => array(
'data' => &$row['dependee'],
),
'description' => array(
'data' => &$row['description'],
'colspan' => $row['description']['#colspan'],
),
'edit' => array(
'data' => &$row['edit'],
),
'delete' => array(
'data' => &$row['delete'],
),
);
}
unset($row);
}
}
// Build a list of fields.
$fields = array();
foreach ($flexiform->elements as $namespace => $settings) {
$fields[$namespace] = FlexiformElement::getElement($flexiform, $namespace)
->label();
}
// Build list of states.
$states = array_map('drupal_strtolower', conditional_fields_states());
// Build list of conditions.
foreach (conditional_fields_conditions() as $condition => $label) {
$conditions[$condition] = $condition == 'value' ? t('has value...') : t('is !label', array(
'!label' => drupal_strtolower($label),
));
}
// Add new dependency row.
$form_row = array(
'dependee' => array(
'#type' => 'select',
'#title' => t('Dependee'),
'#title_display' => 'invisible',
'#description' => t('Dependee'),
'#options' => $fields,
'#prefix' => '<div class="add-new-placeholder"> </div>',
),
'state' => array(
'#type' => 'select',
'#title' => t('State'),
'#title_display' => 'invisible',
'#options' => $states,
'#default_value' => 'visible',
'#prefix' => t('This element is') . ' <span class="description-select">',
'#suffix' => '</span> ' . t('when the dependee'),
),
'condition' => array(
'#type' => 'select',
'#title' => t('Condition'),
'#title_display' => 'invisible',
'#options' => $conditions,
'#default_value' => 'value',
'#prefix' => ' <span class="description-select">',
'#suffix' => '</span>',
),
'actions' => array(
'submit' => array(
'#type' => 'submit',
'#value' => t('Add dependency'),
'#submit' => array(
'flexiform_conditional_fields_flexiform_element_configure_form_submit',
),
),
),
);
$form['table']['add_new_dependency'] = array(
'dependee' => &$form_row['dependee'],
'state' => &$form_row['state'],
'condition' => &$form_row['condition'],
'actions' => &$form_row['actions'],
);
$form['table']['#rows']['add_new_dependency'] = array(
'dependee' => array(
'data' => &$form_row['dependee'],
),
'state' => array(
'data' => &$form_row['state'],
),
'condition' => array(
'data' => &$form_row['condition'],
),
'actions' => array(
'data' => &$form_row['actions'],
),
);
return $form;
}