Create endpoints to cancel and reschedule tasks
[MAILPOET-5755]
This commit is contained in:
committed by
Ján Mikláš
parent
65d347bf85
commit
88c0836443
69
mailpoet/lib/API/JSON/v1/Help.php
Normal file
69
mailpoet/lib/API/JSON/v1/Help.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
|
||||
|
||||
namespace MailPoet\API\JSON\v1;
|
||||
|
||||
use MailPoet\API\JSON\Endpoint as APIEndpoint;
|
||||
use MailPoet\API\JSON\Error as APIError;
|
||||
use MailPoet\Config\AccessControl;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||
|
||||
class Help extends APIEndpoint {
|
||||
|
||||
public $permissions = [
|
||||
'global' => AccessControl::PERMISSION_MANAGE_HELP,
|
||||
];
|
||||
|
||||
/** @var ScheduledTasksRepository */
|
||||
private $scheduledTasksRepository;
|
||||
|
||||
public function __construct(
|
||||
ScheduledTasksRepository $scheduledTasksRepository
|
||||
) {
|
||||
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
||||
}
|
||||
|
||||
public function cancelTask($data) {
|
||||
$task = $this->validateAndFindTask($data);
|
||||
if (!($task instanceof ScheduledTaskEntity)) {
|
||||
return $task;
|
||||
}
|
||||
try {
|
||||
$this->scheduledTasksRepository->cancelTask($task);
|
||||
return $this->successResponse();
|
||||
} catch (\Exception $e) {
|
||||
return $this->handleException($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function rescheduleTask($data) {
|
||||
$task = $this->validateAndFindTask($data);
|
||||
if (!($task instanceof ScheduledTaskEntity)) {
|
||||
return $task;
|
||||
}
|
||||
try {
|
||||
$this->scheduledTasksRepository->rescheduleTask($task);
|
||||
return $this->successResponse();
|
||||
} catch (\Exception $e) {
|
||||
return $this->handleException($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private function validateAndFindTask($data) {
|
||||
if (!isset($data['id'])) {
|
||||
return $this->handleException(__('Missing mandatory argument `id`.', 'mailpoet'));
|
||||
}
|
||||
$id = $data['id'];
|
||||
$task = $this->scheduledTasksRepository->findOneById($id);
|
||||
if (!$task) {
|
||||
return $this->handleException(__('Task not found.', 'mailpoet'));
|
||||
}
|
||||
return $task;
|
||||
}
|
||||
|
||||
private function handleException($message): \MailPoet\API\JSON\ErrorResponse {
|
||||
return $this->errorResponse([
|
||||
ApiError::BAD_REQUEST => $message,
|
||||
]);
|
||||
}
|
||||
}
|
@@ -78,6 +78,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\API\JSON\v1\DynamicSegments::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\API\JSON\v1\FeatureFlags::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\API\JSON\v1\Forms::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\API\JSON\v1\Help::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\API\JSON\v1\ImportExport::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\API\JSON\v1\Mailer::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\API\JSON\v1\Tags::class)->setPublic(true);
|
||||
|
@@ -344,6 +344,27 @@ class ScheduledTasksRepository extends Repository {
|
||||
$this->flush();
|
||||
}
|
||||
|
||||
public function cancelTask(ScheduledTaskEntity $task): void {
|
||||
if ($task->getStatus() !== ScheduledTaskEntity::STATUS_SCHEDULED) {
|
||||
throw new \Exception(__('Only scheduled tasks can be cancelled', 'mailpoet'), 400);
|
||||
}
|
||||
$task->setStatus(ScheduledTaskEntity::STATUS_CANCELLED);
|
||||
$task->setCancelledAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp')));
|
||||
$this->persist($task);
|
||||
$this->flush();
|
||||
}
|
||||
|
||||
public function rescheduleTask(ScheduledTaskEntity $task): void {
|
||||
if ($task->getStatus() !== ScheduledTaskEntity::STATUS_CANCELLED) {
|
||||
throw new \Exception(__('Only cancelled tasks can be rescheduled', 'mailpoet'), 400);
|
||||
}
|
||||
$task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||
$task->setInProgress(null);
|
||||
$task->setCancelledAt(null);
|
||||
$this->persist($task);
|
||||
$this->flush();
|
||||
}
|
||||
|
||||
/** @param int[] $ids */
|
||||
public function deleteByIds(array $ids): void {
|
||||
$this->entityManager->createQueryBuilder()
|
||||
|
Reference in New Issue
Block a user