123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- 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;
- }
-
- }
|