Adds sent_at column to the newsletters table
Modifies populator to update existing newsletters' sent_at field
This commit is contained in:
@@ -211,6 +211,7 @@ class Migrator {
|
|||||||
'reply_to_name varchar(150) NOT NULL DEFAULT "",',
|
'reply_to_name varchar(150) NOT NULL DEFAULT "",',
|
||||||
'preheader varchar(250) NOT NULL DEFAULT "",',
|
'preheader varchar(250) NOT NULL DEFAULT "",',
|
||||||
'body longtext,',
|
'body longtext,',
|
||||||
|
'sent_at TIMESTAMP NULL,',
|
||||||
'created_at TIMESTAMP NULL,',
|
'created_at TIMESTAMP NULL,',
|
||||||
'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
|
'updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,',
|
||||||
'deleted_at TIMESTAMP NULL,',
|
'deleted_at TIMESTAMP NULL,',
|
||||||
|
@@ -3,7 +3,9 @@ namespace MailPoet\Config;
|
|||||||
|
|
||||||
use MailPoet\Cron\CronTrigger;
|
use MailPoet\Cron\CronTrigger;
|
||||||
use MailPoet\Mailer\MailerLog;
|
use MailPoet\Mailer\MailerLog;
|
||||||
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Segments\WP;
|
use MailPoet\Segments\WP;
|
||||||
use MailPoet\Models\Setting;
|
use MailPoet\Models\Setting;
|
||||||
use MailPoet\Settings\Pages;
|
use MailPoet\Settings\Pages;
|
||||||
@@ -26,37 +28,38 @@ class Populator {
|
|||||||
'newsletter_templates',
|
'newsletter_templates',
|
||||||
);
|
);
|
||||||
$this->templates = array(
|
$this->templates = array(
|
||||||
"NewsletterBlank1Column",
|
'NewsletterBlank1Column',
|
||||||
"NewsletterBlank12Column",
|
'NewsletterBlank12Column',
|
||||||
"NewsletterBlank121Column",
|
'NewsletterBlank121Column',
|
||||||
"NewsletterBlank13Column",
|
'NewsletterBlank13Column',
|
||||||
"PostNotificationsBlank1Column",
|
'PostNotificationsBlank1Column',
|
||||||
"WelcomeBlank1Column",
|
'WelcomeBlank1Column',
|
||||||
"WelcomeBlank12Column",
|
'WelcomeBlank12Column',
|
||||||
"SimpleText",
|
'SimpleText',
|
||||||
"BurgerJoint",
|
'BurgerJoint',
|
||||||
"AppWelcome",
|
'AppWelcome',
|
||||||
"WorldCup",
|
'WorldCup',
|
||||||
"FoodBox",
|
'FoodBox',
|
||||||
"Discount",
|
'Discount',
|
||||||
"KickOff",
|
'KickOff',
|
||||||
"TakeAHike",
|
'TakeAHike',
|
||||||
"FestivalEvent",
|
'FestivalEvent',
|
||||||
"PieceOfCake",
|
'PieceOfCake',
|
||||||
"Shoes",
|
'Shoes',
|
||||||
"ScienceWeekly",
|
'ScienceWeekly',
|
||||||
"ChocolateStore",
|
'ChocolateStore',
|
||||||
"Faith",
|
'Faith',
|
||||||
"TravelNomads",
|
'TravelNomads',
|
||||||
"CoffeeShop",
|
'CoffeeShop',
|
||||||
"NewsDay",
|
'NewsDay',
|
||||||
"YogaStudio",
|
'YogaStudio',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function up() {
|
function up() {
|
||||||
$this->convertExistingDataToUTF8();
|
$this->convertExistingDataToUTF8();
|
||||||
$this->migrateSimpleScheduledTasks();
|
$this->migrateSimpleScheduledTasks();
|
||||||
|
$this->populateNewsletterSentAtField();
|
||||||
|
|
||||||
array_map(array($this, 'populate'), $this->models);
|
array_map(array($this, 'populate'), $this->models);
|
||||||
|
|
||||||
@@ -328,8 +331,10 @@ class Populator {
|
|||||||
* character set, which usually defaults to latin1, but stored UTF-8 data.
|
* character set, which usually defaults to latin1, but stored UTF-8 data.
|
||||||
* This method converts existing incorrectly stored data that uses the
|
* This method converts existing incorrectly stored data that uses the
|
||||||
* default character set, into a new character set that is used by WordPress.
|
* default character set, into a new character set that is used by WordPress.
|
||||||
|
*
|
||||||
|
* TODO: remove in final release
|
||||||
*/
|
*/
|
||||||
public function convertExistingDataToUTF8() {
|
function convertExistingDataToUTF8() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
if(!version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.32', '<=')) {
|
if(!version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.32', '<=')) {
|
||||||
@@ -361,7 +366,6 @@ class Populator {
|
|||||||
'forms' => array('name', 'body', 'settings', 'styles'),
|
'forms' => array('name', 'body', 'settings', 'styles'),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
foreach($tables as $table => $columns) {
|
foreach($tables as $table => $columns) {
|
||||||
$query = "UPDATE `%s` SET %s WHERE %s";
|
$query = "UPDATE `%s` SET %s WHERE %s";
|
||||||
$columns_query = array();
|
$columns_query = array();
|
||||||
@@ -387,15 +391,16 @@ class Populator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* This migrates simple scheduled tasks from sending queues table to scheduled tasks table
|
* This migrates simple scheduled tasks from sending queues table to scheduled tasks table
|
||||||
|
*
|
||||||
|
* TODO: remove in final release
|
||||||
*/
|
*/
|
||||||
public function migrateSimpleScheduledTasks() {
|
public function migrateSimpleScheduledTasks() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
if(!version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.36.2.0', '<=')) {
|
// perform once for versions below 3.0.0-beta.36.2.1
|
||||||
// Data conversion should only be performed only once, when migrating from
|
if(version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.36.2.1', '>=')) {
|
||||||
// older version
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,4 +441,25 @@ class Populator {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This populates existing newsletters' sent_at field with processed_at field data from
|
||||||
|
* corresponding sending queue.
|
||||||
|
*
|
||||||
|
* TODO: remove in final release
|
||||||
|
*/
|
||||||
|
function populateNewsletterSentAtField() {
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
// perform once for versions below 3.0.0-beta.36.2.1
|
||||||
|
if(version_compare(get_option('mailpoet_db_version'), '3.0.0-beta.36.2.1', '>=')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = "UPDATE `%s` newsletters JOIN `%s` queues ON newsletters.id = queues.newsletter_id SET newsletters.sent_at = queues.processed_at";
|
||||||
|
$wpdb->query(sprintf(
|
||||||
|
$query,
|
||||||
|
Newsletter::$_table,
|
||||||
|
SendingQueue::$_table
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
33
tests/unit/Config/PopulatorTest.php
Normal file
33
tests/unit/Config/PopulatorTest.php
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use MailPoet\Config\Populator;
|
||||||
|
use MailPoet\Models\Newsletter;
|
||||||
|
use MailPoet\Models\SendingQueue;
|
||||||
|
|
||||||
|
class PopulatorTest extends MailPoetTest {
|
||||||
|
function testItPopulatesNewslettersTableSentAtColumn() {
|
||||||
|
// TODO: remove in final release
|
||||||
|
$newsletters = array();
|
||||||
|
for($i = 1; $i <= 3; $i++) {
|
||||||
|
$newsletters[$i] = Newsletter::create();
|
||||||
|
$newsletters[$i]->type = Newsletter::TYPE_STANDARD;
|
||||||
|
$newsletters[$i]->save();
|
||||||
|
}
|
||||||
|
expect(Newsletter::whereNull('sent_at')->findMany())->count(3);
|
||||||
|
|
||||||
|
$sending_queue = SendingQueue::create();
|
||||||
|
$sending_queue->newsletter_id = $newsletters[1]->id;
|
||||||
|
$sending_queue->processed_at = date( 'Y-m-d H:i:s');
|
||||||
|
$sending_queue->save();
|
||||||
|
|
||||||
|
$populator = new Populator();
|
||||||
|
$populator->populateNewsletterSentAtField();
|
||||||
|
expect(Newsletter::whereNull('sent_at')->findMany())->count(2);
|
||||||
|
expect(Newsletter::whereNotNull('sent_at')->findMany())->count(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _after() {
|
||||||
|
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||||
|
ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user