forms & newsletters endpoints
This commit is contained in:
@ -99,14 +99,21 @@ const item_actions = [
|
||||
return MailPoet.Ajax.post({
|
||||
endpoint: 'forms',
|
||||
action: 'duplicate',
|
||||
data: item.id
|
||||
}).done(function(response) {
|
||||
if (response !== false && response['name'] !== undefined) {
|
||||
MailPoet.Notice.success(
|
||||
(MailPoet.I18n.t('formDuplicated')).replace('%$1s', response.name)
|
||||
data: {
|
||||
id: item.id
|
||||
}
|
||||
}).done((response) => {
|
||||
MailPoet.Notice.success(
|
||||
(MailPoet.I18n.t('formDuplicated')).replace('%$1s', response.data.name)
|
||||
);
|
||||
refresh();
|
||||
}).fail((response) => {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
refresh();
|
||||
});
|
||||
}
|
||||
},
|
||||
@ -120,9 +127,14 @@ const FormList = React.createClass({
|
||||
MailPoet.Ajax.post({
|
||||
endpoint: 'forms',
|
||||
action: 'create'
|
||||
}).done(function(response) {
|
||||
if(response.result && response.form_id) {
|
||||
window.location = mailpoet_form_edit_url + response.form_id;
|
||||
}).done((response) => {
|
||||
window.location = mailpoet_form_edit_url + response.data.id;
|
||||
}).fail((response) => {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
@ -11,7 +11,7 @@ define([
|
||||
return MailPoet.Ajax.post({
|
||||
endpoint: 'automatedLatestContent',
|
||||
action: args.action,
|
||||
data: args.options || {},
|
||||
data: args.options || {}
|
||||
});
|
||||
};
|
||||
Module._cachedQuery = _.memoize(Module._query, JSON.stringify);
|
||||
@ -19,14 +19,14 @@ define([
|
||||
Module.getNewsletter = function(options) {
|
||||
return Module._query({
|
||||
action: 'get',
|
||||
options: options,
|
||||
options: options
|
||||
});
|
||||
};
|
||||
|
||||
Module.getPostTypes = function() {
|
||||
return Module._cachedQuery({
|
||||
action: 'getPostTypes',
|
||||
options: {},
|
||||
options: {}
|
||||
}).then(function(response) {
|
||||
return _.values(response.data);
|
||||
});
|
||||
@ -83,7 +83,7 @@ define([
|
||||
return MailPoet.Ajax.post({
|
||||
endpoint: 'newsletters',
|
||||
action: 'save',
|
||||
data: options || {},
|
||||
data: options || {}
|
||||
});
|
||||
};
|
||||
|
||||
@ -91,7 +91,7 @@ define([
|
||||
return MailPoet.Ajax.post({
|
||||
endpoint: 'newsletters',
|
||||
action: 'sendPreview',
|
||||
data: options || {},
|
||||
data: options || {}
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -252,32 +252,31 @@ define([
|
||||
endpoint: 'newsletters',
|
||||
action: 'showPreview',
|
||||
data: json,
|
||||
}).done(function(response) {
|
||||
if (response.result === true) {
|
||||
this.previewView = new Module.NewsletterPreviewView({
|
||||
previewUrl: response.data.url
|
||||
});
|
||||
|
||||
var view = this.previewView.render();
|
||||
|
||||
MailPoet.Modal.popup({
|
||||
template: '',
|
||||
element: this.previewView.$el,
|
||||
title: MailPoet.I18n.t('newsletterPreview'),
|
||||
onCancel: function() {
|
||||
this.previewView.destroy();
|
||||
this.previewView = null;
|
||||
}.bind(this)
|
||||
});
|
||||
} else {
|
||||
MailPoet.Notice.error(response.errors);
|
||||
}
|
||||
}.bind(this)).fail(function(error) {
|
||||
MailPoet.Notice.error(
|
||||
MailPoet.I18n.t('newsletterPreviewFailed')
|
||||
);
|
||||
}).always(function() {
|
||||
MailPoet.Modal.loading(false);
|
||||
}).done(function(response) {
|
||||
this.previewView = new Module.NewsletterPreviewView({
|
||||
previewUrl: response.meta.preview_url
|
||||
});
|
||||
|
||||
var view = this.previewView.render();
|
||||
|
||||
MailPoet.Modal.popup({
|
||||
template: '',
|
||||
element: this.previewView.$el,
|
||||
title: MailPoet.I18n.t('newsletterPreview'),
|
||||
onCancel: function() {
|
||||
this.previewView.destroy();
|
||||
this.previewView = null;
|
||||
}.bind(this)
|
||||
});
|
||||
}.bind(this)).fail(function(response) {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
sendPreview: function() {
|
||||
@ -302,28 +301,19 @@ define([
|
||||
// send test email
|
||||
MailPoet.Modal.loading(true);
|
||||
|
||||
CommunicationComponent.previewNewsletter(data).done(function(response) {
|
||||
if(response.result !== undefined && response.result === true) {
|
||||
MailPoet.Notice.success(MailPoet.I18n.t('newsletterPreviewSent'), { scroll: true });
|
||||
} else {
|
||||
if (_.isArray(response.errors)) {
|
||||
response.errors.map(function(error) {
|
||||
MailPoet.Notice.error(error, { scroll: true });
|
||||
});
|
||||
} else {
|
||||
MailPoet.Notice.error(
|
||||
MailPoet.I18n.t('newsletterPreviewFailedToSend'),
|
||||
{
|
||||
scroll: true,
|
||||
static: true,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
CommunicationComponent.previewNewsletter(data).always(function() {
|
||||
MailPoet.Modal.loading(false);
|
||||
}).done(function(response) {
|
||||
MailPoet.Notice.success(
|
||||
MailPoet.I18n.t('newsletterPreviewSent'),
|
||||
{ scroll: true });
|
||||
}).fail(function(response) {
|
||||
// an error occurred
|
||||
MailPoet.Modal.loading(false);
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true, static: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
|
@ -66,22 +66,22 @@ define(
|
||||
MailPoet.Ajax.post({
|
||||
endpoint: 'newsletters',
|
||||
action: 'get',
|
||||
data: id
|
||||
}).done((response) => {
|
||||
if(response === false) {
|
||||
this.setState({
|
||||
loading: false,
|
||||
item: {},
|
||||
}, function() {
|
||||
this.context.router.push('/new');
|
||||
}.bind(this));
|
||||
} else {
|
||||
this.setState({
|
||||
loading: false,
|
||||
item: response,
|
||||
fields: this.getFieldsByNewsletter(response),
|
||||
});
|
||||
data: {
|
||||
id: id
|
||||
}
|
||||
}).done((response) => {
|
||||
this.setState({
|
||||
loading: false,
|
||||
item: response.data,
|
||||
fields: this.getFieldsByNewsletter(response.data)
|
||||
});
|
||||
}).fail((response) => {
|
||||
this.setState({
|
||||
loading: false,
|
||||
item: {}
|
||||
}, () => {
|
||||
this.context.router.push('/new');
|
||||
});
|
||||
});
|
||||
},
|
||||
handleSend: function(e) {
|
||||
|
@ -28,17 +28,16 @@ define(
|
||||
type: type,
|
||||
subject: MailPoet.I18n.t('draftNewsletterTitle'),
|
||||
}
|
||||
}).done(function(response) {
|
||||
if(response.result && response.newsletter.id) {
|
||||
this.context.router.push(`/template/${response.newsletter.id}`);
|
||||
} else {
|
||||
if(response.errors.length > 0) {
|
||||
response.errors.map(function(error) {
|
||||
MailPoet.Notice.error(error);
|
||||
});
|
||||
}
|
||||
}).done((response) => {
|
||||
this.context.router.push(`/template/${response.data.id}`);
|
||||
}).fail((response) => {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
}.bind(this));
|
||||
});
|
||||
},
|
||||
render: function() {
|
||||
return (
|
||||
|
@ -50,17 +50,16 @@ define(
|
||||
type: 'notification',
|
||||
subject: MailPoet.I18n.t('draftNewsletterTitle'),
|
||||
}),
|
||||
}).done(function(response) {
|
||||
if(response.result && response.newsletter.id) {
|
||||
this.showTemplateSelection(response.newsletter.id);
|
||||
} else {
|
||||
if(response.errors.length > 0) {
|
||||
response.errors.map(function(error) {
|
||||
MailPoet.Notice.error(error);
|
||||
});
|
||||
}
|
||||
}).done((response) => {
|
||||
this.showTemplateSelection(response.data.id);
|
||||
}).fail((response) => {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
}.bind(this));
|
||||
});
|
||||
},
|
||||
showTemplateSelection: function(newsletterId) {
|
||||
this.context.router.push(`/template/${newsletterId}`);
|
||||
|
@ -25,19 +25,18 @@ define(
|
||||
endpoint: 'newsletters',
|
||||
action: 'create',
|
||||
data: {
|
||||
type: 'standard',
|
||||
type: 'standard'
|
||||
}
|
||||
}).done(function(response) {
|
||||
if(response.result && response.newsletter.id) {
|
||||
this.showTemplateSelection(response.newsletter.id);
|
||||
} else {
|
||||
if(response.errors.length > 0) {
|
||||
response.errors.map(function(error) {
|
||||
MailPoet.Notice.error(error);
|
||||
});
|
||||
}
|
||||
}).done((response) => {
|
||||
this.showTemplateSelection(response.data.id);
|
||||
}).fail((response) => {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
}.bind(this));
|
||||
});
|
||||
},
|
||||
render: function() {
|
||||
return (
|
||||
|
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
namespace MailPoet\API\Endpoints;
|
||||
use MailPoet\API\Endpoint as APIEndpoint;
|
||||
use MailPoet\API\Error as APIError;
|
||||
|
||||
use \MailPoet\Models\Form;
|
||||
use \MailPoet\Models\StatisticsForms;
|
||||
@ -9,16 +11,17 @@ use \MailPoet\Form\Util;
|
||||
|
||||
if(!defined('ABSPATH')) exit;
|
||||
|
||||
class Forms {
|
||||
function __construct() {
|
||||
}
|
||||
|
||||
function get($id = false) {
|
||||
class Forms extends APIEndpoint {
|
||||
function get($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$form = Form::findOne($id);
|
||||
if($form !== false) {
|
||||
$form = $form->asArray();
|
||||
if($form === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This form does not exist.')
|
||||
));
|
||||
} else {
|
||||
return $this->successResponse($form->asArray());
|
||||
}
|
||||
return $form;
|
||||
}
|
||||
|
||||
function listing($data = array()) {
|
||||
@ -87,14 +90,10 @@ class Forms {
|
||||
$errors = $form->getErrors();
|
||||
|
||||
if(!empty($errors)) {
|
||||
return array(
|
||||
'result' => false,
|
||||
'errors' => $errors
|
||||
);
|
||||
return $this->badRequest($errors);
|
||||
} else {
|
||||
return array(
|
||||
'result' => true,
|
||||
'form_id' => $form->id()
|
||||
return $this->successResponse(
|
||||
Form::findOne($form->id)->asArray()
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -109,76 +108,74 @@ class Forms {
|
||||
// styles
|
||||
$css = new Util\Styles(FormRenderer::getStyles($data));
|
||||
|
||||
return array(
|
||||
return $this->successResponse(array(
|
||||
'html' => $html,
|
||||
'css' => $css->render()
|
||||
);
|
||||
));
|
||||
}
|
||||
|
||||
function exportsEditor($id) {
|
||||
$exports = false;
|
||||
|
||||
function exportsEditor($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$form = Form::findOne($id);
|
||||
|
||||
if($form !== false) {
|
||||
if($form === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This form does not exist.')
|
||||
));
|
||||
} else {
|
||||
$exports = Util\Export::getAll($form->asArray());
|
||||
return $this->successResponse($exports);
|
||||
}
|
||||
|
||||
return $exports;
|
||||
}
|
||||
|
||||
function saveEditor($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
|
||||
$form_id = (isset($data['id']) ? (int)$data['id'] : 0);
|
||||
$name = (isset($data['name']) ? $data['name'] : __('New form'));
|
||||
$body = (isset($data['body']) ? $data['body'] : array());
|
||||
$settings = (isset($data['settings']) ? $data['settings'] : array());
|
||||
$styles = (isset($data['styles']) ? $data['styles'] : '');
|
||||
|
||||
if(empty($body) || empty($settings)) {
|
||||
// error
|
||||
return false;
|
||||
} else {
|
||||
// check if the form is used as a widget
|
||||
$is_widget = false;
|
||||
$widgets = get_option('widget_mailpoet_form');
|
||||
if(!empty($widgets)) {
|
||||
foreach($widgets as $widget) {
|
||||
if(isset($widget['form']) && (int)$widget['form'] === $form_id) {
|
||||
$is_widget = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check if the user gets to pick his own lists
|
||||
// or if it's selected by the admin
|
||||
$has_segment_selection = false;
|
||||
|
||||
foreach($body as $i => $block) {
|
||||
if($block['type'] === 'segment') {
|
||||
$has_segment_selection = true;
|
||||
if(!empty($block['params']['values'])) {
|
||||
$list_selection = array_filter(
|
||||
array_map(function($segment) {
|
||||
return (isset($segment['id'])
|
||||
? (int)$segment['id']
|
||||
: null
|
||||
);
|
||||
}, $block['params']['values'])
|
||||
);
|
||||
}
|
||||
// check if the form is used as a widget
|
||||
$is_widget = false;
|
||||
$widgets = get_option('widget_mailpoet_form');
|
||||
if(!empty($widgets)) {
|
||||
foreach($widgets as $widget) {
|
||||
if(isset($widget['form']) && (int)$widget['form'] === $form_id) {
|
||||
$is_widget = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check list selection
|
||||
if($has_segment_selection === true) {
|
||||
$settings['segments_selected_by'] = 'user';
|
||||
} else {
|
||||
$settings['segments_selected_by'] = 'admin';
|
||||
// check if the user gets to pick his own lists
|
||||
// or if it's selected by the admin
|
||||
$has_segment_selection = false;
|
||||
|
||||
foreach($body as $i => $block) {
|
||||
if($block['type'] === 'segment') {
|
||||
$has_segment_selection = true;
|
||||
if(!empty($block['params']['values'])) {
|
||||
$list_selection = array_filter(
|
||||
array_map(function($segment) {
|
||||
return (isset($segment['id'])
|
||||
? (int)$segment['id']
|
||||
: null
|
||||
);
|
||||
}, $block['params']['values'])
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// check list selection
|
||||
if($has_segment_selection === true) {
|
||||
$settings['segments_selected_by'] = 'user';
|
||||
} else {
|
||||
$settings['segments_selected_by'] = 'admin';
|
||||
}
|
||||
|
||||
$form = Form::createOrUpdate(array(
|
||||
'id' => $form_id,
|
||||
'name' => $name,
|
||||
@ -187,64 +184,101 @@ class Forms {
|
||||
'styles' => $styles
|
||||
));
|
||||
|
||||
if($form->getErrors() === false) {
|
||||
return array(
|
||||
'result' => true,
|
||||
'is_widget' => $is_widget
|
||||
);
|
||||
$errors = $form->getErrors();
|
||||
|
||||
if(!empty($errors)) {
|
||||
return $this->badRequest($errors);
|
||||
} else {
|
||||
return array(
|
||||
'result' => false,
|
||||
'errors' => $form->getErrors()
|
||||
return $this->successResponse(
|
||||
Form::findOne($form->id)->asArray(),
|
||||
array('is_widget' => $is_widget)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function restore($id) {
|
||||
function restore($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$form = Form::findOne($id);
|
||||
if($form !== false) {
|
||||
if($form === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This form does not exist.')
|
||||
));
|
||||
} else {
|
||||
$form->restore();
|
||||
return $this->successResponse(
|
||||
Form::findOne($form->id)->asArray(),
|
||||
array('count' => 1)
|
||||
);
|
||||
}
|
||||
return ($form->getErrors() === false);
|
||||
}
|
||||
|
||||
function trash($id) {
|
||||
function trash($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$form = Form::findOne($id);
|
||||
if($form !== false) {
|
||||
if($form === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This form does not exist.')
|
||||
));
|
||||
} else {
|
||||
$form->trash();
|
||||
return $this->successResponse(
|
||||
Form::findOne($form->id)->asArray(),
|
||||
array('count' => 1)
|
||||
);
|
||||
}
|
||||
return ($form->getErrors() === false);
|
||||
}
|
||||
|
||||
function delete($id) {
|
||||
function delete($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$form = Form::findOne($id);
|
||||
if($form !== false) {
|
||||
if($form === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This form does not exist.')
|
||||
));
|
||||
} else {
|
||||
$form->delete();
|
||||
return 1;
|
||||
return $this->successResponse(null, array('count' => 1));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function duplicate($id) {
|
||||
$result = false;
|
||||
|
||||
function duplicate($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$form = Form::findOne($id);
|
||||
if($form !== false) {
|
||||
|
||||
if($form === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This form does not exist.')
|
||||
));
|
||||
} else {
|
||||
$data = array(
|
||||
'name' => sprintf(__('Copy of %s'), $form->name)
|
||||
);
|
||||
$result = $form->duplicate($data)->asArray();
|
||||
}
|
||||
$duplicate = $form->duplicate($data);
|
||||
$errors = $duplicate->getErrors();
|
||||
|
||||
return $result;
|
||||
if(!empty($errors)) {
|
||||
return $this->errorResponse($errors);
|
||||
} else {
|
||||
return $this->successResponse(
|
||||
Form::findOne($duplicate->id)->asArray(),
|
||||
array('count' => 1)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function bulkAction($data = array()) {
|
||||
$bulk_action = new Listing\BulkAction(
|
||||
'\MailPoet\Models\Form',
|
||||
$data
|
||||
);
|
||||
|
||||
return $bulk_action->apply();
|
||||
try {
|
||||
$bulk_action = new Listing\BulkAction(
|
||||
'\MailPoet\Models\Form',
|
||||
$data
|
||||
);
|
||||
$count = $bulk_action->apply();
|
||||
return $this->successResponse(null, array('count' => $count));
|
||||
} catch(\Exception $e) {
|
||||
return $this->errorResponse(array(
|
||||
$e->getCode() => $e->getMessage()
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,19 +22,20 @@ if(!defined('ABSPATH')) exit;
|
||||
require_once(ABSPATH . 'wp-includes/pluggable.php');
|
||||
|
||||
class Newsletters extends APIEndpoint {
|
||||
function get($id = false) {
|
||||
function get($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
if($newsletter === false) {
|
||||
return false;
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This newsletter does not exist.')
|
||||
));
|
||||
} else {
|
||||
$segments = $newsletter->segments()->findArray();
|
||||
$options = $newsletter->options()->findArray();
|
||||
$newsletter = $newsletter->asArray();
|
||||
$newsletter['segments'] = array_map(function($segment) {
|
||||
return $segment['id'];
|
||||
}, $segments);
|
||||
$newsletter['options'] = Helpers::arrayColumn($options, 'value', 'name');
|
||||
return $newsletter;
|
||||
return $this->successResponse(
|
||||
$newsletter
|
||||
->withSegments()
|
||||
->withOptions()
|
||||
->asArray()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -124,125 +125,161 @@ class Newsletters extends APIEndpoint {
|
||||
}
|
||||
}
|
||||
|
||||
function restore($id) {
|
||||
function restore($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
if($newsletter !== false) {
|
||||
$newsletter->restore();
|
||||
}
|
||||
return ($newsletter->getErrors() === false);
|
||||
}
|
||||
|
||||
function trash($id) {
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
if($newsletter !== false) {
|
||||
$newsletter->trash();
|
||||
}
|
||||
return ($newsletter->getErrors() === false);
|
||||
}
|
||||
|
||||
function delete($id) {
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
if($newsletter !== false) {
|
||||
$newsletter->delete();
|
||||
return 1;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function duplicate($id = false) {
|
||||
$result = false;
|
||||
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
if($newsletter !== false) {
|
||||
$duplicate = $newsletter->duplicate(array(
|
||||
'subject' => sprintf(__('Copy of %s'), $newsletter->subject)
|
||||
if($newsletter === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This newsletter does not exist.')
|
||||
));
|
||||
} else {
|
||||
$newsletter->restore();
|
||||
return $this->successResponse(
|
||||
Newsletter::findOne($newsletter->id)->asArray(),
|
||||
array('count' => 1)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if($duplicate !== false && $duplicate->getErrors() === false) {
|
||||
$result = $duplicate->asArray();
|
||||
function trash($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
if($newsletter === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This newsletter does not exist.')
|
||||
));
|
||||
} else {
|
||||
$newsletter->trash();
|
||||
return $this->successResponse(
|
||||
Newsletter::findOne($newsletter->id)->asArray(),
|
||||
array('count' => 1)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function delete($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
if($newsletter === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This newsletter does not exist.')
|
||||
));
|
||||
} else {
|
||||
$newsletter->delete();
|
||||
return $this->successResponse(null, array('count' => 1));
|
||||
}
|
||||
}
|
||||
|
||||
function duplicate($data = array()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
|
||||
if($newsletter === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This newsletter does not exist.')
|
||||
));
|
||||
} else {
|
||||
$data = array(
|
||||
'subject' => sprintf(__('Copy of %s'), $newsletter->subject)
|
||||
);
|
||||
$duplicate = $newsletter->duplicate($data);
|
||||
$errors = $duplicate->getErrors();
|
||||
|
||||
if(!empty($errors)) {
|
||||
return $this->errorResponse($errors);
|
||||
} else {
|
||||
return $this->successResponse(
|
||||
Newsletter::findOne($duplicate->id)->asArray(),
|
||||
array('count' => 1)
|
||||
);
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function showPreview($data = array()) {
|
||||
if(!isset($data['body'])) {
|
||||
return array(
|
||||
'result' => false,
|
||||
'errors' => array(__('Newsletter data is missing'))
|
||||
);
|
||||
if(empty($data['body'])) {
|
||||
return $this->badRequest(array(
|
||||
APIError::BAD_REQUEST => __('Newsletter data is missing.')
|
||||
));
|
||||
}
|
||||
$newsletter_id = (isset($data['id'])) ? (int)$data['id'] : null;
|
||||
$newsletter = Newsletter::findOne($newsletter_id);
|
||||
if(!$newsletter) {
|
||||
return array(
|
||||
'result' => false,
|
||||
'errors' => array(__('Newsletter could not be read'))
|
||||
);
|
||||
}
|
||||
$newsletter->body = $data['body'];
|
||||
$newsletter->save();
|
||||
$subscriber = Subscriber::getCurrentWPUser();
|
||||
$preview_url = NewsletterUrl::getViewInBrowserUrl(
|
||||
$data, $subscriber, $queue = false, $preview = true
|
||||
);
|
||||
return array(
|
||||
'result' => true,
|
||||
'data' => array('url' => $preview_url)
|
||||
);
|
||||
}
|
||||
|
||||
function sendPreview($data = array()) {
|
||||
$id = (isset($data['id'])) ? (int)$data['id'] : false;
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
|
||||
if($newsletter === false) {
|
||||
return array(
|
||||
'result' => false
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This newsletter does not exist.')
|
||||
));
|
||||
} else {
|
||||
$newsletter->body = $data['body'];
|
||||
$newsletter->save();
|
||||
$subscriber = Subscriber::getCurrentWPUser();
|
||||
$preview_url = NewsletterUrl::getViewInBrowserUrl(
|
||||
$data, $subscriber, $queue = false, $preview = true
|
||||
);
|
||||
|
||||
return $this->successResponse(
|
||||
Newsletter::findOne($newsletter->id)->asArray(),
|
||||
array('preview_url' => $preview_url)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function sendPreview($data = array()) {
|
||||
if(empty($data['subscriber'])) {
|
||||
return array(
|
||||
'result' => false,
|
||||
'errors' => array(__('Please specify receiver information.'))
|
||||
);
|
||||
return $this->badRequest(array(
|
||||
APIError::BAD_REQUEST => __('Please specify receiver information.')
|
||||
));
|
||||
}
|
||||
|
||||
$newsletter = $newsletter->asArray();
|
||||
$id = (isset($data['id'])) ? (int)$data['id'] : false;
|
||||
$newsletter = Newsletter::findOne($id);
|
||||
|
||||
$renderer = new Renderer($newsletter, $preview = true);
|
||||
$rendered_newsletter = $renderer->render();
|
||||
$divider = '***MailPoet***';
|
||||
$data_for_shortcodes =
|
||||
array_merge(array($newsletter['subject']), $rendered_newsletter);
|
||||
$body = implode($divider, $data_for_shortcodes);
|
||||
if($newsletter === false) {
|
||||
return $this->errorResponse(array(
|
||||
APIError::NOT_FOUND => __('This newsletter does not exist.')
|
||||
));
|
||||
} else {
|
||||
$newsletter = $newsletter->asArray();
|
||||
|
||||
$subscriber = Subscriber::getCurrentWPUser();
|
||||
$subscriber = ($subscriber) ? $subscriber->asArray() : false;
|
||||
$renderer = new Renderer($newsletter, $preview = true);
|
||||
$rendered_newsletter = $renderer->render();
|
||||
$divider = '***MailPoet***';
|
||||
$data_for_shortcodes = array_merge(
|
||||
array($newsletter['subject']),
|
||||
$rendered_newsletter
|
||||
);
|
||||
|
||||
$shortcodes = new \MailPoet\Newsletter\Shortcodes\Shortcodes(
|
||||
$newsletter,
|
||||
$subscriber
|
||||
);
|
||||
list($newsletter['subject'],
|
||||
$newsletter['body']['html'],
|
||||
$newsletter['body']['text']
|
||||
$body = implode($divider, $data_for_shortcodes);
|
||||
|
||||
$subscriber = Subscriber::getCurrentWPUser();
|
||||
$subscriber = ($subscriber) ? $subscriber->asArray() : false;
|
||||
|
||||
$shortcodes = new \MailPoet\Newsletter\Shortcodes\Shortcodes(
|
||||
$newsletter,
|
||||
$subscriber
|
||||
);
|
||||
list(
|
||||
$newsletter['subject'],
|
||||
$newsletter['body']['html'],
|
||||
$newsletter['body']['text']
|
||||
) = explode($divider, $shortcodes->replace($body));
|
||||
|
||||
try {
|
||||
$mailer = new \MailPoet\Mailer\Mailer(
|
||||
$mailer = false,
|
||||
$sender = false,
|
||||
$reply_to = false
|
||||
);
|
||||
$result = $mailer->send($newsletter, $data['subscriber']);
|
||||
|
||||
return array('result' => $result);
|
||||
} catch(\Exception $e) {
|
||||
return array(
|
||||
'result' => false,
|
||||
'errors' => array($e->getMessage()),
|
||||
);
|
||||
try {
|
||||
$mailer = new \MailPoet\Mailer\Mailer(
|
||||
$mailer = false,
|
||||
$sender = false,
|
||||
$reply_to = false
|
||||
);
|
||||
$mailer->send($newsletter, $data['subscriber']);
|
||||
return $this->successResponse(
|
||||
Newsletter::findOne($id)->asArray()
|
||||
);
|
||||
} catch(\Exception $e) {
|
||||
return $this->errorResponse(array(
|
||||
$e->getCode() => $e->getMessage()
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -298,11 +335,18 @@ class Newsletters extends APIEndpoint {
|
||||
}
|
||||
|
||||
function bulkAction($data = array()) {
|
||||
$bulk_action = new Listing\BulkAction(
|
||||
'\MailPoet\Models\Newsletter',
|
||||
$data
|
||||
);
|
||||
return $bulk_action->apply();
|
||||
try {
|
||||
$bulk_action = new Listing\BulkAction(
|
||||
'\MailPoet\Models\Newsletter',
|
||||
$data
|
||||
);
|
||||
$count = $bulk_action->apply();
|
||||
return $this->successResponse(null, array('count' => $count));
|
||||
} catch(\Exception $e) {
|
||||
return $this->errorResponse(array(
|
||||
$e->getCode() => $e->getMessage()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
function create($data = array()) {
|
||||
@ -313,23 +357,25 @@ class Newsletters extends APIEndpoint {
|
||||
}
|
||||
|
||||
$newsletter = Newsletter::createOrUpdate($data);
|
||||
$errors = $newsletter->getErrors();
|
||||
|
||||
// try to load template data
|
||||
$template_id = (!empty($data['template']) ? (int)$data['template'] : false);
|
||||
$template = NewsletterTemplate::findOne($template_id);
|
||||
if($template !== false) {
|
||||
$newsletter->body = $template->body;
|
||||
if(!empty($errors)) {
|
||||
return $this->badRequest($errors);
|
||||
} else {
|
||||
$newsletter->body = array();
|
||||
// try to load template data
|
||||
$template_id = (isset($data['template']) ? (int)$data['template'] : false);
|
||||
$template = NewsletterTemplate::findOne($template_id);
|
||||
if($template === false) {
|
||||
$newsletter->body = array();
|
||||
} else {
|
||||
$newsletter->body = $template->body;
|
||||
}
|
||||
}
|
||||
|
||||
$newsletter->save();
|
||||
$errors = $newsletter->getErrors();
|
||||
if(!empty($errors)) {
|
||||
return array(
|
||||
'result' => false,
|
||||
'errors' =>$errors
|
||||
);
|
||||
return $this->badRequest($errors);
|
||||
} else {
|
||||
if(!empty($options)) {
|
||||
$option_fields = NewsletterOptionField::where(
|
||||
@ -346,15 +392,19 @@ class Newsletters extends APIEndpoint {
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!isset($data['id']) &&
|
||||
isset($data['type']) &&
|
||||
$data['type'] === 'notification'
|
||||
|
||||
if(
|
||||
empty($data['id'])
|
||||
&&
|
||||
isset($data['type'])
|
||||
&&
|
||||
$data['type'] === Newsletter::TYPE_NOTIFICATION
|
||||
) {
|
||||
Scheduler::processPostNotificationSchedule($newsletter->id);
|
||||
}
|
||||
return array(
|
||||
'result' => true,
|
||||
'newsletter' => $newsletter->asArray()
|
||||
|
||||
return $this->successResponse(
|
||||
Newsletter::findOne($newsletter->id)->asArray()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,31 +1,34 @@
|
||||
<?php
|
||||
use \MailPoet\API\Endpoints\Forms;
|
||||
use \MailPoet\API\Response as APIResponse;
|
||||
use \MailPoet\Models\Form;
|
||||
use \MailPoet\Models\Segment;
|
||||
|
||||
class FormsTest extends MailPoetTest {
|
||||
function _before() {
|
||||
Form::createOrUpdate(array('name' => 'Form 1'));
|
||||
Form::createOrUpdate(array('name' => 'Form 2'));
|
||||
Form::createOrUpdate(array('name' => 'Form 3'));
|
||||
$this->form_1 = Form::createOrUpdate(array('name' => 'Form 1'));
|
||||
$this->form_2 = Form::createOrUpdate(array('name' => 'Form 2'));
|
||||
$this->form_3 = Form::createOrUpdate(array('name' => 'Form 3'));
|
||||
Segment::createOrUpdate(array('name' => 'Segment 1'));
|
||||
Segment::createOrUpdate(array('name' => 'Segment 2'));
|
||||
}
|
||||
|
||||
function testItCanGetAForm() {
|
||||
$form = Form::where('name', 'Form 1')->findOne();
|
||||
|
||||
$router = new Forms();
|
||||
|
||||
$response = $router->get(/* missing id */);
|
||||
expect($response)->false();
|
||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||
expect($response->errors[0]['message'])->equals('This form does not exist.');
|
||||
|
||||
$response = $router->get('not_an_id');
|
||||
expect($response)->false();
|
||||
$response = $router->get(array('id' => 'not_an_id'));
|
||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||
expect($response->errors[0]['message'])->equals('This form does not exist.');
|
||||
|
||||
$response = $router->get($form->id);
|
||||
expect($response['id'])->equals($form->id);
|
||||
expect($response['name'])->equals($form->name);
|
||||
$response = $router->get(array('id' => $this->form_1->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Form::findOne($this->form_1->id)->asArray()
|
||||
);
|
||||
}
|
||||
|
||||
function testItCanGetListingData() {
|
||||
@ -43,12 +46,11 @@ class FormsTest extends MailPoetTest {
|
||||
function testItCanCreateANewForm() {
|
||||
$router = new Forms();
|
||||
$response = $router->create();
|
||||
expect($response['result'])->true();
|
||||
expect($response['form_id'] > 0)->true();
|
||||
expect($response)->hasntKey('errors');
|
||||
|
||||
$created_form = Form::findOne($response['form_id']);
|
||||
expect($created_form->name)->equals('New form');
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Form::findOne($response->data['id'])->asArray()
|
||||
);
|
||||
expect($response->data['name'])->equals('New form');
|
||||
}
|
||||
|
||||
function testItCanSaveAForm() {
|
||||
@ -58,133 +60,127 @@ class FormsTest extends MailPoetTest {
|
||||
|
||||
$router = new Forms();
|
||||
$response = $router->save(/* missing data */);
|
||||
expect($response['result'])->false();
|
||||
expect($response['errors'][0])->equals('Please specify a name');
|
||||
expect($response->status)->equals(APIResponse::STATUS_BAD_REQUEST);
|
||||
expect($response->errors[0]['message'])->equals('Please specify a name');
|
||||
|
||||
$response = $router->save($form_data);
|
||||
expect($response['result'])->true();
|
||||
expect($response['form_id'] > 0)->true();
|
||||
|
||||
$form = Form::where('name', 'My first form')->findOne();
|
||||
expect($form->id)->equals($response['form_id']);
|
||||
expect($form->name)->equals('My first form');
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Form::where('name', 'My first form')->findOne()->asArray()
|
||||
);
|
||||
}
|
||||
|
||||
function testItCanPreviewAForm() {
|
||||
$router = new Forms();
|
||||
|
||||
$response = $router->create();
|
||||
expect($response['result'])->true();
|
||||
expect($response['form_id'] > 0)->true();
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Form::where('name', 'New form')->findOne()->asArray()
|
||||
);
|
||||
|
||||
$form = Form::findOne($response['form_id']);
|
||||
$response = $router->previewEditor($form->asArray());
|
||||
expect($response['html'])->notEmpty();
|
||||
expect($response['css'])->notEmpty();
|
||||
$response = $router->previewEditor($response->data);
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data['html'])->notEmpty();
|
||||
expect($response->data['css'])->notEmpty();
|
||||
}
|
||||
|
||||
function testItCanExportAForm() {
|
||||
$router = new Forms();
|
||||
|
||||
$response = $router->create();
|
||||
expect($response['result'])->true();
|
||||
expect($response['form_id'] > 0)->true();
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
|
||||
$response = $router->exportsEditor($response['form_id']);
|
||||
expect($response['html'])->notEmpty();
|
||||
expect($response['php'])->notEmpty();
|
||||
expect($response['iframe'])->notEmpty();
|
||||
expect($response['shortcode'])->notEmpty();
|
||||
$response = $router->exportsEditor($response->data);
|
||||
expect($response->data['html'])->notEmpty();
|
||||
expect($response->data['php'])->notEmpty();
|
||||
expect($response->data['iframe'])->notEmpty();
|
||||
expect($response->data['shortcode'])->notEmpty();
|
||||
}
|
||||
|
||||
function testItCanSaveFormEditor() {
|
||||
$router = new Forms();
|
||||
|
||||
$response = $router->create();
|
||||
expect($response['result'])->true();
|
||||
expect($response['form_id'] > 0)->true();
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
|
||||
$form = Form::findOne($response['form_id'])->asArray();
|
||||
$form = Form::findOne($response->data['id'])->asArray();
|
||||
$form['name'] = 'Updated form';
|
||||
|
||||
$response = $router->saveEditor($form);
|
||||
expect($response['result'])->true();
|
||||
expect($response['is_widget'])->false();
|
||||
|
||||
$saved_form = Form::findOne($form['id']);
|
||||
expect($saved_form->name)->equals('Updated form');
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['is_widget'])->false();
|
||||
expect($response->data['name'])->equals('Updated form');
|
||||
}
|
||||
|
||||
function testItCanRestoreAForm() {
|
||||
$form = Form::where('name', 'Form 1')->findOne();
|
||||
$form->trash();
|
||||
$this->form_1->trash();
|
||||
|
||||
$trashed_form = Form::findOne($form->id);
|
||||
$trashed_form = Form::findOne($this->form_1->id);
|
||||
expect($trashed_form->deleted_at)->notNull();
|
||||
|
||||
$router = new Forms();
|
||||
$response = $router->restore($form->id);
|
||||
expect($response)->true();
|
||||
|
||||
$restored_form = Form::findOne($form->id);
|
||||
expect($restored_form->deleted_at)->null();
|
||||
$response = $router->restore(array('id' => $this->form_1->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Form::findOne($this->form_1->id)->asArray()
|
||||
);
|
||||
expect($response->data['deleted_at'])->null();
|
||||
expect($response->meta['count'])->equals(1);
|
||||
}
|
||||
|
||||
function testItCanTrashAForm() {
|
||||
$form = Form::where('name', 'Form 1')->findOne();
|
||||
expect($form->deleted_at)->null();
|
||||
|
||||
$router = new Forms();
|
||||
$response = $router->trash($form->id);
|
||||
expect($response)->true();
|
||||
|
||||
$trashed_form = Form::findOne($form->id);
|
||||
expect($trashed_form->deleted_at)->notNull();
|
||||
$response = $router->trash(array('id' => $this->form_2->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Form::findOne($this->form_2->id)->asArray()
|
||||
);
|
||||
expect($response->data['deleted_at'])->notNull();
|
||||
expect($response->meta['count'])->equals(1);
|
||||
}
|
||||
|
||||
function testItCanDeleteAForm() {
|
||||
$form = Form::where('name', 'Form 2')->findOne();
|
||||
expect($form->deleted_at)->null();
|
||||
|
||||
$router = new Forms();
|
||||
$response = $router->delete($form->id);
|
||||
expect($response)->equals(1);
|
||||
|
||||
$deleted_form = Form::findOne($form->id);
|
||||
expect($deleted_form)->false();
|
||||
$response = $router->delete(array('id' => $this->form_3->id));
|
||||
expect($response->data)->isEmpty();
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
}
|
||||
|
||||
function testItCanDuplicateAForm() {
|
||||
$form = Form::where('name', 'Form 3')->findOne();
|
||||
|
||||
$router = new Forms();
|
||||
$response = $router->duplicate($form->id);
|
||||
expect($response['name'])->equals('Copy of '.$form->name);
|
||||
|
||||
$duplicated_form = Form::findOne($response['id']);
|
||||
expect($duplicated_form->name)->equals('Copy of '.$form->name);
|
||||
$response = $router->duplicate(array('id' => $this->form_1->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Form::where('name', 'Copy of Form 1')->findOne()->asArray()
|
||||
);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
}
|
||||
|
||||
function testItCanBulkDeleteForms() {
|
||||
expect(Form::count())->equals(3);
|
||||
|
||||
$forms = Form::findMany();
|
||||
foreach($forms as $form) {
|
||||
$form->trash();
|
||||
}
|
||||
$router = new Forms();
|
||||
$response = $router->bulkAction(array(
|
||||
'action' => 'trash',
|
||||
'listing' => array('group' => 'all')
|
||||
));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(3);
|
||||
|
||||
$router = new Forms();
|
||||
$response = $router->bulkAction(array(
|
||||
'action' => 'delete',
|
||||
'listing' => array('group' => 'trash')
|
||||
));
|
||||
expect($response)->equals(3);
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(3);
|
||||
|
||||
$response = $router->bulkAction(array(
|
||||
'action' => 'delete',
|
||||
'listing' => array('group' => 'trash')
|
||||
));
|
||||
expect($response)->equals(0);
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(0);
|
||||
}
|
||||
|
||||
function _after() {
|
||||
|
@ -23,14 +23,24 @@ class NewslettersTest extends MailPoetTest {
|
||||
function testItCanGetANewsletter() {
|
||||
$router = new Newsletters();
|
||||
|
||||
$response = $router->get($this->newsletter->id());
|
||||
expect($response['id'])->equals($this->newsletter->id());
|
||||
$response = $router->get(/* missing id */);
|
||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||
expect($response->errors[0]['message'])
|
||||
->equals('This newsletter does not exist.');
|
||||
|
||||
$response = $router->get('not_an_id');
|
||||
expect($response)->false();
|
||||
$response = $router->get(array('id' => 'not_an_id'));
|
||||
expect($response->status)->equals(APIResponse::STATUS_NOT_FOUND);
|
||||
expect($response->errors[0]['message'])
|
||||
->equals('This newsletter does not exist.');
|
||||
|
||||
$response = $router->get(/* missing argument */);
|
||||
expect($response)->false();
|
||||
$response = $router->get(array('id' => $this->newsletter->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Newsletter::findOne($this->newsletter->id)
|
||||
->withSegments()
|
||||
->withOptions()
|
||||
->asArray()
|
||||
);
|
||||
}
|
||||
|
||||
function testItCanSaveANewNewsletter() {
|
||||
@ -110,43 +120,57 @@ class NewslettersTest extends MailPoetTest {
|
||||
function testItCanRestoreANewsletter() {
|
||||
$this->newsletter->trash();
|
||||
|
||||
expect($this->newsletter->deleted_at)->notNull();
|
||||
$trashed_newsletter = Newsletter::findOne($this->newsletter->id);
|
||||
expect($trashed_newsletter->deleted_at)->notNull();
|
||||
|
||||
$router = new Newsletters();
|
||||
$router->restore($this->newsletter->id());
|
||||
|
||||
$restored_subscriber = Newsletter::findOne($this->newsletter->id());
|
||||
expect($restored_subscriber->deleted_at)->null();
|
||||
$response = $router->restore(array('id' => $this->newsletter->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Newsletter::findOne($this->newsletter->id)->asArray()
|
||||
);
|
||||
expect($response->data['deleted_at'])->null();
|
||||
expect($response->meta['count'])->equals(1);
|
||||
}
|
||||
|
||||
function testItCanTrashANewsletter() {
|
||||
$router = new Newsletters();
|
||||
$response = $router->trash($this->newsletter->id());
|
||||
expect($response)->true();
|
||||
|
||||
$trashed_subscriber = Newsletter::findOne($this->newsletter->id());
|
||||
expect($trashed_subscriber->deleted_at)->notNull();
|
||||
$response = $router->trash(array('id' => $this->newsletter->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Newsletter::findOne($this->newsletter->id)->asArray()
|
||||
);
|
||||
expect($response->data['deleted_at'])->notNull();
|
||||
expect($response->meta['count'])->equals(1);
|
||||
}
|
||||
|
||||
function testItCanDeleteANewsletter() {
|
||||
$router = new Newsletters();
|
||||
$response = $router->delete($this->newsletter->id());
|
||||
expect($response)->equals(1);
|
||||
|
||||
expect(Newsletter::findOne($this->newsletter->id()))->false();
|
||||
$response = $router->delete(array('id' => $this->newsletter->id));
|
||||
expect($response->data)->isEmpty();
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
}
|
||||
|
||||
function testItCanDuplicateANewsletter() {
|
||||
$router = new Newsletters();
|
||||
$response = $router->duplicate($this->newsletter->id());
|
||||
expect($response['subject'])->equals('Copy of My Standard Newsletter');
|
||||
expect($response['type'])->equals(Newsletter::TYPE_STANDARD);
|
||||
expect($response['body'])->equals($this->newsletter->body);
|
||||
$response = $router->duplicate(array('id' => $this->newsletter->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Newsletter::where('subject', 'Copy of My Standard Newsletter')
|
||||
->findOne()
|
||||
->asArray()
|
||||
);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
|
||||
$response = $router->duplicate($this->post_notification->id());
|
||||
expect($response['subject'])->equals('Copy of My Post Notification');
|
||||
expect($response['type'])->equals(Newsletter::TYPE_NOTIFICATION);
|
||||
expect($response['body'])->equals($this->post_notification->body);
|
||||
$response = $router->duplicate(array('id' => $this->post_notification->id));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Newsletter::where('subject', 'Copy of My Post Notification')
|
||||
->findOne()
|
||||
->asArray()
|
||||
);
|
||||
expect($response->meta['count'])->equals(1);
|
||||
}
|
||||
|
||||
function testItCanCreateANewsletter() {
|
||||
@ -156,16 +180,16 @@ class NewslettersTest extends MailPoetTest {
|
||||
);
|
||||
$router = new Newsletters();
|
||||
$response = $router->create($data);
|
||||
expect($response['result'])->true();
|
||||
expect($response['newsletter']['id'] > 0)->true();
|
||||
expect($response['newsletter']['subject'])->equals('My New Newsletter');
|
||||
expect($response['newsletter']['type'])->equals(Newsletter::TYPE_STANDARD);
|
||||
expect($response['newsletter']['body'])->equals(array());
|
||||
expect($response)->hasntKey('errors');
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->data)->equals(
|
||||
Newsletter::where('subject', 'My New Newsletter')
|
||||
->findOne()
|
||||
->asArray()
|
||||
);
|
||||
|
||||
$response = $router->create();
|
||||
expect($response['result'])->false();
|
||||
expect($response['errors'][0])->equals('Please specify a type');
|
||||
expect($response->status)->equals(APIResponse::STATUS_BAD_REQUEST);
|
||||
expect($response->errors[0]['message'])->equals('Please specify a type');
|
||||
}
|
||||
|
||||
function testItCanGetListingData() {
|
||||
@ -174,22 +198,22 @@ class NewslettersTest extends MailPoetTest {
|
||||
|
||||
$newsletter_segment = NewsletterSegment::create();
|
||||
$newsletter_segment->hydrate(array(
|
||||
'newsletter_id' => $this->newsletter->id(),
|
||||
'segment_id' => $segment_1->id()
|
||||
'newsletter_id' => $this->newsletter->id,
|
||||
'segment_id' => $segment_1->id
|
||||
));
|
||||
$newsletter_segment->save();
|
||||
|
||||
$newsletter_segment = NewsletterSegment::create();
|
||||
$newsletter_segment->hydrate(array(
|
||||
'newsletter_id' => $this->newsletter->id(),
|
||||
'segment_id' => $segment_2->id()
|
||||
'newsletter_id' => $this->newsletter->id,
|
||||
'segment_id' => $segment_2->id
|
||||
));
|
||||
$newsletter_segment->save();
|
||||
|
||||
$newsletter_segment = NewsletterSegment::create();
|
||||
$newsletter_segment->hydrate(array(
|
||||
'newsletter_id' => $this->post_notification->id(),
|
||||
'segment_id' => $segment_2->id()
|
||||
'newsletter_id' => $this->post_notification->id,
|
||||
'segment_id' => $segment_2->id
|
||||
));
|
||||
$newsletter_segment->save();
|
||||
|
||||
@ -226,23 +250,23 @@ class NewslettersTest extends MailPoetTest {
|
||||
// link standard newsletter to the 2 segments
|
||||
$newsletter_segment = NewsletterSegment::create();
|
||||
$newsletter_segment->hydrate(array(
|
||||
'newsletter_id' => $this->newsletter->id(),
|
||||
'segment_id' => $segment_1->id()
|
||||
'newsletter_id' => $this->newsletter->id,
|
||||
'segment_id' => $segment_1->id
|
||||
));
|
||||
$newsletter_segment->save();
|
||||
|
||||
$newsletter_segment = NewsletterSegment::create();
|
||||
$newsletter_segment->hydrate(array(
|
||||
'newsletter_id' => $this->newsletter->id(),
|
||||
'segment_id' => $segment_2->id()
|
||||
'newsletter_id' => $this->newsletter->id,
|
||||
'segment_id' => $segment_2->id
|
||||
));
|
||||
$newsletter_segment->save();
|
||||
|
||||
// link post notification to the 2nd segment
|
||||
$newsletter_segment = NewsletterSegment::create();
|
||||
$newsletter_segment->hydrate(array(
|
||||
'newsletter_id' => $this->post_notification->id(),
|
||||
'segment_id' => $segment_2->id()
|
||||
'newsletter_id' => $this->post_notification->id,
|
||||
'segment_id' => $segment_2->id
|
||||
));
|
||||
$newsletter_segment->save();
|
||||
|
||||
@ -301,14 +325,9 @@ class NewslettersTest extends MailPoetTest {
|
||||
}
|
||||
|
||||
function testItCanBulkDeleteSelectionOfNewsletters() {
|
||||
$newsletter = Newsletter::createOrUpdate(array(
|
||||
'subject' => 'To be deleted',
|
||||
'type' => Newsletter::TYPE_STANDARD
|
||||
));
|
||||
|
||||
$selection_ids = array(
|
||||
$newsletter->id,
|
||||
$this->newsletter->id
|
||||
$this->newsletter->id,
|
||||
$this->post_notification->id
|
||||
);
|
||||
|
||||
$router = new Newsletters();
|
||||
@ -319,29 +338,33 @@ class NewslettersTest extends MailPoetTest {
|
||||
'action' => 'delete'
|
||||
));
|
||||
|
||||
expect($response)->equals(count($selection_ids));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(count($selection_ids));
|
||||
}
|
||||
|
||||
function testItCanBulkDeleteNewsletters() {
|
||||
expect(Newsletter::count())->equals(2);
|
||||
|
||||
$newsletters = Newsletter::findMany();
|
||||
foreach($newsletters as $newsletter) {
|
||||
$newsletter->trash();
|
||||
}
|
||||
$router = new Newsletters();
|
||||
$response = $router->bulkAction(array(
|
||||
'action' => 'trash',
|
||||
'listing' => array('group' => 'all')
|
||||
));
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(2);
|
||||
|
||||
$router = new Newsletters();
|
||||
$response = $router->bulkAction(array(
|
||||
'action' => 'delete',
|
||||
'listing' => array('group' => 'trash')
|
||||
));
|
||||
expect($response)->equals(2);
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(2);
|
||||
|
||||
$response = $router->bulkAction(array(
|
||||
'action' => 'delete',
|
||||
'listing' => array('group' => 'trash')
|
||||
));
|
||||
expect($response)->equals(0);
|
||||
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||
expect($response->meta['count'])->equals(0);
|
||||
}
|
||||
|
||||
function _after() {
|
||||
|
@ -414,6 +414,13 @@
|
||||
MailPoet.Notice.success(
|
||||
"<%= __('The form name was successfully updated!') %>"
|
||||
);
|
||||
}).fail(function(response) {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -454,9 +461,16 @@
|
||||
MailPoet.Modal.popup({
|
||||
title: "<%= __('Form preview') %>",
|
||||
template: $('#mailpoet_form_preview_template').html(),
|
||||
data: response
|
||||
data: response.data
|
||||
});
|
||||
})
|
||||
}).fail(function(response) {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function mailpoet_form_save(callback) {
|
||||
@ -490,7 +504,7 @@
|
||||
if(callback !== false) {
|
||||
var message = null;
|
||||
|
||||
if(response.is_widget === true) {
|
||||
if(response.meta.is_widget === true) {
|
||||
message = "<%= __('Saved! The changes are now active in your widget.') %>";
|
||||
} else {
|
||||
message = "<%= __('Saved! Add this form to %1$sa widget%2$s.') | format("<a href='widgets.php' target='_blank'>", '</a>') | raw %>";
|
||||
@ -500,7 +514,7 @@
|
||||
MailPoet.Notice.hide();
|
||||
MailPoet.Notice.success(message, {
|
||||
scroll: true,
|
||||
static: (response.is_widget === false)
|
||||
static: (response.meta.is_widget === false)
|
||||
});
|
||||
}
|
||||
|
||||
@ -539,10 +553,17 @@
|
||||
MailPoet.Ajax.post({
|
||||
endpoint: 'forms',
|
||||
action: 'exportsEditor',
|
||||
data: $('#mailpoet_form_id').val()
|
||||
data: {
|
||||
id: $('#mailpoet_form_id').val()
|
||||
}
|
||||
}).done(function(response) {
|
||||
if(response.result !== false) {
|
||||
$('#mailpoet_form_export').html(template({ exports: response }));
|
||||
$('#mailpoet_form_export').html(template({ exports: response.data }));
|
||||
}).fail(function(response) {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -324,9 +324,7 @@
|
||||
'shortcodesWindowTitle': __('Select a shortcode'),
|
||||
'unsubscribeLinkMissing': __('All newsletters must include an "Unsubscribe" link. Add a footer widget to your newsletter to continue'),
|
||||
'newsletterPreviewEmailMissing': __('Enter an email address to send the preview newsletter to'),
|
||||
'newsletterPreviewFailed': __('Preview failed. Please check console log'),
|
||||
'newsletterPreviewSent': __('Your test email has been sent!'),
|
||||
'newsletterPreviewFailedToSend': __('Attempt to send a newsletter preview email failed. Please verify that your sending method is configured correctly and try again'),
|
||||
'templateNameMissing': __('Please add a template name'),
|
||||
'templateDescriptionMissing': __('Please add a template description'),
|
||||
'templateSaved': __('Template has been saved.'),
|
||||
@ -1197,14 +1195,23 @@
|
||||
MailPoet.Ajax.post({
|
||||
endpoint: 'newsletters',
|
||||
action: 'get',
|
||||
data: <%= params('id') %>
|
||||
}).done(function(newsletter) {
|
||||
data: {
|
||||
id: <%= params('id') %>
|
||||
}
|
||||
}).always(function() {
|
||||
MailPoet.Modal.loading(false);
|
||||
}).done(function(response) {
|
||||
EditorApplication.start({
|
||||
newsletter: newsletter,
|
||||
newsletter: response.data,
|
||||
config: config,
|
||||
});
|
||||
|
||||
MailPoet.Modal.loading(false);
|
||||
}).fail(function(response) {
|
||||
if (response.errors.length > 0) {
|
||||
MailPoet.Notice.error(
|
||||
response.errors.map(function(error) { return error.message; }),
|
||||
{ scroll: true }
|
||||
);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<% endblock %>
|
||||
|
Reference in New Issue
Block a user