diff --git a/assets/css/src/form_editor.styl b/assets/css/src/form_editor.styl index 4f2a622699..e5c03c06a8 100644 --- a/assets/css/src/form_editor.styl +++ b/assets/css/src/form_editor.styl @@ -125,6 +125,7 @@ handle_icon = '../img/handle.png' float: none #mailpoet_form_toolbar + z-index: 999 position: absolute width: 400px diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index c458aa9da3..f5391cab05 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -242,11 +242,18 @@ class Subscriber extends Model { foreach($data as $key => $value) { if(strpos($key, 'cf_') === 0) { - $custom_fields[substr($key, 3)] = $value; + $custom_fields[(int)substr($key, 3)] = $value; unset($data[$key]); } } + + if(!empty($custom_fields)) { + foreach($custom_fields as $custom_field_id => $value) { + $subscriber->setCustomField($custom_field_id, $value); + } + } + if($subscriber === false) { $subscriber = static::create(); $subscriber->hydrate($data); @@ -254,10 +261,50 @@ class Subscriber extends Model { $subscriber->set($data); } + + $subscriber->save(); return $subscriber; } + function getCustomFields() { + $relation = CustomField::select('id')->findArray(); + if(empty($relation)) return $this; + + $custom_field_ids = Helpers::arrayColumn($relation, 'id'); + $custom_fields = SubscriberCustomField::select('id') + ->select('value') + ->whereIn('custom_field_id', $custom_field_ids) + ->where('subscriber_id', $this->id()) + ->findMany(); + foreach($custom_fields as $custom_field) { + $this->{'cf_'.$custom_field->id()} = $custom_field->value; + } + + return $this; + } + + function getCustomField($custom_field_id, $default = null) { + $custom_field = SubscriberCustomField::select('value') + ->where('custom_field_id', $custom_field_id) + ->where('subscriber_id', $this->id()) + ->findOne(); + + if($custom_field === false) { + return $default; + } else { + return $custom_field->value; + } + } + + function setCustomField($custom_field_id, $value) { + return SubscriberCustomField::createOrUpdate(array( + 'subscriber_id' => $this->id(), + 'custom_field_id' => $custom_field_id, + 'value' => $value + )); + } + static function bulkMoveToList($orm, $data = array()) { $segment_id = (isset($data['segment_id']) ? (int)$data['segment_id'] : 0); $segment = Segment::findOne($segment_id); diff --git a/lib/Models/SubscriberCustomField.php b/lib/Models/SubscriberCustomField.php index 3c7339ef57..4d74efc10e 100644 --- a/lib/Models/SubscriberCustomField.php +++ b/lib/Models/SubscriberCustomField.php @@ -12,6 +12,33 @@ class SubscriberCustomField extends Model { parent::__construct(); } + static function createOrUpdate($data = array()) { + $custom_field = CustomField::findOne($data['custom_field_id'])->asArray(); + if($custom_field === false) return false; + + if($custom_field['type'] === 'date') { + if(is_array($data['value'])) { + $day = (isset($data['value']['day']) ? : 1); + $month = (isset($data['value']['month']) ? : 1); + $year = (isset($data['value']['year']) ? : 1970); + $data['value'] = mktime(0, 0, 0, $month, $day, $year); + } + } + + $relation = self::where('custom_field_id', $data['custom_field_id']) + ->where('subscriber_id', $data['subscriber_id']) + ->findOne(); + + if($relation === false) { + $relation = self::create(); + $relation->hydrate($data); + } else { + $relation->set($data); + } + + return $relation->save(); + } + static function createMultiple($values) { $values = array_map('array_values', $values); return self::rawExecute( diff --git a/lib/Router/Subscribers.php b/lib/Router/Subscribers.php index 25241da9bf..2143bc469b 100644 --- a/lib/Router/Subscribers.php +++ b/lib/Router/Subscribers.php @@ -24,7 +24,7 @@ class Subscribers { } else { $segments = $subscriber->segments()->findArray(); - $subscriber = $subscriber->asArray(); + $subscriber = $subscriber->getCustomFields()->asArray(); $subscriber['segments'] = array_map(function($segment) { return $segment['id']; }, $segments);