Skip to content

Table Reference

Tables used by this extension.

civicrm_mailchimpsync_batch

This table holds one record per submitted batch of updates. Most of its fields hold data obtained from Mailchimp's batch status responses.

N.b. while a batch update for Mailchimp may contain any API requests, the way our system is designed it means each batch will only contain updates on a particular audience. We store the audience ID in the mailchimp_list_id field.

The status field may contain 'aborted' - Mailchimp won't ever report this; it's something set manually by a call to Mailchimpsync.abortsync (which is not a normal thing to do).

response_processed is either:

  • 0 The response has not been received yet.
  • 1 We've started processing the response.
  • 2 We've finished processing the response.

civicrm_mailchimpsync_cache

This table has one row per contact/member per sync connection. It holds their status at Mailchimp and at CiviCRM.

  • mailchimp_member_id is the md5 of the lowercase email address; this is how Mailchimp refers to emails. Yes, it's problematic - see Mailchimp Issues. This won't be set until the member exists at Mailchimp.

  • mailchimp_status one of subscribed|unsubscribed|cleaned|pending|transactional|archived

  • mailchimp_updated the date that mailchimp says the member was last updated (last_changed in the MC API). This is super important in determining which system is right about whether someone should be subscribed.

  • mailchimp_data PHP serialized data loaded from Mailchimp.

  • civicrm_groups PHP serialized data loaded from CiviCRM with the datetimes that this contact was added/removed from each of the groups relevant to this audience. This is super important in determining which system is right about whether someone should be subscribed.

  • civicrm_data PHP serialized data from CiviCRM.

  • civicrm_contact_id This won't be set until we've figured it out. Once it's set, we assume it to be correct, but there is a check to make sure the contact still exists.

  • sync_status

    • ok: At the end of a sync run, we considered that the two were in sync. If subsequently something changes at CiviCRM then it might be a lie.
    • todo: This has been identified as having changed since the 'since' date being used in a sync. It means it's live.
    • redo: We tried to subscribe them but couldn't because of a 'compliance state' so we're trying again using the Pending status.
    • fail: An update failed (or was aborted)

mailchimp_data

{
  "first_name": "Wilma",
  "first_name@": "2022-20-20...",
  "last_name": "Flintstone",
  "interests": {
    "{interestid}": bool, ...
  }

  "first_name": { "current": "Wilma", "updated": "2020-20-20..." },
  "last_name":  { "current": "Wilma", "updated": "2020-20-20..." },
  "status":     { "current": "subscribed", "updated": "2020-20-20..." },
  "interests": {
    "{interestid}": { "current": bool, "updated": "2020..."},
    ...
  }
}

civicrm_data

This is a bit of a misnomer.

 [
   'your_identifier' => [
     'mailchimp_updates' => [],
     'tag_updates' => [],
     'other_for_your_use' => ...
   ]
 ]

All *.mailchimp_updates.* will be used merged to generate an update call. Same for tag_updates.

Other data is for internal use.

civicrm_mailchimpsync_update

This stores the individual updates included (or to be included) in batches for Mailchimp to process. completed is updated once it's completed, and if there's an error it's stored in the error_response field.

civicrm_mailchimpsync_status

This holds a PHP serialized array of data used to store the sync status; one row per audience. This is updated by CRM_Mailchimp::updateAudienceStatusSetting which uses locks to ensure no two processes do it at the same time.