Changeset 3398904
- Timestamp:
- 11/19/2025 11:37:16 AM (4 months ago)
- Location:
- acymailing
- Files:
-
- 30 edited
- 1 copied
-
tags/10.6.4 (copied) (copied from acymailing/trunk)
-
tags/10.6.4/back/Classes/CampaignClass.php (modified) (1 diff)
-
tags/10.6.4/back/Classes/MailClass.php (modified) (3 diffs)
-
tags/10.6.4/back/Classes/UserClass.php (modified) (1 diff)
-
tags/10.6.4/back/Controllers/DashboardController.php (modified) (1 diff)
-
tags/10.6.4/back/Core/AcymClass.php (modified) (1 diff)
-
tags/10.6.4/back/Core/wordpress/extension.php (modified) (6 diffs)
-
tags/10.6.4/back/Helpers/CronHelper.php (modified) (1 diff)
-
tags/10.6.4/back/Helpers/Update/Configuration.php (modified) (1 diff)
-
tags/10.6.4/back/Helpers/UpdateHelper.php (modified) (1 diff)
-
tags/10.6.4/back/Helpers/global/curl.php (modified) (1 diff)
-
tags/10.6.4/index.php (modified) (1 diff)
-
tags/10.6.4/language/acymailing.pot (modified) (1 diff)
-
tags/10.6.4/language/en-US.com_acym.ini (modified) (1 diff)
-
tags/10.6.4/readme.txt (modified) (2 diffs)
-
tags/10.6.4/vendor/composer/installed.php (modified) (2 diffs)
-
trunk/back/Classes/CampaignClass.php (modified) (1 diff)
-
trunk/back/Classes/MailClass.php (modified) (3 diffs)
-
trunk/back/Classes/UserClass.php (modified) (1 diff)
-
trunk/back/Controllers/DashboardController.php (modified) (1 diff)
-
trunk/back/Core/AcymClass.php (modified) (1 diff)
-
trunk/back/Core/wordpress/extension.php (modified) (6 diffs)
-
trunk/back/Helpers/CronHelper.php (modified) (1 diff)
-
trunk/back/Helpers/Update/Configuration.php (modified) (1 diff)
-
trunk/back/Helpers/UpdateHelper.php (modified) (1 diff)
-
trunk/back/Helpers/global/curl.php (modified) (1 diff)
-
trunk/index.php (modified) (1 diff)
-
trunk/language/acymailing.pot (modified) (1 diff)
-
trunk/language/en-US.com_acym.ini (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
acymailing/tags/10.6.4/back/Classes/CampaignClass.php
r3397048 r3398904 1024 1024 } 1025 1025 1026 private function generateCampaign(object $campaign, object $campaignMail, int $lastGenerated, MailClass $mailClass): object1026 private function generateCampaign(object $campaign, object $campaignMail, ?int $lastGenerated, MailClass $mailClass): object 1027 1027 { 1028 1028 $newMail = $this->generateMailAutoCampaign($campaignMail, $campaign->sending_params['number_generated'], $mailClass); -
acymailing/tags/10.6.4/back/Classes/MailClass.php
r3397048 r3398904 1017 1017 public function sendAutomation(int $mailId, array $userIds, string $sendingDate, array $automationAdmin = []) 1018 1018 { 1019 if (empty($mailId)) return acym_translationSprintf('ACYM_EMAILS_ADDED_QUEUE', 0); 1020 if (empty($sendingDate)) return acym_translation('ACYM_WRONG_DATE'); 1021 if (empty($userIds)) return acym_translation('ACYM_USER_NOT_FOUND'); 1019 if (empty($mailId)) { 1020 return acym_translationSprintf('ACYM_EMAILS_ADDED_QUEUE', 0); 1021 } 1022 1023 if (empty($sendingDate)) { 1024 return acym_translation('ACYM_WRONG_DATE'); 1025 } 1026 1027 if (empty($userIds)) { 1028 return acym_translation('ACYM_USER_NOT_FOUND'); 1029 } 1030 1022 1031 acym_arrayToInteger($userIds); 1023 1032 1024 if (isset($automationAdmin['automationAdmin']) && $automationAdmin['automationAdmin']) { 1025 $userClass = new UserClass(); 1026 $mail = $this->getOneById($mailId); 1027 $user = $userClass->getOneById($automationAdmin['user_id']); 1028 1029 if (empty($mail) || empty($user)) return false; 1030 1031 $mailerHelper = new MailerHelper(); 1032 $pluginHelper = new PluginHelper(); 1033 $extractedTags = $pluginHelper->extractTags($mail, 'subscriber'); 1034 if (!empty($extractedTags)) { 1035 foreach ($extractedTags as $dtext => $oneTag) { 1036 if (empty($oneTag->info) || $oneTag->info != 'current' || empty($user->{$oneTag->id})) continue; 1037 1038 $mailerHelper->addParam(str_replace(['{', '}'], '', $dtext), $user->{$oneTag->id}); 1039 } 1040 } 1041 1042 if (!empty($automationAdmin['user_id'])) { 1043 $userClass = new UserClass(); 1044 $user = $userClass->getOneById($automationAdmin['user_id']); 1045 if (!empty($user)) { 1046 $userField = $userClass->getAllUserFields($user); 1047 foreach ($userField as $map => $value) { 1048 $mailerHelper->addParam('user:'.$map, $value); 1049 } 1050 } 1051 } 1052 1053 $emailsSent = 0; 1054 foreach ($userIds as $userId) { 1055 if ($mailerHelper->sendOne($mail->id, $userId)) { 1056 $emailsSent++; 1057 } 1058 } 1059 1060 return $emailsSent; 1033 $nbSent = $this->sendNotification($mailId, $userIds, $automationAdmin); 1034 if (!is_null($nbSent)) { 1035 return $nbSent; 1061 1036 } 1062 1037 … … 1068 1043 ); 1069 1044 1045 if ($result === 0) { 1046 return acym_translation('ACYM_CAMPAIGN_ALREADY_QUEUED'); 1047 } 1070 1048 1071 1049 $mailStatClass = new MailStatClass(); … … 1081 1059 $mailStatClass->save($newMailStat); 1082 1060 1083 if ($result === 0) {1084 return acym_translation('ACYM_CAMPAIGN_ALREADY_QUEUED');1085 }1086 1087 1061 return $result; 1062 } 1063 1064 private function sendNotification(int $mailId, array $userIds, array $automationAdmin): ?int 1065 { 1066 if (empty($automationAdmin['user_id'])) { 1067 return null; 1068 } 1069 1070 $userClass = new UserClass(); 1071 $mail = $this->getOneById($mailId); 1072 $user = $userClass->getOneById($automationAdmin['user_id']); 1073 1074 if (empty($mail) || empty($user)) { 1075 return 0; 1076 } 1077 1078 $mailerHelper = new MailerHelper(); 1079 $pluginHelper = new PluginHelper(); 1080 $extractedTags = $pluginHelper->extractTags($mail, 'subscriber'); 1081 1082 $isNotification = false; 1083 foreach ($extractedTags as $dtext => $oneTag) { 1084 if (empty($oneTag->info) || $oneTag->info !== 'current') { 1085 continue; 1086 } 1087 1088 $isNotification = true; 1089 1090 if (!empty($user->{$oneTag->id})) { 1091 $mailerHelper->addParam(str_replace(['{', '}'], '', $dtext), $user->{$oneTag->id}); 1092 } 1093 } 1094 1095 if (!$isNotification) { 1096 if (isset($automationAdmin['automationAdmin']) && $automationAdmin['automationAdmin']) { 1097 return 0; 1098 } else { 1099 return null; 1100 } 1101 } 1102 1103 $userFields = $userClass->getAllUserFields($user); 1104 foreach ($userFields as $map => $value) { 1105 $mailerHelper->addParam('subscriber:'.$map.'|info:current', $value); 1106 $mailerHelper->addParam('user:'.$map, $value); 1107 } 1108 1109 $emailsSent = 0; 1110 foreach ($userIds as $userId) { 1111 if ($mailerHelper->sendOne($mail->id, $userId)) { 1112 $emailsSent++; 1113 } 1114 } 1115 1116 return $emailsSent; 1088 1117 } 1089 1118 -
acymailing/tags/10.6.4/back/Classes/UserClass.php
r3397048 r3398904 528 528 } 529 529 530 public function subscribe( array$userIds, array $addLists, bool $trigger = true, bool $forceFront = false): bool530 public function subscribe($userIds, array $addLists, bool $trigger = true, bool $forceFront = false): bool 531 531 { 532 532 if (empty($addLists)) { -
acymailing/tags/10.6.4/back/Controllers/DashboardController.php
r3398232 r3398904 45 45 $splashJson = acym_fileGetContent(ACYM_NEW_FEATURES_SPLASHSCREEN_JSON); 46 46 $version = json_decode($splashJson); 47 if (version_compare($this->config->get('previous_version', '10.6. 3'), $version->max_version, '>=')) {47 if (version_compare($this->config->get('previous_version', '10.6.4'), $version->max_version, '>=')) { 48 48 @unlink(ACYM_NEW_FEATURES_SPLASHSCREEN_JSON); 49 49 $this->listing(); -
acymailing/tags/10.6.4/back/Core/AcymClass.php
r3397048 r3398904 178 178 $element->$oneColumn = []; 179 179 } elseif (is_string($element->$oneColumn)) { 180 $element->$oneColumn = [];180 $element->$oneColumn = json_decode($element->$oneColumn, true); 181 181 } 182 182 } -
acymailing/tags/10.6.4/back/Core/wordpress/extension.php
r3398232 r3398904 31 31 'title' => acym_translation('ACYM_ARTICLE'), 32 32 'folder_name' => 'post', 33 'version' => '10.6. 3',33 'version' => '10.6.4', 34 34 'active' => '1', 35 35 'category' => 'Content management', … … 37 37 'uptodate' => '1', 38 38 'description' => '- Insert WordPress posts in your emails<br/>- Insert the latest posts of a category in an automatic email', 39 'latest_version' => '10.6. 3',39 'latest_version' => '10.6.4', 40 40 'type' => 'CORE', 41 41 ], … … 43 43 'title' => acym_translation('ACYM_PAGE'), 44 44 'folder_name' => 'page', 45 'version' => '10.6. 3',45 'version' => '10.6.4', 46 46 'active' => '1', 47 47 'category' => 'Content management', … … 49 49 'uptodate' => '1', 50 50 'description' => '- Insert pages in your emails', 51 'latest_version' => '10.6. 3',51 'latest_version' => '10.6.4', 52 52 'type' => 'CORE', 53 53 ], … … 55 55 'title' => acym_translation('ACYM_CREATE_USER'), 56 56 'folder_name' => 'createuser', 57 'version' => '10.6. 3',57 'version' => '10.6.4', 58 58 'active' => '1', 59 59 'category' => 'User management', … … 61 61 'uptodate' => '1', 62 62 'description' => '- Automatically creates a site user when an AcyMailing subscriber is created', 63 'latest_version' => '10.6. 3',63 'latest_version' => '10.6.4', 64 64 'type' => 'CORE', 65 65 ], -
acymailing/tags/10.6.4/back/Helpers/CronHelper.php
r3397048 r3398904 338 338 } 339 339 340 if ($this->isSendingCall || !acym_level(ACYM_ENTERPRISE) || !function_exists(' fsockopen')) {340 if ($this->isSendingCall || !acym_level(ACYM_ENTERPRISE) || !function_exists('curl_multi_exec')) { 341 341 $this->sendQueuedEmails(); 342 342 } else { -
acymailing/tags/10.6.4/back/Helpers/Update/Configuration.php
r3398232 r3398904 123 123 $allPref['Essential'] = ACYM_ESSENTIAL; 124 124 $allPref['Enterprise'] = ACYM_ENTERPRISE; 125 $allPref['previous_version'] = '10.6. 3';125 $allPref['previous_version'] = '10.6.4'; 126 126 127 127 $allPref['display_built_by'] = acym_level(ACYM_ESSENTIAL) ? 0 : 1; -
acymailing/tags/10.6.4/back/Helpers/UpdateHelper.php
r3398232 r3398904 22 22 23 23 private string $level = 'starter'; 24 private string $version = '10.6. 3';24 private string $version = '10.6.4'; 25 25 private string $previousVersion; 26 26 private bool $isUpdating = false; -
acymailing/tags/10.6.4/back/Helpers/global/curl.php
r3397048 r3398904 96 96 function acym_asyncUrlCalls(array $urls): void 97 97 { 98 if (!function_exists(' fsockopen')) {98 if (!function_exists('curl_multi_exec')) { 99 99 return; 100 100 } 101 101 102 foreach ($urls as $url) { 103 $parts = parse_url($url); 104 $isSecure = ($parts['scheme'] ?? 'http') === 'https'; 102 try { 103 $mh = curl_multi_init(); 105 104 106 $scheme = $isSecure ? 'ssl://' : ''; 107 $host = $parts['host'] ?? ''; 108 $port = $parts['port'] ?? ($isSecure ? 443 : 80); 109 $path = ($parts['path'] ?? '/').(isset($parts['query']) ? '?'.$parts['query'] : ''); 105 $handles = []; 106 foreach ($urls as $url) { 107 $ch = curl_init(); 108 curl_setopt($ch, CURLOPT_URL, $url); 109 curl_setopt($ch, CURLOPT_HEADER, 0); 110 curl_setopt($ch, CURLOPT_TIMEOUT, 1); 111 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 112 curl_multi_add_handle($mh, $ch); 113 $handles[] = $ch; 114 } 110 115 111 try { 112 $fp = @fsockopen($scheme.$host, $port, $errno, $errstr, 1); 113 if ($fp) { 114 $out = "GET $path HTTP/1.1\r\n"; 115 $out .= "Host: $host\r\n"; 116 $out .= "Connection: Close\r\n\r\n"; 116 $running = null; 117 $time = 1; 118 do { 119 curl_multi_exec($mh, $running); 120 usleep(100); 121 if ($time > 50000) { 122 break; 123 } 124 $time++; 125 } while ($running); 117 126 118 fwrite($fp, $out);119 fclose($fp);120 } else {121 throw new Exception($errstr.' ('.$errno.')');122 }123 } catch (Exception $e) {124 $config = acym_config();125 $reportPath = $config->get('cron_savepath');126 if (!empty($reportPath)) {127 $reportPath = str_replace(['{year}', '{month}'], [date('Y'), date('m')], $reportPath);128 $reportPath = acym_cleanPath(ACYM_ROOT.trim(html_entity_decode($reportPath)));129 acym_createDir(dirname($reportPath), true, true);127 foreach ($handles as $handle) { 128 curl_multi_remove_handle($mh, $handle); 129 curl_close($handle); 130 } 131 curl_multi_close($mh); 132 } catch (Exception $e) { 133 $config = acym_config(); 134 $reportPath = $config->get('cron_savepath'); 135 if (!empty($reportPath)) { 136 $reportPath = str_replace(['{year}', '{month}'], [date('Y'), date('m')], $reportPath); 137 $reportPath = acym_cleanPath(ACYM_ROOT.trim(html_entity_decode($reportPath))); 138 acym_createDir(dirname($reportPath), true, true); 130 139 131 $lr = "\r\n"; 132 file_put_contents( 133 $reportPath, 134 $lr.$lr.'******************** '.acym_getDate( 135 time() 136 ).' ********************'.$lr.'An error occurred while calling the queue sending script, please make sure the PHP function "fsockopen" is activated on your server: '.$e->getMessage( 137 ), 138 FILE_APPEND 139 ); 140 } 140 $lr = "\r\n"; 141 file_put_contents( 142 $reportPath, 143 $lr.$lr.'******************** '.acym_getDate( 144 time() 145 ).' ********************'.$lr.'An error occurred while calling the queue sending script, please make sure the PHP function "curl_multi_exec" is activated on your server: '.$e->getMessage( 146 ), 147 FILE_APPEND 148 ); 141 149 } 142 150 } -
acymailing/tags/10.6.4/index.php
r3398232 r3398904 6 6 * Author URI: https://www.acymailing.com 7 7 * License: GPLv3 8 * Version: 10.6. 38 * Version: 10.6.4 9 9 * Text Domain: acymailing 10 10 * Domain Path: /language -
acymailing/tags/10.6.4/language/acymailing.pot
r3398232 r3398904 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: AcyMailing 10.6. 3\n"3 "Project-Id-Version: AcyMailing 10.6.4\n" 4 4 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/acymailing\n" 5 5 "MIME-Version: 1.0\n" 6 6 "Content-Type: text/plain; charset=UTF-8\n" 7 7 "Content-Transfer-Encoding: 8bit\n" 8 "POT-Creation-Date: 2025-11-1 8\n"8 "POT-Creation-Date: 2025-11-19\n" 9 9 "X-Domain: acymailing\n" 10 10 -
acymailing/tags/10.6.4/language/en-US.com_acym.ini
r3398232 r3398904 1 ACYM_VERSION="10.6. 3"1 ACYM_VERSION="10.6.4" 2 2 3 3 -
acymailing/tags/10.6.4/readme.txt
r3398232 r3398904 4 4 Requires at least: 5.5 5 5 Tested up to: 6.8 6 Stable tag: 10.6. 36 Stable tag: 10.6.4 7 7 Requires PHP: 7.4.0 8 8 License: GPLv3 … … 114 114 == Changelog == 115 115 116 = 10.6.3 - November 18, 2025 = 117 * The license is now correctly recognized when switching to another license key while in expired free trial period. 118 * We fixed an issue related to the attachments included in sent emails. 116 = 10.6.4 - November 19, 2025 = 117 * Automation emails sent to admins can now contain information from the user that triggered the automation. 118 119 * The saving of campaign settings has been fixed when using segments and send frequencies. 120 * The automated emails sending now correctly handles servers with slow connection. 119 121 120 122 [See the whole changelog here.](https://www.acymailing.com/changelog) -
acymailing/tags/10.6.4/vendor/composer/installed.php
r3398232 r3398904 4 4 'pretty_version' => 'dev-develop', 5 5 'version' => 'dev-develop', 6 'reference' => ' a30e87f4a38ebc9fbbf1669781dc0c7d29a00f1a',6 'reference' => '6af10f311e36a1c05b5876e5a6cc48c8c490032f', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 14 14 'pretty_version' => 'dev-develop', 15 15 'version' => 'dev-develop', 16 'reference' => ' a30e87f4a38ebc9fbbf1669781dc0c7d29a00f1a',16 'reference' => '6af10f311e36a1c05b5876e5a6cc48c8c490032f', 17 17 'type' => 'library', 18 18 'install_path' => __DIR__ . '/../../', -
acymailing/trunk/back/Classes/CampaignClass.php
r3397048 r3398904 1024 1024 } 1025 1025 1026 private function generateCampaign(object $campaign, object $campaignMail, int $lastGenerated, MailClass $mailClass): object1026 private function generateCampaign(object $campaign, object $campaignMail, ?int $lastGenerated, MailClass $mailClass): object 1027 1027 { 1028 1028 $newMail = $this->generateMailAutoCampaign($campaignMail, $campaign->sending_params['number_generated'], $mailClass); -
acymailing/trunk/back/Classes/MailClass.php
r3397048 r3398904 1017 1017 public function sendAutomation(int $mailId, array $userIds, string $sendingDate, array $automationAdmin = []) 1018 1018 { 1019 if (empty($mailId)) return acym_translationSprintf('ACYM_EMAILS_ADDED_QUEUE', 0); 1020 if (empty($sendingDate)) return acym_translation('ACYM_WRONG_DATE'); 1021 if (empty($userIds)) return acym_translation('ACYM_USER_NOT_FOUND'); 1019 if (empty($mailId)) { 1020 return acym_translationSprintf('ACYM_EMAILS_ADDED_QUEUE', 0); 1021 } 1022 1023 if (empty($sendingDate)) { 1024 return acym_translation('ACYM_WRONG_DATE'); 1025 } 1026 1027 if (empty($userIds)) { 1028 return acym_translation('ACYM_USER_NOT_FOUND'); 1029 } 1030 1022 1031 acym_arrayToInteger($userIds); 1023 1032 1024 if (isset($automationAdmin['automationAdmin']) && $automationAdmin['automationAdmin']) { 1025 $userClass = new UserClass(); 1026 $mail = $this->getOneById($mailId); 1027 $user = $userClass->getOneById($automationAdmin['user_id']); 1028 1029 if (empty($mail) || empty($user)) return false; 1030 1031 $mailerHelper = new MailerHelper(); 1032 $pluginHelper = new PluginHelper(); 1033 $extractedTags = $pluginHelper->extractTags($mail, 'subscriber'); 1034 if (!empty($extractedTags)) { 1035 foreach ($extractedTags as $dtext => $oneTag) { 1036 if (empty($oneTag->info) || $oneTag->info != 'current' || empty($user->{$oneTag->id})) continue; 1037 1038 $mailerHelper->addParam(str_replace(['{', '}'], '', $dtext), $user->{$oneTag->id}); 1039 } 1040 } 1041 1042 if (!empty($automationAdmin['user_id'])) { 1043 $userClass = new UserClass(); 1044 $user = $userClass->getOneById($automationAdmin['user_id']); 1045 if (!empty($user)) { 1046 $userField = $userClass->getAllUserFields($user); 1047 foreach ($userField as $map => $value) { 1048 $mailerHelper->addParam('user:'.$map, $value); 1049 } 1050 } 1051 } 1052 1053 $emailsSent = 0; 1054 foreach ($userIds as $userId) { 1055 if ($mailerHelper->sendOne($mail->id, $userId)) { 1056 $emailsSent++; 1057 } 1058 } 1059 1060 return $emailsSent; 1033 $nbSent = $this->sendNotification($mailId, $userIds, $automationAdmin); 1034 if (!is_null($nbSent)) { 1035 return $nbSent; 1061 1036 } 1062 1037 … … 1068 1043 ); 1069 1044 1045 if ($result === 0) { 1046 return acym_translation('ACYM_CAMPAIGN_ALREADY_QUEUED'); 1047 } 1070 1048 1071 1049 $mailStatClass = new MailStatClass(); … … 1081 1059 $mailStatClass->save($newMailStat); 1082 1060 1083 if ($result === 0) {1084 return acym_translation('ACYM_CAMPAIGN_ALREADY_QUEUED');1085 }1086 1087 1061 return $result; 1062 } 1063 1064 private function sendNotification(int $mailId, array $userIds, array $automationAdmin): ?int 1065 { 1066 if (empty($automationAdmin['user_id'])) { 1067 return null; 1068 } 1069 1070 $userClass = new UserClass(); 1071 $mail = $this->getOneById($mailId); 1072 $user = $userClass->getOneById($automationAdmin['user_id']); 1073 1074 if (empty($mail) || empty($user)) { 1075 return 0; 1076 } 1077 1078 $mailerHelper = new MailerHelper(); 1079 $pluginHelper = new PluginHelper(); 1080 $extractedTags = $pluginHelper->extractTags($mail, 'subscriber'); 1081 1082 $isNotification = false; 1083 foreach ($extractedTags as $dtext => $oneTag) { 1084 if (empty($oneTag->info) || $oneTag->info !== 'current') { 1085 continue; 1086 } 1087 1088 $isNotification = true; 1089 1090 if (!empty($user->{$oneTag->id})) { 1091 $mailerHelper->addParam(str_replace(['{', '}'], '', $dtext), $user->{$oneTag->id}); 1092 } 1093 } 1094 1095 if (!$isNotification) { 1096 if (isset($automationAdmin['automationAdmin']) && $automationAdmin['automationAdmin']) { 1097 return 0; 1098 } else { 1099 return null; 1100 } 1101 } 1102 1103 $userFields = $userClass->getAllUserFields($user); 1104 foreach ($userFields as $map => $value) { 1105 $mailerHelper->addParam('subscriber:'.$map.'|info:current', $value); 1106 $mailerHelper->addParam('user:'.$map, $value); 1107 } 1108 1109 $emailsSent = 0; 1110 foreach ($userIds as $userId) { 1111 if ($mailerHelper->sendOne($mail->id, $userId)) { 1112 $emailsSent++; 1113 } 1114 } 1115 1116 return $emailsSent; 1088 1117 } 1089 1118 -
acymailing/trunk/back/Classes/UserClass.php
r3397048 r3398904 528 528 } 529 529 530 public function subscribe( array$userIds, array $addLists, bool $trigger = true, bool $forceFront = false): bool530 public function subscribe($userIds, array $addLists, bool $trigger = true, bool $forceFront = false): bool 531 531 { 532 532 if (empty($addLists)) { -
acymailing/trunk/back/Controllers/DashboardController.php
r3398232 r3398904 45 45 $splashJson = acym_fileGetContent(ACYM_NEW_FEATURES_SPLASHSCREEN_JSON); 46 46 $version = json_decode($splashJson); 47 if (version_compare($this->config->get('previous_version', '10.6. 3'), $version->max_version, '>=')) {47 if (version_compare($this->config->get('previous_version', '10.6.4'), $version->max_version, '>=')) { 48 48 @unlink(ACYM_NEW_FEATURES_SPLASHSCREEN_JSON); 49 49 $this->listing(); -
acymailing/trunk/back/Core/AcymClass.php
r3397048 r3398904 178 178 $element->$oneColumn = []; 179 179 } elseif (is_string($element->$oneColumn)) { 180 $element->$oneColumn = [];180 $element->$oneColumn = json_decode($element->$oneColumn, true); 181 181 } 182 182 } -
acymailing/trunk/back/Core/wordpress/extension.php
r3398232 r3398904 31 31 'title' => acym_translation('ACYM_ARTICLE'), 32 32 'folder_name' => 'post', 33 'version' => '10.6. 3',33 'version' => '10.6.4', 34 34 'active' => '1', 35 35 'category' => 'Content management', … … 37 37 'uptodate' => '1', 38 38 'description' => '- Insert WordPress posts in your emails<br/>- Insert the latest posts of a category in an automatic email', 39 'latest_version' => '10.6. 3',39 'latest_version' => '10.6.4', 40 40 'type' => 'CORE', 41 41 ], … … 43 43 'title' => acym_translation('ACYM_PAGE'), 44 44 'folder_name' => 'page', 45 'version' => '10.6. 3',45 'version' => '10.6.4', 46 46 'active' => '1', 47 47 'category' => 'Content management', … … 49 49 'uptodate' => '1', 50 50 'description' => '- Insert pages in your emails', 51 'latest_version' => '10.6. 3',51 'latest_version' => '10.6.4', 52 52 'type' => 'CORE', 53 53 ], … … 55 55 'title' => acym_translation('ACYM_CREATE_USER'), 56 56 'folder_name' => 'createuser', 57 'version' => '10.6. 3',57 'version' => '10.6.4', 58 58 'active' => '1', 59 59 'category' => 'User management', … … 61 61 'uptodate' => '1', 62 62 'description' => '- Automatically creates a site user when an AcyMailing subscriber is created', 63 'latest_version' => '10.6. 3',63 'latest_version' => '10.6.4', 64 64 'type' => 'CORE', 65 65 ], -
acymailing/trunk/back/Helpers/CronHelper.php
r3397048 r3398904 338 338 } 339 339 340 if ($this->isSendingCall || !acym_level(ACYM_ENTERPRISE) || !function_exists(' fsockopen')) {340 if ($this->isSendingCall || !acym_level(ACYM_ENTERPRISE) || !function_exists('curl_multi_exec')) { 341 341 $this->sendQueuedEmails(); 342 342 } else { -
acymailing/trunk/back/Helpers/Update/Configuration.php
r3398232 r3398904 123 123 $allPref['Essential'] = ACYM_ESSENTIAL; 124 124 $allPref['Enterprise'] = ACYM_ENTERPRISE; 125 $allPref['previous_version'] = '10.6. 3';125 $allPref['previous_version'] = '10.6.4'; 126 126 127 127 $allPref['display_built_by'] = acym_level(ACYM_ESSENTIAL) ? 0 : 1; -
acymailing/trunk/back/Helpers/UpdateHelper.php
r3398232 r3398904 22 22 23 23 private string $level = 'starter'; 24 private string $version = '10.6. 3';24 private string $version = '10.6.4'; 25 25 private string $previousVersion; 26 26 private bool $isUpdating = false; -
acymailing/trunk/back/Helpers/global/curl.php
r3397048 r3398904 96 96 function acym_asyncUrlCalls(array $urls): void 97 97 { 98 if (!function_exists(' fsockopen')) {98 if (!function_exists('curl_multi_exec')) { 99 99 return; 100 100 } 101 101 102 foreach ($urls as $url) { 103 $parts = parse_url($url); 104 $isSecure = ($parts['scheme'] ?? 'http') === 'https'; 102 try { 103 $mh = curl_multi_init(); 105 104 106 $scheme = $isSecure ? 'ssl://' : ''; 107 $host = $parts['host'] ?? ''; 108 $port = $parts['port'] ?? ($isSecure ? 443 : 80); 109 $path = ($parts['path'] ?? '/').(isset($parts['query']) ? '?'.$parts['query'] : ''); 105 $handles = []; 106 foreach ($urls as $url) { 107 $ch = curl_init(); 108 curl_setopt($ch, CURLOPT_URL, $url); 109 curl_setopt($ch, CURLOPT_HEADER, 0); 110 curl_setopt($ch, CURLOPT_TIMEOUT, 1); 111 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 112 curl_multi_add_handle($mh, $ch); 113 $handles[] = $ch; 114 } 110 115 111 try { 112 $fp = @fsockopen($scheme.$host, $port, $errno, $errstr, 1); 113 if ($fp) { 114 $out = "GET $path HTTP/1.1\r\n"; 115 $out .= "Host: $host\r\n"; 116 $out .= "Connection: Close\r\n\r\n"; 116 $running = null; 117 $time = 1; 118 do { 119 curl_multi_exec($mh, $running); 120 usleep(100); 121 if ($time > 50000) { 122 break; 123 } 124 $time++; 125 } while ($running); 117 126 118 fwrite($fp, $out);119 fclose($fp);120 } else {121 throw new Exception($errstr.' ('.$errno.')');122 }123 } catch (Exception $e) {124 $config = acym_config();125 $reportPath = $config->get('cron_savepath');126 if (!empty($reportPath)) {127 $reportPath = str_replace(['{year}', '{month}'], [date('Y'), date('m')], $reportPath);128 $reportPath = acym_cleanPath(ACYM_ROOT.trim(html_entity_decode($reportPath)));129 acym_createDir(dirname($reportPath), true, true);127 foreach ($handles as $handle) { 128 curl_multi_remove_handle($mh, $handle); 129 curl_close($handle); 130 } 131 curl_multi_close($mh); 132 } catch (Exception $e) { 133 $config = acym_config(); 134 $reportPath = $config->get('cron_savepath'); 135 if (!empty($reportPath)) { 136 $reportPath = str_replace(['{year}', '{month}'], [date('Y'), date('m')], $reportPath); 137 $reportPath = acym_cleanPath(ACYM_ROOT.trim(html_entity_decode($reportPath))); 138 acym_createDir(dirname($reportPath), true, true); 130 139 131 $lr = "\r\n"; 132 file_put_contents( 133 $reportPath, 134 $lr.$lr.'******************** '.acym_getDate( 135 time() 136 ).' ********************'.$lr.'An error occurred while calling the queue sending script, please make sure the PHP function "fsockopen" is activated on your server: '.$e->getMessage( 137 ), 138 FILE_APPEND 139 ); 140 } 140 $lr = "\r\n"; 141 file_put_contents( 142 $reportPath, 143 $lr.$lr.'******************** '.acym_getDate( 144 time() 145 ).' ********************'.$lr.'An error occurred while calling the queue sending script, please make sure the PHP function "curl_multi_exec" is activated on your server: '.$e->getMessage( 146 ), 147 FILE_APPEND 148 ); 141 149 } 142 150 } -
acymailing/trunk/index.php
r3398232 r3398904 6 6 * Author URI: https://www.acymailing.com 7 7 * License: GPLv3 8 * Version: 10.6. 38 * Version: 10.6.4 9 9 * Text Domain: acymailing 10 10 * Domain Path: /language -
acymailing/trunk/language/acymailing.pot
r3398232 r3398904 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: AcyMailing 10.6. 3\n"3 "Project-Id-Version: AcyMailing 10.6.4\n" 4 4 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/acymailing\n" 5 5 "MIME-Version: 1.0\n" 6 6 "Content-Type: text/plain; charset=UTF-8\n" 7 7 "Content-Transfer-Encoding: 8bit\n" 8 "POT-Creation-Date: 2025-11-1 8\n"8 "POT-Creation-Date: 2025-11-19\n" 9 9 "X-Domain: acymailing\n" 10 10 -
acymailing/trunk/language/en-US.com_acym.ini
r3398232 r3398904 1 ACYM_VERSION="10.6. 3"1 ACYM_VERSION="10.6.4" 2 2 3 3 -
acymailing/trunk/readme.txt
r3398232 r3398904 4 4 Requires at least: 5.5 5 5 Tested up to: 6.8 6 Stable tag: 10.6. 36 Stable tag: 10.6.4 7 7 Requires PHP: 7.4.0 8 8 License: GPLv3 … … 114 114 == Changelog == 115 115 116 = 10.6.3 - November 18, 2025 = 117 * The license is now correctly recognized when switching to another license key while in expired free trial period. 118 * We fixed an issue related to the attachments included in sent emails. 116 = 10.6.4 - November 19, 2025 = 117 * Automation emails sent to admins can now contain information from the user that triggered the automation. 118 119 * The saving of campaign settings has been fixed when using segments and send frequencies. 120 * The automated emails sending now correctly handles servers with slow connection. 119 121 120 122 [See the whole changelog here.](https://www.acymailing.com/changelog) -
acymailing/trunk/vendor/composer/installed.php
r3398232 r3398904 4 4 'pretty_version' => 'dev-develop', 5 5 'version' => 'dev-develop', 6 'reference' => ' a30e87f4a38ebc9fbbf1669781dc0c7d29a00f1a',6 'reference' => '6af10f311e36a1c05b5876e5a6cc48c8c490032f', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 14 14 'pretty_version' => 'dev-develop', 15 15 'version' => 'dev-develop', 16 'reference' => ' a30e87f4a38ebc9fbbf1669781dc0c7d29a00f1a',16 'reference' => '6af10f311e36a1c05b5876e5a6cc48c8c490032f', 17 17 'type' => 'library', 18 18 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.