Listings
- fixed selection field JSX - fixed bulk actions (added filter function) - added getPublished/getTrashed static methods on Model - fixed step 3 of newsletter process - updated save/get methods of all listing-able models to conform with the new norm
This commit is contained in:
@ -54,6 +54,11 @@ function(
|
|||||||
loadCachedItems: function() {
|
loadCachedItems: function() {
|
||||||
if(typeof(window['mailpoet_'+this.props.field.endpoint]) !== 'undefined') {
|
if(typeof(window['mailpoet_'+this.props.field.endpoint]) !== 'undefined') {
|
||||||
var items = window['mailpoet_'+this.props.field.endpoint];
|
var items = window['mailpoet_'+this.props.field.endpoint];
|
||||||
|
|
||||||
|
if(this.props.field['filter'] !== undefined) {
|
||||||
|
items = items.filter(this.props.field.filter);
|
||||||
|
}
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
items: items
|
items: items
|
||||||
});
|
});
|
||||||
@ -76,7 +81,7 @@ function(
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
render: function() {
|
render: function() {
|
||||||
if(this.state.items.length === 0) {
|
if((this.props.item !== undefined && this.props.item.id === undefined)) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
var options = this.state.items.map(function(item, index) {
|
var options = this.state.items.map(function(item, index) {
|
||||||
|
@ -88,7 +88,7 @@ define(
|
|||||||
}).done(function(response) {
|
}).done(function(response) {
|
||||||
this.setState({ loading: false });
|
this.setState({ loading: false });
|
||||||
|
|
||||||
if(response === true) {
|
if(response.result === true) {
|
||||||
if(this.props.onSuccess !== undefined) {
|
if(this.props.onSuccess !== undefined) {
|
||||||
this.props.onSuccess()
|
this.props.onSuccess()
|
||||||
} else {
|
} else {
|
||||||
@ -101,10 +101,10 @@ define(
|
|||||||
this.props.messages['created']();
|
this.props.messages['created']();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(response === false) {
|
if(response.result === false) {
|
||||||
// unknown error occurred
|
if(response.errors.length > 0) {
|
||||||
} else {
|
this.setState({ errors: response.errors });
|
||||||
this.setState({ errors: response });
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
@ -121,13 +121,15 @@ define(
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
render: function() {
|
render: function() {
|
||||||
var errors = this.state.errors.map(function(error, index) {
|
if(this.state.errors !== undefined) {
|
||||||
return (
|
var errors = this.state.errors.map(function(error, index) {
|
||||||
<p key={ 'error-'+index } className="mailpoet_error">
|
return (
|
||||||
{ error }
|
<p key={ 'error-'+index } className="mailpoet_error">
|
||||||
</p>
|
{ error }
|
||||||
);
|
</p>
|
||||||
});
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var formClasses = classNames(
|
var formClasses = classNames(
|
||||||
'mailpoet_form',
|
'mailpoet_form',
|
||||||
|
@ -15,16 +15,16 @@ function(
|
|||||||
this.setState({
|
this.setState({
|
||||||
action: e.target.value,
|
action: e.target.value,
|
||||||
extra: false
|
extra: false
|
||||||
});
|
}, function() {
|
||||||
|
var action = this.getSelectedAction();
|
||||||
|
|
||||||
var action = this.getSelectedAction();
|
// action on select callback
|
||||||
|
if(action !== null && action['onSelect'] !== undefined) {
|
||||||
// action on select callback
|
this.setState({
|
||||||
if(action !== null && action['onSelect'] !== undefined) {
|
extra: action.onSelect(e)
|
||||||
this.setState({
|
});
|
||||||
extra: action.onSelect(e)
|
}
|
||||||
});
|
}.bind(this));
|
||||||
}
|
|
||||||
},
|
},
|
||||||
handleApplyAction: function(e) {
|
handleApplyAction: function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -34,7 +34,10 @@ define(
|
|||||||
placeholder: "Select a list",
|
placeholder: "Select a list",
|
||||||
id: "mailpoet_segments",
|
id: "mailpoet_segments",
|
||||||
endpoint: "segments",
|
endpoint: "segments",
|
||||||
multiple: true
|
multiple: true,
|
||||||
|
filter: function(segment) {
|
||||||
|
return !!(!segment.deleted_at);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sender',
|
name: 'sender',
|
||||||
|
@ -37,6 +37,17 @@ define(
|
|||||||
'subscribed': 'Subscribed',
|
'subscribed': 'Subscribed',
|
||||||
'unsubscribed': 'Unsubscribed'
|
'unsubscribed': 'Unsubscribed'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'segments',
|
||||||
|
label: 'Lists',
|
||||||
|
type: 'selection',
|
||||||
|
placeholder: "Select a list",
|
||||||
|
endpoint: "segments",
|
||||||
|
multiple: true,
|
||||||
|
filter: function(segment) {
|
||||||
|
return !!(!segment.deleted_at);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -101,7 +101,10 @@ const bulk_actions = [
|
|||||||
onSelect: function() {
|
onSelect: function() {
|
||||||
let field = {
|
let field = {
|
||||||
id: 'move_to_segment',
|
id: 'move_to_segment',
|
||||||
endpoint: 'segments'
|
endpoint: 'segments',
|
||||||
|
filter: function(segment) {
|
||||||
|
return !!(!segment.deleted_at);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -127,7 +130,10 @@ const bulk_actions = [
|
|||||||
onSelect: function() {
|
onSelect: function() {
|
||||||
let field = {
|
let field = {
|
||||||
id: 'add_to_segment',
|
id: 'add_to_segment',
|
||||||
endpoint: 'segments'
|
endpoint: 'segments',
|
||||||
|
filter: function(segment) {
|
||||||
|
return !!(!segment.deleted_at);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -146,7 +146,7 @@ class Menu {
|
|||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'settings' => $settings,
|
'settings' => $settings,
|
||||||
'segments' => Segment::findArray(),
|
'segments' => Segment::getPublished()->findArray(),
|
||||||
'pages' => Pages::getAll(),
|
'pages' => Pages::getAll(),
|
||||||
'flags' => $flags,
|
'flags' => $flags,
|
||||||
'charsets' => Charsets::getAll(),
|
'charsets' => Charsets::getAll(),
|
||||||
@ -214,7 +214,7 @@ class Menu {
|
|||||||
$data = array(
|
$data = array(
|
||||||
'form' => $form,
|
'form' => $form,
|
||||||
'pages' => Pages::getAll(),
|
'pages' => Pages::getAll(),
|
||||||
'segments' => Segment::findArray(),
|
'segments' => Segment::getPublished()->findArray(),
|
||||||
'styles' => FormRenderer::getStyles($form),
|
'styles' => FormRenderer::getStyles($form),
|
||||||
'date_types' => Block\Date::getDateTypes(),
|
'date_types' => Block\Date::getDateTypes(),
|
||||||
'date_formats' => Block\Date::getDateFormats()
|
'date_formats' => Block\Date::getDateFormats()
|
||||||
|
@ -90,4 +90,12 @@ class Model extends \Sudzy\ValidModel {
|
|||||||
}, $searchCriteria);
|
}, $searchCriteria);
|
||||||
return $orm->having_raw(implode(' ' . $searchCondition . ' ', $havingFields), array_values($havingValues));
|
return $orm->having_raw(implode(' ' . $searchCondition . ' ', $havingFields), array_values($havingValues));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function getPublished() {
|
||||||
|
return static::whereNull('deleted_at');
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getTrashed() {
|
||||||
|
return static::whereNotNull('deleted_at');
|
||||||
|
}
|
||||||
}
|
}
|
@ -68,7 +68,7 @@ class Segment extends Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static function search($orm, $search = '') {
|
static function search($orm, $search = '') {
|
||||||
return $orm->where_like('name', '%'.$search.'%');
|
return $orm->whereLike('name', '%'.$search.'%');
|
||||||
}
|
}
|
||||||
|
|
||||||
static function groups() {
|
static function groups() {
|
||||||
|
@ -33,7 +33,6 @@ class Newsletters {
|
|||||||
}, $segments);
|
}, $segments);
|
||||||
$newsletter['options'] = $options;
|
$newsletter['options'] = $options;
|
||||||
|
|
||||||
|
|
||||||
wp_send_json($newsletter);
|
wp_send_json($newsletter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,9 +53,16 @@ class Newsletters {
|
|||||||
unset($data['options']);
|
unset($data['options']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$errors = array();
|
||||||
|
$result = false;
|
||||||
|
|
||||||
$newsletter = Newsletter::createOrUpdate($data);
|
$newsletter = Newsletter::createOrUpdate($data);
|
||||||
|
|
||||||
if($newsletter->id) {
|
if($newsletter !== false && !$newsletter->id()) {
|
||||||
|
$errors = $newsletter->getValidationErrors();
|
||||||
|
} else {
|
||||||
|
$result = true;
|
||||||
|
|
||||||
if(!empty($segment_ids)) {
|
if(!empty($segment_ids)) {
|
||||||
NewsletterSegment::where('newsletter_id', $newsletter->id)
|
NewsletterSegment::where('newsletter_id', $newsletter->id)
|
||||||
->deleteMany();
|
->deleteMany();
|
||||||
@ -89,8 +95,10 @@ class Newsletters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
wp_send_json(array(
|
||||||
wp_send_json(($newsletter->id !== false));
|
'result' => $result,
|
||||||
|
'errors' => $errors
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
function delete($data = array()) {
|
function delete($data = array()) {
|
||||||
|
@ -71,13 +71,20 @@ class Segments {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function save($data = array()) {
|
function save($data = array()) {
|
||||||
$result = Segment::createOrUpdate($data);
|
$errors = array();
|
||||||
|
$result = false;
|
||||||
|
|
||||||
if($result !== true) {
|
$segment = Segment::createOrUpdate($data);
|
||||||
wp_send_json($result);
|
|
||||||
|
if($segment !== false && !$segment->id()) {
|
||||||
|
$errors = $segment->getValidationErrors();
|
||||||
} else {
|
} else {
|
||||||
wp_send_json(true);
|
$result = true;
|
||||||
}
|
}
|
||||||
|
wp_send_json(array(
|
||||||
|
'result' => $result,
|
||||||
|
'errors' => $errors
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
function restore($id) {
|
function restore($id) {
|
||||||
|
@ -21,7 +21,14 @@ class Subscribers {
|
|||||||
if($subscriber === false) {
|
if($subscriber === false) {
|
||||||
wp_send_json(false);
|
wp_send_json(false);
|
||||||
} else {
|
} else {
|
||||||
wp_send_json($subscriber->asArray());
|
$segments = $subscriber->segments()->findArray();
|
||||||
|
|
||||||
|
$subscriber = $subscriber->asArray();
|
||||||
|
$subscriber['segments'] = array_map(function($segment) {
|
||||||
|
return $segment['id'];
|
||||||
|
}, $segments);
|
||||||
|
|
||||||
|
wp_send_json($subscriber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,18 +65,40 @@ class Subscribers {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function save($data = array()) {
|
function save($data = array()) {
|
||||||
|
$errors = array();
|
||||||
$result = false;
|
$result = false;
|
||||||
|
$segments = false;
|
||||||
|
|
||||||
|
if(array_key_exists('segments', $data)) {
|
||||||
|
$segments = $data['segments'];
|
||||||
|
unset($data['segments']);
|
||||||
|
}
|
||||||
|
|
||||||
$subscriber = Subscriber::createOrUpdate($data);
|
$subscriber = Subscriber::createOrUpdate($data);
|
||||||
|
|
||||||
if($subscriber !== false && !$subscriber->id()) {
|
if($subscriber !== false && !$subscriber->id()) {
|
||||||
$result = array(
|
$errors = $subscriber->getValidationErrors();
|
||||||
'errors' => $subscriber->getValidationErrors()
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
$result = true;
|
$result = true;
|
||||||
|
|
||||||
|
if($segments !== false) {
|
||||||
|
SubscriberSegment::where('subscriber_id', $subscriber->id)
|
||||||
|
->deleteMany();
|
||||||
|
|
||||||
|
if(!empty($segments)) {
|
||||||
|
foreach($segments as $segment_id) {
|
||||||
|
$relation = SubscriberSegment::create();
|
||||||
|
$relation->segment_id = $segment_id;
|
||||||
|
$relation->subscriber_id = $subscriber->id;
|
||||||
|
$relation->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
wp_send_json($result);
|
wp_send_json(array(
|
||||||
|
'result' => $result,
|
||||||
|
'errors' => $errors
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
function subscribe($data = array()) {
|
function subscribe($data = array()) {
|
||||||
|
Reference in New Issue
Block a user