materio-d9/patches/simplenews_mailjet_subscrip...

542 lines
19 KiB
Diff
Raw Normal View History

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.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/Entity/SimplenewsMailjetSubscriptionEntity.php b/src/Entity/SimplenewsMailjetSubscriptionEntity.php
index 27b7737..b74f89e 100644
--- a/src/Entity/SimplenewsMailjetSubscriptionEntity.php
+++ b/src/Entity/SimplenewsMailjetSubscriptionEntity.php
@@ -94,53 +94,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/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/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;
}
}