You are here

function mailchimp_signup_update_7002 in Mailchimp 7.4

Same name and namespace in other branches
  1. 7.5 modules/mailchimp_signup/mailchimp_signup.install \mailchimp_signup_update_7002()

Migrate 7.x-3.x signup form data to 7.x-4.x format.

File

modules/mailchimp_signup/mailchimp_signup.install, line 93
Install, update and uninstall functions for the mailchimp_signup module.

Code

function mailchimp_signup_update_7002(&$sandbox) {

  // Replaces 7001 update, which inadvertently removed mergefield data.
  if (!isset($sandbox['processed'])) {
    $record_count = db_select('mailchimp_signup')
      ->countQuery()
      ->execute()
      ->fetchField();
    $sandbox['total'] = $record_count;
    $sandbox['processed'] = 0;
    if ($sandbox['total'] == 0) {

      // No signup forms found; update not required.
      $sandbox['#finished'] = 1;
      return;
    }
  }
  $limit = 10;

  // Migrate settings column from mailchimp_signup table.
  $result = db_select('mailchimp_signup', 'ms')
    ->fields('ms', array(
    'mcs_id',
    'settings',
  ))
    ->range($sandbox['processed'], $limit)
    ->execute();
  foreach ($result as $record) {
    $settings = unserialize($record->settings);
    $mergefields = [];
    foreach ($settings['mergefields'] as $field_tag => $field_data) {
      if (!is_array($field_data)) {

        // Skip update if already migrated by the user saving the signup form.
        continue;
      }

      // Data is an array in 7.x-3.x; convert to object for 7.x-4.x.
      // @see http://developer.mailchimp.com/documentation/mailchimp/reference/lists/merge-fields/#read-get_lists_list_id_merge_fields
      $mergefield = (object) [
        'tag' => $field_tag,
        'name' => $field_data['name'],
        // 'field_type' is now 'type'.
        'type' => $field_data['field_type'],
        // 'req' is now 'required'.
        'required' => $field_data['req'],
        // 'default' is now 'default_value'.
        'default_value' => $field_data['default'],
        'public' => $field_data['public'],
        // 'order' is now 'display_order'.
        'display_order' => $field_data['order'],
        // 'options' is new; populated per field type below.
        'options' => NULL,
      ];
      switch ($field_data['field_type']) {
        case 'dropdown':
        case 'radio':

          // Set choices.
          $mergefield->options = (object) [
            'choices' => isset($field_data['choices']) ? $field_data['choices'] : [],
          ];
          break;
        default:

          // Set size of field. Use default if not available.
          $mergefield->options = (object) [
            'size' => isset($field_data['size']) ? $field_data['size'] : 25,
          ];
          break;
      }
      $mergefields[$field_tag] = $mergefield;
    }
    $settings['mergefields'] = $mergefields;

    // Update settings column in mailchimp_signup table.
    db_update('mailchimp_signup')
      ->fields([
      'settings' => serialize($settings),
    ])
      ->condition('mcs_id', $record->mcs_id)
      ->execute();
    $sandbox['processed']++;
  }
  $sandbox['#finished'] = $sandbox['processed'] / $sandbox['total'];
}