function mailchimp_signup_update_7002 in Mailchimp 7.4
Same name and namespace in other branches
- 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'];
}