From 1aa03dc80e130cbf7078b00cc67ea2b89e743b98 Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Mon, 22 Jul 2019 16:42:56 +0200 Subject: [PATCH] Use last_subscribed_at for inactive subscribers detection [MAILPOET-1993] --- lib/Subscribers/InactiveSubscribersController.php | 6 +++--- .../Subscribers/InactiveSubscribersControllerTest.php | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/Subscribers/InactiveSubscribersController.php b/lib/Subscribers/InactiveSubscribersController.php index 2a0f81de0b..4a536b47f0 100644 --- a/lib/Subscribers/InactiveSubscribersController.php +++ b/lib/Subscribers/InactiveSubscribersController.php @@ -94,9 +94,9 @@ class InactiveSubscribersController { JOIN $scheduled_task_subcribres_table as sts ON s.id = sts.subscriber_id JOIN ($scheduled_task_ids_query) task_ids ON task_ids.id = sts.task_id LEFT OUTER JOIN $statistics_opens_table as so ON s.id = so.subscriber_id AND so.created_at > ? - WHERE s.created_at < ? AND (s.confirmed_at IS NULL OR s.confirmed_at < ?) AND s.status = ? AND so.id IS NULL + WHERE s.last_subscribed_at < ? AND s.status = ? AND so.id IS NULL GROUP BY s.id LIMIT ?", - [$threshold_date_iso, $threshold_date_iso, $threshold_date_iso, Subscriber::STATUS_SUBSCRIBED, $batch_size] + [$threshold_date_iso, $threshold_date_iso, Subscriber::STATUS_SUBSCRIBED, $batch_size] )->findArray(); $ids_to_deactivate = array_map( @@ -136,7 +136,7 @@ class InactiveSubscribersController { } else { $ids_to_activate = \ORM::forTable($subscribers_table)->select("$subscribers_table.id") ->leftOuterJoin($stats_opens_table, "$subscribers_table.id = $stats_opens_table.subscriber_id AND $stats_opens_table.created_at > '$threshold_date'") - ->whereLt("$subscribers_table.created_at", $threshold_date) + ->whereLt("$subscribers_table.last_subscribed_at", $threshold_date) ->where("$subscribers_table.status", Subscriber::STATUS_INACTIVE) ->whereRaw("$stats_opens_table.id IS NOT NULL") ->limit($batch_size) diff --git a/tests/integration/Subscribers/InactiveSubscribersControllerTest.php b/tests/integration/Subscribers/InactiveSubscribersControllerTest.php index 989cb2e62b..6f7e20b06a 100644 --- a/tests/integration/Subscribers/InactiveSubscribersControllerTest.php +++ b/tests/integration/Subscribers/InactiveSubscribersControllerTest.php @@ -93,11 +93,11 @@ class InactiveSubscribersControllerTest extends \MailPoetTest { expect($subscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED); } - function testItDoesNotDeactivateNewlyConfirmedSubscriberWithUnopenedEmail() { + function testItDoesNotDeactivateNewlyResubscribedSubscriberWithUnopenedEmail() { list($task) = $this->createCompletedSendingTaskWithOneOpen($completed_days_ago = 3); $subscriber = $this->createSubscriber('s1@email.com', $created_days_ago = 10); - $subscriber->confirmed_at = (new Carbon())->subDays(2)->toDateTimeString(); + $subscriber->last_subscribed_at = (new Carbon())->subDays(2)->toDateTimeString(); $subscriber->save(); $this->addSubcriberToTask($subscriber, $task); @@ -250,6 +250,7 @@ class InactiveSubscribersControllerTest extends \MailPoetTest { $created_at = (new Carbon())->subDays($created_days_ago)->toDateTimeString(); $subscriber = Subscriber::createOrUpdate(['email' => $email, 'status' => $status]); $subscriber->created_at = $created_at; + $subscriber->last_subscribed_at = $created_at; $subscriber->save(); return $subscriber; }