diff --git a/campaignmonitor.module b/campaignmonitor.module index c756198..e30bebb 100644 --- a/campaignmonitor.module +++ b/campaignmonitor.module @@ -399,6 +399,7 @@ function campaignmonitor_subscribe_form($form, &$form_state, $list_id) { * if the API call fails. */ function campaignmonitor_subscribe_form_submit($form, &$form_state) { + // Get a Campaign Monitor object. $cm = CampaignMonitor::getConnector(); @@ -437,13 +438,30 @@ function campaignmonitor_subscribe_form_submit($form, &$form_state) { return FALSE; } - // Check if the user should be sent to a subscribe page. + // Get lists. $lists = $cm->getLists(); - if (isset($lists[$list_id]['details']['ConfirmationSuccessPage']) && !empty($lists[$list_id]['details']['ConfirmationSuccessPage'])) { - drupal_goto($lists[$list_id]['details']['ConfirmationSuccessPage']); + + // If Confirmed Opt In. + if (!empty($lists[$list_id]['details']['ConfirmedOptIn'])) { + $list_options = variable_get('campaignmonitor_list_' . $list_id, FALSE); + + // Check if the user should be sent to the ConfirmedOptInPage. + if (!empty($list_options['urls']['ConfirmedOptInPage'])) { + drupal_goto($list_options['urls']['ConfirmedOptInPage']); + } + else { + drupal_set_message(t('Please check your e-mail, we sent you a confirmation e-mail.'), 'status'); + } } + // If no Confirmed Opt In. else { - drupal_set_message(t('You are now subscribed to the "@list" list.', array('@list' => $lists[$list_id]['name'])), 'status'); + // Check if the user should be sent to the ConfirmationSuccessPage. + if (!empty($lists[$list_id]['details']['ConfirmationSuccessPage'])) { + drupal_goto($lists[$list_id]['details']['ConfirmationSuccessPage']); + } + else { + drupal_set_message(t('You are now subscribed to the "@list" list.', array('@list' => $lists[$list_id]['name'])), 'status'); + } } } diff --git a/includes/campaignmonitor_lists.admin.inc b/includes/campaignmonitor_lists.admin.inc index 69c2c92..73b8d3d 100644 --- a/includes/campaignmonitor_lists.admin.inc +++ b/includes/campaignmonitor_lists.admin.inc @@ -180,15 +180,14 @@ function campaignmonitor_admin_settings_list_edit($form, &$form_state, $list_id) '#title' => t('Confirmed Opt In'), '#default_value' => $list['details']['ConfirmedOptIn'], ); - - $form[$form_key]['display'] = array( - '#type' => 'fieldset', - '#title' => t('Display options'), - '#collapsible' => TRUE, - '#collapsed' => FALSE, +// wd::var_dump($defaults); + $form[$form_key]['options']['urls']['ConfirmedOptInPage'] = array( + '#type' => 'textfield', + '#title' => t('Confirmed Opt In message page'), + '#default_value' => isset($defaults['urls']['ConfirmedOptInPage']) ? $defaults['urls']['ConfirmedOptInPage'] : '', '#states' => array( 'visible' => array( - '.enabled-list-checkbox' => array('checked' => TRUE), + ':input[name$="[ConfirmedOptIn]"]' => array('checked' => true), ), ), ); @@ -297,13 +296,17 @@ function campaignmonitor_admin_settings_list_edit($form, &$form_state, $list_id) * @return boolean FALSE on failure, to prevent submission. */ function campaignmonitor_admin_settings_list_edit_validate($form, &$form_state) { + // Get list key, + $list_key = 'campaignmonitor_list_' . $form_state['values']['listId']; + // Build array with basic information. - $values = $form_state['values']['campaignmonitor_list_' . $form_state['values']['listId']]; + $values = $form_state['values'][$list_key]; $options = array( 'Title' => check_plain($values['options']['listname']), 'UnsubscribePage' => check_plain($values['options']['UnsubscribePage']), 'ConfirmedOptIn' => $values['options']['ConfirmedOptIn'] ? TRUE : FALSE, 'ConfirmationSuccessPage' => check_plain($values['options']['ConfirmationSuccessPage']), + 'ConfirmedOptInPage' => check_plain($values['options']['urls']['ConfirmedOptInPage']), ); // Get connected. @@ -317,8 +320,11 @@ function campaignmonitor_admin_settings_list_edit_validate($form, &$form_state) return FALSE; } + // Copy urls containing ConfirmedOptInPage from options to list options. + $form_state['values'][$list_key]['urls'] = $form_state['values'][$list_key]['options']['urls']; + // Remove list options. - unset($form_state['values']['campaignmonitor_list_' . $form_state['values']['listId']]['options']); + unset($form_state['values'][$list_key]['options']); // Redirect to list overview. $form_state['redirect'] = 'admin/config/services/campaignmonitor/lists'; @@ -409,6 +415,29 @@ function campaignmonitor_admin_settings_list_create_form() { '#default_value' => FALSE, ); + $form['ConfirmedOptInPage'] = array( + '#type' => 'textfield', + '#title' => t('Confirmed Opt In message page'), + '#states' => array( + 'visible' => array( + ':input[name="ConfirmedOptIn"]' => array('checked' => true), + ), + ), + ); + + // $form[$form_key]['display'] = array( + $form['display'] = array( + '#type' => 'fieldset', + '#title' => t('Display options'), + '#collapsible' => TRUE, + '#collapsed' => FALSE, + '#states' => array( + 'visible' => array( + '.enabled-list-checkbox' => array('checked' => TRUE), + ), + ), + ); + $form = system_settings_form($form); $form['#submit'] = array('campaignmonitor_admin_settings_list_create_form_submit'); $form['#validate'][] = 'campaignmonitor_admin_settings_list_create_form_validate'; @@ -430,11 +459,22 @@ function campaignmonitor_admin_settings_list_create_form_validate($form, &$form_ $form_state['values']['UnsubscribePage'], $form_state['values']['ConfirmedOptIn'], $form_state['values']['ConfirmationSuccessPage']); - if (!$result) { + if ($result === FALSE) { $error = $cm->getLatestError(); form_set_error('listname', $error['message']); return FALSE; } + else { + // Get list key, + $list_key = 'campaignmonitor_list_' . $result; + + // Set ConfirmedOptInPage for this list. + variable_set($list_key, array( + 'urls' => array( + 'ConfirmedOptInPage' => $form_state['values']['ConfirmedOptInPage'], + ), + )); + } } /** diff --git a/lib/campaignmonitor.class.inc b/lib/campaignmonitor.class.inc index 667f279..dd3bfd4 100644 --- a/lib/campaignmonitor.class.inc +++ b/lib/campaignmonitor.class.inc @@ -636,7 +636,10 @@ class CampaignMonitor { if ($result->was_successful()) { // Clear the cache, so the list information can be retrieved again. $this->clearCache(); - return TRUE; + + // Return the list's id instead of a boolean, so the caller knows which + // list has been created + return $result->response; } else { $this->addError(WATCHDOG_ERROR, $result->response->Message, $result->http_status_code); diff --git a/modules/campaignmonitor_user/campaignmonitor_user.module b/modules/campaignmonitor_user/campaignmonitor_user.module index 7c94fa3..1347809 100644 --- a/modules/campaignmonitor_user/campaignmonitor_user.module +++ b/modules/campaignmonitor_user/campaignmonitor_user.module @@ -124,12 +124,27 @@ function campaignmonitor_user_form_submit($form, &$form_state) { return FALSE; } - // Check if the user should be sent to a subscribe page. - if (isset($lists_info[$list_id]['details']['ConfirmationSuccessPage']) && !empty($lists_info[$list_id]['details']['ConfirmationSuccessPage'])) { - drupal_goto($lists_info[$list_id]['details']['ConfirmationSuccessPage']); + // If Confirmed Opt In. + if (!empty($lists[$list_id]['details']['ConfirmedOptIn'])) { + $list_options = variable_get('campaignmonitor_list_' . $list_id, FALSE); + + // Check if the user should be sent to the ConfirmedOptInPage. + if (!empty($list_options['urls']['ConfirmedOptInPage'])) { + drupal_goto($list_options['urls']['ConfirmedOptInPage']); + } + else { + drupal_set_message(t('Please check your e-mail, we sent you a confirmation e-mail.'), 'status'); + } } + // If no Confirmed Opt In. else { - drupal_set_message(t('You are now subscribed to the "@list" list.', array('@list' => $lists_info[$list_id]['name'])), 'status'); + // Check if the user should be sent to the ConfirmationSuccessPage. + if (!empty($lists[$list_id]['details']['ConfirmationSuccessPage'])) { + drupal_goto($lists[$list_id]['details']['ConfirmationSuccessPage']); + } + else { + drupal_set_message(t('You are now subscribed to the "@list" list.', array('@list' => $lists[$list_id]['name'])), 'status'); + } } } }