From 6a2e18a0e1598a21df1aad9becd9fa29b052da2a Mon Sep 17 00:00:00 2001 From: Jonathan Labreuille Date: Tue, 16 Feb 2016 15:03:08 +0100 Subject: [PATCH] fix segments being reset on Subscriber::createOrUpdate() --- lib/Config/Initializer.php | 4 ++++ lib/Models/Subscriber.php | 17 +++++++++++------ lib/Segments/WP.php | 4 ++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/Config/Initializer.php b/lib/Config/Initializer.php index 8cb72e7ea2..a7cbb46739 100644 --- a/lib/Config/Initializer.php +++ b/lib/Config/Initializer.php @@ -56,6 +56,10 @@ class Initializer { \ORM::configure('username', Env::$db_username); \ORM::configure('password', Env::$db_password); \ORM::configure('logging', WP_DEBUG); + \ORM::configure('logger', function($query, $time) { + error_log("\n(Time: ".sprintf('%05f', $time).")".$query."\n"); + }); + \ORM::configure('driver_options', array( \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET TIME_ZONE = "+00:00"' diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index cc70fd4199..ef17dde1f6 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -33,8 +33,12 @@ class Subscriber extends Model { } function addToSegments(array $segment_ids = array()) { - // delete all relations to segments - SubscriberSegment::where('subscriber_id', $this->id)->deleteMany(); + $wp_users_segment = Segment::getWPUsers(); + + // delete all relations to segments except WP users + SubscriberSegment::where('subscriber_id', $this->id) + ->whereNotEqual('segment_id', $wp_users_segment->id) + ->deleteMany(); if(!empty($segment_ids)) { $segments = Segment::whereIn('id', $segment_ids)->findMany(); @@ -252,9 +256,8 @@ class Subscriber extends Model { } // segments - $segment_ids = array(); - - if(isset($data['segments'])) { + $segment_ids = false; + if(array_key_exists('segments', $data)) { $segment_ids = (array)$data['segments']; unset($data['segments']); } @@ -282,7 +285,9 @@ class Subscriber extends Model { $subscriber->setCustomField($custom_field_id, $value); } } - $subscriber->addToSegments($segment_ids); + if($segment_ids !== false) { + $subscriber->addToSegments($segment_ids); + } } return $subscriber; } diff --git a/lib/Segments/WP.php b/lib/Segments/WP.php index 5b92e1dfd3..63d409fccb 100644 --- a/lib/Segments/WP.php +++ b/lib/Segments/WP.php @@ -47,9 +47,9 @@ class WP { } $subscriber = Subscriber::createOrUpdate($data); - if($subscriber !== false && $subscriber->id()) { + if($subscriber->getErrors() === false && $subscriber->id > 0) { if($segment !== false) { - $segment->addSubscriber($subscriber->id()); + $segment->addSubscriber($subscriber->id); } } break;