diff --git a/assets/js/src/newsletters/templates.jsx b/assets/js/src/newsletters/templates.jsx index 3a60b5b43b..55b5666ac6 100644 --- a/assets/js/src/newsletters/templates.jsx +++ b/assets/js/src/newsletters/templates.jsx @@ -42,7 +42,22 @@ define( }.bind(this)); }, handleSelectTemplate: function(template) { - console.log('select '+template.id); + MailPoet.Ajax.post({ + endpoint: 'newsletters', + action: 'create', + data: { + type: this.props.params.type, + template: template.id + } + }).done(function(response) { + if(response['url'] !== undefined) { + window.location = response['url']; + } else { + response.map(function(error) { + MailPoet.Notice.error(error); + }); + } + }.bind(this)); }, handlePreviewTemplate: function(template) { console.log('preview '+template.id); diff --git a/lib/Config/Migrator.php b/lib/Config/Migrator.php index 3d9bc0349e..7ca7965fb4 100644 --- a/lib/Config/Migrator.php +++ b/lib/Config/Migrator.php @@ -73,6 +73,7 @@ class Migrator { $attributes = array( 'id mediumint(9) NOT NULL AUTO_INCREMENT,', 'subject varchar(250) NOT NULL,', + 'type varchar(20) NOT NULL DEFAULT "standard",', 'preheader varchar(250) NOT NULL,', 'body longtext,', 'created_at TIMESTAMP NOT NULL DEFAULT 0,', diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index 71cffd6b97..4805b57c4e 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -8,13 +8,6 @@ class Newsletter extends Model { function __construct() { parent::__construct(); - - $this->addValidations('subject', array( - 'required' => __('You need to specify a subject.') - )); - $this->addValidations('body', array( - 'required' => __('Newsletter cannot be empty.') - )); } static function search($orm, $search = '') { diff --git a/lib/Router/Newsletters.php b/lib/Router/Newsletters.php index 4d4bc0e4c1..63daf3436a 100644 --- a/lib/Router/Newsletters.php +++ b/lib/Router/Newsletters.php @@ -5,6 +5,7 @@ use MailPoet\Listing; use MailPoet\Mailer\Bridge; use MailPoet\Models\Newsletter; use MailPoet\Models\Subscriber; +use MailPoet\Models\NewsletterTemplate; use MailPoet\Newsletter\Renderer\Renderer; if(!defined('ABSPATH')) exit; @@ -78,4 +79,27 @@ class Newsletters { ); wp_send_json($bulk_action->apply()); } + + function create($data = array()) { + $newsletter = Newsletter::create(); + $newsletter->type = $data['type']; + $newsletter->body = '{}'; + + // try to load template data + $template = NewsletterTemplate::findOne((int)$data['template']); + if($template !== false) { + $newsletter->body = $template->body; + } + + $result = $newsletter->save(); + if($result !== true) { + wp_send_json($newsletter->getValidationErrors()); + } else { + wp_send_json(array( + 'url' => admin_url( + 'admin.php?page=mailpoet-newsletter-editor&id='.$newsletter->id() + ) + )); + } + } } diff --git a/tests/unit/Models/NewsletterCest.php b/tests/unit/Models/NewsletterCest.php index 40d712b8f8..b3140dae76 100644 --- a/tests/unit/Models/NewsletterCest.php +++ b/tests/unit/Models/NewsletterCest.php @@ -8,6 +8,7 @@ class NewsletterCest { $this->data = array( 'subject' => 'new newsletter', 'body' => 'body', + 'type' => 'standard', 'preheader' => 'preaheader' ); @@ -20,19 +21,18 @@ class NewsletterCest { expect($this->result)->equals(true); } - function itHasToBeValid() { - $empty_model = Newsletter::create(); - expect($empty_model->save())->notEquals(true); - $validations = $empty_model->getValidationErrors(); - expect(count($validations))->equals(2); - } - function itHasSubject() { $subscriber = Newsletter::where('subject', $this->data['subject']) ->findOne(); expect($subscriber->subject)->equals($this->data['subject']); } + function itHasType() { + $subscriber = Newsletter::where('type', $this->data['type']) + ->findOne(); + expect($subscriber->type)->equals($this->data['type']); + } + function itHasBody() { $subscriber = Newsletter::where('body', $this->data['body']) ->findOne();