|  | @@ -0,0 +1,794 @@
 | 
	
		
			
				|  |  | +diff --git a/README.txt b/README.txt
 | 
	
		
			
				|  |  | +index cee6e1a..b488e91 100644
 | 
	
		
			
				|  |  | +--- a/README.txt
 | 
	
		
			
				|  |  | ++++ b/README.txt
 | 
	
		
			
				|  |  | +@@ -15,6 +15,7 @@ REQUIREMENTS
 | 
	
		
			
				|  |  | + This module requires the following modules:
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +  * Simplenews (https://www.drupal.org/project/simplenews)
 | 
	
		
			
				|  |  | ++ * Mailet (https://www.drupal.org/project/Mailjet)
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +  INSTALLATION
 | 
	
		
			
				|  |  | + ------------
 | 
	
		
			
				|  |  | +diff --git a/simplenews_mailjet_subscriptions.module b/simplenews_mailjet_subscriptions.module
 | 
	
		
			
				|  |  | +index 09abe13..74214f6 100644
 | 
	
		
			
				|  |  | +--- a/simplenews_mailjet_subscriptions.module
 | 
	
		
			
				|  |  | ++++ b/simplenews_mailjet_subscriptions.module
 | 
	
		
			
				|  |  | +@@ -7,7 +7,7 @@
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | + use Drupal\Core\Routing\RouteMatchInterface;
 | 
	
		
			
				|  |  | + use Drupal\simplenews\Entity\Subscriber;
 | 
	
		
			
				|  |  | +-use Drupal\simplenews_mailjet_subscriptions\SimplenewsMailjetSubscriptionsUtilities;
 | 
	
		
			
				|  |  | ++// use Drupal\simplenews_mailjet_subscriptions\SimplenewsMailjetSubscriptionsUtilities;
 | 
	
		
			
				|  |  | + use Drupal\simplenews_mailjet_subscriptions\Entity\SimplenewsMailjetSubscriptionEntity;
 | 
	
		
			
				|  |  | + use Drupal\Component\Utility\Html;
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +@@ -24,18 +24,18 @@ use Drupal\Component\Utility\Html;
 | 
	
		
			
				|  |  | + function simplenews_mailjet_subscriptions_simplenews_subscribe(Subscriber $subscriber, string $subscription) {
 | 
	
		
			
				|  |  | +   $entities = SimplenewsMailjetSubscriptionEntity::loadMultiple();
 | 
	
		
			
				|  |  | +   foreach ((array) $entities as $entity) {
 | 
	
		
			
				|  |  | +-    $api_key = $entity->getApiKey();
 | 
	
		
			
				|  |  | +-    $secret_key = $entity->getSecretkey();
 | 
	
		
			
				|  |  | +     $listID = $entity->getID();
 | 
	
		
			
				|  |  | +     $table = $entity->get('mapping_table');
 | 
	
		
			
				|  |  | +     if (is_array($table)) {
 | 
	
		
			
				|  |  | +       foreach ($table as $category) {
 | 
	
		
			
				|  |  | +         if ($category['simplenews_news'] == $subscription) {
 | 
	
		
			
				|  |  | +-          SimplenewsMailjetSubscriptionsUtilities::subscribeUser($subscriber, $subscription, $category, $api_key, $secret_key, $listID);
 | 
	
		
			
				|  |  | ++          // SimplenewsMailjetSubscriptionsUtilities::subscribeUser($subscriber, $category);
 | 
	
		
			
				|  |  | ++          \Drupal::service('simplenews_mailjet_subscriptions.utilities')->subscribeUser($listID, $subscriber, $category);
 | 
	
		
			
				|  |  | +         }
 | 
	
		
			
				|  |  | +       }
 | 
	
		
			
				|  |  | +     }
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | ++  // \Drupal::service('simplenews_mailjet_subscriptions.utilities')->subscribeUser($subscriber, $subscription);
 | 
	
		
			
				|  |  | + }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | + /**
 | 
	
		
			
				|  |  | +@@ -51,19 +51,74 @@ function simplenews_mailjet_subscriptions_simplenews_subscribe(Subscriber $subsc
 | 
	
		
			
				|  |  | + function simplenews_mailjet_subscriptions_simplenews_unsubscribe(Subscriber $subscriber, string $subscription) {
 | 
	
		
			
				|  |  | +   $entities = SimplenewsMailjetSubscriptionEntity::loadMultiple();
 | 
	
		
			
				|  |  | +   foreach ((array) $entities as $entity) {
 | 
	
		
			
				|  |  | +-    $api_key = $entity->getApiKey();
 | 
	
		
			
				|  |  | +-    $secret_key = $entity->getSecretkey();
 | 
	
		
			
				|  |  | +     $listID = $entity->getID();
 | 
	
		
			
				|  |  | +     $table = $entity->get('mapping_table');
 | 
	
		
			
				|  |  | +     if (is_array($table)) {
 | 
	
		
			
				|  |  | +       foreach ($table as $category) {
 | 
	
		
			
				|  |  | +         if ($category['simplenews_news'] == $subscription) {
 | 
	
		
			
				|  |  | +           // Unsubscribe.
 | 
	
		
			
				|  |  | +-          SimplenewsMailjetSubscriptionsUtilities::unsubscribeUser($subscriber, $subscription, $category, $api_key, $secret_key, $listID);
 | 
	
		
			
				|  |  | ++          // SimplenewsMailjetSubscriptionsUtilities::unsubscribeUser($subscriber, $category);
 | 
	
		
			
				|  |  | ++          \Drupal::service('simplenews_mailjet_subscriptions.utilities')->unsubscribeUser($listID, $subscriber, $category);
 | 
	
		
			
				|  |  | +         }
 | 
	
		
			
				|  |  | +       }
 | 
	
		
			
				|  |  | +     }
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | ++  // \Drupal::service('simplenews_mailjet_subscriptions.utilities')->unsubscribeUser($subscriber, $subscription);
 | 
	
		
			
				|  |  | ++}
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++/**
 | 
	
		
			
				|  |  | ++ * Act after a subscriber is updated.
 | 
	
		
			
				|  |  | ++ *
 | 
	
		
			
				|  |  | ++ * @param \Drupal\simplenews\Entity\Subscriber $subscriber
 | 
	
		
			
				|  |  | ++ *   The subscriber object including all subscriptions of this user.
 | 
	
		
			
				|  |  | ++ *
 | 
	
		
			
				|  |  | ++ * @ingroup subscriber
 | 
	
		
			
				|  |  | ++ */
 | 
	
		
			
				|  |  | ++function simplenews_mailjet_subscriptions_simplenews_subscriber_update(Subscriber $subscriber) {
 | 
	
		
			
				|  |  | ++  $new_mail=$subscriber->getMail();
 | 
	
		
			
				|  |  | ++  $original_mail = $subscriber->original->getMail();
 | 
	
		
			
				|  |  | ++  if ($new_mail !== $original_mail) {
 | 
	
		
			
				|  |  | ++    $new_subscriptions = $subscriber->getSubscribedNewsletterIds();
 | 
	
		
			
				|  |  | ++    $original_subscriptions = $subscriber->original->getSubscribedNewsletterIds();
 | 
	
		
			
				|  |  | ++    $entities = SimplenewsMailjetSubscriptionEntity::loadMultiple();
 | 
	
		
			
				|  |  | ++    foreach ((array) $entities as $entity) {
 | 
	
		
			
				|  |  | ++      $listID = $entity->getID();
 | 
	
		
			
				|  |  | ++      $table = $entity->get('mapping_table');
 | 
	
		
			
				|  |  | ++      if (is_array($table)) {
 | 
	
		
			
				|  |  | ++        foreach ($table as $category) {
 | 
	
		
			
				|  |  | ++          if ( in_array($category['simplenews_news'], $original_subscriptions) ) {
 | 
	
		
			
				|  |  | ++            \Drupal::service('simplenews_mailjet_subscriptions.utilities')->unsubscribeUser($listID, $subscriber->original, $category);
 | 
	
		
			
				|  |  | ++          }
 | 
	
		
			
				|  |  | ++          if ( in_array($category['simplenews_news'], $new_subscriptions) ) {
 | 
	
		
			
				|  |  | ++            \Drupal::service('simplenews_mailjet_subscriptions.utilities')->subscribeUser($listID, $subscriber, $category);
 | 
	
		
			
				|  |  | ++          }
 | 
	
		
			
				|  |  | ++        }
 | 
	
		
			
				|  |  | ++      }
 | 
	
		
			
				|  |  | ++    }
 | 
	
		
			
				|  |  | ++  }
 | 
	
		
			
				|  |  | ++}
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++/**
 | 
	
		
			
				|  |  | ++ * Act after a subscriber has been deleted.
 | 
	
		
			
				|  |  | ++ *
 | 
	
		
			
				|  |  | ++ * @param \Drupal\simplenews\Entity\Subscriber $subscriber
 | 
	
		
			
				|  |  | ++ *   The subscriber object including all subscriptions of this user.
 | 
	
		
			
				|  |  | ++ *
 | 
	
		
			
				|  |  | ++ * @ingroup subscriber
 | 
	
		
			
				|  |  | ++ */
 | 
	
		
			
				|  |  | ++function simplenews_mailjet_subscriptions_simplenews_subscriber_delete(Subscriber $subscriber) {
 | 
	
		
			
				|  |  | ++  $entities = SimplenewsMailjetSubscriptionEntity::loadMultiple();
 | 
	
		
			
				|  |  | ++  foreach ((array) $entities as $entity) {
 | 
	
		
			
				|  |  | ++    $listID = $entity->getID();
 | 
	
		
			
				|  |  | ++    $table = $entity->get('mapping_table');
 | 
	
		
			
				|  |  | ++    if (is_array($table)) {
 | 
	
		
			
				|  |  | ++      foreach ($table as $category) {
 | 
	
		
			
				|  |  | ++        \Drupal::service('simplenews_mailjet_subscriptions.utilities')->unsubscribeUser($listID, $subscriber, $category);
 | 
	
		
			
				|  |  | ++      }
 | 
	
		
			
				|  |  | ++    }
 | 
	
		
			
				|  |  | ++  }
 | 
	
		
			
				|  |  | + }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | + /**
 | 
	
		
			
				|  |  | +diff --git a/simplenews_mailjet_subscriptions.services.yml b/simplenews_mailjet_subscriptions.services.yml
 | 
	
		
			
				|  |  | +new file mode 100644
 | 
	
		
			
				|  |  | +index 0000000..cee6a81
 | 
	
		
			
				|  |  | +--- /dev/null
 | 
	
		
			
				|  |  | ++++ b/simplenews_mailjet_subscriptions.services.yml
 | 
	
		
			
				|  |  | +@@ -0,0 +1,7 @@
 | 
	
		
			
				|  |  | ++services:
 | 
	
		
			
				|  |  | ++  simplenews_mailjet_subscriptions.handler:
 | 
	
		
			
				|  |  | ++    class: Drupal\simplenews_mailjet_subscriptions\SimplenewsMailjetSubscriptionsMailjetHandler
 | 
	
		
			
				|  |  | ++    arguments: ['@mailjet.client_factory']
 | 
	
		
			
				|  |  | ++  simplenews_mailjet_subscriptions.utilities:
 | 
	
		
			
				|  |  | ++    class: Drupal\simplenews_mailjet_subscriptions\SimplenewsMailjetSubscriptionsUtilities
 | 
	
		
			
				|  |  | ++    arguments: [ '@simplenews_mailjet_subscriptions.handler' ]
 | 
	
		
			
				|  |  | +diff --git a/src/Entity/SimplenewsMailjetSubscriptionEntity.php b/src/Entity/SimplenewsMailjetSubscriptionEntity.php
 | 
	
		
			
				|  |  | +index 27b7737..34c8df5 100644
 | 
	
		
			
				|  |  | +--- a/src/Entity/SimplenewsMailjetSubscriptionEntity.php
 | 
	
		
			
				|  |  | ++++ b/src/Entity/SimplenewsMailjetSubscriptionEntity.php
 | 
	
		
			
				|  |  | +@@ -30,8 +30,6 @@ use Drupal\Core\Config\Entity\ConfigEntityBase;
 | 
	
		
			
				|  |  | +  *   config_export = {
 | 
	
		
			
				|  |  | +  *     "id",
 | 
	
		
			
				|  |  | +  *     "title",
 | 
	
		
			
				|  |  | +- *     "api_key",
 | 
	
		
			
				|  |  | +- *     "secret_key",
 | 
	
		
			
				|  |  | +  *     "mapping_table"
 | 
	
		
			
				|  |  | +  *   }
 | 
	
		
			
				|  |  | +  * )
 | 
	
		
			
				|  |  | +@@ -94,53 +92,53 @@ class SimplenewsMailjetSubscriptionEntity extends ConfigEntityBase implements Si
 | 
	
		
			
				|  |  | +     return $this->get('id');
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-  /**
 | 
	
		
			
				|  |  | +-   * Returns the entity api key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @return string
 | 
	
		
			
				|  |  | +-   *   The entity api key.
 | 
	
		
			
				|  |  | +-   */
 | 
	
		
			
				|  |  | +-  public function getApiKey() {
 | 
	
		
			
				|  |  | +-    return $this->get('api_key');
 | 
	
		
			
				|  |  | +-  }
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-  /**
 | 
	
		
			
				|  |  | +-   * Sets the entity api key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @param string $api_key
 | 
	
		
			
				|  |  | +-   *   Api key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @return $this
 | 
	
		
			
				|  |  | +-   *   The Simplenews Mailjet Subscription entity.
 | 
	
		
			
				|  |  | +-   */
 | 
	
		
			
				|  |  | +-  public function setApiKey($api_key) {
 | 
	
		
			
				|  |  | +-    $this->set('api_key', $api_key);
 | 
	
		
			
				|  |  | +-    return $this;
 | 
	
		
			
				|  |  | +-  }
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-  /**
 | 
	
		
			
				|  |  | +-   * Returns the entity secret key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @return string
 | 
	
		
			
				|  |  | +-   *   The entity secret key.
 | 
	
		
			
				|  |  | +-   */
 | 
	
		
			
				|  |  | +-  public function getSecretkey() {
 | 
	
		
			
				|  |  | +-    return $this->get('secret_key');
 | 
	
		
			
				|  |  | +-  }
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-  /**
 | 
	
		
			
				|  |  | +-   * Sets the entity secret key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @param string $secret_key
 | 
	
		
			
				|  |  | +-   *   Secret key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @return $this
 | 
	
		
			
				|  |  | +-   *   The Simplenews Mailjet Subscription entity.
 | 
	
		
			
				|  |  | +-   */
 | 
	
		
			
				|  |  | +-  public function setSecretkey($secret_key) {
 | 
	
		
			
				|  |  | +-    $this->set('secret_key', $secret_key);
 | 
	
		
			
				|  |  | +-    return $this;
 | 
	
		
			
				|  |  | +-  }
 | 
	
		
			
				|  |  | ++  // /**
 | 
	
		
			
				|  |  | ++  //  * Returns the entity api key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @return string
 | 
	
		
			
				|  |  | ++  //  *   The entity api key.
 | 
	
		
			
				|  |  | ++  //  */
 | 
	
		
			
				|  |  | ++  // public function getApiKey() {
 | 
	
		
			
				|  |  | ++  //   return $this->get('api_key');
 | 
	
		
			
				|  |  | ++  // }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  // /**
 | 
	
		
			
				|  |  | ++  //  * Sets the entity api key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @param string $api_key
 | 
	
		
			
				|  |  | ++  //  *   Api key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @return $this
 | 
	
		
			
				|  |  | ++  //  *   The Simplenews Mailjet Subscription entity.
 | 
	
		
			
				|  |  | ++  //  */
 | 
	
		
			
				|  |  | ++  // public function setApiKey($api_key) {
 | 
	
		
			
				|  |  | ++  //   $this->set('api_key', $api_key);
 | 
	
		
			
				|  |  | ++  //   return $this;
 | 
	
		
			
				|  |  | ++  // }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  // /**
 | 
	
		
			
				|  |  | ++  //  * Returns the entity secret key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @return string
 | 
	
		
			
				|  |  | ++  //  *   The entity secret key.
 | 
	
		
			
				|  |  | ++  //  */
 | 
	
		
			
				|  |  | ++  // public function getSecretkey() {
 | 
	
		
			
				|  |  | ++  //   return $this->get('secret_key');
 | 
	
		
			
				|  |  | ++  // }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  // /**
 | 
	
		
			
				|  |  | ++  //  * Sets the entity secret key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @param string $secret_key
 | 
	
		
			
				|  |  | ++  //  *   Secret key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @return $this
 | 
	
		
			
				|  |  | ++  //  *   The Simplenews Mailjet Subscription entity.
 | 
	
		
			
				|  |  | ++  //  */
 | 
	
		
			
				|  |  | ++  // public function setSecretkey($secret_key) {
 | 
	
		
			
				|  |  | ++  //   $this->set('secret_key', $secret_key);
 | 
	
		
			
				|  |  | ++  //   return $this;
 | 
	
		
			
				|  |  | ++  // }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +   /**
 | 
	
		
			
				|  |  | +    * Sets the entity mapping table.
 | 
	
		
			
				|  |  | +diff --git a/src/Form/SimplenewsMailjetSubscriptionAddForm.php b/src/Form/SimplenewsMailjetSubscriptionAddForm.php
 | 
	
		
			
				|  |  | +index 836bee3..bc70090 100644
 | 
	
		
			
				|  |  | +--- a/src/Form/SimplenewsMailjetSubscriptionAddForm.php
 | 
	
		
			
				|  |  | ++++ b/src/Form/SimplenewsMailjetSubscriptionAddForm.php
 | 
	
		
			
				|  |  | +@@ -64,20 +64,20 @@ class SimplenewsMailjetSubscriptionAddForm extends EntityForm {
 | 
	
		
			
				|  |  | +         'exists' => [$this, 'exist'],
 | 
	
		
			
				|  |  | +       ],
 | 
	
		
			
				|  |  | +     ];
 | 
	
		
			
				|  |  | +-    $form['api_key'] = [
 | 
	
		
			
				|  |  | +-      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +-      '#title' => $this->t('API Key'),
 | 
	
		
			
				|  |  | +-      '#maxlength' => 32,
 | 
	
		
			
				|  |  | +-      '#description' => $this->t('Mailjet Account API Key'),
 | 
	
		
			
				|  |  | +-      '#required' => TRUE,
 | 
	
		
			
				|  |  | +-    ];
 | 
	
		
			
				|  |  | +-    $form['secret_key'] = [
 | 
	
		
			
				|  |  | +-      '#type' => 'password',
 | 
	
		
			
				|  |  | +-      '#title' => $this->t('Secret Key'),
 | 
	
		
			
				|  |  | +-      '#maxlength' => 32,
 | 
	
		
			
				|  |  | +-      '#description' => $this->t('Mailjet Account Secret Key'),
 | 
	
		
			
				|  |  | +-      '#required' => TRUE,
 | 
	
		
			
				|  |  | +-    ];
 | 
	
		
			
				|  |  | ++    // $form['api_key'] = [
 | 
	
		
			
				|  |  | ++    //   '#type' => 'textfield',
 | 
	
		
			
				|  |  | ++    //   '#title' => $this->t('API Key'),
 | 
	
		
			
				|  |  | ++    //   '#maxlength' => 32,
 | 
	
		
			
				|  |  | ++    //   '#description' => $this->t('Mailjet Account API Key'),
 | 
	
		
			
				|  |  | ++    //   '#required' => TRUE,
 | 
	
		
			
				|  |  | ++    // ];
 | 
	
		
			
				|  |  | ++    // $form['secret_key'] = [
 | 
	
		
			
				|  |  | ++    //   '#type' => 'password',
 | 
	
		
			
				|  |  | ++    //   '#title' => $this->t('Secret Key'),
 | 
	
		
			
				|  |  | ++    //   '#maxlength' => 32,
 | 
	
		
			
				|  |  | ++    //   '#description' => $this->t('Mailjet Account Secret Key'),
 | 
	
		
			
				|  |  | ++    //   '#required' => TRUE,
 | 
	
		
			
				|  |  | ++    // ];
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +     return $form;
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | +diff --git a/src/Form/SimplenewsMailjetSubscriptionEditForm.php b/src/Form/SimplenewsMailjetSubscriptionEditForm.php
 | 
	
		
			
				|  |  | +index 98342b5..f67ba96 100644
 | 
	
		
			
				|  |  | +--- a/src/Form/SimplenewsMailjetSubscriptionEditForm.php
 | 
	
		
			
				|  |  | ++++ b/src/Form/SimplenewsMailjetSubscriptionEditForm.php
 | 
	
		
			
				|  |  | +@@ -76,20 +76,20 @@ class SimplenewsMailjetSubscriptionEditForm extends EntityForm {
 | 
	
		
			
				|  |  | +       '#help' => $this->t('Configuration title'),
 | 
	
		
			
				|  |  | +       '#required' => TRUE,
 | 
	
		
			
				|  |  | +     ];
 | 
	
		
			
				|  |  | +-    $form['api_key'] = [
 | 
	
		
			
				|  |  | +-      '#type' => 'textfield',
 | 
	
		
			
				|  |  | +-      '#title' => $this->t('API Key'),
 | 
	
		
			
				|  |  | +-      '#maxlength' => 32,
 | 
	
		
			
				|  |  | +-      '#default_value' => $this->entity->getApiKey(),
 | 
	
		
			
				|  |  | +-      '#help' => $this->t('Mailjet Account API Key'),
 | 
	
		
			
				|  |  | +-      '#required' => TRUE,
 | 
	
		
			
				|  |  | +-      '#disabled' => !$this->entity->isNew(),
 | 
	
		
			
				|  |  | +-    ];
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-    if ($this->entity->getApiKey() && $this->entity->getSecretkey()) {
 | 
	
		
			
				|  |  | ++    // $form['api_key'] = [
 | 
	
		
			
				|  |  | ++    //   '#type' => 'textfield',
 | 
	
		
			
				|  |  | ++    //   '#title' => $this->t('API Key'),
 | 
	
		
			
				|  |  | ++    //   '#maxlength' => 32,
 | 
	
		
			
				|  |  | ++    //   '#default_value' => $this->entity->getApiKey(),
 | 
	
		
			
				|  |  | ++    //   '#help' => $this->t('Mailjet Account API Key'),
 | 
	
		
			
				|  |  | ++    //   '#required' => TRUE,
 | 
	
		
			
				|  |  | ++    //   '#disabled' => !$this->entity->isNew(),
 | 
	
		
			
				|  |  | ++    // ];
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    // if ($this->entity->getApiKey() && $this->entity->getSecretkey()) {
 | 
	
		
			
				|  |  | +       $this->constructTable($form, $form_state);
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-    }
 | 
	
		
			
				|  |  | ++    // }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +     $form['add_subscription'] = [
 | 
	
		
			
				|  |  | +       '#type' => 'submit',
 | 
	
		
			
				|  |  | +diff --git a/src/Plugin/RulesAction/UnsubscribeFromList.php b/src/Plugin/RulesAction/UnsubscribeFromList.php
 | 
	
		
			
				|  |  | +new file mode 100644
 | 
	
		
			
				|  |  | +index 0000000..3f546ef
 | 
	
		
			
				|  |  | +--- /dev/null
 | 
	
		
			
				|  |  | ++++ b/src/Plugin/RulesAction/UnsubscribeFromList.php
 | 
	
		
			
				|  |  | +@@ -0,0 +1,51 @@
 | 
	
		
			
				|  |  | ++<?php
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++namespace Drupal\simplenews_mailjet_subscriptions\Plugin\RulesAction;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++use Drupal\rules\Core\RulesActionBase;
 | 
	
		
			
				|  |  | ++use Drupal\simplenews\SubscriberInterface;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++/**
 | 
	
		
			
				|  |  | ++ * Provides a 'Unsubscribe' action.
 | 
	
		
			
				|  |  | ++ *
 | 
	
		
			
				|  |  | ++ * @RulesAction(
 | 
	
		
			
				|  |  | ++ *   id = "rules_simplenews_mailjet_subscriptions_unsubscribe_from_list",
 | 
	
		
			
				|  |  | ++ *   label = @Translation("Unsubscribe from newsletter, giving mailjet listID and email"),
 | 
	
		
			
				|  |  | ++ *   category = @Translation("Simplenews Mailjet Subscriptions"),
 | 
	
		
			
				|  |  | ++ *   context_definitions = {
 | 
	
		
			
				|  |  | ++ *     "listID" = @ContextDefinition("integer",
 | 
	
		
			
				|  |  | ++ *       label = @Translation("Mailjet list ID"),
 | 
	
		
			
				|  |  | ++ *       description = @Translation("Specifies the mailjet list ID from which simplenews list will be found and email will be unsubscribed from.")
 | 
	
		
			
				|  |  | ++ *     ),
 | 
	
		
			
				|  |  | ++ *     "email" = @ContextDefinition("string",
 | 
	
		
			
				|  |  | ++ *       label = @Translation("Subscriber email"),
 | 
	
		
			
				|  |  | ++ *       description = @Translation("Specifies the email to unsubscribe.")
 | 
	
		
			
				|  |  | ++ *     )
 | 
	
		
			
				|  |  | ++ *   }
 | 
	
		
			
				|  |  | ++ * )
 | 
	
		
			
				|  |  | ++ */
 | 
	
		
			
				|  |  | ++class UnsubscribeFromList extends RulesActionBase {
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  /**
 | 
	
		
			
				|  |  | ++   * Deletes the Entity.
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @param integer listID
 | 
	
		
			
				|  |  | ++   *    The mailjet list to unsubcsribe from.
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @param string email
 | 
	
		
			
				|  |  | ++   *    The email to unsubcribe.
 | 
	
		
			
				|  |  | ++   */
 | 
	
		
			
				|  |  | ++  protected function doExecute(integer $listID, string $email) {
 | 
	
		
			
				|  |  | ++    $l = $listID;
 | 
	
		
			
				|  |  | ++    $e = $email;
 | 
	
		
			
				|  |  | ++    \Drupal::logger('simplenews_mailjet_subscriptions')->notice(print_r($listID, true));
 | 
	
		
			
				|  |  | ++    // \Drupal::logger('simplenews_mailjet_subscriptions')->notice("Unsubscribe webhook triggered for listID: " . $listID . ", and email: " . $email . ".");
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    // find corresponding simplenews list from mailjet listID
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    // get subscriber entity
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    // unsubscribe subscriber from simplenews list
 | 
	
		
			
				|  |  | ++  }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++}
 | 
	
		
			
				|  |  | +\ No newline at end of file
 | 
	
		
			
				|  |  | +diff --git a/src/SimplenewsMailjetSubscriptionsInterface.php b/src/SimplenewsMailjetSubscriptionsInterface.php
 | 
	
		
			
				|  |  | +index c727d26..37c082d 100644
 | 
	
		
			
				|  |  | +--- a/src/SimplenewsMailjetSubscriptionsInterface.php
 | 
	
		
			
				|  |  | ++++ b/src/SimplenewsMailjetSubscriptionsInterface.php
 | 
	
		
			
				|  |  | +@@ -36,43 +36,43 @@ interface SimplenewsMailjetSubscriptionsInterface extends ConfigEntityInterface
 | 
	
		
			
				|  |  | +    */
 | 
	
		
			
				|  |  | +   public function getId();
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-  /**
 | 
	
		
			
				|  |  | +-   * Returns the entity api key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @return string
 | 
	
		
			
				|  |  | +-   *   The entity api key.
 | 
	
		
			
				|  |  | +-   */
 | 
	
		
			
				|  |  | +-  public function getApiKey();
 | 
	
		
			
				|  |  | ++  // /**
 | 
	
		
			
				|  |  | ++  //  * Returns the entity api key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @return string
 | 
	
		
			
				|  |  | ++  //  *   The entity api key.
 | 
	
		
			
				|  |  | ++  //  */
 | 
	
		
			
				|  |  | ++  // public function getApiKey();
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-  /**
 | 
	
		
			
				|  |  | +-   * Sets the entity api key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @param string $api_key
 | 
	
		
			
				|  |  | +-   *   Api key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @return $this
 | 
	
		
			
				|  |  | +-   *   The Simplenews Mailjet Subscription entity.
 | 
	
		
			
				|  |  | +-   */
 | 
	
		
			
				|  |  | +-  public function setApiKey($api_key);
 | 
	
		
			
				|  |  | ++  // /**
 | 
	
		
			
				|  |  | ++  //  * Sets the entity api key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @param string $api_key
 | 
	
		
			
				|  |  | ++  //  *   Api key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @return $this
 | 
	
		
			
				|  |  | ++  //  *   The Simplenews Mailjet Subscription entity.
 | 
	
		
			
				|  |  | ++  //  */
 | 
	
		
			
				|  |  | ++  // public function setApiKey($api_key);
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-  /**
 | 
	
		
			
				|  |  | +-   * Returns the entity secret key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @return string
 | 
	
		
			
				|  |  | +-   *   The entity secret key.
 | 
	
		
			
				|  |  | +-   */
 | 
	
		
			
				|  |  | +-  public function getSecretkey();
 | 
	
		
			
				|  |  | ++  // /**
 | 
	
		
			
				|  |  | ++  //  * Returns the entity secret key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @return string
 | 
	
		
			
				|  |  | ++  //  *   The entity secret key.
 | 
	
		
			
				|  |  | ++  //  */
 | 
	
		
			
				|  |  | ++  // public function getSecretkey();
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-  /**
 | 
	
		
			
				|  |  | +-   * Sets the entity secret key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @param string $secret_key
 | 
	
		
			
				|  |  | +-   *   Secret key.
 | 
	
		
			
				|  |  | +-   *
 | 
	
		
			
				|  |  | +-   * @return $this
 | 
	
		
			
				|  |  | +-   *   The Simplenews Mailjet Subscription entity.
 | 
	
		
			
				|  |  | +-   */
 | 
	
		
			
				|  |  | +-  public function setSecretkey($secret_key);
 | 
	
		
			
				|  |  | ++  // /**
 | 
	
		
			
				|  |  | ++  //  * Sets the entity secret key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @param string $secret_key
 | 
	
		
			
				|  |  | ++  //  *   Secret key.
 | 
	
		
			
				|  |  | ++  //  *
 | 
	
		
			
				|  |  | ++  //  * @return $this
 | 
	
		
			
				|  |  | ++  //  *   The Simplenews Mailjet Subscription entity.
 | 
	
		
			
				|  |  | ++  //  */
 | 
	
		
			
				|  |  | ++  // public function setSecretkey($secret_key);
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +   /**
 | 
	
		
			
				|  |  | +    * Sets the entity mapping table.
 | 
	
		
			
				|  |  | +diff --git a/src/SimplenewsMailjetSubscriptionsMailjetHandler.php b/src/SimplenewsMailjetSubscriptionsMailjetHandler.php
 | 
	
		
			
				|  |  | +new file mode 100644
 | 
	
		
			
				|  |  | +index 0000000..a68cbf1
 | 
	
		
			
				|  |  | +--- /dev/null
 | 
	
		
			
				|  |  | ++++ b/src/SimplenewsMailjetSubscriptionsMailjetHandler.php
 | 
	
		
			
				|  |  | +@@ -0,0 +1,47 @@
 | 
	
		
			
				|  |  | ++<?php
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++namespace Drupal\simplenews_mailjet_subscriptions;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++use Mailjet\Resources;
 | 
	
		
			
				|  |  | ++use Drupal\mailjet\MailjetHandler;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++/**
 | 
	
		
			
				|  |  | ++ * Implement SimplenewsMailjetSubscriptionsMailjetHandler interface.
 | 
	
		
			
				|  |  | ++ */
 | 
	
		
			
				|  |  | ++class SimplenewsMailjetSubscriptionsMailjetHandler extends MailjetHandler implements SimplenewsMailjetSubscriptionsMailjetHandlerInterface{
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  /**
 | 
	
		
			
				|  |  | ++   * {@inheritdoc}
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @return array|null
 | 
	
		
			
				|  |  | ++   *   Return array with result or null.
 | 
	
		
			
				|  |  | ++   */
 | 
	
		
			
				|  |  | ++  public function createMailjetContact($email): ?array {
 | 
	
		
			
				|  |  | ++    
 | 
	
		
			
				|  |  | ++    $response = $this->mailjetClient->post(Resources::$Contact, ["body" => ['Email' => $email]]);
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    if ($response->success()) {
 | 
	
		
			
				|  |  | ++      return $response->getData();
 | 
	
		
			
				|  |  | ++    }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    return NULL;
 | 
	
		
			
				|  |  | ++  }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  /**
 | 
	
		
			
				|  |  | ++   * {@inheritdoc}
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @return array|null
 | 
	
		
			
				|  |  | ++   *   Return array with result or null.
 | 
	
		
			
				|  |  | ++   */
 | 
	
		
			
				|  |  | ++  public function getMailjetContactByEmail($email): ?array {
 | 
	
		
			
				|  |  | ++    
 | 
	
		
			
				|  |  | ++    $response = $this->mailjetClient->get(Resources::$Contact, ['id' => $email]);
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    if ($response->success()) {
 | 
	
		
			
				|  |  | ++      return $response->getData();
 | 
	
		
			
				|  |  | ++    }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    return NULL;
 | 
	
		
			
				|  |  | ++  }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++}
 | 
	
		
			
				|  |  | +\ No newline at end of file
 | 
	
		
			
				|  |  | +diff --git a/src/SimplenewsMailjetSubscriptionsMailjetHandlerInterface.php b/src/SimplenewsMailjetSubscriptionsMailjetHandlerInterface.php
 | 
	
		
			
				|  |  | +new file mode 100644
 | 
	
		
			
				|  |  | +index 0000000..b6484d7
 | 
	
		
			
				|  |  | +--- /dev/null
 | 
	
		
			
				|  |  | ++++ b/src/SimplenewsMailjetSubscriptionsMailjetHandlerInterface.php
 | 
	
		
			
				|  |  | +@@ -0,0 +1,34 @@
 | 
	
		
			
				|  |  | ++<?php
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++namespace Drupal\simplenews_mailjet_subscriptions;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++use Drupal\mailjet\MailjetHandlerInterface;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++/**
 | 
	
		
			
				|  |  | ++ * Interface for mailjet handler.
 | 
	
		
			
				|  |  | ++ */
 | 
	
		
			
				|  |  | ++interface SimplenewsMailjetSubscriptionsMailjetHandlerInterface extends MailjetHandlerInterface {
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  /**
 | 
	
		
			
				|  |  | ++   * create contact.
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @param string $email
 | 
	
		
			
				|  |  | ++   *   email of the contact
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @return array|null
 | 
	
		
			
				|  |  | ++   *   Return array with the result or null.
 | 
	
		
			
				|  |  | ++   */
 | 
	
		
			
				|  |  | ++  public function createMailjetContact($email): ?array;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  /**
 | 
	
		
			
				|  |  | ++   * Get contact by email.
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @param string $email
 | 
	
		
			
				|  |  | ++   *   email of the contact
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @return array|null
 | 
	
		
			
				|  |  | ++   *   Return array with the result or null.
 | 
	
		
			
				|  |  | ++   */
 | 
	
		
			
				|  |  | ++  public function getMailjetContactByEmail($email): ?array;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++}
 | 
	
		
			
				|  |  | +\ No newline at end of file
 | 
	
		
			
				|  |  | +diff --git a/src/SimplenewsMailjetSubscriptionsUtilities.php b/src/SimplenewsMailjetSubscriptionsUtilities.php
 | 
	
		
			
				|  |  | +index 950ff8a..5cb351d 100644
 | 
	
		
			
				|  |  | +--- a/src/SimplenewsMailjetSubscriptionsUtilities.php
 | 
	
		
			
				|  |  | ++++ b/src/SimplenewsMailjetSubscriptionsUtilities.php
 | 
	
		
			
				|  |  | +@@ -2,141 +2,122 @@
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | + namespace Drupal\simplenews_mailjet_subscriptions;
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | ++// use Drupal\mailjet\MailjetHandlerInterface;
 | 
	
		
			
				|  |  | ++use Drupal\simplenews_mailjet_subscriptions\SimplenewsMailjetSubscriptionsMailjetHandlerInterface;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | + /**
 | 
	
		
			
				|  |  | +- * Provides a list of Simplenews Mailjet Subscription entities.
 | 
	
		
			
				|  |  | ++ * Utilisties
 | 
	
		
			
				|  |  | +  */
 | 
	
		
			
				|  |  | + class SimplenewsMailjetSubscriptionsUtilities {
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +   /**
 | 
	
		
			
				|  |  | +-   * Check Subscriber.
 | 
	
		
			
				|  |  | ++   * MailjetHandler service.
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @var \Drupal\Simplenews_mailjet_subscriptions\SimplenewsMailjetSubscriptionsMailjetHandlerInterface
 | 
	
		
			
				|  |  | ++   */
 | 
	
		
			
				|  |  | ++  protected $mailjetHandler;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++/**
 | 
	
		
			
				|  |  | ++   * SubscribeEmailForm constructor.
 | 
	
		
			
				|  |  | ++   *
 | 
	
		
			
				|  |  | ++   * @param \Drupal\Simplenews_mailjet_subscriptions\SimplenewsMailjetSubscriptionsMailjetHandlerInterface $mailjetHandler
 | 
	
		
			
				|  |  | ++   *   The mailjet handler service.
 | 
	
		
			
				|  |  | +    */
 | 
	
		
			
				|  |  | +-  private static function checkSubscriber($api_key, $secret_key, $encoded_mail) {
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-    // Check if contact exist
 | 
	
		
			
				|  |  | +-    // verifica se o contacto ja tem opções.
 | 
	
		
			
				|  |  | +-    $endpoint = 'https://api.mailjet.com/v3/REST/contactdata/' . $encoded_mail;
 | 
	
		
			
				|  |  | +-    $ch = curl_init();
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_USERPWD, $api_key . ':' . $secret_key);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_URL, $endpoint);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 | 
	
		
			
				|  |  | +-    $response = curl_exec($ch);
 | 
	
		
			
				|  |  | +-    curl_close($ch);
 | 
	
		
			
				|  |  | +-    $json = json_decode($response, TRUE);
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-    return $json;
 | 
	
		
			
				|  |  | ++  public function __construct(SimplenewsMailjetSubscriptionsMailjetHandlerInterface $mailjetHandler) {
 | 
	
		
			
				|  |  | ++    $this->mailjetHandler = $mailjetHandler;
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +   /**
 | 
	
		
			
				|  |  | +-   * Update Subscriber.
 | 
	
		
			
				|  |  | ++   * {@inheritDoc}
 | 
	
		
			
				|  |  | +    */
 | 
	
		
			
				|  |  | +-  private static function updateSubscriber($api_key, $secret_key, $listID, $subscriber_email, $contact_property, $newsletter_property_name, $action) {
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-    // Add contact to mailjet.
 | 
	
		
			
				|  |  | +-    $endpoint = 'https://api.mailjet.com/v3/REST/contactslist/' . $listID . '/managecontact';
 | 
	
		
			
				|  |  | +-    $message = [
 | 
	
		
			
				|  |  | +-      "Properties" => [
 | 
	
		
			
				|  |  | +-        $contact_property => $newsletter_property_name,
 | 
	
		
			
				|  |  | +-      ],
 | 
	
		
			
				|  |  | +-      "Action" => $action,
 | 
	
		
			
				|  |  | +-      "Email" => $subscriber_email,
 | 
	
		
			
				|  |  | +-    ];
 | 
	
		
			
				|  |  | +-    $payload = json_encode($message);
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-    $ch = curl_init();
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_POST, 1);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_USERPWD, $api_key . ':' . $secret_key);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_URL, $endpoint);
 | 
	
		
			
				|  |  | +-    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 | 
	
		
			
				|  |  | +-    $response = curl_exec($ch);
 | 
	
		
			
				|  |  | +-    curl_close($ch);
 | 
	
		
			
				|  |  | +-    $json = json_decode($response, TRUE);
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-    return $json;
 | 
	
		
			
				|  |  | ++  public static function create(ContainerInterface $container) {
 | 
	
		
			
				|  |  | ++    return new static(
 | 
	
		
			
				|  |  | ++      $container->get('simplenews_mailjet_subscriptions.handler')
 | 
	
		
			
				|  |  | ++    );
 | 
	
		
			
				|  |  | ++  }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  public function checkSubscriber($encoded_mail) {
 | 
	
		
			
				|  |  | ++    $response = $this->mailjetHandler->getMailjetContactByEmail($encoded_mail);
 | 
	
		
			
				|  |  | ++    if ($response) {
 | 
	
		
			
				|  |  | ++      // contact alredy exists
 | 
	
		
			
				|  |  | ++      $contact_id = $response[0]['ID'];
 | 
	
		
			
				|  |  | ++      return $contact_id;
 | 
	
		
			
				|  |  | ++    }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    return null;
 | 
	
		
			
				|  |  | ++  }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++  public function createSubscriber($email) {
 | 
	
		
			
				|  |  | ++    $response = $this->mailjetHandler->createMailjetContact($email);
 | 
	
		
			
				|  |  | ++    if ($response) {
 | 
	
		
			
				|  |  | ++      // contact alredy exists
 | 
	
		
			
				|  |  | ++      $contact_id = $response[0]['ID'];
 | 
	
		
			
				|  |  | ++      return $contact_id;
 | 
	
		
			
				|  |  | ++    }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    return null;
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +   /**
 | 
	
		
			
				|  |  | +    * Subscribe User.
 | 
	
		
			
				|  |  | +    */
 | 
	
		
			
				|  |  | +-  public static function subscribeUser($subscriber, $subscription, $category, $api_key, $secret_key, $listID) {
 | 
	
		
			
				|  |  | ++  public function subscribeUser($listID, $subscriber, $category) {
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-    $contact_property = $category['contact_property'];
 | 
	
		
			
				|  |  | +-    $newsletter_property_name = $category['newsletter_property_name'];
 | 
	
		
			
				|  |  | +     $subscriber_email = $subscriber->getMail();
 | 
	
		
			
				|  |  | +-    $encoded_mail = urlencode($subscriber_email);
 | 
	
		
			
				|  |  | +-    $response = '';
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-    $contact_info = self::checkSubscriber($api_key, $secret_key, $encoded_mail);
 | 
	
		
			
				|  |  | ++    // hook is sometimes called with empty subscriber
 | 
	
		
			
				|  |  | ++    if (!$subscriber_email) return;
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-    $options = $contact_info['Data'];
 | 
	
		
			
				|  |  | ++    $encoded_mail = urlencode($subscriber_email);
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-    // Se existe - acrescenta a opções.
 | 
	
		
			
				|  |  | +-    if ($options[0]['Data']) {
 | 
	
		
			
				|  |  | +-      foreach ($options[0]['Data'] as $property) {
 | 
	
		
			
				|  |  | +-        if ($property["Name"] == $contact_property) {
 | 
	
		
			
				|  |  | ++    $contactid = $this->checkSubscriber($encoded_mail);
 | 
	
		
			
				|  |  | ++    if (!$contactid) {
 | 
	
		
			
				|  |  | ++      // subscriber does not exists yet, create it
 | 
	
		
			
				|  |  | ++      $contactid = $this->createSubscriber($subscriber_email);
 | 
	
		
			
				|  |  | ++    }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-          if (is_int(strpos($property['Value'], $newsletter_property_name))) {
 | 
	
		
			
				|  |  | +-            $newsletter_property_name = $property['Value'];
 | 
	
		
			
				|  |  | +-          }
 | 
	
		
			
				|  |  | +-          else {
 | 
	
		
			
				|  |  | +-            $newsletter_property_name = $property['Value'] . ';' . $newsletter_property_name;
 | 
	
		
			
				|  |  | +-          }
 | 
	
		
			
				|  |  | +-        }
 | 
	
		
			
				|  |  | ++    if ($contactid) {
 | 
	
		
			
				|  |  | ++      $contact = [
 | 
	
		
			
				|  |  | ++        'Email' => $subscriber_email,
 | 
	
		
			
				|  |  | ++        // 'Properties' => [
 | 
	
		
			
				|  |  | ++        //   $contact_property => $newsletter_property_name
 | 
	
		
			
				|  |  | ++        // ]
 | 
	
		
			
				|  |  | ++      ];
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++      $response = $this->mailjetHandler->syncMailjetContact($listID, $contact, 'addnoforce');
 | 
	
		
			
				|  |  | ++      if ($response) {
 | 
	
		
			
				|  |  | ++        // $contact_id = $response['Data'][0]['ContactID'];
 | 
	
		
			
				|  |  | ++        \Drupal::logger('simplenews_mailjet_subscriptions')->notice('The mailjet user ' . $subscriber_email . ' subscribed to the ' . $listID . ' list.');
 | 
	
		
			
				|  |  | ++      }else{
 | 
	
		
			
				|  |  | ++        \Drupal::logger('simplenews_mailjet_subscriptions')->warning('error while subscrining ' . $subscriber_email . ' to the ' . $listID . ' list.');
 | 
	
		
			
				|  |  | +       }
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | ++    } else {
 | 
	
		
			
				|  |  | ++      \Drupal::logger('simplenews_mailjet_subscriptions')->warning($subscriber_email . ' does not exists and can not be created on mailjet.');
 | 
	
		
			
				|  |  | +     }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-    $response = self::updateSubscriber($api_key, $secret_key, $listID, $subscriber_email, $contact_property, $newsletter_property_name, 'addnoforce');
 | 
	
		
			
				|  |  | +-    $contact_id = $response['Data'][0]['ContactID'];
 | 
	
		
			
				|  |  | +-    \Drupal::logger('simplenews_mailjet_subscriptions')->notice('The mailjet user ' . $contact_id . ' subscribed to the ' . $contact_property . ' properties with the ' . $newsletter_property_name . ' values in the list ' . $listID . '.');
 | 
	
		
			
				|  |  | +-    return $response;
 | 
	
		
			
				|  |  | ++
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +   /**
 | 
	
		
			
				|  |  | +    * Unsubscribe User.
 | 
	
		
			
				|  |  | +    */
 | 
	
		
			
				|  |  | +-  public static function unsubscribeUser($subscriber, $subscription, $category, $api_key, $secret_key, $listID) {
 | 
	
		
			
				|  |  | +-    $contact_property = $category['contact_property'];
 | 
	
		
			
				|  |  | +-    $newsletter_property_name = $category['newsletter_property_name'];
 | 
	
		
			
				|  |  | ++  public function unsubscribeUser($listID, $subscriber, $category) {
 | 
	
		
			
				|  |  | +     $subscriber_email = $subscriber->getMail();
 | 
	
		
			
				|  |  | +-    $encoded_mail = urlencode($subscriber_email);
 | 
	
		
			
				|  |  | +-    $response = '';
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-    $contact_info = self::checkSubscriber($api_key, $secret_key, $encoded_mail);
 | 
	
		
			
				|  |  | +-    $contact_id = $contact_info['ContactID'];
 | 
	
		
			
				|  |  | +-    $options = $contact_info['Data'];
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-    if ($options[0]['Data']) {
 | 
	
		
			
				|  |  | +-      foreach ($options[0]['Data'] as $property) {
 | 
	
		
			
				|  |  | +-        if ($property["Name"] == $contact_property) {
 | 
	
		
			
				|  |  | +-          if (substr_count($property['Value'], ';') == 0) {
 | 
	
		
			
				|  |  | +-            $newsletter_property_name = '';
 | 
	
		
			
				|  |  | +-            $response = self::updateSubscriber($api_key, $secret_key, $listID, $subscriber_email, $contact_property, $newsletter_property_name, 'remove');
 | 
	
		
			
				|  |  | +-            $contact_id = $response['Data'][0]['ContactID'];
 | 
	
		
			
				|  |  | +-            \Drupal::logger('simplenews_mailjet_subscriptions')->notice('The mailjet user ' . $contact_id . ' unsubscribed to the list ' . $listID . '.');
 | 
	
		
			
				|  |  | +-          }
 | 
	
		
			
				|  |  | +-          else {
 | 
	
		
			
				|  |  | +-            $pos = strpos($property['Value'], $newsletter_property_name);
 | 
	
		
			
				|  |  | +-            \Drupal::logger('simplenews_mailjet_subscriptions')->notice('The mailjet user ' . $contact_id . ' unsubscribed to the ' . $contact_property . ' properties with the ' . $newsletter_property_name . ' values in the list ' . $listID . '.');
 | 
	
		
			
				|  |  | +-            if ($pos === 0) {
 | 
	
		
			
				|  |  | +-              $newsletter_property_name = str_replace($newsletter_property_name . ';', '', $property['Value']);
 | 
	
		
			
				|  |  | +-            }
 | 
	
		
			
				|  |  | +-            else {
 | 
	
		
			
				|  |  | +-              $newsletter_property_name = str_replace(';' . $newsletter_property_name, '', $property['Value']);
 | 
	
		
			
				|  |  | +-            }
 | 
	
		
			
				|  |  | +-            $response = self::updateSubscriber($api_key, $secret_key, $listID, $subscriber_email, $contact_property, $newsletter_property_name, 'addnoforce');
 | 
	
		
			
				|  |  | +-            $contact_id = $response['Data'][0]['ContactID'];
 | 
	
		
			
				|  |  | +-            \Drupal::logger('simplenews_mailjet_subscriptions')->notice('The mailjet user ' . $contact_id . 'remains subscribed to the ' . $contact_property . ' properties with the ' . $newsletter_property_name . ' values in the list ' . $listID . '.');
 | 
	
		
			
				|  |  | +-
 | 
	
		
			
				|  |  | +-          }
 | 
	
		
			
				|  |  | +-        }
 | 
	
		
			
				|  |  | +-      }
 | 
	
		
			
				|  |  | +-    }
 | 
	
		
			
				|  |  | ++    $contact = [
 | 
	
		
			
				|  |  | ++      'Email' => $subscriber_email,
 | 
	
		
			
				|  |  | ++      // 'Properties' => [
 | 
	
		
			
				|  |  | ++      //   $contact_property => $newsletter_property_name
 | 
	
		
			
				|  |  | ++      // ]
 | 
	
		
			
				|  |  | ++    ];
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +-    return $response;
 | 
	
		
			
				|  |  | ++    $response = $this->mailjetHandler->syncMailjetContact($listID, $contact, 'remove');
 | 
	
		
			
				|  |  | ++    if ($response) {
 | 
	
		
			
				|  |  | ++      // $contact_id = $response['Data'][0]['ContactID'];
 | 
	
		
			
				|  |  | ++      \Drupal::logger('simplenews_mailjet_subscriptions')->notice('The mailjet user ' . $subscriber_email . ' removed from the ' . $listID . ' list.');
 | 
	
		
			
				|  |  | ++    }else{
 | 
	
		
			
				|  |  | ++      \Drupal::logger('simplenews_mailjet_subscriptions')->warning('error while removing ' . $subscriber_email . ' from the ' . $listID . ' list.');
 | 
	
		
			
				|  |  | ++    }
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | + }
 |