Replace Segment model with Doctrine in \MailPoet\Segments\WP

[MAILPOET-5752]
This commit is contained in:
Rodrigo Primo
2023-11-29 10:38:13 -03:00
committed by Aschepikov
parent b63834b02b
commit 374fbe6867
8 changed files with 117 additions and 47 deletions

View File

@@ -12,6 +12,7 @@ use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\SubscriberSegmentEntity;
use MailPoet\Entities\SubscriberTagEntity;
use MailPoet\Entities\TagEntity;
use MailPoet\Segments\SegmentsRepository;
use MailPoet\Util\License\Features\Subscribers;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
@@ -38,14 +39,19 @@ class SubscribersRepository extends Repository {
/** @var SubscriberChangesNotifier */
private $changesNotifier;
/** @var SegmentsRepository */
private $segmentsRepository;
public function __construct(
EntityManager $entityManager,
SubscriberChangesNotifier $changesNotifier,
WPFunctions $wp
WPFunctions $wp,
SegmentsRepository $segmentsRepository
) {
$this->wp = $wp;
parent::__construct($entityManager);
$this->changesNotifier = $changesNotifier;
$this->segmentsRepository = $segmentsRepository;
}
protected function getEntityClassName() {
@@ -553,6 +559,24 @@ class SubscribersRepository extends Repository {
return $count;
}
public function removeOrphanedSubscribersFromWpSegment(): void {
global $wpdb;
$segmentId = $this->segmentsRepository->getWpUsersSegment()->getId();
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
$subscriberSegmentsTable = $this->entityManager->getClassMetadata(SubscriberSegmentEntity::class)->getTableName();
$this->entityManager->getConnection()->executeStatement(
"DELETE s
FROM {$subscribersTable} s
INNER JOIN {$subscriberSegmentsTable} ss ON s.id = ss.subscriber_id
LEFT JOIN {$wpdb->users} u ON s.wp_user_id = u.id
WHERE ss.segment_id = :segmentId AND (u.id IS NULL OR s.email = '')",
['segmentId' => $segmentId], ['segmentId' => \PDO::PARAM_INT]
);
}
/**
* @return int - number of processed ids
*/