Fix removal of WP segment subscribers without wp_user_id [MAILPOET-1102]
This commit is contained in:
@@ -88,8 +88,6 @@ class WP {
|
|||||||
self::updateFristNameIfMissing();
|
self::updateFristNameIfMissing();
|
||||||
self::insertUsersToSegment();
|
self::insertUsersToSegment();
|
||||||
self::removeOrphanedSubscribers();
|
self::removeOrphanedSubscribers();
|
||||||
self::removeWPInconsistentubscribers();
|
|
||||||
self::removeOrphanedLinks();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -159,7 +157,7 @@ class WP {
|
|||||||
Subscriber::raw_execute(sprintf('
|
Subscriber::raw_execute(sprintf('
|
||||||
INSERT IGNORE INTO %s(subscriber_id, segment_id, created_at)
|
INSERT IGNORE INTO %s(subscriber_id, segment_id, created_at)
|
||||||
SELECT mps.id, "%s", CURRENT_TIMESTAMP() FROM %s mps
|
SELECT mps.id, "%s", CURRENT_TIMESTAMP() FROM %s mps
|
||||||
WHERE mps.wp_user_id IS NOT NULL
|
WHERE mps.wp_user_id > 0
|
||||||
', $wp_mailpoet_subscriber_segment_table, $wp_segment->id, $subscribers_table));
|
', $wp_mailpoet_subscriber_segment_table, $wp_segment->id, $subscribers_table));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,42 +174,14 @@ class WP {
|
|||||||
// remove orphaned wp segment subscribers (not having a matching wp user id),
|
// remove orphaned wp segment subscribers (not having a matching wp user id),
|
||||||
// e.g. if wp users were deleted directly from the database
|
// e.g. if wp users were deleted directly from the database
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
|
$wp_segment = Segment::getWPSegment();
|
||||||
|
|
||||||
Subscriber::table_alias('wpms')
|
$wp_segment->subscribers()
|
||||||
->leftOuterJoin($wpdb->prefix . 'users', array('wpms.wp_user_id', '=', 'wu.id'), 'wu')
|
->leftOuterJoin($wpdb->prefix . 'users', array(MP_SUBSCRIBERS_TABLE . '.wp_user_id', '=', 'wu.id'), 'wu')
|
||||||
->whereNull('wu.id')
|
->whereNull('wu.id')
|
||||||
->whereGt('wpms.wp_user_id', 0)
|
|
||||||
->findResultSet()
|
->findResultSet()
|
||||||
->set('wp_user_id', null)
|
->set('wp_user_id', null)
|
||||||
->delete();
|
->delete();
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function removeWPInconsistentubscribers() {
|
|
||||||
// remove subscribers subscribed to WP list, but not having wp_user_id
|
|
||||||
$wp_segment = Segment::getWPSegment();
|
|
||||||
$subscribers_table = Subscriber::$_table;
|
|
||||||
$wp_mailpoet_subscriber_segment_table = SubscriberSegment::$_table;
|
|
||||||
Subscriber::raw_execute(sprintf('
|
|
||||||
DELETE wpms FROM
|
|
||||||
%s as wpms
|
|
||||||
JOIN %s as wuss ON wpms.id = wuss.subscriber_id
|
|
||||||
WHERE
|
|
||||||
wpms.wp_user_id IS NULL
|
|
||||||
and wuss.segment_id=%d;
|
|
||||||
|
|
||||||
', $subscribers_table, $wp_mailpoet_subscriber_segment_table, $wp_segment->id));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function removeOrphanedLinks() {
|
|
||||||
$subscribers_table = Subscriber::$_table;
|
|
||||||
$wp_mailpoet_subscriber_segment_table = SubscriberSegment::$_table;
|
|
||||||
Subscriber::raw_execute(sprintf('
|
|
||||||
DELETE wuss FROM
|
|
||||||
%s as wuss
|
|
||||||
LEFT JOIN %s as wpms ON wpms.id = wuss.subscriber_id
|
|
||||||
WHERE wpms.id IS NULL
|
|
||||||
', $wp_mailpoet_subscriber_segment_table, $subscribers_table));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -118,18 +118,6 @@ class WPTest extends \MailPoetTest {
|
|||||||
expect($subscribers->count())->equals(1);
|
expect($subscribers->count())->equals(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItRemovesOrphanedLinks() {
|
|
||||||
$count1 = SubscriberSegment::count();
|
|
||||||
$wp_segment = Segment::getWPSegment();
|
|
||||||
$association = SubscriberSegment::create();
|
|
||||||
$association->subscriber_id = rand() * 4;
|
|
||||||
$association->segment_id = $wp_segment->id;
|
|
||||||
$association->save();
|
|
||||||
WP::synchronizeUsers();
|
|
||||||
$count2 = SubscriberSegment::count();
|
|
||||||
expect($count1)->equals($count2);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testItDoesntDeleteNonWPData() {
|
function testItDoesntDeleteNonWPData() {
|
||||||
$this->insertUser();
|
$this->insertUser();
|
||||||
// wp_user_id is null
|
// wp_user_id is null
|
||||||
@@ -188,6 +176,7 @@ class WPTest extends \MailPoetTest {
|
|||||||
|
|
||||||
private function cleanData() {
|
private function cleanData() {
|
||||||
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
|
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
|
||||||
|
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$db = \ORM::getDb();
|
$db = \ORM::getDb();
|
||||||
$db->exec(sprintf('
|
$db->exec(sprintf('
|
||||||
|
Reference in New Issue
Block a user