form & listing jsx update + Segment endpoint conversion
This commit is contained in:
@ -66,22 +66,22 @@ define(
|
|||||||
MailPoet.Ajax.post({
|
MailPoet.Ajax.post({
|
||||||
endpoint: this.props.endpoint,
|
endpoint: this.props.endpoint,
|
||||||
action: 'get',
|
action: 'get',
|
||||||
data: id
|
data: {
|
||||||
}).done(function(response) {
|
id: id
|
||||||
if(response === false) {
|
|
||||||
this.setState({
|
|
||||||
loading: false,
|
|
||||||
item: {}
|
|
||||||
}, function() {
|
|
||||||
this.context.router.push('/new');
|
|
||||||
}.bind(this));
|
|
||||||
} else {
|
|
||||||
this.setState({
|
|
||||||
loading: false,
|
|
||||||
item: response
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}).done((response) => {
|
||||||
|
this.setState({
|
||||||
|
loading: false,
|
||||||
|
item: response.data
|
||||||
|
});
|
||||||
|
}).fail((response) => {
|
||||||
|
this.setState({
|
||||||
|
loading: false,
|
||||||
|
item: {}
|
||||||
|
}, function() {
|
||||||
|
this.context.router.push('/new');
|
||||||
|
});
|
||||||
|
});
|
||||||
},
|
},
|
||||||
handleSubmit: function(e) {
|
handleSubmit: function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@ -115,29 +115,25 @@ define(
|
|||||||
endpoint: this.props.endpoint,
|
endpoint: this.props.endpoint,
|
||||||
action: 'save',
|
action: 'save',
|
||||||
data: item
|
data: item
|
||||||
}).done(function(response) {
|
}).always(() => {
|
||||||
this.setState({ loading: false });
|
this.setState({ loading: false });
|
||||||
|
}).done((response) => {
|
||||||
if(response.result === true) {
|
if(this.props.onSuccess !== undefined) {
|
||||||
if(this.props.onSuccess !== undefined) {
|
this.props.onSuccess();
|
||||||
this.props.onSuccess();
|
|
||||||
} else {
|
|
||||||
this.context.router.push('/');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.props.params.id !== undefined) {
|
|
||||||
this.props.messages.onUpdate();
|
|
||||||
} else {
|
|
||||||
this.props.messages.onCreate();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if(response.result === false) {
|
this.context.router.push('/');
|
||||||
if(response.errors.length > 0) {
|
|
||||||
this.setState({ errors: response.errors });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}.bind(this));
|
|
||||||
|
if(this.props.params.id !== undefined) {
|
||||||
|
this.props.messages.onUpdate();
|
||||||
|
} else {
|
||||||
|
this.props.messages.onCreate();
|
||||||
|
}
|
||||||
|
}).fail((response) => {
|
||||||
|
if(response.errors.length > 0) {
|
||||||
|
this.setState({ errors: response.errors });
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
handleValueChange: function(e) {
|
handleValueChange: function(e) {
|
||||||
if (this.props.onChange) {
|
if (this.props.onChange) {
|
||||||
@ -159,7 +155,7 @@ define(
|
|||||||
var errors = this.getErrors().map(function(error, index) {
|
var errors = this.getErrors().map(function(error, index) {
|
||||||
return (
|
return (
|
||||||
<p key={ 'error-'+index } className="mailpoet_error">
|
<p key={ 'error-'+index } className="mailpoet_error">
|
||||||
{ error }
|
{ error.message }
|
||||||
</p>
|
</p>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -456,22 +456,29 @@ const Listing = React.createClass({
|
|||||||
sort_by: this.state.sort_by,
|
sort_by: this.state.sort_by,
|
||||||
sort_order: this.state.sort_order
|
sort_order: this.state.sort_order
|
||||||
}
|
}
|
||||||
}).done(function(response) {
|
}).done((response) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
items: response.items || [],
|
items: response.items || [],
|
||||||
filters: response.filters || {},
|
filters: response.filters || {},
|
||||||
groups: response.groups || [],
|
groups: response.groups || [],
|
||||||
count: response.count || 0,
|
count: response.count || 0,
|
||||||
loading: false
|
loading: false
|
||||||
}, function() {
|
}, () => {
|
||||||
|
// if viewing an empty trash
|
||||||
|
if (this.state.group === 'trash' && response.count === 0) {
|
||||||
|
// redirect to default group
|
||||||
|
this.handleGroup('all');
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: remove this....
|
||||||
if (this.props['onGetItems'] !== undefined) {
|
if (this.props['onGetItems'] !== undefined) {
|
||||||
const count = (response.groups[0] !== undefined)
|
const count = (response.groups[0] !== undefined)
|
||||||
? ~~(response.groups[0].count)
|
? ~~(response.groups[0].count)
|
||||||
: 0;
|
: 0;
|
||||||
this.props.onGetItems(count);
|
this.props.onGetItems(count);
|
||||||
}
|
}
|
||||||
}.bind(this));
|
});
|
||||||
}.bind(this));
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleRestoreItem: function(id) {
|
handleRestoreItem: function(id) {
|
||||||
@ -483,8 +490,10 @@ const Listing = React.createClass({
|
|||||||
MailPoet.Ajax.post({
|
MailPoet.Ajax.post({
|
||||||
endpoint: this.props.endpoint,
|
endpoint: this.props.endpoint,
|
||||||
action: 'restore',
|
action: 'restore',
|
||||||
data: id
|
data: {
|
||||||
}).done(function(response) {
|
id: id
|
||||||
|
}
|
||||||
|
}).done((response) => {
|
||||||
if (
|
if (
|
||||||
this.props.messages !== undefined
|
this.props.messages !== undefined
|
||||||
&& this.props.messages['onRestore'] !== undefined
|
&& this.props.messages['onRestore'] !== undefined
|
||||||
@ -492,7 +501,12 @@ const Listing = React.createClass({
|
|||||||
this.props.messages.onRestore(response);
|
this.props.messages.onRestore(response);
|
||||||
}
|
}
|
||||||
this.getItems();
|
this.getItems();
|
||||||
}.bind(this));
|
}).fail((response) => {
|
||||||
|
MailPoet.Notice.error(
|
||||||
|
response.errors.map(function(error) { return error.message; }),
|
||||||
|
{ scroll: true }
|
||||||
|
);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
handleTrashItem: function(id) {
|
handleTrashItem: function(id) {
|
||||||
this.setState({
|
this.setState({
|
||||||
@ -503,8 +517,10 @@ const Listing = React.createClass({
|
|||||||
MailPoet.Ajax.post({
|
MailPoet.Ajax.post({
|
||||||
endpoint: this.props.endpoint,
|
endpoint: this.props.endpoint,
|
||||||
action: 'trash',
|
action: 'trash',
|
||||||
data: id
|
data: {
|
||||||
}).done(function(response) {
|
id: id
|
||||||
|
}
|
||||||
|
}).done((response) => {
|
||||||
if (
|
if (
|
||||||
this.props.messages !== undefined
|
this.props.messages !== undefined
|
||||||
&& this.props.messages['onTrash'] !== undefined
|
&& this.props.messages['onTrash'] !== undefined
|
||||||
@ -512,7 +528,12 @@ const Listing = React.createClass({
|
|||||||
this.props.messages.onTrash(response);
|
this.props.messages.onTrash(response);
|
||||||
}
|
}
|
||||||
this.getItems();
|
this.getItems();
|
||||||
}.bind(this));
|
}).fail((response) => {
|
||||||
|
MailPoet.Notice.error(
|
||||||
|
response.errors.map(function(error) { return error.message; }),
|
||||||
|
{ scroll: true }
|
||||||
|
);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
handleDeleteItem: function(id) {
|
handleDeleteItem: function(id) {
|
||||||
this.setState({
|
this.setState({
|
||||||
@ -523,8 +544,10 @@ const Listing = React.createClass({
|
|||||||
MailPoet.Ajax.post({
|
MailPoet.Ajax.post({
|
||||||
endpoint: this.props.endpoint,
|
endpoint: this.props.endpoint,
|
||||||
action: 'delete',
|
action: 'delete',
|
||||||
data: id
|
data: {
|
||||||
}).done(function(response) {
|
id: id
|
||||||
|
}
|
||||||
|
}).done((response) => {
|
||||||
if (
|
if (
|
||||||
this.props.messages !== undefined
|
this.props.messages !== undefined
|
||||||
&& this.props.messages['onDelete'] !== undefined
|
&& this.props.messages['onDelete'] !== undefined
|
||||||
@ -532,22 +555,29 @@ const Listing = React.createClass({
|
|||||||
this.props.messages.onDelete(response);
|
this.props.messages.onDelete(response);
|
||||||
}
|
}
|
||||||
this.getItems();
|
this.getItems();
|
||||||
}.bind(this));
|
}).fail((response) => {
|
||||||
|
MailPoet.Notice.error(
|
||||||
|
response.errors.map(function(error) { return error.message; }),
|
||||||
|
{ scroll: true }
|
||||||
|
);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
handleEmptyTrash: function() {
|
handleEmptyTrash: function() {
|
||||||
return this.handleBulkAction('all', {
|
return this.handleBulkAction('all', {
|
||||||
action: 'delete',
|
action: 'delete',
|
||||||
group: 'trash'
|
group: 'trash'
|
||||||
}).then(function(response) {
|
}).done((response) => {
|
||||||
if (~~(response) > 0) {
|
MailPoet.Notice.success(
|
||||||
MailPoet.Notice.success(
|
MailPoet.I18n.t('permanentlyDeleted').replace('%d', response.meta.count)
|
||||||
MailPoet.I18n.t('permanentlyDeleted').replace('%d', response)
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// redirect to default group
|
// redirect to default group
|
||||||
this.handleGroup('all');
|
this.handleGroup('all');
|
||||||
}.bind(this));
|
}).fail((response) => {
|
||||||
|
MailPoet.Notice.error(
|
||||||
|
response.errors.map(function(error) { return error.message; }),
|
||||||
|
{ scroll: true }
|
||||||
|
);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
handleBulkAction: function(selected_ids, params) {
|
handleBulkAction: function(selected_ids, params) {
|
||||||
if (
|
if (
|
||||||
|
@ -36,11 +36,11 @@ var columns = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const messages = {
|
const messages = {
|
||||||
onTrash: function(response) {
|
onTrash: (response) => {
|
||||||
var count = ~~response;
|
let count = ~~response.meta.count;
|
||||||
var message = null;
|
let message = null;
|
||||||
|
|
||||||
if(count === 1) {
|
if (count === 1) {
|
||||||
message = (
|
message = (
|
||||||
MailPoet.I18n.t('oneSegmentTrashed')
|
MailPoet.I18n.t('oneSegmentTrashed')
|
||||||
);
|
);
|
||||||
@ -51,11 +51,11 @@ const messages = {
|
|||||||
}
|
}
|
||||||
MailPoet.Notice.success(message);
|
MailPoet.Notice.success(message);
|
||||||
},
|
},
|
||||||
onDelete: function(response) {
|
onDelete: (response) => {
|
||||||
var count = ~~response;
|
let count = ~~response.meta.count;
|
||||||
var message = null;
|
let message = null;
|
||||||
|
|
||||||
if(count === 1) {
|
if (count === 1) {
|
||||||
message = (
|
message = (
|
||||||
MailPoet.I18n.t('oneSegmentDeleted')
|
MailPoet.I18n.t('oneSegmentDeleted')
|
||||||
);
|
);
|
||||||
@ -66,11 +66,11 @@ const messages = {
|
|||||||
}
|
}
|
||||||
MailPoet.Notice.success(message);
|
MailPoet.Notice.success(message);
|
||||||
},
|
},
|
||||||
onRestore: function(response) {
|
onRestore: (response) => {
|
||||||
var count = ~~response;
|
let count = ~~response.meta.count;
|
||||||
var message = null;
|
let message = null;
|
||||||
|
|
||||||
if(count === 1) {
|
if (count === 1) {
|
||||||
message = (
|
message = (
|
||||||
MailPoet.I18n.t('oneSegmentRestored')
|
MailPoet.I18n.t('oneSegmentRestored')
|
||||||
);
|
);
|
||||||
@ -106,16 +106,23 @@ const item_actions = [
|
|||||||
{
|
{
|
||||||
name: 'duplicate_segment',
|
name: 'duplicate_segment',
|
||||||
label: MailPoet.I18n.t('duplicate'),
|
label: MailPoet.I18n.t('duplicate'),
|
||||||
onClick: function(item, refresh) {
|
onClick: (item, refresh) => {
|
||||||
return MailPoet.Ajax.post({
|
return MailPoet.Ajax.post({
|
||||||
endpoint: 'segments',
|
endpoint: 'segments',
|
||||||
action: 'duplicate',
|
action: 'duplicate',
|
||||||
data: item.id
|
data: {
|
||||||
}).done(function(response) {
|
id: item.id
|
||||||
|
}
|
||||||
|
}).done((response) => {
|
||||||
MailPoet.Notice.success(
|
MailPoet.Notice.success(
|
||||||
(MailPoet.I18n.t('listDuplicated')).replace('%$1s', response.name)
|
MailPoet.I18n.t('listDuplicated').replace('%$1s', response.data.name)
|
||||||
);
|
);
|
||||||
refresh();
|
refresh();
|
||||||
|
}).fail((response) => {
|
||||||
|
MailPoet.Notice.error(
|
||||||
|
response.errors.map(function(error) { return error.message; }),
|
||||||
|
{ scroll: true }
|
||||||
|
);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
display: function(segment) {
|
display: function(segment) {
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
<?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\Segment;
|
use \MailPoet\Models\Segment;
|
||||||
use \MailPoet\Models\SubscriberSegment;
|
use \MailPoet\Models\SubscriberSegment;
|
||||||
@ -9,16 +11,16 @@ use \MailPoet\Segments\WP;
|
|||||||
|
|
||||||
if(!defined('ABSPATH')) exit;
|
if(!defined('ABSPATH')) exit;
|
||||||
|
|
||||||
class Segments {
|
class Segments extends APIEndpoint {
|
||||||
function __construct() {
|
function get($data = array()) {
|
||||||
}
|
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||||
|
|
||||||
function get($id = false) {
|
|
||||||
$segment = Segment::findOne($id);
|
$segment = Segment::findOne($id);
|
||||||
if($segment === false) {
|
if($segment === false) {
|
||||||
return false;
|
return $this->errorResponse(array(
|
||||||
|
APIError::NOT_FOUND => __('This list does not exist.')
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
return $segment->asArray();
|
return $this->successResponse($segment->asArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,68 +51,109 @@ class Segments {
|
|||||||
$errors = $segment->getErrors();
|
$errors = $segment->getErrors();
|
||||||
|
|
||||||
if(!empty($errors)) {
|
if(!empty($errors)) {
|
||||||
return array(
|
return $this->errorResponse($errors);
|
||||||
'result' => false,
|
|
||||||
'errors' => $errors
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
return array(
|
return $this->successResponse(
|
||||||
'result' => true
|
Segment::findOne($segment->id)->asArray()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function restore($id) {
|
function restore($data = array()) {
|
||||||
|
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||||
$segment = Segment::findOne($id);
|
$segment = Segment::findOne($id);
|
||||||
if($segment !== false) {
|
if($segment === false) {
|
||||||
|
return $this->errorResponse(array(
|
||||||
|
APIError::NOT_FOUND => __('This list does not exist.')
|
||||||
|
));
|
||||||
|
} else {
|
||||||
$segment->restore();
|
$segment->restore();
|
||||||
|
return $this->successResponse(
|
||||||
|
Segment::findOne($segment->id)->asArray(),
|
||||||
|
array('count' => 1)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return ($segment->getErrors() === false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function trash($id) {
|
function trash($data = array()) {
|
||||||
|
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||||
$segment = Segment::findOne($id);
|
$segment = Segment::findOne($id);
|
||||||
if($segment !== false) {
|
if($segment === false) {
|
||||||
|
return $this->errorResponse(array(
|
||||||
|
APIError::NOT_FOUND => __('This list does not exist.')
|
||||||
|
));
|
||||||
|
} else {
|
||||||
$segment->trash();
|
$segment->trash();
|
||||||
|
return $this->successResponse(
|
||||||
|
Segment::findOne($segment->id)->asArray(),
|
||||||
|
array('count' => 1)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return ($segment->getErrors() === false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function delete($id) {
|
function delete($data = array()) {
|
||||||
|
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||||
$segment = Segment::findOne($id);
|
$segment = Segment::findOne($id);
|
||||||
if($segment !== false) {
|
if($segment === false) {
|
||||||
|
return $this->errorResponse(array(
|
||||||
|
APIError::NOT_FOUND => __('This list does not exist.')
|
||||||
|
));
|
||||||
|
} else {
|
||||||
$segment->delete();
|
$segment->delete();
|
||||||
return 1;
|
return $this->successResponse(null, array('count' => 1));
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function duplicate($id) {
|
function duplicate($data = array()) {
|
||||||
$result = false;
|
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||||
|
|
||||||
$segment = Segment::findOne($id);
|
$segment = Segment::findOne($id);
|
||||||
if($segment !== false) {
|
|
||||||
|
if($segment === false) {
|
||||||
|
return $this->errorResponse(array(
|
||||||
|
APIError::NOT_FOUND => __('This list does not exist.')
|
||||||
|
));
|
||||||
|
} else {
|
||||||
$data = array(
|
$data = array(
|
||||||
'name' => sprintf(__('Copy of %s'), $segment->name)
|
'name' => sprintf(__('Copy of %s'), $segment->name)
|
||||||
);
|
);
|
||||||
$result = $segment->duplicate($data)->asArray();
|
$duplicate = $segment->duplicate($data);
|
||||||
}
|
$errors = $duplicate->getErrors();
|
||||||
|
|
||||||
return $result;
|
if(!empty($errors)) {
|
||||||
|
return $this->errorResponse($errors);
|
||||||
|
} else {
|
||||||
|
return $this->successResponse(
|
||||||
|
Segment::findOne($duplicate->id)->asArray(),
|
||||||
|
array('count' => 1)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function synchronize() {
|
function synchronize() {
|
||||||
$result = WP::synchronizeUsers();
|
try {
|
||||||
|
WP::synchronizeUsers();
|
||||||
|
} catch(\Exception $e) {
|
||||||
|
return $this->errorResponse(array(
|
||||||
|
$e->getCode() => $e->getMessage()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
return $this->successResponse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
function bulkAction($data = array()) {
|
function bulkAction($data = array()) {
|
||||||
$bulk_action = new Listing\BulkAction(
|
try {
|
||||||
'\MailPoet\Models\Segment',
|
$bulk_action = new Listing\BulkAction(
|
||||||
$data
|
'\MailPoet\Models\Segment',
|
||||||
);
|
$data
|
||||||
|
);
|
||||||
return $bulk_action->apply();
|
$count = $bulk_action->apply();
|
||||||
|
return $this->successResponse(null, array('count' => $count));
|
||||||
|
} catch(\Exception $e) {
|
||||||
|
return $this->errorResponse(array(
|
||||||
|
$e->getCode() => $e->getMessage()
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,11 +145,8 @@ class Model extends \Sudzy\ValidModel {
|
|||||||
$duplicate->set_expr('updated_at', 'NOW()');
|
$duplicate->set_expr('updated_at', 'NOW()');
|
||||||
$duplicate->set_expr('deleted_at', 'NULL');
|
$duplicate->set_expr('deleted_at', 'NULL');
|
||||||
|
|
||||||
if($duplicate->save()) {
|
$duplicate->save();
|
||||||
return $duplicate;
|
return $duplicate;
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setTimestamp() {
|
private function setTimestamp() {
|
||||||
|
Reference in New Issue
Block a user