|
@@ -0,0 +1,266 @@
|
|
|
+diff --git a/simplenews_mailjet_subscriptions.info.yml b/simplenews_mailjet_subscriptions.info.yml
|
|
|
+index 2512a39..d4b0440 100644
|
|
|
+--- a/simplenews_mailjet_subscriptions.info.yml
|
|
|
++++ b/simplenews_mailjet_subscriptions.info.yml
|
|
|
+@@ -7,3 +7,4 @@ package: Mail
|
|
|
+ configure: simplenews_mailjet_subscription.list
|
|
|
+ dependencies:
|
|
|
+ - simplenews:simplenews
|
|
|
++ - mailjet:mailjet
|
|
|
+diff --git a/simplenews_mailjet_subscriptions.module b/simplenews_mailjet_subscriptions.module
|
|
|
+index 09abe13..4b2ee58 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,19 @@ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+diff --git a/simplenews_mailjet_subscriptions.services.yml b/simplenews_mailjet_subscriptions.services.yml
|
|
|
+new file mode 100644
|
|
|
+index 0000000..cdd4137
|
|
|
+--- /dev/null
|
|
|
++++ b/simplenews_mailjet_subscriptions.services.yml
|
|
|
+@@ -0,0 +1,4 @@
|
|
|
++services:
|
|
|
++ simplenews_mailjet_subscriptions.utilities:
|
|
|
++ class: Drupal\simplenews_mailjet_subscriptions\SimplenewsMailjetSubscriptionsUtilities
|
|
|
++ arguments: [ '@mailjet.handler' ]
|
|
|
+diff --git a/src/SimplenewsMailjetSubscriptionsUtilities.php b/src/SimplenewsMailjetSubscriptionsUtilities.php
|
|
|
+index 950ff8a..05601ca 100644
|
|
|
+--- a/src/SimplenewsMailjetSubscriptionsUtilities.php
|
|
|
++++ b/src/SimplenewsMailjetSubscriptionsUtilities.php
|
|
|
+@@ -2,141 +2,79 @@
|
|
|
+
|
|
|
+ namespace Drupal\simplenews_mailjet_subscriptions;
|
|
|
+
|
|
|
++use Drupal\mailjet\MailjetHandlerInterface;
|
|
|
++
|
|
|
+ /**
|
|
|
+- * Provides a list of Simplenews Mailjet Subscription entities.
|
|
|
++ * Utilisties
|
|
|
+ */
|
|
|
+ class SimplenewsMailjetSubscriptionsUtilities {
|
|
|
+
|
|
|
+ /**
|
|
|
+- * Check Subscriber.
|
|
|
++ * MailjetHandler service.
|
|
|
++ *
|
|
|
++ * @var \Drupal\mailjet\MailjetHandlerInterface
|
|
|
+ */
|
|
|
+- 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);
|
|
|
++ protected $mailjetHandler;
|
|
|
+
|
|
|
+- return $json;
|
|
|
++/**
|
|
|
++ * SubscribeEmailForm constructor.
|
|
|
++ *
|
|
|
++ * @param \Drupal\mailjet\MailjetHandlerInterface $mailjetHandler
|
|
|
++ * The mailjet handler service.
|
|
|
++ */
|
|
|
++ public function __construct(MailjetHandlerInterface $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('mailjet.handler')
|
|
|
++ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 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) {
|
|
|
+-
|
|
|
+- if (is_int(strpos($property['Value'], $newsletter_property_name))) {
|
|
|
+- $newsletter_property_name = $property['Value'];
|
|
|
+- }
|
|
|
+- else {
|
|
|
+- $newsletter_property_name = $property['Value'] . ';' . $newsletter_property_name;
|
|
|
+- }
|
|
|
+- }
|
|
|
+- }
|
|
|
+- }
|
|
|
++ $contact = [
|
|
|
++ 'Email' => $subscriber_email,
|
|
|
++ 'Properties' => [
|
|
|
++ $contact_property => $newsletter_property_name
|
|
|
++ ]
|
|
|
++ ];
|
|
|
+
|
|
|
+- $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;
|
|
|
++ // $response = $this->updateSubscriber($listID, $contact, 'addnoforce');
|
|
|
++ $response = $this->mailjetHandler->syncMailjetContact($listID, $contact, 'addnoforce');
|
|
|
++ // $contact_id = $response['Data'][0]['ContactID'];
|
|
|
++ \Drupal::logger('simplenews_mailjet_subscriptions')->notice('The mailjet user ' . $subscriber_email . ' subscribed to the ' . $listID . ' list .');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Unsubscribe User.
|
|
|
+ */
|
|
|
+- public static function unsubscribeUser($subscriber, $subscription, $category, $api_key, $secret_key, $listID) {
|
|
|
++ public function unsubscribeUser($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);
|
|
|
+- $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->updateSubscriber($subscriber_email, $newsletter_property_name, 'remove');
|
|
|
++ $response = $this->mailjetHandler->syncMailjetContact($listID, $contact, 'remove');
|
|
|
++ // $contact_id = $response['Data'][0]['ContactID'];
|
|
|
++ \Drupal::logger('simplenews_mailjet_subscriptions')->notice('The mailjet user ' . $subscriber_email . ' removed from the ' . $listID . ' list ');
|
|
|
++ // return $response;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|