Refactor setupWooCommerceInitialImport to Doctrine
[MAILPOET-3625]
This commit is contained in:
@ -6,9 +6,11 @@ use MailPoet\API\JSON\Endpoint as APIEndpoint;
|
|||||||
use MailPoet\Config\AccessControl;
|
use MailPoet\Config\AccessControl;
|
||||||
use MailPoet\Cron\Workers\WooCommerceSync;
|
use MailPoet\Cron\Workers\WooCommerceSync;
|
||||||
use MailPoet\CustomFields\CustomFieldsRepository;
|
use MailPoet\CustomFields\CustomFieldsRepository;
|
||||||
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||||
|
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||||
use MailPoet\Segments\SegmentsRepository;
|
use MailPoet\Segments\SegmentsRepository;
|
||||||
use MailPoet\Segments\WP;
|
use MailPoet\Segments\WP;
|
||||||
use MailPoet\Subscribers\ImportExport\Export\Export;
|
use MailPoet\Subscribers\ImportExport\Export\Export;
|
||||||
@ -38,6 +40,9 @@ class ImportExport extends APIEndpoint {
|
|||||||
/** @var SubscribersRepository */
|
/** @var SubscribersRepository */
|
||||||
private $subscriberRepository;
|
private $subscriberRepository;
|
||||||
|
|
||||||
|
/** @var ScheduledTasksRepository */
|
||||||
|
private $scheduledTasksRepository;
|
||||||
|
|
||||||
public $permissions = [
|
public $permissions = [
|
||||||
'global' => AccessControl::PERMISSION_MANAGE_SUBSCRIBERS,
|
'global' => AccessControl::PERMISSION_MANAGE_SUBSCRIBERS,
|
||||||
];
|
];
|
||||||
@ -48,6 +53,7 @@ class ImportExport extends APIEndpoint {
|
|||||||
ImportExportRepository $importExportRepository,
|
ImportExportRepository $importExportRepository,
|
||||||
NewsletterOptionsRepository $newsletterOptionsRepository,
|
NewsletterOptionsRepository $newsletterOptionsRepository,
|
||||||
SegmentsRepository $segmentsRepository,
|
SegmentsRepository $segmentsRepository,
|
||||||
|
ScheduledTasksRepository $scheduledTasksRepository,
|
||||||
SubscribersRepository $subscribersRepository
|
SubscribersRepository $subscribersRepository
|
||||||
) {
|
) {
|
||||||
$this->wpSegment = $wpSegment;
|
$this->wpSegment = $wpSegment;
|
||||||
@ -56,6 +62,7 @@ class ImportExport extends APIEndpoint {
|
|||||||
$this->newsletterOptionsRepository = $newsletterOptionsRepository;
|
$this->newsletterOptionsRepository = $newsletterOptionsRepository;
|
||||||
$this->segmentsRepository = $segmentsRepository;
|
$this->segmentsRepository = $segmentsRepository;
|
||||||
$this->subscriberRepository = $subscribersRepository;
|
$this->subscriberRepository = $subscribersRepository;
|
||||||
|
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMailChimpLists($data) {
|
public function getMailChimpLists($data) {
|
||||||
@ -133,19 +140,18 @@ class ImportExport extends APIEndpoint {
|
|||||||
|
|
||||||
public function setupWooCommerceInitialImport() {
|
public function setupWooCommerceInitialImport() {
|
||||||
try {
|
try {
|
||||||
$task = ScheduledTask::where('type', WooCommerceSync::TASK_TYPE)
|
$task = $this->scheduledTasksRepository->findScheduledOrRunningTask([WooCommerceSync::TASK_TYPE]);
|
||||||
->whereRaw('status = ? OR status IS NULL', [ScheduledTask::STATUS_SCHEDULED])
|
if (($task instanceof ScheduledTaskEntity) && $task->getStatus() === null) {
|
||||||
->findOne();
|
|
||||||
if (($task instanceof ScheduledTask) && $task->status === null) {
|
|
||||||
return $this->successResponse();
|
return $this->successResponse();
|
||||||
}
|
}
|
||||||
if (!($task instanceof ScheduledTask)) {
|
if (!($task instanceof ScheduledTaskEntity)) {
|
||||||
$task = ScheduledTask::create();
|
$task = new ScheduledTaskEntity();
|
||||||
$task->type = WooCommerceSync::TASK_TYPE;
|
$task->setType(WooCommerceSync::TASK_TYPE);
|
||||||
$task->status = ScheduledTask::STATUS_SCHEDULED;
|
$task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||||
|
$this->scheduledTasksRepository->persist($task);
|
||||||
}
|
}
|
||||||
$task->scheduledAt = Carbon::createFromTimestamp((int)current_time('timestamp'));
|
$task->setScheduledAt(Carbon::createFromTimestamp((int)current_time('timestamp')));
|
||||||
$task->save();
|
$this->scheduledTasksRepository->flush();
|
||||||
return $this->successResponse();
|
return $this->successResponse();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return $this->errorResponse([
|
return $this->errorResponse([
|
||||||
|
@ -46,6 +46,23 @@ class ScheduledTasksRepository extends Repository {
|
|||||||
->getResult();
|
->getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string[] $types
|
||||||
|
* @return ScheduledTaskEntity|null
|
||||||
|
*/
|
||||||
|
public function findScheduledOrRunningTask(array $types = []): ?ScheduledTaskEntity {
|
||||||
|
$queryBuilder = $this->doctrineRepository->createQueryBuilder('st')
|
||||||
|
->select('st')
|
||||||
|
->where('(st.status = :scheduledStatus) OR (st.status is NULL)')
|
||||||
|
->setParameter('scheduledStatus', ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||||
|
if (!empty($types)) {
|
||||||
|
$queryBuilder
|
||||||
|
->andWhere('st.type in (:types)')
|
||||||
|
->setParameter('types', $types);
|
||||||
|
}
|
||||||
|
return $queryBuilder->getQuery()->getOneOrNullResult();
|
||||||
|
}
|
||||||
|
|
||||||
protected function getEntityClassName() {
|
protected function getEntityClassName() {
|
||||||
return ScheduledTaskEntity::class;
|
return ScheduledTaskEntity::class;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user