123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791 |
- 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..55a4954 100644
- --- a/src/SimplenewsMailjetSubscriptionsUtilities.php
- +++ b/src/SimplenewsMailjetSubscriptionsUtilities.php
- @@ -2,141 +2,118 @@
-
- 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);
- -
- - $options = $contact_info['Data'];
-
- - // 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.');
- + }
- }
-
- }
|