sendinblue-8.x-1.7/src/Tools/Api/SendinblueApiV3.php

src/Tools/Api/SendinblueApiV3.php
<?php

namespace Drupal\sendinblue\Tools\Api;

use Drupal\Component\Serialization\Json;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\sendinblue\Tools\Http\SendinblueHttpClient;
use Drupal\sendinblue\Tools\Model\CreateSmtpEmail;
use Drupal\sendinblue\Tools\Model\GetAccount;
use Drupal\sendinblue\Tools\Model\GetAttributes;
use Drupal\sendinblue\Tools\Model\GetExtendedContactDetails;
use Drupal\sendinblue\Tools\Model\GetExtendedList;
use Drupal\sendinblue\Tools\Model\GetLists;
use Drupal\sendinblue\Tools\Model\GetSmtpDetails;
use Drupal\sendinblue\Tools\Model\GetSmtpTemplateOverview;
use Drupal\sendinblue\Tools\Model\GetSmtpTemplates;
use SendinBlue\Client\Api\AccountApi;
use SendinBlue\Client\Api\AttributesApi;
use SendinBlue\Client\Api\ContactsApi;
use SendinBlue\Client\Api\EmailCampaignsApi;
use SendinBlue\Client\Api\ListsApi;
use SendinBlue\Client\Api\ResellerApi;
use SendinBlue\Client\Api\SendersApi;
use SendinBlue\Client\Api\TransactionalEmailsApi;
use SendinBlue\Client\Configuration;
use SendinBlue\Client\Model\CreateContact;
use SendinBlue\Client\Model\SendSmtpEmail;
use SendinBlue\Client\Model\SendSmtpEmailAttachment;
use SendinBlue\Client\Model\SendSmtpEmailBcc;
use SendinBlue\Client\Model\SendSmtpEmailCc;
use SendinBlue\Client\Model\SendSmtpEmailReplyTo;
use SendinBlue\Client\Model\SendSmtpEmailSender;
use SendinBlue\Client\Model\SendSmtpEmailTo;
use SendinBlue\Client\Model\UpdateContact;

/**
 * Sendinblue REST client.
 */
class SendinblueApiV3 implements SendInBlueApiInterface {

  /**
   * Sib ApiKey.
   *
   * @var string
   */
  public $apiKey;

  /**
   * Logger Service.
   *
   * @var \Drupal\Core\Logger\LoggerChannelFactory
   *   LoggerChannelFactory.
   */
  protected $loggerFactory;

  /**
   * Get the AccountApi from SendInBlue.
   *
   * @var \SendinBlue\Client\Api\AccountApi
   *   AccountApi.
   */
  private $sibAccountApi;
  /**
   * Get the EmailCampaignsApi from SendInBlue.
   *
   * @var \SendinBlue\Client\Api\EmailCampaignsApi
   *   EmailCampaignsApi.
   */
  private $sibEmailCampaignsApi;
  /**
   * Get the ListsApi from SendInBlue.
   *
   * @var \SendinBlue\Client\Api\ListsApi
   *   ListsApi.
   */
  private $sibListsApi;
  /**
   * Get the ContactsApi from SendInBlue.
   *
   * @var \SendinBlue\Client\Api\ContactsApi
   *   ContactsApi.
   */
  private $sibContactsApi;
  /**
   * Get the AttributesApi from SendInBlue.
   *
   * @var \SendinBlue\Client\Api\AttributesApi
   *   AttributesApi.
   */
  private $sibAttributesApi;
  /**
   * Get the SendersApi from SendInBlue.
   *
   * @var \SendinBlue\Client\Api\SendersApi
   *   SendersApi.
   */
  private $sibSendersApi;
  /**
   * Get the SMTPApi from SendInBlue.
   *
   * @var \SendinBlue\Client\Api\TransactionalEmailsApi
   *   TransactionalEmailsApi
   */
  private $sibTransactionalEmailsApi;
  /**
   * Get the Configuration from SendInBlue.
   *
   * @var \SendinBlue\Client\Configuration
   *   Configuration.
   */
  private $sibClientConfiguration;
  /**
   * Get the SendinblueHttpClient for HTTP cURL.
   *
   * @var \Drupal\sendinblue\Tools\Http\SendinblueHttpClient
   *   SendinblueHttpClient.
   */
  private $sIBHttpClient;
  /**
   * Get the ResellerApi from SendInBlue.
   *
   * @var \SendinBlue\Client\Api\ResellerApi
   *   ResellerApi.
   */
  private $sibResellerApi;

  /**
   * SendinblueMailin constructor.
   *
   * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger_factory
   *   LoggerChannelFactory.
   * @param \Drupal\sendinblue\Tools\Http\SendinblueHttpClient $sIBHttpClient
   *   SendinblueHttpClient.
   */
  public function __construct(
    LoggerChannelFactoryInterface $logger_factory,
    SendinblueHttpClient $sIBHttpClient
  ) {
    $sibClientConfiguration = Configuration::getDefaultConfiguration();
    $this->sibClientConfiguration = $sibClientConfiguration->setApiKey("api-key", $this->apiKey);

    $this->sibAccountApi = new AccountApi(NULL, $this->sibClientConfiguration);
    $this->sibEmailCampaignsApi = new EmailCampaignsApi(NULL, $this->sibClientConfiguration);
    $this->sibListsApi = new ListsApi(NULL, $this->sibClientConfiguration);
    $this->sibContactsApi = new ContactsApi(NULL, $this->sibClientConfiguration);
    $this->sibAttributesApi = new AttributesApi(NULL, $this->sibClientConfiguration);
    $this->sibSendersApi = new SendersApi(NULL, $this->sibClientConfiguration);
    $this->sibTransactionalEmailsApi = new TransactionalEmailsApi(NULL, $this->sibClientConfiguration);
    $this->sibResellerApi = new ResellerApi(NULL, $this->sibClientConfiguration);

    $this->loggerFactory = $logger_factory;
    $this->sIBHttpClient = $sIBHttpClient;
  }

  /**
   * {@inheritdoc}
   */
  public function setApiKey($apiKey) {
    $this->apiKey = $apiKey;
    $this->sibClientConfiguration->setApiKey("api-key", $this->apiKey);
  }

  /**
   * Get SendInBlueV3 Configuration.
   *
   * @return \SendinBlue\Client\Configuration
   *   SendInBlueV3 Configuration
   */
  public function getSibClientConfiguration() {
    return $this->sibClientConfiguration;
  }

  /**
   * {@inheritdoc}
   */
  public function getAccount() {
    $account = $this->sibAccountApi->getAccount();
    return new GetAccount(Json::decode($account));
  }

  /**
   * {@inheritdoc}
   */
  public function getTemplates() {
    $templates = $this->sibTransactionalEmailsApi->getSmtpTemplates();

    if($templates && !empty($templates['templates'])){
      return new GetSmtpTemplates(Json::decode($templates));
    }

    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function getTemplate($id) {
    return new GetSmtpTemplateOverview(Json::decode($this->sibTransactionalEmailsApi->getSmtpTemplate($id)));
  }

  /**
   * {@inheritdoc}
   */
  public function getLists() {
    return new GetLists($this->sibListsApi->getLists('50')->getLists());
  }

  /**
   * {@inheritdoc}
   */
  public function getList($id) {
    $list = $this->sibListsApi->getList($id);

    return new GetExtendedList(Json::decode($list));
  }

  /**
   * {@inheritdoc}
   */
  public function sendEmail(
    array $to,
    string $subject,
    string $html,
    string $text,
    array $from = [],
    array $replyto = [],
    array $cc = [],
    array $bcc = [],
    array $attachment = [],
    array $headers = []
  ) {
    $to += ['email' => NULL, 'name' => NULL];
    $sibTo = new SendSmtpEmailTo(['email' => $to['email'], 'name' => $to['name']]);

    $emailData = [
      'to' => [$sibTo],
      'htmlContent' => $html,
      'textContent' => $text,
      'subject' => $subject,
    ];

    if (!empty($from)) {
      $from += ['email' => NULL, 'name' => NULL];
      $emailData['sender'] = new SendSmtpEmailSender(['email' => $from['email'], 'name' => $from['name']]);
    }

    if (!empty($bcc)) {
      $bcc += ['email' => NULL, 'name' => NULL];
      $emailData['bcc'] = [new SendSmtpEmailBcc(['email' => $bcc['email'], 'name' => $bcc['name']])];
    }

    if (!empty($cc)) {
      $cc += ['email' => NULL, 'name' => NULL];
      $emailData['cc'] = [new SendSmtpEmailCc(['email' => $cc['email'], 'name' => $cc['name']])];
    }

    if (!empty($replyto)) {
      $replyto += ['email' => NULL, 'name' => NULL];
      $emailData['replyTo'] = new SendSmtpEmailReplyTo(['email' => $replyto['email'], 'name' => $replyto['name']]);
    }

    if (!empty($headers)) {
      $emailData['headers'] = $headers;
    }

    if (!empty($attachment)) {
      $attachments = [];
      foreach ($attachment as $item) {
        $attachments[] = new SendSmtpEmailAttachment($item);
      }

      $emailData['attachment'] = $attachments;
    }

    $message = $this->sibTransactionalEmailsApi->sendTransacEmail(new SendSmtpEmail($emailData));

    if ($message->valid()) {
      return new CreateSmtpEmail($message->getMessageId());
    }

    return NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function getUser($email) {
    try {
      $contactInfo = $this->sibContactsApi->getContactInfo($email);

      return new GetExtendedContactDetails(Json::decode($contactInfo));
    }
    catch (\Throwable $e) {
      return NULL;
    }
  }

  /**
   * {@inheritdoc}
   */
  public function createUpdateUser($email, array $attributes = [], array $blacklisted = [], $listid = '', $listid_unlink = '') {
    $isContactExist = $this->getUser($email) !== NULL;

    if ($isContactExist) {
      $updateContact = new UpdateContact(
        [
          'attributes' => (object) $attributes,
          'emailBlacklisted' => (bool) $blacklisted,
          'listIds' => [(int) $listid[0]],
          'unlinkListIds' => $listid_unlink,
        ]
      );

      $this->sibContactsApi->updateContact($email, $updateContact);
    }
    else {
      $updateContact = new CreateContact(
        [
          'email' => $email,
          'attributes' => (object) $attributes,
          'emailBlacklisted' => (bool) $blacklisted,
          'listIds' => [(int) $listid[0]],
          'unlinkListIds' => $listid_unlink,
        ]
          );

      $this->sibContactsApi->createContact($updateContact);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getAttributes() {
    return new GetAttributes(Json::decode($this->sibAttributesApi->getAttributes()));
  }

  /**
   * {@inheritdoc}
   */
  public function getAccessTokens() {
    return $this->sibAccountApi->getConfig()->getAccessToken();
  }

  /**
   * {@inheritdoc}
   */
  public function getSmtpDetails() {
    $smtpDetails = $this->sibAccountApi->getAccount()->getRelay();

    if($smtpDetails){
      return new GetSmtpDetails(
        $smtpDetails->getData()->getUserName(),
        $smtpDetails->getData()->getRelay(),
        $smtpDetails->getData()->getPort(),
        (bool) $smtpDetails->getEnabled()
      );
    }

    return null;
  }

  /**
   * {@inheritdoc}
   */
  public function countUserlists(array $listids = []) {
    $total = 0;

    foreach ($listids as $listid) {
      $userList = $this->sibListsApi->getContactsFromList($listid);
      $total += $userList->getCount();
    }

    return $total;
  }

  /**
   * {@inheritdoc}
   */
  public function partnerDrupal() {
    $data = [];
    $data['key'] = $this->apiKey;
    $data['webaction'] = 'MAILIN-PARTNER';
    $data['partner'] = 'DRUPAL';
    $data['source'] = 'Drupal';

    $options = [
      'headers' => [
        'Content-Type' => 'application/json',
      ],
      'form_params' => $data,
      'verify' => FALSE,
    ];

    return $this->sIBHttpClient->doRequestDirect(SendinblueHttpClient::WEBHOOK_WS_SIB_URL, 'POST', $data, $options);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc