PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.0
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.0
11.1.1 11.1.0 11.0.5 11.0.4 11.0.3 11.0.2 11.0.1 11.0.0 10.11.1 10.11.0 10.10.2 10.10.1 10.10.0 10.9.1 trunk 10.0.0 10.0.1 10.1.0 10.1.1 10.1.2 10.1.3 10.1.4 10.2.0 10.2.1 10.2.2 All 62 releases
acymailing / back / dynamics / sendinblue / campaign.php

campaign.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 11.1.0, at back/dynamics/sendinblue/campaign.php

96 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class SendinblueCampaign extends SendinblueClass
4 {
5 private SendinblueSender $sender;
6 private SendinblueUsers $user;
7 private SendinblueList $list;
8
9 public function __construct(&$plugin, $headers, $sender, $user, $list)
10 {
11 parent::__construct($plugin, $headers);
12 $this->sender = $sender;
13 $this->user = $user;
14 $this->list = $list;
15 }
16
17 public function createNewCampaign($mail, $content)
18 {
19 $listIdBrevo = 0;
20 $this->list->getListExternalSendingMethod($listIdBrevo, $mail->id);
21
22 $subjectAttribute = $this->user->getSubjectAttributeName($mail->id);
23 $contentAttribute = $this->user->getAttributeName($mail->id);
24
25 if (strpos($content, 'acym__wysid__template') === false || strpos($content, '<body') === false) {
26 $commonContent = '<html>{% autoescape off %}{{ contact.'.$contentAttribute.' }}{% endautoescape %}</html>';
27 } else {
28 $commonContent = preg_replace('#<title>(.*)</title>#Uis', '<title>{{ contact.'.$subjectAttribute.' }}</title>', $content);
29 $commonContent = preg_replace('#(<body[^>]*>).*</body>#Uis', '$1{% autoescape off %}{{ contact.'.$contentAttribute.' }}{% endautoescape %}</body>', $commonContent);
30 }
31
32 $data = [
33 'sender' => $this->sender->getSender($mail),
34 'name' => 'AcyMailing Mail '.$mail->id.' ('.$mail->subject.')',
35 'htmlContent' => $commonContent,
36 'scheduledAt' => gmdate('c', time() + 60),
37 'subject' => '{{ contact.'.$this->user->getSubjectAttributeName($mail->id).' }}',
38 'replyTo' => $this->sender->getReplyToEmail($mail),
39 'recipients' => [
40 'listIds' => [$listIdBrevo],
41 ],
42 'footer' => '<span style="display: none !important;">{'.acym_translation('ACYM_UNSUBSCRIBE').'}</span>',
43 'inlineImageActivation' => !empty($this->config->get('embed_images', 0)),
44 ];
45
46 $this->callApiSendingMethod('emailCampaigns', $data, $this->headers, 'POST');
47 }
48
49 public function cleanCampaigns(): bool
50 {
51 $cleanFrequency = $this->config->get(plgAcymSendinblue::SENDING_METHOD_ID.'_clean_frequency', 2592000);
52 $lastClean = $this->config->get(plgAcymSendinblue::SENDING_METHOD_ID.'_last_clean', 0);
53
54 $time = time();
55
56 if (!empty($lastClean) && $lastClean < ($time + $cleanFrequency)) return true;
57
58 $response = $this->callApiSendingMethod(
59 plgAcymSendinblue::SENDING_METHOD_API_URL.'emailCampaigns?status=sent&limit=500&offset=0&sort=desc',
60 [],
61 $this->headers
62 );
63
64 if (empty($response['campaigns'])) {
65 return true;
66 }
67
68 foreach ($response['campaigns'] as $campaign) {
69 //If it is a recent campaign we don't delete it
70 $sendDate = strtotime($campaign['sentDate'].' UTC');
71 if ($sendDate > $time - $cleanFrequency) continue;
72
73 //If it's not an AcyMailing campaign we get out
74 preg_match('#AcyMailing Mail ([0-9]+)#is', $campaign['name'], $match);
75 if (empty($match)) continue;
76
77 //We get the id of the email
78 $id = intval($match[1]);
79
80 if (empty($id)) continue;
81
82 //We delete what we created in Sendinblue
83 $this->user->deleteAttribute($id);
84 $this->list->deleteList($id);
85 $this->deleteCampaign($campaign['id']);
86 }
87
88 return true;
89 }
90
91 public function deleteCampaign($brevoCampaignId)
92 {
93 $this->callApiSendingMethod(plgAcymSendinblue::SENDING_METHOD_API_URL.'emailCampaigns/'.$brevoCampaignId, [], $this->headers, 'DELETE');
94 }
95 }
96