Updates newsletter option creation logic and fixes a bug that results in
them being wiped clean
This commit is contained in:
@ -70,21 +70,22 @@ class Newsletters extends APIEndpoint {
|
||||
}
|
||||
|
||||
if(!empty($options)) {
|
||||
NewsletterOption::where('newsletter_id', $newsletter->id)
|
||||
->deleteMany();
|
||||
|
||||
$option_fields = NewsletterOptionField::where(
|
||||
'newsletter_type',
|
||||
$data['type']
|
||||
)->findArray();
|
||||
$newsletter->type
|
||||
)->findMany();
|
||||
|
||||
if (!count($option_fields)) return;
|
||||
|
||||
foreach($option_fields as $option_field) {
|
||||
if(isset($options[$option_field['name']])) {
|
||||
$relation = NewsletterOption::create();
|
||||
$relation->newsletter_id = $newsletter->id;
|
||||
$relation->option_field_id = $option_field['id'];
|
||||
$relation->value = $options[$option_field['name']];
|
||||
$relation->save();
|
||||
if(isset($options[$option_field->name])) {
|
||||
$newsletter_option = NewsletterOption::createOrUpdate(
|
||||
array(
|
||||
'newsletter_id' => $newsletter->id,
|
||||
'option_field_id' => $option_field->id,
|
||||
'value' => $options[$option_field->name]
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,4 +5,20 @@ if(!defined('ABSPATH')) exit;
|
||||
|
||||
class NewsletterOption extends Model {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
40
tests/unit/Models/NewsletterOptionTest.php
Normal file
40
tests/unit/Models/NewsletterOptionTest.php
Normal 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user