Commit 3905593e authored by Vladimir Roudakov's avatar Vladimir Roudakov Committed by Vladimir Roudakov
Browse files

Issue #3255184 by VladimirAus: Subscribe to content type: send a campaign via node send tab

parent 9b91308d
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
mailchimp_ct_audience_id: ''
mailchimp_ct_group_id: ''
mailchimp_ct_mapping: []
mailchimp_ct_campaign_template_from_name: 'Test Email'
mailchimp_ct_campaign_template_from_email: ''
mailchimp_ct_campaign_template_subject: 'Campaign subject'
mailchimp_ct_campaign_template_body: '<h3>Campaign</h3>'
mailchimp_ct_groups_sync: ''
mailchimp_ct_groups: []
mailchimp_ct_target_no_categories: 0
 No newline at end of file
+14 −2
Original line number Diff line number Diff line
@@ -28,12 +28,24 @@ mailchimp_marketing_subscribe_ct.settings:
      sequence:
        type: string
        label: 'Mailchimp Group Id'
    mailchimp_ct_campaign_template_from_name:
      type: string
      label: 'Campaign from name'
    mailchimp_ct_campaign_template_from_email:
      type: string
      label: 'Campaign from email'
    mailchimp_ct_campaign_template_subject:
      type: string
      label: 'Campaign Template Subject'
      label: 'Campaign subject'
    mailchimp_ct_campaign_template_body:
      type: string
      label: 'Campaign Template Body'
      label: 'Campaign body'
    mailchimp_ct_groups_sync:
      type: string
      label: 'Campaign body'
    mailchimp_ct_target_no_categories:
      type: string
      label: 'Target no categories subscription'

# Simplenews issue field type schema.
#field.storage_settings.mailchimp_issue:
+51 −2
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@ function mailchimp_marketing_subscribe_ct_uninstall() {
 */
function mailchimp_marketing_subscribe_ct_update_9001() {
  $storage_definition = BaseFieldDefinition::create('string')
    ->setLabel(t('Mailchimp campaign'))
    ->setDescription(t('Mailchimp campaign.'))
    ->setLabel(t('Mailchimp campaign ID'))
    ->setDescription(t('Mailchimp test campaign ID.'))
    ->setRevisionable(TRUE)
    ->setSettings([
      'max_length' => 255,
@@ -76,3 +76,52 @@ function mailchimp_marketing_subscribe_ct_update_9003(&$sandbox) {
    ->set('mailchimp_ct_groups', [])
    ->save();
}

/**
 * Update settings: add from name and from email.
 */
function mailchimp_marketing_subscribe_ct_update_9004(&$sandbox) {
  $config = \Drupal::configFactory()
    ->getEditable('mailchimp_marketing_subscribe_ct.settings');

  $config
    ->set('mailchimp_ct_campaign_template_from_name', 'Test Email')
    ->set('mailchimp_ct_campaign_template_from_email', '')
    ->save();
}

/**
 * Add mailchimp_campaign_created field.
 */
function mailchimp_marketing_subscribe_ct_update_9005() {
  $storage_definition = BaseFieldDefinition::create('integer')
    ->setLabel(t('Mailchimp test campaign created'))
    ->setDescription(t('Mailchimp test campaign created timestamp.'))
    ->setRevisionable(TRUE)
    ->setSetting('unsigned', TRUE)
    ->setDisplayOptions('view', [
      'label' => 'hidden',
      'region' => 'hidden',
    ])
    ->setDisplayOptions('form', [
      'region' => 'hidden',
    ])
    ->setDisplayConfigurable('form', FALSE)
    ->setDisplayConfigurable('view', FALSE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('mailchimp_campaign_created', 'node', 'system', $storage_definition);
}

/**
 * Update settings: add mailchimp_ct_groups_sync.
 */
function mailchimp_marketing_subscribe_ct_update_9006(&$sandbox) {
  $config = \Drupal::configFactory()
    ->getEditable('mailchimp_marketing_subscribe_ct.settings');

  $config
    ->set('mailchimp_ct_groups_sync', '')
    ->set('mailchimp_ct_target_all_categories', FALSE)
    ->save();
}
 No newline at end of file
+8 −2
Original line number Diff line number Diff line
@@ -28,8 +28,8 @@ function mailchimp_marketing_subscribe_ct_entity_base_field_info(EntityTypeInter
    $fields = [];

    $fields['mailchimp_campaign'] = BaseFieldDefinition::create('string')
      ->setLabel(t('Mailchimp campaign'))
      ->setDescription(t('Mailchimp campaign.'))
      ->setLabel(t('Mailchimp campaign ID'))
      ->setDescription(t('Mailchimp test campaign ID.'))
      ->setRevisionable(TRUE)
      ->setSettings([
        'max_length' => 255,
@@ -42,6 +42,12 @@ function mailchimp_marketing_subscribe_ct_entity_base_field_info(EntityTypeInter
      ->setRevisionable(TRUE)
      ->setSetting('unsigned', TRUE);

    $fields['mailchimp_campaign_created'] = BaseFieldDefinition::create('integer')
      ->setLabel(t('Mailchimp test campaign created'))
      ->setDescription(t('Mailchimp test campaign created timestamp.'))
      ->setRevisionable(TRUE)
      ->setSetting('unsigned', TRUE);

    return $fields;
  }
}
+54 −3
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\mailchimp_marketing_subscribe_ct\Form;

use Drupal\Component\Serialization\Json;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
@@ -182,8 +183,10 @@ class MailchimpSubscribeCtSettingsForm extends ConfigFormBase {

    // Container for categories dropdown for Ajax callback.
    $form['container_ct_types'] = [
      '#type' => 'container',
      '#type' => 'details',
      '#open' => TRUE,
      '#attributes' => ['id' => 'refresh-ct-mapping'],
      '#title' => $this->t('Content types mappings'),
    ];

    if ($this->isConfigValueDifferent('mailchimp_ct_group_id')) {
@@ -212,11 +215,27 @@ class MailchimpSubscribeCtSettingsForm extends ConfigFormBase {
      ];
    }

    $form['mailchimp_ct_campaign_template_from_name'] = [
      '#required' => TRUE,
      '#type' => 'textfield',
      '#title' => t('Campaign from name'),
      '#description' => t('Campaign from name.'),
      '#default_value' => $config->get('mailchimp_ct_campaign_template_from_name'),
    ];

    $form['mailchimp_ct_campaign_template_from_email'] = [
      '#required' => TRUE,
      '#type' => 'textfield',
      '#title' => t('Campaign from email'),
      '#description' => t('Campaign from email'),
      '#default_value' => $config->get('mailchimp_ct_campaign_template_from_email'),
    ];

    $form['mailchimp_ct_campaign_template_subject'] = [
      '#required' => TRUE,
      '#type' => 'textfield',
      '#title' => t('Campaign Template Subject'),
      '#description' => t('Campaign Template Subject. Available tokens: '),
      '#title' => t('Campaign subject'),
      '#description' => t('Campaign template subject. Available tokens: '),
      '#default_value' => $config->get('mailchimp_ct_campaign_template_subject'),
    ];

@@ -228,6 +247,27 @@ class MailchimpSubscribeCtSettingsForm extends ConfigFormBase {
      '#default_value' => $config->get('mailchimp_ct_campaign_template_body'),
    ];

    $syncCategories = $categories;
    try {
      foreach ($categories as $groupId => $category) {
        $syncCategories[$groupId] = [
          'title' => $category,
          'item' => $this->mailchimp->getGroupItems($ct_audience_id, $groupId),
        ];
      }
    }
    catch (ClientException $e) {
    }

    $decodedCategories = Json::encode($syncCategories);
    $form['mailchimp_ct_groups_sync'] = [
      '#type' => 'textarea',
      '#title' => t('Groups (Read only)'),
      '#description' => t('Syncronised mailchimp groups'),
      '#default_value' => $decodedCategories,
    ];

    unset($categories[$ct_group_id]);
    $form['mailchimp_ct_groups'] = [
      '#multiple' => TRUE,
      '#type' => 'select',
@@ -237,6 +277,13 @@ class MailchimpSubscribeCtSettingsForm extends ConfigFormBase {
      '#options' => $categories,
    ];

    $form['mailchimp_ct_target_no_categories'] = [
      '#type' => 'checkbox',
      '#title' => t('Target no categories subscription'),
      '#description' => t('Generate additional campaign for content type for subscribers with no categories.'),
      '#default_value' => $decodedCategories,
    ];

    $form['#validate'][] = [$this, 'validateForm'];

    return $form;
@@ -278,9 +325,13 @@ class MailchimpSubscribeCtSettingsForm extends ConfigFormBase {
    $config->set('mailchimp_ct_audience_id', $audienceId);
    $config->set('mailchimp_ct_group_id', $groupId);
    $config->set('mailchimp_ct_mapping', $mappingValues);
    $config->set('mailchimp_ct_campaign_template_from_name', $form_state->getValue('mailchimp_ct_campaign_template_from_name'));
    $config->set('mailchimp_ct_campaign_template_from_email', $form_state->getValue('mailchimp_ct_campaign_template_from_email'));
    $config->set('mailchimp_ct_campaign_template_subject', $form_state->getValue('mailchimp_ct_campaign_template_subject'));
    $config->set('mailchimp_ct_campaign_template_body', $form_state->getValue('mailchimp_ct_campaign_template_body'));
    $config->set('mailchimp_ct_groups_sync', $form_state->getValue('mailchimp_ct_groups_sync'));
    $config->set('mailchimp_ct_groups', $form_state->getValue('mailchimp_ct_groups'));
    $config->set('mailchimp_ct_target_no_categories', $form_state->getValue('mailchimp_ct_target_no_categories'));
    $config->save();

    $this->messenger()
Loading