function flexiform_element_group_manage_form_fields_form_submit in Flexiform 7
Submit callback for element groups.
1 string reference to 'flexiform_element_group_manage_form_fields_form_submit'
- flexiform_element_group_manage_form_fields_form_alter in flexiform_element_group/
flexiform_element_group.admin.inc - Function to alter the form fields overview screen.
File
- flexiform_element_group/
flexiform_element_group.admin.inc, line 346 - Contains alterations to the flexiform admin pages for element groups.
Code
function flexiform_element_group_manage_form_fields_form_submit($form, &$form_state) {
$form_values = $form_state['values']['fields'];
$entity_type = 'flexiform';
$bundle = $form['#flexiform']->form;
$mode = 'form';
// Collect children.
$children = array_fill_keys($form['#groups'], array());
foreach ($form_values as $name => $value) {
if (!empty($value['parent'])) {
// Substitute newly added fields, in case they were dragged
// directly in a group.
if ($name == '_add_field' && isset($form_state['fields_added']['_add_field'])) {
$name = $form_state['fields_added']['_add_field'];
}
elseif ($name == '_add_form' && isset($form_state['fields_added']['_add_form'])) {
$name = $form_state['fields_added']['_add_form'];
}
$children[$value['parent']][$name] = $name;
}
}
// Prepare storage with ctools.
ctools_include('export');
// Create new group.
if (!empty($form_values['_add_new_group']['group_name'])) {
$values = $form_values['_add_new_group'];
$field_group_types = field_group_formatter_info();
$formatter = $field_group_types['form'][$values['format']['type']];
$new_group = (object) array(
'identifier' => $values['group_name'] . '|' . $entity_type . '|' . $bundle . '|' . $mode,
'group_name' => $values['group_name'],
'entity_type' => $entity_type,
'bundle' => $bundle,
'mode' => $mode,
'children' => isset($children['_add_new_group']) ? array_keys($children['_add_new_group']) : array(),
'parent_name' => $values['parent'],
'weight' => $values['weight'],
'label' => $values['label'],
'format_type' => $values['format']['type'],
'disabled' => FALSE,
);
$new_group->format_settings = array(
'formatter' => isset($formatter['default_formatter']) ? $formatter['default_formatter'] : '',
);
if (isset($formatter['instance_settings'])) {
$new_group->format_settings['instance_settings'] = $formatter['instance_settings'];
}
// Save and enable it in ctools
ctools_export_crud_save('field_group', $new_group);
ctools_export_crud_enable('field_group', $new_group->identifier);
// Store new group information for any additional submit handlers.
$form_state['groups_added']['_add_new_group'] = $new_group->group_name;
drupal_set_message(t('New group %label successfully created.', array(
'%label' => $new_group->label,
)));
// Replace the newly created group in the $children array, in case it was
// dragged directly in an existing field.
foreach (array_keys($children) as $parent) {
if (isset($children[$parent]['_add_new_group'])) {
unset($children[$parent]['_add_new_group']);
$children[$parent][$new_group->group_name] = $new_group->group_name;
}
}
}
// Update existing groups.
$groups = field_group_info_groups($entity_type, $bundle, $mode, TRUE);
foreach ($form['#groups'] as $group_name) {
$group = $groups[$group_name];
$group->label = $form_state['flexiform_element_group'][$group_name]->label;
$group->children = array_keys($children[$group_name]);
$group->parent_name = $form_values[$group_name]['parent'];
$group->weight = $form_values[$group_name]['weight'];
$group->format_type = isset($form_values[$group_name]['format']['type']) ? $form_values[$group_name]['format']['type'] : 'visible';
if (isset($form_state['flexiform_element_group'][$group_name]->format_settings)) {
$group->format_settings = $form_state['flexiform_element_group'][$group_name]->format_settings;
}
ctools_export_crud_save('field_group', $group);
}
cache_clear_all('field_groups', 'cache_field');
}