/**
 * Implementation of hook_civicrm_buildForm
 */
function civimailchimp_civicrm_buildForm($formName, &$form)
{
    // Render any Sync Log Messages.
    if (CRM_Core_Permission::check('administer CiviCRM')) {
        CRM_CiviMailchimp_BAO_SyncLog::renderMessages();
    }
    // Don't display the Mailchimp fields if this is a Smart Group.
    if ($formName === "CRM_Group_Form_Edit" && empty($form->_defaultValues['saved_search_id'])) {
        $interest_groups_lookup = array();
        try {
            $mailchimp_lists = CRM_CiviMailchimp_Utils::getLists();
        } catch (Exception $e) {
            $mailchimp_lists = NULL;
            civimailchimp_catch_mailchimp_api_error($e);
        }
        if ($mailchimp_lists) {
            $group_id = $form->getVar('_id');
            $list_options = CRM_CiviMailchimp_Utils::formatListsAsSelectOptions($mailchimp_lists);
            $interest_groups_lookup = CRM_CiviMailchimp_Utils::formatInterestGroupsLookup($mailchimp_lists);
            $interest_groups_options = '';
            if ($group_id) {
                $mailchimp_sync_settings = CRM_CiviMailchimp_BAO_SyncSettings::findByGroupId($group_id);
                if ($mailchimp_sync_settings) {
                    if (isset($interest_groups_lookup[$mailchimp_sync_settings->mailchimp_list_id])) {
                        $interest_groups_options = $interest_groups_lookup[$mailchimp_sync_settings->mailchimp_list_id];
                    }
                    civimailchimp_civicrm_setDefaults($form, $mailchimp_sync_settings);
                }
            }
            $form->add('select', 'mailchimp_list', ts('Mailchimp List'), $list_options, FALSE, array('class' => 'crm-select2'));
            $form->add('select', 'mailchimp_interest_groups', ts('Mailchimp Interest Groups'), $interest_groups_options, FALSE, array('multiple' => 'multiple', 'class' => 'crm-select2'));
            $form->assign('mailchimp_lists', TRUE);
        }
        CRM_Core_Resources::singleton()->addScriptFile('com.giantrabbit.civimailchimp', 'js/group_add_edit_form.js')->addSetting(array('civiMailchimp' => array('interest_groups_lookup' => $interest_groups_lookup)));
    }
}
 function test_civimailchimp_catch_mailchimp_api_error()
 {
     $exception = new CRM_CiviMailchimp_Exception("An exception was thrown!");
     $session = CRM_Core_Session::singleton();
     $messages = $session->getStatus(TRUE);
     civimailchimp_catch_mailchimp_api_error($exception);
     $messages = $session->getStatus();
     $this->assertEquals('There was an error when trying to retrieve available Mailchimp Lists to sync to a group. CRM_CiviMailchimp_Exception: An exception was thrown!.', $messages[0]['text']);
     $this->assertEquals('Mailchimp API Error', $messages[0]['title']);
     $this->assertEquals('alert', $messages[0]['type']);
 }