You are here

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',
  );
}