function fc_field_groups_fc_form_pre_render_alter in Field Complete 7
Implements hook_fc_form_pre_render_alter().
File
- fc_field_groups/
fc_field_groups.module, line 11 - Field Complete Field Groups - Provides field complete support for field groups.
Code
function fc_field_groups_fc_form_pre_render_alter(&$form, $ids) {
if (!empty($form['#entity_type']) && !fc_entity_is_enabled($form['#entity_type']) || empty($form['#field_complete']) || empty($form['#groups'])) {
// If this form contains no field complete
// fields, or any groups, do nothing.
return;
}
$settings = array();
if (!property_exists($form['#entity'], 'fc')) {
$form['#entity']->fc = fcComplete::load($form['#entity_type'], $form['#entity']);
}
$completeness = $form['#entity']->fc->completeness;
foreach ($form['#groups'] as $group_name => &$group) {
if (empty($group->children)) {
// No children in this group at all
continue;
}
// This skips groups we've already seen because we process
// them recursively, just in case we have nested groups.
$complete = _fc_field_groups_group_has_completeness($group_name, $form['#groups'], $completeness);
if ($complete === NULL) {
// We've alread processed this group (it's nested)
// or it contains no completeness fields.
continue;
}
// Split up the classes
$classes = explode(' ', $group->format_settings['instance_settings']['classes']);
// Add my classes
$classes[] = 'fc-field-group';
$classes[] = 'fc-field-group-' . ($complete ? 'complete' : 'incomplete');
// Set them back into the settings
$group->format_settings['instance_settings']['classes'] = implode(' ', $classes);
// Record the details about this group for JS settings
$settings[] = array(
'text' => $group->label,
'state' => $complete,
);
}
// Fixed for Profile2 (see https://drupal.org/node/2095277)
$bits = explode('-', $form['#id']);
$form_id = $form['#entity_type'] != 'profile2' ? $form['#id'] : 'profile2-edit-' . array_pop($bits) . '-form';
$path = drupal_get_path('module', 'fc_field_groups');
$form['#attached']['js'][] = $path . '/fc_field_groups.js';
$form['#attached']['css'][] = $path . '/fc_field_groups.css';
$form['#attached']['js'][] = array(
'data' => array(
'fc_field_groups' => array(
$form_id => $settings,
),
),
'type' => 'setting',
);
}