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