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