/** * Save Mailchimp sync settings. */ static function saveSettings($params) { $transaction = new CRM_Core_Transaction(); try { $existing_mailchimp_sync_setting = self::findByGroupId($params['civicrm_group_id']); if ($existing_mailchimp_sync_setting) { $params['id'] = $existing_mailchimp_sync_setting->id; CRM_CiviMailchimp_BAO_InterestGroupsSyncSettings::deleteAllForSyncSettingsId($existing_mailchimp_sync_setting->id); } $mailchimp_sync_setting = new CRM_CiviMailchimp_BAO_SyncSettings(); $mailchimp_sync_setting->copyValues($params); $mailchimp_sync_setting->save(); if (isset($params['mailchimp_interest_groups'])) { CRM_CiviMailchimp_BAO_InterestGroupsSyncSettings::saveSettings($mailchimp_sync_setting, $params['mailchimp_interest_groups']); } if (!$existing_mailchimp_sync_setting) { CRM_CiviMailchimp_Utils::addWebhookToMailchimpList($mailchimp_sync_setting->mailchimp_list_id); } } catch (Exception $e) { $transaction->rollback(); throw $e; } $transaction->commit(); return $mailchimp_sync_setting; }
function testDeleteAllForSyncSettingsId() { $mailchimp_list_id = 'MailchimpListsTestListA'; $mailchimp_interest_groups = array('MailchimpTestInterestGroupingA_MailchimpTestInterestGroupA', 'MailchimpTestInterestGroupingA_MailchimpTestInterestGroupC'); $mailchimp_sync_setting = CRM_CiviMailchimp_BAO_SyncSettingsTest::createTestGroupAndSyncSettings('Test Group testDeleteAllForSyncSettingsId', $mailchimp_list_id, $mailchimp_interest_groups); CRM_CiviMailchimp_BAO_InterestGroupsSyncSettings::deleteAllForSyncSettingsId($mailchimp_sync_setting->id); $interest_groups = CRM_CiviMailchimp_BAO_InterestGroupsSyncSettings::findBySyncSettingsId($mailchimp_sync_setting->id); $this->assertEmpty($interest_groups); }
static function saveSettings($mailchimp_sync_setting, $interest_groups) { // Get the interest groups from Mailchimp again so we can associate a // name with the interest group id. $mailchimp_interest_groups = CRM_CiviMailchimp_Utils::getInterestGroups($mailchimp_sync_setting->mailchimp_list_id); foreach ($interest_groups as $interest_group) { $interest_group = explode('_', $interest_group); $interest_grouping_id = $interest_group[0]; $interest_group_id = $interest_group[1]; // Mailchimp expects the interest group name rather than id when // making API subscription requests. However, since the name can be // changed and is not unique, we're storing both the id and name. $interest_group_name = $mailchimp_interest_groups[$interest_grouping_id][$interest_group_id]; $mailchimp_interest_group_sync_setting = new CRM_CiviMailchimp_BAO_InterestGroupsSyncSettings(); $mailchimp_interest_group_sync_setting->civimailchimp_sync_settings_id = $mailchimp_sync_setting->id; $mailchimp_interest_group_sync_setting->mailchimp_interest_grouping_id = $interest_grouping_id; $mailchimp_interest_group_sync_setting->mailchimp_interest_group_id = $interest_group_id; $mailchimp_interest_group_sync_setting->mailchimp_interest_group_name = $interest_group_name; $mailchimp_interest_group_sync_setting->save(); } }