| @@ -1,0 +1,188 @@ | ||
| 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 | +} | |