fixed #1983 hook_simplenews_subscriber_update
This commit is contained in:
parent
543e650016
commit
a99716da8f
|
@ -302,7 +302,7 @@
|
|||
"With no blocks, clicking on the Custom Blocks tab crashes site https://www.drupal.org/project/structure_sync/issues/3070414":"https://www.drupal.org/files/issues/2022-03-23/PluginNotFoundException-3070414-3.patch"
|
||||
},
|
||||
"drupal/simplenews_mailjet_subscriptions": {
|
||||
"using mailjet module":"./patches/simplenews_mailjet_subscriptions__usingmailjetmodule.patch"
|
||||
"using mailjet module":"./patches/simplenews_mailjet_subscriptions__usingmailjetmodule#2.patch"
|
||||
},
|
||||
"drupal/graphql": {
|
||||
"invalid translation language https://github.com/drupal-graphql/graphql/pull/1176": "./patches/graphql-fix-invalid-translation-language-dev.patch"
|
||||
|
|
|
@ -0,0 +1,791 @@
|
|||
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.');
|
||||
+ }
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue