You are here

function double_field_update_7201 in Double Field 7.2

Fix fields settings.

File

./double_field.install, line 64
Install, update and uninstall functions for the double field module.

Code

function double_field_update_7201() {
  $field_names = array();
  foreach (field_read_fields(array(
    'module' => 'double_field',
  )) as $field) {
    $field_names[] = $field['field_name'];
    foreach (array(
      'first',
      'second',
    ) as $subfield) {
      $field['settings'][$subfield]['maxlength'] = $field['settings'][$subfield . '_maxlength'];
      unset($field['settings'][$subfield . '_maxlength']);
    }
    field_update_field($field);
    $params = array(
      'field_name' => $field_names,
    );
    foreach (field_read_instances($params) as $instance) {

      // Update widget type and widget settings.
      $instance['widget']['type'] = 'textfield_&_textfield';
      $widget_info = double_field_field_widget_info();
      foreach (array(
        'first',
        'second',
      ) as $subfield) {
        $old_settings = $instance['widget']['settings'][$subfield];
        $instance['widget']['settings'][$subfield] = $widget_info['textfield_&_textfield']['settings'][$subfield];
        $instance['widget']['settings'][$subfield]['textfield']['size'] = $old_settings['size'];
        unset($old_settings['size']);
        $instance['widget']['settings'][$subfield]['general'] = $old_settings;
      }

      // Update formatter type and formatter settings.
      $formatters = double_field_field_formatter_info();
      foreach ($instance['display'] as &$display) {
        switch ($display['type']) {
          case 'double_field_inline':
            $display['type'] = 'double_field_unformatted_list';
            $display['settings']['style'] = 'inline';
            break;
          case 'double_field_block':
            $display['type'] = 'double_field_unformatted_list';
            $display['settings']['style'] = 'block';
            break;
          case 'double_field_fieldset':
            $display['type'] = 'double_field_fieldset';
            break;
        }
        foreach (array(
          'first',
          'second',
        ) as $subfield) {
          $display['settings'][$subfield] = array_merge($formatters[$display['type']]['settings'][$subfield], $display['settings'][$subfield]);
        }
      }

      // Save the instance data.
      field_update_instance($instance);
    }
  }
}