Keine Beschreibung

NewsletterTemplates.php 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace MailPoet\API\JSON\v1;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\API\JSON\Endpoint as APIEndpoint;
  5. use MailPoet\API\JSON\Error as APIError;
  6. use MailPoet\API\JSON\ResponseBuilders\NewsletterTemplatesResponseBuilder;
  7. use MailPoet\Config\AccessControl;
  8. use MailPoet\Newsletter\ApiDataSanitizer;
  9. use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository;
  10. use MailPoet\WP\Functions as WPFunctions;
  11. class NewsletterTemplates extends APIEndpoint {
  12. public $permissions = [
  13. 'global' => AccessControl::PERMISSION_MANAGE_EMAILS,
  14. ];
  15. protected static $getMethods = [
  16. 'getAll',
  17. ];
  18. /** @var NewsletterTemplatesRepository */
  19. private $newsletterTemplatesRepository;
  20. /** @var NewsletterTemplatesResponseBuilder */
  21. private $newsletterTemplatesResponseBuilder;
  22. /** @var ApiDataSanitizer */
  23. private $apiDataSanitizer;
  24. public function __construct(
  25. NewsletterTemplatesRepository $newsletterTemplatesRepository,
  26. NewsletterTemplatesResponseBuilder $newsletterTemplatesResponseBuilder,
  27. ApiDataSanitizer $apiDataSanitizer
  28. ) {
  29. $this->newsletterTemplatesRepository = $newsletterTemplatesRepository;
  30. $this->newsletterTemplatesResponseBuilder = $newsletterTemplatesResponseBuilder;
  31. $this->apiDataSanitizer = $apiDataSanitizer;
  32. }
  33. public function get($data = []) {
  34. $template = isset($data['id'])
  35. ? $this->newsletterTemplatesRepository->findOneById((int)$data['id'])
  36. : null;
  37. if (!$template) {
  38. return $this->errorResponse([
  39. APIError::NOT_FOUND => WPFunctions::get()->__('This template does not exist.', 'mailpoet'),
  40. ]);
  41. }
  42. $data = $this->newsletterTemplatesResponseBuilder->build($template);
  43. return $this->successResponse($data);
  44. }
  45. public function getAll() {
  46. $templates = $this->newsletterTemplatesRepository->findAllForListing();
  47. $data = $this->newsletterTemplatesResponseBuilder->buildForListing($templates);
  48. return $this->successResponse($data);
  49. }
  50. public function save($data = []) {
  51. ignore_user_abort(true);
  52. if (!empty($data['body'])) {
  53. $body = $this->apiDataSanitizer->sanitizeBody(json_decode($data['body'], true));
  54. $data['body'] = json_encode($body);
  55. }
  56. try {
  57. $template = $this->newsletterTemplatesRepository->createOrUpdate($data);
  58. if (!empty($data['categories']) && $data['categories'] === NewsletterTemplatesRepository::RECENTLY_SENT_CATEGORIES) {
  59. $this->newsletterTemplatesRepository->cleanRecentlySent();
  60. }
  61. $data = $this->newsletterTemplatesResponseBuilder->build($template);
  62. return $this->successResponse($data);
  63. } catch (\Throwable $e) {
  64. return $this->errorResponse();
  65. }
  66. }
  67. public function delete($data = []) {
  68. $template = isset($data['id'])
  69. ? $this->newsletterTemplatesRepository->findOneById((int)$data['id'])
  70. : null;
  71. if (!$template) {
  72. return $this->errorResponse([
  73. APIError::NOT_FOUND => WPFunctions::get()->__('This template does not exist.', 'mailpoet'),
  74. ]);
  75. }
  76. $this->newsletterTemplatesRepository->remove($template);
  77. $this->newsletterTemplatesRepository->flush();
  78. return $this->successResponse(null, ['count' => 1]);
  79. }
  80. }