Updates newsletter option creation logic and fixes a bug that results in

them being wiped clean
This commit is contained in:
Vlad
2017-02-23 13:53:36 -05:00
parent 6ee1c23f9a
commit a1cd56c419
3 changed files with 68 additions and 11 deletions

View File

@ -70,21 +70,22 @@ class Newsletters extends APIEndpoint {
} }
if(!empty($options)) { if(!empty($options)) {
NewsletterOption::where('newsletter_id', $newsletter->id)
->deleteMany();
$option_fields = NewsletterOptionField::where( $option_fields = NewsletterOptionField::where(
'newsletter_type', 'newsletter_type',
$data['type'] $newsletter->type
)->findArray(); )->findMany();
if (!count($option_fields)) return;
foreach($option_fields as $option_field) { foreach($option_fields as $option_field) {
if(isset($options[$option_field['name']])) { if(isset($options[$option_field->name])) {
$relation = NewsletterOption::create(); $newsletter_option = NewsletterOption::createOrUpdate(
$relation->newsletter_id = $newsletter->id; array(
$relation->option_field_id = $option_field['id']; 'newsletter_id' => $newsletter->id,
$relation->value = $options[$option_field['name']]; 'option_field_id' => $option_field->id,
$relation->save(); 'value' => $options[$option_field->name]
)
);
} }
} }
} }

View File

@ -5,4 +5,20 @@ if(!defined('ABSPATH')) exit;
class NewsletterOption extends Model { class NewsletterOption extends Model {
public static $_table = MP_NEWSLETTER_OPTION_TABLE; public static $_table = MP_NEWSLETTER_OPTION_TABLE;
static function createOrUpdate($data = array()) {
if(!is_array($data) && empty($data)) return;
$newsletter_option = self::where('option_field_id', $data['option_field_id'])
->where('newsletter_id', $data['newsletter_id'])
->findOne();
if(empty($newsletter_option)) $newsletter_option = self::create();
$newsletter_option->newsletter_id = $data['newsletter_id'];
$newsletter_option->option_field_id = $data['option_field_id'];
$newsletter_option->value = $data['value'];
$newsletter_option->save();
return $newsletter_option;
}
} }

View File

@ -0,0 +1,40 @@
<?php
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
class NewsletterOptionTest extends MailPoetTest {
public $data;
function __construct() {
$this->data = array(
'newsletter_id' => 1,
'option_field_id' => 2,
'value' => 'test'
);
}
function testItCanCreateOrUpdateNewsletterOptionFieldRelation() {
// it can create
$data = $this->data;
NewsletterOption::createOrUpdate($data);
$newsletter_option = NewsletterOption::where('newsletter_id', $data['newsletter_id'])
->where('option_field_id', $data['option_field_id'])
->findOne();
expect($newsletter_option->value)->equals($data['value']);
// it can update
$data['value'] = 'updated test';
NewsletterOption::createOrUpdate($data);
$newsletter_option = NewsletterOption::where('newsletter_id', $data['newsletter_id'])
->where('option_field_id', $data['option_field_id'])
->findOne();
expect($newsletter_option->value)->equals($data['value']);
}
function _after() {
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
}
}