| 1 |
<?php |
| 2 |
|
| 3 |
use AcyMailing\Classes\MailClass; |
| 4 |
use AcyMailing\Core\AcymPlugin; |
| 5 |
|
| 6 |
class plgAcymSendinblue extends AcymPlugin |
| 7 |
{ |
| 8 |
const SENDING_METHOD_ID = 'sendinblue'; |
| 9 |
const SENDING_METHOD_NAME = 'Brevo'; |
| 10 |
const SENDING_METHOD_API_URL = 'https://api.brevo.com/v3/'; |
| 11 |
|
| 12 |
private SendinblueCredentials $credentials; |
| 13 |
private SendinblueIntegration $integration; |
| 14 |
private SendinblueTransactional $transactional; |
| 15 |
private SendinblueCampaign $campaign; |
| 16 |
private SendinblueList $list; |
| 17 |
private SendinblueUsers $users; |
| 18 |
private SendinblueSender $sender; |
| 19 |
private SendinblueWebhooks $webhooks; |
| 20 |
|
| 21 |
public function __construct() |
| 22 |
{ |
| 23 |
parent::__construct(); |
| 24 |
$this->pluginDescription->name = self::SENDING_METHOD_NAME; |
| 25 |
|
| 26 |
include_once __DIR__.DS.'sendinblue.php'; |
| 27 |
include_once __DIR__.DS.'credentials.php'; |
| 28 |
include_once __DIR__.DS.'integration.php'; |
| 29 |
include_once __DIR__.DS.'transactional.php'; |
| 30 |
include_once __DIR__.DS.'campaign.php'; |
| 31 |
include_once __DIR__.DS.'list.php'; |
| 32 |
include_once __DIR__.DS.'users.php'; |
| 33 |
include_once __DIR__.DS.'sender.php'; |
| 34 |
include_once __DIR__.DS.'webhooks.php'; |
| 35 |
|
| 36 |
$this->credentials = new SendinblueCredentials($this); |
| 37 |
$headers = $this->credentials->getHeadersSendingMethod(self::SENDING_METHOD_ID); |
| 38 |
|
| 39 |
$this->integration = new SendinblueIntegration($this); |
| 40 |
$this->transactional = new SendinblueTransactional($this, $headers); |
| 41 |
$this->list = new SendinblueList($this, $headers); |
| 42 |
$this->users = new SendinblueUsers($this, $headers, $this->list); |
| 43 |
$this->sender = new SendinblueSender($this, $headers); |
| 44 |
$this->campaign = new SendinblueCampaign($this, $headers, $this->sender, $this->users, $this->list); |
| 45 |
$this->webhooks = new SendinblueWebhooks($this, $headers); |
| 46 |
} |
| 47 |
|
| 48 |
public function onAcymGetSendingMethods(&$data, $isMailer = false) |
| 49 |
{ |
| 50 |
if ($this->config->get('mailer_method') !== self::SENDING_METHOD_ID) return; |
| 51 |
|
| 52 |
$data['sendingMethods'][self::SENDING_METHOD_ID] = [ |
| 53 |
'name' => $this->pluginDescription->name.' ('.acym_translation('ACYM_DEPRECATED').')', |
| 54 |
'image' => ACYM_IMAGES.'mailers/brevo.png', |
| 55 |
'recommended' => false, |
| 56 |
]; |
| 57 |
} |
| 58 |
|
| 59 |
public function onAcymGetSendingMethodsHtmlSetting(&$data) |
| 60 |
{ |
| 61 |
$this->credentials->getSendingMethodsHtmlSetting($data); |
| 62 |
} |
| 63 |
|
| 64 |
public function onAcymTestCredentialSendingMethod($sendingMethod, $credentials) |
| 65 |
{ |
| 66 |
$this->credentials->testCredentialSendingMethod($sendingMethod, $credentials); |
| 67 |
} |
| 68 |
|
| 69 |
public function onAcymSendEmail(&$response, $mailerHelper, $to, $from, $reply_to, $bcc = [], $attachments = [], $sendingMethodListParams = []) |
| 70 |
{ |
| 71 |
$this->transactional->sendTransactionalEmail( |
| 72 |
$response, |
| 73 |
$mailerHelper->externalMailer, |
| 74 |
$to, |
| 75 |
$mailerHelper->Subject, |
| 76 |
$from, |
| 77 |
$reply_to, |
| 78 |
$mailerHelper->Body, |
| 79 |
$bcc, |
| 80 |
$attachments |
| 81 |
); |
| 82 |
} |
| 83 |
|
| 84 |
public function onAcymGetCreditRemainingSendingMethod(&$html, $reloading = false) |
| 85 |
{ |
| 86 |
$this->credentials->getCreditRemainingSendingMethod($html); |
| 87 |
} |
| 88 |
|
| 89 |
public function onAcymGetSettingsSendingMethodFromPlugin(&$data, $plugin, $method) |
| 90 |
{ |
| 91 |
$this->integration->getSettingsSendingMethodFromPlugin($data, $plugin, $method); |
| 92 |
} |
| 93 |
|
| 94 |
public function onAcymProcessQueueExternalSendingCampaign(&$externalSending, $transactional = false) |
| 95 |
{ |
| 96 |
if ($this->config->get('mailer_method') == self::SENDING_METHOD_ID && !$transactional) $externalSending = true; |
| 97 |
} |
| 98 |
|
| 99 |
public function onAcymInitExternalSendingMethodBeforeSend(&$listId, $mailId) |
| 100 |
{ |
| 101 |
if ($this->config->get('mailer_method') != self::SENDING_METHOD_ID) return; |
| 102 |
|
| 103 |
$this->list->getListExternalSendingMethod($listId, $mailId); |
| 104 |
$this->users->createAttribute($mailId); |
| 105 |
} |
| 106 |
|
| 107 |
public function onAcymRegisterReceiverContentAndList(&$result, $subjectContent, $htmlContent, $receiverEmail, $mailId, &$warnings) |
| 108 |
{ |
| 109 |
if ($this->config->get('mailer_method') != self::SENDING_METHOD_ID) return; |
| 110 |
|
| 111 |
$result = $this->users->addUserToList($receiverEmail, $mailId, $warnings); |
| 112 |
if ($result) { |
| 113 |
// The API returns null every time so we have no clue if this went well |
| 114 |
$this->users->addAttributeToUser($receiverEmail, $subjectContent, $htmlContent, $mailId); |
| 115 |
} |
| 116 |
} |
| 117 |
|
| 118 |
public function onAcymAfterUserModify($user, &$oldUser) |
| 119 |
{ |
| 120 |
$this->users->createUser($user); |
| 121 |
} |
| 122 |
|
| 123 |
public function onAcymAfterUserCreate($user) |
| 124 |
{ |
| 125 |
$this->users->createUser($user); |
| 126 |
} |
| 127 |
|
| 128 |
public function onAcymUserImport($users) |
| 129 |
{ |
| 130 |
$this->users->importUsers($users); |
| 131 |
} |
| 132 |
|
| 133 |
public function onAcymBeforeUserDelete($users) |
| 134 |
{ |
| 135 |
$this->users->deleteUsers($users); |
| 136 |
} |
| 137 |
|
| 138 |
public function onAcymSendCampaignOnExternalSendingMethod($mailId, $content): bool |
| 139 |
{ |
| 140 |
if ($this->config->get('mailer_method') != self::SENDING_METHOD_ID) return true; |
| 141 |
|
| 142 |
$mailClass = new MailClass(); |
| 143 |
$mail = $mailClass->getOneById($mailId, true); |
| 144 |
|
| 145 |
if (empty($mail)) return false; |
| 146 |
|
| 147 |
$this->campaign->createNewCampaign($mail, $content); |
| 148 |
$this->webhooks->addWebhooks(); |
| 149 |
|
| 150 |
return true; |
| 151 |
} |
| 152 |
|
| 153 |
public function onAcymAfterCMSUserImport($source) |
| 154 |
{ |
| 155 |
$this->users->createFromImportedSource($source); |
| 156 |
} |
| 157 |
|
| 158 |
public function onAcymAfterDatabaseUserImport($source) |
| 159 |
{ |
| 160 |
$this->users->createFromImportedSource($source); |
| 161 |
} |
| 162 |
|
| 163 |
public function onAcymCleanDataExternalSendingMethod(): bool |
| 164 |
{ |
| 165 |
if ($this->config->get('mailer_method') != self::SENDING_METHOD_ID) return true; |
| 166 |
|
| 167 |
return $this->campaign->cleanCampaigns(); |
| 168 |
} |
| 169 |
|
| 170 |
public function onAcymSynchronizeExistingUsers($sendingMethod) |
| 171 |
{ |
| 172 |
if ($sendingMethod !== self::SENDING_METHOD_ID) return; |
| 173 |
|
| 174 |
$this->users->synchronizeExistingUsers(); |
| 175 |
} |
| 176 |
|
| 177 |
public function onAcymResendCampaign($mailId) |
| 178 |
{ |
| 179 |
if ($this->config->get('mailer_method') != self::SENDING_METHOD_ID) return; |
| 180 |
$this->users->removeUserFromList($mailId); |
| 181 |
} |
| 182 |
|
| 183 |
public function onAcymSendingMethodOptions(&$data) |
| 184 |
{ |
| 185 |
$data['embedImage'][self::SENDING_METHOD_ID] = false; |
| 186 |
$data['embedAttachment'][self::SENDING_METHOD_ID] = false; |
| 187 |
} |
| 188 |
} |
| 189 |
|