From a754cfaa523cd46246ad25eb85af7c8252cf2245 Mon Sep 17 00:00:00 2001 From: Amine Ben hammou Date: Fri, 9 Feb 2018 16:43:40 +0000 Subject: [PATCH] limitting the recently sent templates to 12 --- lib/API/JSON/v1/NewsletterTemplates.php | 3 ++ lib/Models/NewsletterTemplate.php | 19 ++++++++++++ tests/unit/Models/NewsletterTemplateTest.php | 31 ++++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/lib/API/JSON/v1/NewsletterTemplates.php b/lib/API/JSON/v1/NewsletterTemplates.php index c1e9b9ada4..9df1bd8cda 100644 --- a/lib/API/JSON/v1/NewsletterTemplates.php +++ b/lib/API/JSON/v1/NewsletterTemplates.php @@ -45,9 +45,12 @@ class NewsletterTemplates extends APIEndpoint { $data['id'] = $template['id']; } } + $template = NewsletterTemplate::createOrUpdate($data); $errors = $template->getErrors(); + NewsletterTemplate::cleanRecentlySent($data); + if(!empty($errors)) { return $this->errorResponse($errors); } else { diff --git a/lib/Models/NewsletterTemplate.php b/lib/Models/NewsletterTemplate.php index f2e6700654..b470174e58 100644 --- a/lib/Models/NewsletterTemplate.php +++ b/lib/Models/NewsletterTemplate.php @@ -6,6 +6,9 @@ if(!defined('ABSPATH')) exit; class NewsletterTemplate extends Model { public static $_table = MP_NEWSLETTER_TEMPLATES_TABLE; + const RECENTLY_SENT_CATEGORIES = '["recent"]'; + const RECENTLY_SENT_COUNT = 12; + function __construct() { parent::__construct(); @@ -17,6 +20,22 @@ class NewsletterTemplate extends Model { )); } + static function cleanRecentlySent($data) { + if(!empty($data['categories']) && $data['categories'] === self::RECENTLY_SENT_CATEGORIES) { + $ids = parent::where('categories', self::RECENTLY_SENT_CATEGORIES) + ->select('id') + ->orderByDesc('id') + ->limit(self::RECENTLY_SENT_COUNT) + ->findMany(); + $ids = array_map(function ($template) { + return $template->id; + }, $ids); + parent::where('categories', self::RECENTLY_SENT_CATEGORIES) + ->whereNotIn('id', $ids) + ->deleteMany(); + } + } + function asArray() { $template = parent::asArray(); if(isset($template['body'])) { diff --git a/tests/unit/Models/NewsletterTemplateTest.php b/tests/unit/Models/NewsletterTemplateTest.php index a255179cfc..67897fe879 100644 --- a/tests/unit/Models/NewsletterTemplateTest.php +++ b/tests/unit/Models/NewsletterTemplateTest.php @@ -76,6 +76,37 @@ class NewsletterTemplateTest extends \MailPoetTest { expect($template->name)->equals('Another template updated'); } + function testItCanCleanRecentlySent() { + $total = NewsletterTemplate::RECENTLY_SENT_COUNT + 5; + for($i = 0; $i < $total; $i++) { + NewsletterTemplate::createOrUpdate(array( + 'name' => 'Testing template ' . $i, + 'description' => 'template description', + 'body' => '{content: {}, globalStyles: {}}', + 'categories' => NewsletterTemplate::RECENTLY_SENT_CATEGORIES + )); + } + + NewsletterTemplate::cleanRecentlySent(array()); + $count = NewsletterTemplate::where( + 'categories', NewsletterTemplate::RECENTLY_SENT_CATEGORIES + )->count(); + expect($count)->equals($total); + + NewsletterTemplate::cleanRecentlySent(array( + 'categories' => NewsletterTemplate::RECENTLY_SENT_CATEGORIES + )); + $count = NewsletterTemplate::where( + 'categories', NewsletterTemplate::RECENTLY_SENT_CATEGORIES + )->count(); + expect($count)->equals(NewsletterTemplate::RECENTLY_SENT_COUNT); + + $first = NewsletterTemplate::where( + 'categories', NewsletterTemplate::RECENTLY_SENT_CATEGORIES + )->findOne(); + expect($first->name)->equals('Testing template 5'); + } + function _after() { \ORM::for_table(NewsletterTemplate::$_table) ->deleteMany();