diff --git a/lib/API/JSON/v1/Settings.php b/lib/API/JSON/v1/Settings.php index b09ad26354..edfc405d0b 100644 --- a/lib/API/JSON/v1/Settings.php +++ b/lib/API/JSON/v1/Settings.php @@ -6,17 +6,13 @@ use MailPoet\API\JSON\Endpoint as APIEndpoint; use MailPoet\API\JSON\Error as APIError; use MailPoet\Config\AccessControl; use MailPoet\Config\ServicesChecker; -use MailPoet\Cron\Workers\InactiveSubscribers; -use MailPoet\Cron\Workers\WooCommerceSync; use MailPoet\Mailer\MailerLog; use MailPoet\Models\Form; -use MailPoet\Models\ScheduledTask; use MailPoet\Services\AuthorizedEmailsController; use MailPoet\Services\Bridge; use MailPoet\Settings\SettingsController; use MailPoet\WooCommerce\TransactionalEmails; use MailPoet\WP\Functions as WPFunctions; -use MailPoetVendor\Carbon\Carbon; class Settings extends APIEndpoint { @@ -114,7 +110,7 @@ class Settings extends APIEndpoint { $oldInactivationInterval = $oldSettings['deactivate_subscriber_after_inactive_days']; $newInactivationInterval = $newSettings['deactivate_subscriber_after_inactive_days']; if ($oldInactivationInterval !== $newInactivationInterval) { - $this->onInactiveSubscribersIntervalChange(); + $this->settings->onInactiveSubscribersIntervalChange(); } $oldSendingMethod = $oldSettings['mta_group']; @@ -131,7 +127,7 @@ class Settings extends APIEndpoint { ? $newSettings['mailpoet_subscribe_old_woocommerce_customers']['enabled'] : '0'; if ($oldSubscribeOldWoocommerceCustomers !== $newSubscribeOldWoocommerceCustomers) { - $this->onSubscribeOldWoocommerceCustomersChange(); + $this->settings->onSubscribeOldWoocommerceCustomersChange(); } if (!empty($newSettings['woocommerce']['use_mailpoet_editor'])) { @@ -139,34 +135,6 @@ class Settings extends APIEndpoint { } } - private function onSubscribeOldWoocommerceCustomersChange() { - $task = ScheduledTask::where('type', WooCommerceSync::TASK_TYPE) - ->whereRaw('status = ?', [ScheduledTask::STATUS_SCHEDULED]) - ->findOne(); - if (!($task instanceof ScheduledTask)) { - $task = ScheduledTask::create(); - $task->type = WooCommerceSync::TASK_TYPE; - $task->status = ScheduledTask::STATUS_SCHEDULED; - } - $datetime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); - $task->scheduledAt = $datetime->subMinute(); - $task->save(); - } - - private function onInactiveSubscribersIntervalChange() { - $task = ScheduledTask::where('type', InactiveSubscribers::TASK_TYPE) - ->whereRaw('status = ?', [ScheduledTask::STATUS_SCHEDULED]) - ->findOne(); - if (!($task instanceof ScheduledTask)) { - $task = ScheduledTask::create(); - $task->type = InactiveSubscribers::TASK_TYPE; - $task->status = ScheduledTask::STATUS_SCHEDULED; - } - $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); - $task->scheduledAt = $datetime->subMinute(); - $task->save(); - } - private function onMSSActivate($newSettings) { // see mailpoet/assets/js/src/wizard/create_sender_settings.jsx:freeAddress $domain = str_replace('www.', '', $_SERVER['HTTP_HOST']); diff --git a/lib/Settings/SettingsController.php b/lib/Settings/SettingsController.php index 455431b4e2..e104d35824 100644 --- a/lib/Settings/SettingsController.php +++ b/lib/Settings/SettingsController.php @@ -3,8 +3,13 @@ namespace MailPoet\Settings; use MailPoet\Cron\CronTrigger; +use MailPoet\Cron\Workers\InactiveSubscribers; +use MailPoet\Cron\Workers\WooCommerceSync; use MailPoet\DI\ContainerWrapper; +use MailPoet\Entities\ScheduledTaskEntity; +use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\WP\Functions as WPFunctions; +use MailPoetVendor\Carbon\Carbon; class SettingsController { @@ -23,10 +28,17 @@ class SettingsController { /** @var SettingsRepository */ private $settingsRepository; + /** @var ScheduledTasksRepository */ + private $tasksRepository; + private static $instance; - public function __construct(SettingsRepository $settingsRepository) { + public function __construct( + SettingsRepository $settingsRepository, + ScheduledTasksRepository $scheduledTasksRepository + ) { $this->settingsRepository = $settingsRepository; + $this->tasksRepository = $scheduledTasksRepository; } public function get($key, $default = null) { @@ -122,6 +134,41 @@ class SettingsController { unset($this->settings[$key]); } + public function onSubscribeOldWoocommerceCustomersChange(): void { + $task = $this->tasksRepository->findOneBy([ + 'type' => WooCommerceSync::TASK_TYPE, + 'status' => ScheduledTaskEntity::STATUS_SCHEDULED, + ]); + if (!($task instanceof ScheduledTaskEntity)) { + $task = $this->createScheduledTask(WooCommerceSync::TASK_TYPE); + } + $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); + $task->setScheduledAt($datetime->subMinute()); + $this->tasksRepository->persist($task); + $this->tasksRepository->flush(); + } + + public function onInactiveSubscribersIntervalChange(): void { + $task = $this->tasksRepository->findOneBy([ + 'type' => InactiveSubscribers::TASK_TYPE, + 'status' => ScheduledTaskEntity::STATUS_SCHEDULED, + ]); + if (!($task instanceof ScheduledTaskEntity)) { + $task = $this->createScheduledTask(InactiveSubscribers::TASK_TYPE); + } + $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); + $task->setScheduledAt($datetime->subMinute()); + $this->tasksRepository->persist($task); + $this->tasksRepository->flush(); + } + + private function createScheduledTask(string $type): ScheduledTaskEntity { + $task = new ScheduledTaskEntity(); + $task->setType($type); + $task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); + return $task; + } + private function ensureLoaded() { if ($this->loaded) { return;