Implement NewsletterTempates::getAll() API using Doctrine
[MAILPOET-2647]
This commit is contained in:
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\API\JSON\ResponseBuilders;
|
||||
|
||||
use MailPoet\Entities\NewsletterTemplateEntity;
|
||||
|
||||
class NewsletterTemplatesResponseBuilder {
|
||||
/**
|
||||
* @param NewsletterTemplateEntity[] $newsletterTemplates
|
||||
* @return mixed[]
|
||||
*/
|
||||
public function buildForListing(array $newsletterTemplates): array {
|
||||
$data = [];
|
||||
foreach ($newsletterTemplates as $template) {
|
||||
$data[] = [
|
||||
'id' => $template->getId(),
|
||||
'categories' => $template->getCategories(),
|
||||
'thumbnail' => $template->getThumbnail(),
|
||||
'name' => $template->getName(),
|
||||
'description' => $template->getDescription(),
|
||||
'readonly' => $template->getReadonly(),
|
||||
];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
@ -4,8 +4,10 @@ namespace MailPoet\API\JSON\v1;
|
||||
|
||||
use MailPoet\API\JSON\Endpoint as APIEndpoint;
|
||||
use MailPoet\API\JSON\Error as APIError;
|
||||
use MailPoet\API\JSON\ResponseBuilders\NewsletterTemplatesResponseBuilder;
|
||||
use MailPoet\Config\AccessControl;
|
||||
use MailPoet\Models\NewsletterTemplate;
|
||||
use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class NewsletterTemplates extends APIEndpoint {
|
||||
@ -17,6 +19,20 @@ class NewsletterTemplates extends APIEndpoint {
|
||||
'getAll',
|
||||
];
|
||||
|
||||
/** @var NewsletterTemplatesRepository */
|
||||
private $newsletterTemplatesRepository;
|
||||
|
||||
/** @var NewsletterTemplatesResponseBuilder */
|
||||
private $newsletterTemplatesResponseBuilder;
|
||||
|
||||
public function __construct(
|
||||
NewsletterTemplatesRepository $newsletterTemplatesRepository,
|
||||
NewsletterTemplatesResponseBuilder $newsletterTemplatesResponseBuilder
|
||||
) {
|
||||
$this->newsletterTemplatesRepository = $newsletterTemplatesRepository;
|
||||
$this->newsletterTemplatesResponseBuilder = $newsletterTemplatesResponseBuilder;
|
||||
}
|
||||
|
||||
public function get($data = []) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$template = NewsletterTemplate::findOne($id);
|
||||
@ -32,17 +48,9 @@ class NewsletterTemplates extends APIEndpoint {
|
||||
}
|
||||
|
||||
public function getAll() {
|
||||
$collection = NewsletterTemplate
|
||||
::selectExpr('id, categories, thumbnail, name, description, readonly')
|
||||
->orderByAsc('readonly')
|
||||
->orderByDesc('created_at')
|
||||
->orderByDesc('id')
|
||||
->findMany();
|
||||
$templates = array_map(function($item) {
|
||||
return $item->asArray();
|
||||
}, $collection);
|
||||
|
||||
return $this->successResponse($templates);
|
||||
$templates = $this->newsletterTemplatesRepository->findAllForListing();
|
||||
$data = $this->newsletterTemplatesResponseBuilder->buildForListing($templates);
|
||||
return $this->successResponse($data);
|
||||
}
|
||||
|
||||
public function save($data = []) {
|
||||
|
@ -88,6 +88,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\API\JSON\v1\WoocommerceSettings::class)->setPublic(true);
|
||||
// API response builders
|
||||
$container->autowire(\MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder::class);
|
||||
$container->autowire(\MailPoet\API\JSON\ResponseBuilders\NewsletterTemplatesResponseBuilder::class);
|
||||
$container->autowire(\MailPoet\API\JSON\ResponseBuilders\CustomFieldsResponseBuilder::class);
|
||||
// Config
|
||||
$container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true);
|
||||
@ -264,6 +265,8 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\Newsletter\Scheduler\PostNotificationScheduler::class);
|
||||
$container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserController::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserRenderer::class)->setPublic(true);
|
||||
// Newsletter templates
|
||||
$container->autowire(\MailPoet\NewsletterTemplates\NewsletterTemplatesRepository::class)->setPublic(true);
|
||||
// Util
|
||||
$container->autowire(\MailPoet\Util\Cookies::class);
|
||||
$container->autowire(\MailPoet\Util\Url::class)->setPublic(true);
|
||||
|
@ -16,4 +16,17 @@ class NewsletterTemplatesRepository extends Repository {
|
||||
protected function getEntityClassName() {
|
||||
return NewsletterTemplateEntity::class;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return NewsletterTemplateEntity[]
|
||||
*/
|
||||
public function findAllForListing(): array {
|
||||
return $this->doctrineRepository->createQueryBuilder('nt')
|
||||
->select('PARTIAL nt.{id,categories,thumbnail,name,description,readonly}')
|
||||
->addOrderBy('nt.readonly', 'ASC')
|
||||
->addOrderBy('nt.createdAt', 'DESC')
|
||||
->addOrderBy('nt.id', 'DESC')
|
||||
->getQuery()
|
||||
->getResult();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user