PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / trunk
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress vtrunk
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 / Helpers / Update / DefaultData.php

DefaultData.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress trunk, at back/Helpers/Update/DefaultData.php

516 lines 42.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Helpers\Update;
4
5 use AcyMailing\Classes\ActionClass;
6 use AcyMailing\Classes\AutomationClass;
7 use AcyMailing\Classes\ConditionClass;
8 use AcyMailing\Classes\FieldClass;
9 use AcyMailing\Classes\ListClass;
10 use AcyMailing\Classes\MailClass;
11 use AcyMailing\Classes\OverrideClass;
12 use AcyMailing\Classes\PluginClass;
13 use AcyMailing\Classes\RuleClass;
14 use AcyMailing\Classes\StepClass;
15 use AcyMailing\Classes\UserClass;
16
17 trait DefaultData
18 {
19 public function installBounceRules(): void
20 {
21 $ruleClass = new RuleClass();
22 if ($ruleClass->getOrderingNumber() > 0) {
23 return;
24 }
25 $replyTo = $this->config->get('replyto_email');
26 $bounce = $this->config->get('bounce_email');
27 $from = $this->config->get('from_email');
28
29 $forwardEmail = $replyTo != $bounce ? $replyTo : $from;
30 if (empty($forwardEmail)) {
31 $forwardEmail = acym_currentUserEmail();
32 }
33
34 $forwardAction = acym_escapeDB(json_encode(['0' => 'delete_message', '1' => 'forward_message', 'forward_to' => $forwardEmail]));
35
36 $query = "INSERT INTO `#__acym_rule` (`id`, `name`, `description`, `ordering`, `regex`, `executed_on`, `action_message`, `action_user`, `active`, `increment_stats`, `execute_action_after`) VALUES ";
37 $query .= "(1, 'ACYM_LIST_UNSUBSCRIBE_HANDLING', 'ACYM_LIST_UNSUBSCRIBE_HANDLING_DESC', 1, 'Please unsubscribe user ID \\\\d+', '[\"body\"]', '[\"delete_message\"]', '[\"unsubscribe_user\"]', 1, 0, 0),";
38 $query .= "(2, 'ACYM_SUPPRESSION_LIST', 'ACYM_SUPPRESSION_LIST_DESC', 2, 'suppression list', '[\"body\"]', '[\"delete_message\"]', '[\"unsubscribe_user\",\"block_user\",\"empty_queue_user\"]', 1, 1, 0),";
39 $query .= "(3, 'ACYM_ACTION_REQUIRED', 'ACYM_ACTION_REQUIRED_DESC', 3, 'action *requ|verif', '[\"subject\"]', ".$forwardAction.", '[]', 1, 0, 0),";
40 $query .= "(4, 'ACYM_ACKNOWLEDGMENT_RECEIPT_SUBJECT', 'ACYM_ACKNOWLEDGMENT_RECEIPT_SUBJECT_DESC', 4, '(out|away) *(of|from)|vacation|vacanze|vacaciones|holiday|absen|congés|recept|acknowledg|thank you for|Auto *Response|Incident|Automati|Ticket|Resposta *automática', '[\"subject\"]', '[\"delete_message\"]', '[]', 1, 0, 0),";
41 $query .= "(5, 'ACYM_FEEDBACK_LOOP', 'ACYM_FEEDBACK_LOOP_DESC', 5, 'feedback|[email protected]|complaints@.{0,15}email-abuse.amazonses.com|complaint about message', '[\"senderInfo\",\"subject\"]', '[\"save_message\",\"delete_message\"]', '[\"unsubscribe_user\",\"block_user\",\"empty_queue_user\"]', 1, 0, 0),";
42 $query .= "(6, 'ACYM_FEEDBACK_LOOP_BODY', 'ACYM_FEEDBACK_LOOP_BODY_DESC', 6, 'Feedback-Type.{1,5}abuse', '[\"body\"]', '[\"save_message\",\"delete_message\"]', '[\"unsubscribe_user\"]', 1, 1, 0),";
43 $query .= "(7, 'ACYM_MAILBOX_FULL', 'ACYM_MAILBOX_FULL_DESC', 7, '((mailbox|mailfolder|storage|quota|space|inbox) *(is)? *(over)? *(exceeded|size|storage|allocation|full|quota|maxi))|status(-code)? *(:|=)? *5.2.2|quota-issue|not *enough.{1,20}space|((over|exceeded|full|exhausted) *(allowed)? *(mail|storage|quota))|Space shortage', '[\"subject\",\"body\"]', '[\"save_message\",\"delete_message\"]', '[\"block_user\"]', 1, 1, 0),";
44 $query .= "(8, 'ACYM_BLOCKED_GOOGLE_GROUPS', 'ACYM_BLOCKED_GOOGLE_GROUPS_DESC', 8, 'message *rejected *by *Google *Groups', '[\"body\"]', '[\"delete_message\"]', '[\"block_user\"]', 1, 1, 3),";
45 $query .= "(9, 'ACYM_REJECTED', 'ACYM_REJECTED_DESC', 9, 'rejected *your *message|email *provider *rejected *it', '[\"body\"]', '[\"delete_message\"]', '[\"block_user\"]', 1, 1, 3),";
46 $query .= "(10, 'ACYM_MAILBOX_DOESNT_EXIST_1', 'ACYM_MAILBOX_DOESNT_EXIST_1_DESC', 10, '(Invalid|no such|unknown|bad|des?activated|inactive|unrouteable) *(mail|destination|recipient|user|address|person)|bad-mailbox|inactive-mailbox|not listed in.{1,20}directory|RecipNotFound|(user|mailbox|address|recipients?|host|account|domain) *(is|has been)? *(error|disabled|failed|unknown|unavailable|not *(found|available)|.{1,30}inactiv)|no *mailbox *here|user does.?n.t have.{0,30}account|no *longer *(active|working|in *use)|mail( *foi)? *desativado|recipient \'[^\']+\' not known', '[\"subject\",\"body\"]', '[\"save_message\",\"delete_message\"]', '[\"block_user\"]', 1, 1, 0),";
47 $query .= "(11, 'ACYM_MESSAGE_BLOCKED_RECIPIENTS', 'ACYM_MESSAGE_BLOCKED_RECIPIENTS_DESC', 11, 'blocked *by|block *list|look(ed)? *like *spam|spam-related|spam *detected| CXBL | CDRBL | IPBL | URLBL |(unacceptable|banned|offensive|filtered|blocked|unsolicited) *(content|message|e?-?mail)|service refused|(status(-code)?|554) *(:|=)? *5.7.1|administratively *denied|blacklisted *IP|policy *reasons|rejected.{1,10}spam|junkmail *rejected|throttling *constraints|exceeded.{1,10}max.{1,40}hour|comply with required standards|421 RP-00|550 SC-00|550 DY-00|550 OU-00|client *[0-9.]* *blocked *using', '[\"body\"]', ".$forwardAction.", '[\"block_user\"]', 1, 1, 3),";
48 $query .= "(12, 'ACYM_MAILBOX_DOESNT_EXIST_2', 'ACYM_MAILBOX_DOESNT_EXIST_2_DESC', 12, 'status(-? ?code)? *(:|=)? *(550)? *5.(1.[1-6]|0.0|4.[0123467])|recipient *(address *)?rejected|does *not *like *recipient|recipient *unknown *to *address|email *account *that *you *tried *to *reach *is *disabled|no *mail-enabled *subscriptions', '[\"subject\",\"body\"]', '[\"save_message\",\"delete_message\"]', '[\"block_user\"]', 1, 1, 0),";
49 $query .= "(13, 'ACYM_DOMAIN_NOT_EXIST', 'ACYM_DOMAIN_NOT_EXIST_DESC', 13, 'No.{1,10}MX *(record|host)|host *does *not *receive *any *mail|bad-domain|connection.{1,10}mail.{1,20}fail|domain.{1,10}not *exist|fail.{1,10}establish *connection|Unable *to *lookup *DNS *for|Unable *to *connect *to *remote *host', '[\"subject\",\"body\"]', '[\"save_message\",\"delete_message\"]', '[\"block_user\"]', 1, 1, 0),";
50 $query .= "(14, 'ACYM_TEMPORARY_FAILURES', 'ACYM_TEMPORARY_FAILURES_DESC', 14, 'has.*been.*delayed|delayed *mail|message *delayed|message-expired|temporar(il)?y *(failure|unavailable|disable|offline|unable)|deferred|delayed *([0-9]*) *(hour|minut)|possible *mail *loop|too *many *hops|delivery *time *expired|Action.php: *delayed|status(-code)? *(:|=)? *4.4.6|will continue to be attempted|unable to deliver in.*Status: 4.4.7|Connection *closed *unexpectedly', '[\"subject\",\"body\"]', '[\"save_message\",\"delete_message\"]', '[\"block_user\"]', 1, 1, 3),";
51 $query .= "(15, 'ACYM_FAILED_PERM', 'ACYM_FAILED_PERM_DESC', 15, 'failed *permanently|permanent.{1,20}(failure|error)|not *accepting *(any)? *mail|does *not *exist|no *valid *route|delivery *failure', '[\"subject\",\"body\"]', '[\"save_message\",\"delete_message\"]', '[\"block_user\"]', 1, 1, 0),";
52 $query .= "(16, 'ACYM_ACKNOWLEDGMENT_RECEIPT_BODY', 'ACYM_ACKNOWLEDGMENT_RECEIPT_BODY_DESC', 16, 'vacanc|holiday|vacation|absen|urlaub|ferie|feriado|vacanz|vacaciones|(out *of|not *in|outside)( *the)? *office|automatisch *(generierte)? *Antwort|confirm *we(\\'ve| *have) *received|den *Ferien|automática|RISPOSTA AUTOMATICA|vakantie|recepcionado *(su *)?requerimiento|Kiitos viestistäsi|nicht im Büro|nicht am Arbeitsplatz|automatic *reply|auto(-|mated *|matic *)reply|Email *has *been *recived|ricevuto *il *Suo *messaggio|ticket|poza *biurem|Automatic *respon|Case *Number|Α�
53 τόματη *απάντηση', '[\"body\"]', '[\"delete_message\"]', '[]', 1, 0, 0),";
54 $query .= "(17, 'ACYM_FINAL_RULE', 'ACYM_FINAL_RULE_DESC', 17, '.', '[\"senderInfo\",\"subject\"]', ".$forwardAction.", '[]', 1, 0, 0);";
55
56 acym_query($query);
57
58 $this->config->saveConfig(['bounceVersion' => self::BOUNCE_VERSION]);
59 }
60
61 public function installFields(): void
62 {
63 $query = "INSERT IGNORE INTO #__acym_field (`id`, `name`, `type`, `value`, `active`, `default_value`, `required`, `ordering`, `option`, `core`, `backend_edition`, `backend_listing`, `frontend_edition`, `frontend_listing`, `namekey`) VALUES
64 (1, 'ACYM_NAME', 'text', NULL, 1, NULL, 0, 1, '{\"error_message\":\"\",\"error_message_invalid\":\"\",\"size\":\"\",\"rows\":\"\",\"columns\":\"\",\"format\":\"\",\"custom_text\":\"\",\"css_class\":\"\",\"authorized_content\":{\"0\":\"all\",\"regex\":\"\"}}', 1, 1, 1, 1, 1, 'acym_name'),
65 (2, 'ACYM_EMAIL', 'text', NULL, 1, NULL, 1, 2, '{\"error_message\":\"\",\"error_message_invalid\":\"\",\"size\":\"\",\"rows\":\"\",\"columns\":\"\",\"format\":\"\",\"custom_text\":\"\",\"css_class\":\"\",\"authorized_content\":{\"0\":\"all\",\"regex\":\"\"}}', 1, 1, 1, 1, 1, 'acym_email');";
66 acym_query($query);
67
68 $fieldClass = new FieldClass();
69 $fieldClass->insertLanguageField();
70 }
71
72 public function installTemplates(): void
73 {
74 $mailClass = new MailClass();
75 $installedTemplates = 0;
76
77 $templates = acym_getFolders(ACYM_BACK.'templates'.DS, '.', false, true);
78 foreach ($templates as $oneTemplateFolderPath) {
79 $templateName = substr($oneTemplateFolderPath, strrpos($oneTemplateFolderPath, DS) + 1);
80 $templateName = str_replace('_', ' ', $templateName);
81
82 $oneMail = $mailClass->getOneByName($templateName, false, MailClass::TYPE_TEMPLATE);
83 if (!empty($oneMail)) {
84 continue;
85 }
86
87 if ($mailClass->installExtractedTemplate($oneTemplateFolderPath, false)) {
88 $installedTemplates++;
89 }
90 }
91
92 if ($installedTemplates === 0) {
93 acym_enqueueMessage(acym_translation('ACYM_DEFAULT_TEMPLATES_ALREADY_INSTALL'), 'info');
94 }
95 }
96
97 public function installDefaultAutomations(): void
98 {
99 $this->newAutomationAdmin('ACYM_ADMIN_USER_CREATE');
100 $this->newAutomationAdmin('ACYM_ADMIN_USER_MODIFICATION');
101 }
102
103 public function installList(): void
104 {
105 $listClass = new ListClass();
106 $listClass->addDefaultList();
107 }
108
109 public function installNotifications(): bool
110 {
111 $searchSettings = [
112 'offset' => 0,
113 'mailsPerPage' => 9000,
114 'key' => 'name',
115 ];
116
117 $mailClass = new MailClass();
118 $notifications = $mailClass->getMailsByType(MailClass::TYPE_NOTIFICATION, $searchSettings);
119 $notifications = $notifications['mails'];
120 $user = $this->getCurrentUser();
121 if (empty($user)) {
122 return false;
123 }
124
125 $addNotif = [];
126
127 // Email sent with the cron report
128 if (empty($notifications['acy_report'])) {
129 $addNotif[] = [
130 'name' => 'acy_report',
131 'subject' => 'AcyMailing Cron Report {mainreport}',
132 'content' => '<p>{report}</p><p>{detailreport}</p>',
133 ];
134 }
135
136 // Confirmation email for double opt-in
137 if (empty($notifications['acy_confirm'])) {
138 $addNotif[] = [
139 'name' => 'acy_confirm',
140 'subject' => '{subscriber:name|ucfirst}, {trans:ACYM_PLEASE_CONFIRM_SUBSCRIPTION}',
141 'content' => $this->getFormatedNotification(
142 '<h1 style="font-size: 24px;">{trans:ACYM_HELLO} '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
143 <p>{trans:ACYM_CONFIRM_MESSAGE}</p>
144 <p>{trans:ACYM_CONFIRM_MESSAGE_ACTIVATE}</p>
145 <p style="text-align: center;"><strong>{confirm}{trans:ACYM_CONFIRM_SUBSCRIPTION}{/confirm}</strong></p>'
146 ),
147 ];
148 }
149
150 if (empty($notifications['acy_notification_create'])) {
151 $addNotif[] = [
152 'name' => 'acy_notification_create',
153 'subject' => acym_translation('ACYM_NOTIFICATION_CREATE_SUBJECT').': {user:email}',
154 'content' => $this->getFormatedNotification(
155 '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
156 <p>'.acym_translation('ACYM_NOTIFICATION_CREATE_BODY').'</p>
157 <p>'.acym_translation('ACYM_NAME').': '.$this->getDTextDisplay('{user:name}', 'Julia').'</p>
158 <p>'.acym_translation('ACYM_EMAIL').': '.$this->getDTextDisplay('{user:email}', '[email protected]').'</p>
159 <p>'.acym_translation('ACYM_SOURCE').': '.$this->getDTextDisplay('{user:source}', 'registration_form').'</p>
160 <p>'.acym_translation('ACYM_SUBSCRIPTION').': '.$this->getDTextDisplay('{user:subscription}', 'Newsletters - 2020-11-02 14:38:24').'</p>'
161 ),
162 ];
163 }
164
165 if (empty($notifications['acy_notification_unsub'])) {
166 $addNotif[] = [
167 'name' => 'acy_notification_unsub',
168 'subject' => acym_translation('ACYM_NOTIFICATION_UNSUB_SUBJECT').': {user:email}',
169 'content' => $this->getFormatedNotification(
170 '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
171 <p>'.acym_translation('ACYM_NOTIFICATION_UNSUB_BODY').'</p>
172 <p>'.acym_translation('ACYM_NAME').': '.$this->getDTextDisplay('{user:name}', 'Julia').'</p>
173 <p>'.acym_translation('ACYM_EMAIL').': '.$this->getDTextDisplay('{user:email}', '[email protected]').'</p>
174 <p>'.acym_translation('ACYM_LISTS').': '.$this->getDTextDisplay('{lists}', 'Newsletters, Tips').'</p>'
175 ),
176 ];
177 }
178
179 if (empty($notifications['acy_notification_unsuball'])) {
180 $addNotif[] = [
181 'name' => 'acy_notification_unsuball',
182 'subject' => acym_translation('ACYM_NOTIFICATION_UNSUBALL_SUBJECT').': {user:email}',
183 'content' => $this->getFormatedNotification(
184 '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
185 <p>'.acym_translation('ACYM_NOTIFICATION_UNSUBALL_BODY').'</p>
186 <p>'.acym_translation('ACYM_NAME').': '.$this->getDTextDisplay('{user:name}', 'Julia').'</p>
187 <p>'.acym_translation('ACYM_EMAIL').': '.$this->getDTextDisplay('{user:email}', '[email protected]').'</p>'
188 ),
189 ];
190 }
191
192 if (empty($notifications['acy_notification_subform'])) {
193 $addNotif[] = [
194 'name' => 'acy_notification_subform',
195 'subject' => acym_translation('ACYM_NOTIFICATION_SUBFORM_SUBJECT').': {user:email}',
196 'content' => $this->getFormatedNotification(
197 '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
198 <p>'.acym_translation('ACYM_NOTIFICATION_SUBFORM_BODY').'</p>
199 <p>'.acym_translation('ACYM_NAME').': '.$this->getDTextDisplay('{user:name}', 'Julia').'</p>
200 <p>'.acym_translation('ACYM_EMAIL').': '.$this->getDTextDisplay('{user:email}', '[email protected]').'</p>
201 <p>'.acym_translation('ACYM_SUBSCRIPTION').': '.$this->getDTextDisplay('{user:subscription}', 'Newsletters - 2025-11-02 14:38:24').'</p>'
202 ),
203 ];
204 }
205
206 if (empty($notifications['acy_notification_profile'])) {
207 $addNotif[] = [
208 'name' => 'acy_notification_profile',
209 'subject' => acym_translation('ACYM_NOTIFICATION_PROFILE_SUBJECT').': {user:email}',
210 'content' => $this->getFormatedNotification(
211 '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
212 <p>'.acym_translation('ACYM_NOTIFICATION_PROFILE_BODY').'</p>
213 <p>'.acym_translation('ACYM_NAME').': '.$this->getDTextDisplay('{user:name}', 'Julia').'</p>
214 <p>'.acym_translation('ACYM_EMAIL').': '.$this->getDTextDisplay('{user:email}', '[email protected]').'</p>
215 <p>'.acym_translation('ACYM_SUBSCRIPTION').': '.$this->getDTextDisplay('{user:subscription}', 'Newsletters - 2025-11-02 14:38:24').'</p>'
216 ),
217 ];
218 }
219
220 if (empty($notifications['acy_notification_confirm'])) {
221 $addNotif[] = [
222 'name' => 'acy_notification_confirm',
223 'subject' => acym_translation('ACYM_NOTIFICATION_CONFIRM_SUBJECT').': {user:email}',
224 'content' => $this->getFormatedNotification(
225 '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
226 <p>'.acym_translation('ACYM_NOTIFICATION_CONFIRM_BODY').'</p>
227 <p>'.acym_translation('ACYM_NAME').': '.$this->getDTextDisplay('{user:name}', 'Julia').'</p>
228 <p>'.acym_translation('ACYM_EMAIL').': '.$this->getDTextDisplay('{user:email}', '[email protected]').'</p>
229 <p>'.acym_translation('ACYM_IP').': '.$this->getDTextDisplay('{user:confirmation_ip}', '127.0.0.1').'</p>
230 <p>'.acym_translation('ACYM_SUBSCRIPTION').': '.$this->getDTextDisplay('{user:subscription}', 'Newsletters - 2025-11-02 14:38:24').'</p>'
231 ),
232 ];
233 }
234
235 if (empty($notifications['acy_notification_cms'])) {
236 $addNotif[] = [
237 'name' => 'acy_notification_cms',
238 'subject' => '{subject}',
239 'content' => '{body}',
240 'drag_editor' => 0,
241 ];
242 }
243
244 if (empty($notifications['acy_notification_auto_campaign_admin'])) {
245 $addNotif[] = [
246 'name' => 'acy_notification_auto_campaign_admin',
247 'subject' => acym_translation('ACYM_NOTIFICATION_AUTO_CAMPAIGN_SUBJECT'),
248 'content' => $this->getFormatedNotification(
249 '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
250 <p>'.acym_translation('ACYM_NOTIFICATION_AUTO_CAMPAIGN_BODY').'</p>'
251 ),
252 ];
253 }
254
255 $firstEmail = $mailClass->getOneByName(acym_translation(self::FIRST_EMAIL_NAME_KEY));
256 if (empty($firstEmail)) {
257 $body = '<div id="acym__wysid__template" class="cell"><table class="body"><tbody><tr><td align="center" class="center acym__wysid__template__content" valign="top" style="background-color: rgb(239, 239, 239); padding: 30px 0px 120px;"><center><table align="center" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="acym__wysid__row ui-droppable ui-sortable" bgcolor="#ffffff" style="background-color: rgb(255, 255, 255); min-height: 0px; display: table-cell;"><table class="row acym__wysid__row__element" border="0" cellpadding="0" cellspacing="0" style="z-index: 100; background-color: rgb(238, 238, 238);" bgcolor="#eeeeee"><tbody bgcolor="" style="background-color: inherit;"><tr><th class="small-12 medium-12 large-12 columns" style="height: auto;"><table class="acym__wysid__column" style="min-height: 0px; display: table; height: auto;" border="0" cellpadding="0" cellspacing="0"><tbody class="ui-sortable" style="min-height: 0px; display: table-row-group; height: auto;"><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline-width: 0px;"><div class="acym__wysid__tinymce--text mce-content-body" style="position: relative;" spellcheck="false" contenteditable="false" id="mce_41"><p style="font-family: Helvetica; font-size: 12px; font-weight: normal; font-style: normal; color: #000000; word-break: break-word; text-align: center; line-height: inherit;"><span style="font-size: 12px;">Having trouble seeing this email?&nbsp;<span class="mceNonEditable acym_dynamic" contenteditable="false" data-dynamic="{readonline}View it online{/readonline}"><a style="text-decoration: none; font-family: Helvetica; font-size: 12px; font-weight: normal; line-height: inherit; font-style: normal; color: #38c2f3;" href="view_it_online_link" target="_blank" rel="noopener"><span class="acym_online">View it online</span></a><em class="acym_remove_dynamic acymicon-close">‍‍</em></span>&nbsp;</span></p></div></td></tr></tbody></table></th></tr></tbody></table><table class="row acym__wysid__row__element" bgcolor="#ffffff" style="background-color: rgb(255, 255, 255); z-index: 100;" cellpadding="0" cellspacing="0" border="0"><tbody bgcolor="" style="background-color: inherit;"><tr><th class="small-12 medium-12 large-12 columns acym__wysid__row__element__th" valign="top"><table class="acym__wysid__column" border="0" cellpadding="0" cellspacing="0" style="min-height: 0px; display: table;"><tbody class="ui-sortable" style="min-height: 0px; display: table-row-group;"><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="height: 21px; outline-width: 0px;"><span class="acy-editor__space" style="display:block; padding: 0;margin: 0; height: 100%"></span></td></tr><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline-width: 0px;"><div class="acym__wysid__tinymce--image mce-content-body" style="position: relative;" spellcheck="false" contenteditable="false" id="mce_45"><p style="font-family: Helvetica; font-size: 12px; font-weight: normal; font-style: normal; color: #000000; word-break: break-word; line-height: inherit;"><img class="acym__wysid__media__inserted" style="max-width: 100%; height: 85px; box-sizing: border-box; padding: 0px 5px; display: block; margin-left: auto; margin-right: auto; width: 306px;" src="'.ACYM_LIVE.ACYM_UPLOAD_FOLDER.'logo_acymailing_step_email.png" alt="logo_acymailing_step_email.png" height="85" width="306"></p></div></td></tr><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="height: 29px; outline-width: 0px;"><span class="acy-editor__space" style="display:block; padding: 0;margin: 0; height: 100%"></span></td></tr><tr class="acym__wysid__column__element acym__wysid__column__element__separator cursor-pointer ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline-width: 0px;"><hr style="border-bottom: 3px solid rgb(214, 214, 214); width: 24%; border-top: none; border-left: none; border-right: none; size: 3px;" class="acym__wysid__row__separator"></td></tr></tbody></table></th></tr></tbody></table><table class="row acym__wysid__row__element" bgcolor="#ffffff" style="background-color: rgb(255, 255, 255); z-index: 100;" cellpadding="0" cellspacing="0" border="0"><tbody bgcolor="" style="background-color: inherit;"><tr><th class="small-12 medium-12 large-12 columns acym__wysid__row__element__th" valign="top"><table class="acym__wysid__column" border="0" cellpadding="0" cellspacing="0" style="min-height: 0px; display: table;"><tbody class="ui-sortable" style="min-height: 0px; display: table-row-group;"><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline-width: 0px;"><div class="acym__wysid__tinymce--text mce-content-body" style="position: relative;" spellcheck="false" contenteditable="false" id="mce_42"><h1 style="font-family: Helvetica; font-size: 20px; font-weight: normal; font-style: normal; color: #000000; line-height: inherit; text-align: left;">Dear&nbsp;<span class="mceNonEditable acym_dynamic" contenteditable="false" data-dynamic="{subscriber:name|part:first|ucfirst}">Admin<em class="acym_remove_dynamic acymicon-close">‍‍</em></span>,</h1></div></td></tr><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline-width: 0px;"><div class="acym__wysid__tinymce--text mce-content-body" style="position: relative;" spellcheck="false" contenteditable="false" id="mce_43"><p style="word-break: break-word; font-family: Helvetica; font-size: 12px; font-weight: normal; font-style: normal; color: #000000; line-height: inherit; text-align: left;"><span style="color: #000000;"><span style="font-family: Helvetica;">Feel free to drag &amp; drop some content and&nbsp;</span><span style="font-family: Helvetica;">try the AcyMailing editor.</span></span></p><p style="word-break: break-word; font-family: Helvetica; font-size: 12px; font-weight: normal; font-style: normal; color: #000000; line-height: inherit; text-align: left;"><span style="color: #000000; font-family: Helvetica;">Once it is done, click on the "Apply" button.</span></p></div></td></tr></tbody></table></th></tr></tbody></table><table class="row acym__wysid__row__element" bgcolor="#ffffff" style="background-color: rgb(255, 255, 255); z-index: 100; padding: 0px;" cellpadding="0" cellspacing="0" border="0"><tbody bgcolor="" style="background-color: inherit;"><tr><th class="small-12 medium-12 large-12 columns acym__wysid__row__element__th" valign="top"><table class="acym__wysid__column" border="0" cellpadding="0" cellspacing="0" style="min-height: 0px; display: table;"><tbody class="ui-sortable" style="min-height: 0px; display: table-row-group;"><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline-width: 0px;"><div class="acym__wysid__tinymce--image mce-content-body" style="position: relative;" spellcheck="false" contenteditable="false" id="mce_46"><p style="font-family: Helvetica; font-size: 12px; font-weight: normal; font-style: normal; color: #000000; word-break: break-word; line-height: inherit;"><img class="acym__wysid__media__inserted" style="max-width: 100%; height: auto; box-sizing: border-box; padding: 0px 5px; display: block; margin-left: auto; margin-right: auto; width: 580px;" src="'.ACYM_LIVE.ACYM_UPLOAD_FOLDER.'image_mailing_step_email.jpg" alt="image_mailing_step_email.jpg" height="400.68" width="580"></p></div></td></tr></tbody></table></th></tr></tbody></table><table class="row acym__wysid__row__element" bgcolor="#303e47" style="background-color: rgb(48, 62, 71); z-index: 100;" cellpadding="0" cellspacing="0" border="0"><tbody bgcolor="" style="background-color: inherit;"><tr><th class="small-12 medium-12 large-12 columns acym__wysid__row__element__th" valign="top"><table class="acym__wysid__column" border="0" cellpadding="0" cellspacing="0" style="min-height: 0px; display: table;"><tbody class="ui-sortable" style="min-height: 0px; display: table-row-group;"><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline-width: 0px;"><div class="acym__wysid__tinymce--text mce-content-body" style="position: relative;" spellcheck="false" contenteditable="false" id="mce_44"><p style="font-family: Helvetica; font-size: 12px; font-weight: normal; font-style: normal; color: #000000; text-align: center; word-break: break-word; line-height: inherit;"><span style="color: #ffffff;">If you\'re not interested anymore, you can</span> <span class="mceNonEditable acym_dynamic" data-dynamic="{unsubscribe}unsubscribe{/unsubscribe}" contenteditable="false"><a style="text-decoration: none; font-family: Helvetica; font-size: 12px; font-weight: normal; line-height: inherit; font-style: normal; color: #38c2f3;" target="_blank" href="'.acym_frontendLink(
258 'frontusers&task=unsubscribe&id='.$user->id.'&key='.$user->key.'&'.acym_noTemplate()
259 ).'" rel="noopener"><span class="acym_unsubscribe acym_link" style="font-family: Helvetica; font-size: 12px; font-weight: normal; line-height: inherit; font-style: normal; color: #ffffff;">unsubscribe</span></a><em class="acym_remove_dynamic acymicon-close">‍</em></span></p></div></td></tr></tbody></table></th></tr></tbody></table></td></tr></tbody></table></center></td></tr></tbody></table></div>';
260
261 $addNotif[] = [
262 'name' => acym_translation(self::FIRST_EMAIL_NAME_KEY),
263 'subject' => acym_translation('ACYM_YOUR_FIRST_EMAIL'),
264 'content' => $body,
265 'settings' => '{"default":{"font-family":"Helvetica"},"p":{"font-family":"Helvetica","font-size":"12px","overridden":{"font-size":true,"line-height":true},"line-height":"inherit"},"a":{"font-family":"Helvetica","font-size":"12px","overridden":{"font-size":true,"line-height":true,"color":true},"line-height":"inherit","color":"#38c2f3"},"span.acym_link":{"font-family":"Helvetica","font-size":"12px","overridden":{"font-size":true,"line-height":true,"color":true},"line-height":"inherit","color":"#ffffff"},"h1":{"font-family":"Helvetica","font-size":"20px","overridden":{"font-size":true,"line-height":true},"line-height":"inherit"}}',
266 'type' => MailClass::TYPE_TEMPLATE,
267 'thumbnail' => 'thumbnail_first_email.png',
268 ];
269 $mailingImage = 'image_mailing_step_email.jpg';
270 $logoAcymailing = 'logo_acymailing_step_email.png';
271 $thumbnailFirstStep = 'thumbnail_first_email.png';
272
273 $uploadFolder = ACYM_ROOT.ACYM_UPLOAD_FOLDER;
274 $defaultImagesFolder = ACYM_ROOT.ACYM_MEDIA_FOLDER.'images'.DS.'templates'.DS.'first_email'.DS;
275
276 acym_createFolder($uploadFolder);
277 acym_createFolder(ACYM_UPLOAD_FOLDER_THUMBNAIL);
278
279 if (!file_exists($uploadFolder.$mailingImage)) {
280 copy(
281 $defaultImagesFolder.$mailingImage,
282 $uploadFolder.$mailingImage
283 );
284 }
285 if (!file_exists($uploadFolder.$logoAcymailing)) {
286 copy(
287 $defaultImagesFolder.$logoAcymailing,
288 $uploadFolder.$logoAcymailing
289 );
290 }
291 if (!file_exists(ACYM_UPLOAD_FOLDER_THUMBNAIL.$thumbnailFirstStep)) {
292 copy(
293 $defaultImagesFolder.$thumbnailFirstStep,
294 ACYM_UPLOAD_FOLDER_THUMBNAIL.$thumbnailFirstStep
295 );
296 }
297 }
298
299 if (!empty($addNotif)) {
300 foreach ($addNotif as $oneNotif) {
301 $notif = new \stdClass();
302 $notif->type = $oneNotif['type'] ?? MailClass::TYPE_NOTIFICATION;
303 $notif->settings = $oneNotif['settings'] ?? '';
304 $notif->drag_editor = $oneNotif['drag_editor'] ?? 1;
305 $notif->creator_id = acym_currentUserId();
306 $notif->creation_date = gmdate('Y-m-d H:i:s', time());
307 $notif->name = $oneNotif['name'];
308 $notif->subject = $oneNotif['subject'];
309 $notif->body = $oneNotif['content'];
310 $notif->thumbnail = $oneNotif['thumbnail'] ?? '';
311
312 $notif->id = $mailClass->save($notif);
313 if (empty($notif->id)) {
314 acym_enqueueMessage(acym_translationSprintf('ACYM_ERROR_INSTALLING_X_TEMPLATE', $notif->name), 'error');
315
316 return false;
317 }
318
319 if (strpos($notif->body, 'view_it_online_link') !== false) {
320 $viewItOnlineLink = 'archive&task=view&id='.$notif->id.'&userid='.$user->id.'-'.$user->key.'&'.acym_noTemplate();
321 $notif->body = str_replace('view_it_online_link', acym_frontendLink($viewItOnlineLink), $notif->body);
322 $mailClass->save($notif);
323 }
324 }
325 }
326
327 return true;
328 }
329
330 public function installAddons(): void
331 {
332 $pluginClass = new PluginClass();
333 $installedAddons = array_keys($pluginClass->getAll('folder_name'));
334 $coreAddons = acym_coreAddons();
335
336 foreach ($coreAddons as $oneAddon) {
337 if (in_array($oneAddon->folder_name, $installedAddons)) {
338 continue;
339 }
340
341 $pluginClass->save($oneAddon);
342 }
343 }
344
345 public function installOverrideEmails(): void
346 {
347 $overrideClass = new OverrideClass();
348 $mailClass = new MailClass();
349 $currentUserId = acym_currentUserId();
350
351 $emailOverrides = acym_getEmailOverrides();
352 $existingOverrides = $mailClass->getMailsByType(MailClass::TYPE_OVERRIDE, ['offset' => 0, 'mailsPerPage' => 9000, 'key' => 'name']);
353 $existingOverrides = $existingOverrides['mails'];
354
355 foreach ($emailOverrides as $oneOverride) {
356 if (!empty($existingOverrides[$oneOverride['name']])) {
357 continue;
358 }
359
360 $mail = new \stdClass();
361 $mail->name = $oneOverride['name'];
362 $mail->creation_date = gmdate('Y-m-d H:i:s', time());
363 $mail->type = MailClass::TYPE_OVERRIDE;
364 $mail->subject = $oneOverride['new_subject'];
365 $mail->body = $this->getFormatedNotification($oneOverride['new_body']);
366 $mail->drag_editor = 1;
367 $mail->creator_id = $currentUserId;
368 $mailId = $mailClass->save($mail);
369
370 if (empty($mailId)) {
371 continue;
372 }
373
374 $override = new \stdClass();
375 $override->mail_id = $mailId;
376 $override->description = $oneOverride['description'];
377 $override->source = $oneOverride['source'];
378 $override->active = 0;
379 $override->base_subject = json_encode($oneOverride['base_subject']);
380 $override->base_body = empty($oneOverride['base_body']) ? '' : json_encode($oneOverride['base_body']);
381
382 $overrideClass->save($override);
383 }
384 }
385
386 private function newAutomationAdmin(string $title): void
387 {
388 $automationClass = new AutomationClass();
389 $stepClass = new StepClass();
390 $conditionClass = new ConditionClass();
391 $mailClass = new MailClass();
392 $actionClass = new ActionClass();
393
394 $adminCreate = new \stdClass();
395 $adminCreate->desc = 'ACYM_ADMIN_USER_CREATE_DESC';
396 $adminCreate->triggers = '{"user_creation":[""],"type_trigger":"user"}';
397 $adminCreate->conditions = '{"type_condition":"user"}';
398 $adminCreate->emailTitle = acym_translation('ACYM_SUBSCRIBER_CREATION');
399 $adminCreate->emailSubject = acym_translation('ACYM_SUBSCRIBER_CREATION');
400 $adminCreate->emailContent = '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
401 <p>'.acym_translation('ACYM_NEW_USER_ACYMAILING').':</p>
402 <p>'.acym_translation('ACYM_NAME').': '.$this->getDTextDisplay('{subscriber:name|info:current}', 'Roger').'</p>
403 <p>'.acym_translation('ACYM_EMAIL').': '.$this->getDTextDisplay('{subscriber:email|info:current}', '[email protected]').'</p>';
404
405 $adminModif = new \stdClass();
406 $adminModif->desc = 'ACYM_ADMIN_USER_MODIFICATION_DESC';
407 $adminModif->triggers = '{"user_modification":[""],"type_trigger":"user"}';
408 $adminModif->conditions = '{"type_condition":"user"}';
409 $adminModif->emailTitle = acym_translation('ACYM_SUBSCRIBER_MODIFICATION');
410 $adminModif->emailSubject = acym_translation('ACYM_SUBSCRIBER_MODIFICATION');
411 $adminModif->emailContent = '<h1 style="font-size: 24px;">'.acym_translation('ACYM_HELLO').' '.$this->getDTextDisplay('{subscriber:name|ucfirst}', 'Marc').',</h1>
412 <p>'.acym_translation('ACYM_USER_MODIFY_ACYMAILING').':</p>
413 <p>'.acym_translation('ACYM_NAME').': '.$this->getDTextDisplay('{subscriber:name|info:current}', 'Roger').'</p>
414 <p>'.acym_translation('ACYM_EMAIL').': '.$this->getDTextDisplay('{subscriber:email|info:current}', '[email protected]').'</p>';
415
416 $info = [
417 'ACYM_ADMIN_USER_CREATE' => $adminCreate,
418 'ACYM_ADMIN_USER_MODIFICATION' => $adminModif,
419 ];
420
421 $newAutomation = new \stdClass();
422 $newAutomation->name = acym_translation($title);
423 $newAutomation->description = acym_translation($info[$title]->desc);
424 $newAutomation->active = 0;
425 $newAutomation->admin = 1;
426 $newAutomation->id = $automationClass->save($newAutomation);
427 if (empty($newAutomation->id)) {
428 return;
429 }
430
431 $newStep = new \stdClass();
432 $newStep->name = acym_translation($title);
433 $newStep->triggers = $info[$title]->triggers;
434 $newStep->automation_id = $newAutomation->id;
435 $newStep->id = $stepClass->save($newStep);
436 if (empty($newStep->id)) {
437 return;
438 }
439
440 $newCondition = new \stdClass();
441 $newCondition->step_id = $newStep->id;
442 $newCondition->conditions = $info[$title]->conditions;
443 $newCondition->id = $conditionClass->save($newCondition);
444 if (empty($newCondition->id)) {
445 return;
446 }
447
448 $mailAutomation = new \stdClass();
449 $mailAutomation->type = MailClass::TYPE_AUTOMATION;
450 $mailAutomation->drag_editor = 1;
451 $mailAutomation->creator_id = acym_currentUserId();
452 $mailAutomation->creation_date = gmdate('Y-m-d H:i:s', time());
453 $mailAutomation->name = acym_translation($info[$title]->emailTitle);
454 $mailAutomation->subject = acym_translation($info[$title]->emailSubject);
455 $mailAutomation->body = $this->getFormatedNotification($info[$title]->emailContent);
456
457 $mailAutomation->id = $mailClass->save($mailAutomation);
458 if (empty($mailAutomation->id)) {
459 return;
460 }
461
462 $newAction = new \stdClass();
463 $newAction->condition_id = $newCondition->id;
464 $newAction->actions = '[{"acy_add_queue":{"mail_id":"'.intval($mailAutomation->id).'","time":"[time]"}}]';
465 $newAction->filters = '{"0":{"1":{"acy_field":{"field":"email","operator":"=","value":"'.acym_currentUserEmail().'"}}},"type_filter":"classic"}';
466 $newAction->order = 1;
467 $actionClass->save($newAction);
468 }
469
470 private function getDTextDisplay(string $dtext, string $preview): string
471 {
472 $display = '<span class="acym_dynamic mceNonEditable" contenteditable="false" data-dynamic="'.esc_attr($dtext).'" data-mce-selected="1">';
473 $display .= $preview;
474 $display .= '<em class="acym_remove_dynamic acymicon-close">&zwj;</em>';
475 $display .= '</span>';
476
477 return $display;
478 }
479
480 private function getFormatedNotification(string $content): string
481 {
482 $beginning = '<div id="acym__wysid__template" class="cell"><table class="body"><tbody><tr><td align="center" class="center acym__wysid__template__content" valign="top" style="background-color: rgb(239, 239, 239); padding: 40px 0 120px 0;"><center><table align="center" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="acym__wysid__row ui-droppable ui-sortable" style="min-height: 0px; display: table-cell;"><table class="row acym__wysid__row__element" bgcolor="#dadada" border="0" cellpadding="0" cellspacing="0"><tbody style="background-color: rgb(218,218,218);" bgcolor="#ffffff"><tr><th class="small-12 medium-12 large-12 columns acym__wysid__row__element__th"><table class="acym__wysid__column" style="min-height: 0px; display: table;" border="0" cellpadding="0" cellspacing="0"><tbody class="ui-sortable" style="min-height: 0px; display: table-row-group;"><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline: rgb(0,163,254) dashed 0px; outline-offset: -1px;"><span class="acy-editor__space acy-editor__space--focus" style="display: block; padding: 0px; margin: 0px; height: 10px;"></span></td></tr></tbody></table></th></tr></tbody></table><table class="row acym__wysid__row__element" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0"><tbody style="background-color: transparent;" bgcolor="#ffffff"><tr><th class="small-12 medium-12 large-12 columns"><table class="acym__wysid__column" style="min-height: 0px; display: table;" border="0" cellpadding="0" cellspacing="0"><tbody class="ui-sortable" style="min-height: 0px; display: table-row-group;"><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline: rgb(0, 163, 254) dashed 0px; outline-offset: -1px;"><div class="acym__wysid__tinymce--text mce-content-body" style="position: relative;" spellcheck="false">';
483 $ending = '</div></td></tr></tbody></table></th></tr></tbody></table><table class="row acym__wysid__row__element" bgcolor="#dadada" style="position: relative; z-index: 100; top: 0; left: 0;" border="0" cellpadding="0" cellspacing="0"><tbody style="background-color: rgb(218, 218, 218);" bgcolor="#ffffff"><tr><th class="small-12 medium-12 large-12 columns acym__wysid__row__element__th"><table class="acym__wysid__column" style="min-height: 0px; display: table;" border="0" cellpadding="0" cellspacing="0"><tbody class="ui-sortable" style="min-height: 0px; display: table-row-group;"><tr class="acym__wysid__column__element ui-draggable" style="position: relative; top: inherit; left: inherit; right: inherit; bottom: inherit; height: auto;"><td class="large-12 acym__wysid__column__element__td" style="outline: rgb(0, 163, 254) dashed 0px; outline-offset: -1px;"><span class="acy-editor__space acy-editor__space--focus" style="display: block; padding: 0px; margin: 0px; height: 10px;"></span></td></tr></tbody></table></th></tr></tbody></table></td></tr></tbody></table></center></td></tr></tbody></table></div>';
484
485 return $beginning.$content.$ending;
486 }
487
488 private function getCurrentUser(): ?object
489 {
490 $currentCMSId = acym_currentUserId();
491 $userClass = new UserClass();
492 $user = $userClass->getOneByCMSId($currentCMSId);
493 if (!empty($user)) {
494 return $user;
495 }
496
497 $currentCMSEmail = acym_currentUserEmail();
498 $user = $userClass->getOneByEmail($currentCMSEmail);
499 if (!empty($user)) {
500 return $user;
501 }
502
503 $newUser = new \stdClass();
504 $newUser->email = $currentCMSEmail;
505 $newUser->confirmed = 1;
506 $newUser->cms_id = $currentCMSId;
507 $newUser->id = $userClass->save($newUser);
508
509 if (empty($newUser->id)) {
510 return null;
511 }
512
513 return $userClass->getOneById($newUser->id);
514 }
515 }
516