converted newsletterTemplates endpoint + react

This commit is contained in:
Jonathan Labreuille
2016-08-09 16:03:38 +02:00
parent b9637b52e9
commit 52da08abb2
3 changed files with 61 additions and 38 deletions

View File

@ -104,7 +104,7 @@ define([
return MailPoet.Ajax.post({ return MailPoet.Ajax.post({
endpoint: 'newsletterTemplates', endpoint: 'newsletterTemplates',
action: 'save', action: 'save',
data: data, data: data
}); });
}); });

View File

@ -30,33 +30,35 @@ define(
endpoint: 'newsletterTemplates', endpoint: 'newsletterTemplates',
action: 'save', action: 'save',
data: template data: template
}).done(function(response) { }).always(function() {
MailPoet.Modal.loading(false); MailPoet.Modal.loading(false);
if(response.result === true) { }).done((response) => {
this.props.onImport(template); this.props.onImport(response.data);
} else { }).fail((response) => {
response.map(function(error) { if (response.errors.length > 0) {
MailPoet.Notice.error(error); MailPoet.Notice.error(
}); response.errors.map(function(error) { return error.message; }),
{ scroll: true }
);
} }
}.bind(this)); });
}, },
handleSubmit: function(e) { handleSubmit: function(e) {
e.preventDefault(); e.preventDefault();
if (_.size(this.refs.templateFile.files) <= 0) return false; if (_.size(this.refs.templateFile.files) <= 0) return false;
var file = _.first(this.refs.templateFile.files), var file = _.first(this.refs.templateFile.files);
reader = new FileReader(), var reader = new FileReader();
saveTemplate = this.saveTemplate; var saveTemplate = this.saveTemplate;
reader.onload = function(e) { reader.onload = (e) => {
try { try {
saveTemplate(JSON.parse(e.target.result)); saveTemplate(JSON.parse(e.target.result));
} catch (err) { } catch (err) {
MailPoet.Notice.error(MailPoet.I18n.t('templateFileMalformedError')); MailPoet.Notice.error(MailPoet.I18n.t('templateFileMalformedError'));
} }
}.bind(this); };
reader.readAsText(file); reader.readAsText(file);
}, },
@ -97,12 +99,12 @@ define(
MailPoet.Ajax.post({ MailPoet.Ajax.post({
endpoint: 'newsletterTemplates', endpoint: 'newsletterTemplates',
action: 'getAll', action: 'getAll',
}).done(function(response) { }).always(() => {
MailPoet.Modal.loading(false); MailPoet.Modal.loading(false);
}).done((response) => {
if (this.isMounted()) { if (this.isMounted()) {
if (response.data.length === 0) {
if(response.length === 0) { response.data = [
response = [
{ {
name: name:
MailPoet.I18n.t('mailpoetGuideTemplateTitle'), MailPoet.I18n.t('mailpoetGuideTemplateTitle'),
@ -110,14 +112,14 @@ define(
MailPoet.I18n.t('mailpoetGuideTemplateDescription'), MailPoet.I18n.t('mailpoetGuideTemplateDescription'),
readonly: "1" readonly: "1"
} }
] ];
} }
this.setState({ this.setState({
templates: response, templates: response.data,
loading: false loading: false
}); });
} }
}.bind(this)); });
}, },
handleSelectTemplate: function(template) { handleSelectTemplate: function(template) {
var body = template.body; var body = template.body;
@ -158,10 +160,12 @@ define(
MailPoet.Ajax.post({ MailPoet.Ajax.post({
endpoint: 'newsletterTemplates', endpoint: 'newsletterTemplates',
action: 'delete', action: 'delete',
data: template.id data: {
}).done(function(response) { id: template.id
}
}).done((response) => {
this.getTemplates(); this.getTemplates();
}.bind(this)); });
} else { } else {
this.setState({ loading: false }); this.setState({ loading: false });
} }
@ -170,7 +174,7 @@ define(
MailPoet.Modal.popup({ MailPoet.Modal.popup({
title: template.name, title: template.name,
template: '<div class="mailpoet_boxes_preview" style="background-color: {{ body.globalStyles.body.backgroundColor }}"><img src="{{ thumbnail }}" /></div>', template: '<div class="mailpoet_boxes_preview" style="background-color: {{ body.globalStyles.body.backgroundColor }}"><img src="{{ thumbnail }}" /></div>',
data: template, data: template
}); });
}, },
handleTemplateImport: function() { handleTemplateImport: function() {

View File

@ -1,41 +1,60 @@
<?php <?php
namespace MailPoet\API\Endpoints; namespace MailPoet\API\Endpoints;
use \MailPoet\API\Endpoint as APIEndpoint;
use \MailPoet\API\Error as APIError;
use MailPoet\Models\NewsletterTemplate; use MailPoet\Models\NewsletterTemplate;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
class NewsletterTemplates { class NewsletterTemplates extends APIEndpoint {
function __construct() {
}
function get($id = false) { function get($data = array()) {
$id = (isset($data['id']) ? (int)$data['id'] : null);
$template = NewsletterTemplate::findOne($id); $template = NewsletterTemplate::findOne($id);
if($template === false) { if($template === false) {
return false; return $this->errorResponse(array(
APIError::NOT_FOUND => __('This template does not exist.')
));
} else { } else {
return $template->asArray(); return $this->successResponse(
$template->asArray()
);
} }
} }
function getAll() { function getAll() {
$collection = NewsletterTemplate::findMany(); $collection = NewsletterTemplate::findMany();
return array_map(function($item) { $templates = array_map(function($item) {
return $item->asArray(); return $item->asArray();
}, $collection); }, $collection);
return $this->successResponse($templates);
} }
function save($data = array()) { function save($data = array()) {
$template = NewsletterTemplate::createOrUpdate($data); $template = NewsletterTemplate::createOrUpdate($data);
return ($template->getErrors() === false && $template->id() > 0); $errors = $template->getErrors();
if(!empty($errors)) {
return $this->errorResponse($errors);
} else {
return $this->successResponse(
NewsletterTemplate::findOne($template->id)->asArray()
);
}
} }
function delete($id) { function delete($data = array()) {
$id = (isset($data['id']) ? (int)$data['id'] : null);
$template = NewsletterTemplate::findOne($id); $template = NewsletterTemplate::findOne($id);
if($template !== false) { if($template === false) {
return $template->delete(); return $this->errorResponse(array(
APIError::NOT_FOUND => __('This template does not exist.')
));
} else { } else {
return false; $template->delete();
$this->successResponse(null);
} }
} }
} }