From 0b0d5d966ccaf62af52dbac4a08899e6c9991e79 Mon Sep 17 00:00:00 2001 From: mrded Date: Thu, 24 Apr 2014 13:33:08 +0100 Subject: [PATCH] Segment campaigns programatically --- .../mailchimp_campaign.admin.inc | 60 +++++++++++++++++++++- .../mailchimp_campaign/mailchimp_campaign.module | 23 ++++++++- 2 files changed, 79 insertions(+), 4 deletions(-) diff --git a/modules/mailchimp_campaign/mailchimp_campaign.admin.inc b/modules/mailchimp_campaign/mailchimp_campaign.admin.inc index 9e10817..d0b362b 100644 --- a/modules/mailchimp_campaign/mailchimp_campaign.admin.inc +++ b/modules/mailchimp_campaign/mailchimp_campaign.admin.inc @@ -28,7 +28,11 @@ function mailchimp_campaign_campaign_form($form, &$form_state, MailChimpCampaign '#description' => t('Select the list this campaign should be sent to.'), '#options' => _mailchimp_campaign_build_option_list(mailchimp_get_lists()), '#default_value' => ($campaign) ? $campaign->mc_data['list_id'] : -1, - '#required' => TRUE + '#required' => TRUE, + '#ajax' => array( + 'callback' => 'mailchimp_campaign_list_callback', + 'wrapper' => 'segment-sections' + ) ); $form['from_email'] = array( '#type' => 'textfield', @@ -58,6 +62,33 @@ function mailchimp_campaign_campaign_form($form, &$form_state, MailChimpCampaign 'wrapper' => 'content-sections' ) ); + + $form['segment'] = array( + '#id' => 'segment-sections', + '#type' => 'fieldset', + '#title' => t('Segment'), + '#collapsible' => FALSE, + '#collapsed' => FALSE, + ); + + if (isset($form_state['campaign']->mc_data['segment_text'])) { + $form['segment']['text'] = array( + '#markup' => $form_state['campaign']->mc_data['segment_text'], + ); + } + else { + $saves_segments = $form_state['values']['list_id'] + ? mailchimp_campaign_get_segments($form_state['values']['list_id']) + : array(); + + $form['segment']['static_segment_id'] = array( + '#type' => 'select', + '#title' => t('Static segment ID'), + '#title_display' => 'invisible', + '#options' => _mailchimp_campaign_build_option_list($saves_segments), + ); + } + $form['content'] = array( '#id' => 'content-sections', '#type' => 'fieldset', @@ -147,6 +178,18 @@ function mailchimp_campaign_template_callback($form, $form_state) { } /** + * AJAX callback when changing list id. + * + * @param $form + * @param $form_state + * + * @return mixed + */ +function mailchimp_campaign_list_callback($form, $form_state) { + return $form['segment']; +} + +/** * Preview callback for mailchimp_campaign_campaign_form(). * * @param $form @@ -192,8 +235,21 @@ function mailchimp_campaign_campaign_form_submit($form, &$form_state) { 'template_id' => $values['template_id'] ); + if ($values['static_segment_id']) { + $segment_opts = array( + 'match' => 'any', + 'conditions' => array( + array( + 'field' => 'static_segment', + 'value' => $values['static_segment_id'], + 'op' => 'eq', + ), + ), + ); + } + $campaign_id = (isset($form_state['campaign']) ? $form_state['campaign']->mc_campaign_id : NULL); - mailchimp_campaign_save_campaign($values['content'], $options, $campaign_id); + mailchimp_campaign_save_campaign($values['content'], $options, $campaign_id, $segment_opts); cache_clear_all('mailchimp_campaign_campaigns', 'cache'); diff --git a/modules/mailchimp_campaign/mailchimp_campaign.module b/modules/mailchimp_campaign/mailchimp_campaign.module index e5b6ffd..3733be1 100644 --- a/modules/mailchimp_campaign/mailchimp_campaign.module +++ b/modules/mailchimp_campaign/mailchimp_campaign.module @@ -197,11 +197,12 @@ function mailchimp_campaign_theme($existing, $type, $theme, $path) { * @param $template * @param $options * @param null $campaign_id + * @param array $segment_opts * * @return string * New or existing campaign ID. */ -function mailchimp_campaign_save_campaign($template, $options, $campaign_id = NULL) { +function mailchimp_campaign_save_campaign($template, $options, $campaign_id = NULL, $segment_opts = array()) { $mcapi = mailchimp_get_api_object(); $options += array( 'generate_text' => TRUE, @@ -218,7 +219,7 @@ function mailchimp_campaign_save_campaign($template, $options, $campaign_id = NU // Save campaign to MailChimp. (Only regular campaigns are supported) $is_new = empty($campaign_id); if ($is_new) { - $campaign_id = $mcapi->campaignCreate('regular', $options, $content); + $campaign_id = $mcapi->campaignCreate('regular', $options, $content, $segment_opts); } else { // updates must be done one value at a time @@ -300,6 +301,24 @@ function mailchimp_campaign_delete_campaign($cid) { } /** + * Return all available static segments. + * + * @param string $id + * The list id to connect to. + * + * @return array + */ +function mailchimp_campaign_get_segments($id) { + $output = array(); + + if ($mcapi = mailchimp_get_api_object()) { + $output = $mcapi->listStaticSegments($id); + } + + return $output; +} + +/** * Return all available user templates. * * @return array(). -- 1.8.5.2 (Apple Git-48)