fix bulk actions and messages

This commit is contained in:
Jonathan Labreuille
2016-09-06 17:21:15 +02:00
parent f650455a90
commit 4a72995bf4
17 changed files with 207 additions and 175 deletions

View File

@ -27,48 +27,48 @@ const columns = [
];
const messages = {
onTrash: function(response) {
var count = ~~response;
var message = null;
onTrash: (response) => {
const count = ~~response.meta.count;
let message = null;
if(count === 1) {
if (count === 1) {
message = (
MailPoet.I18n.t('oneFormTrashed')
);
} else {
message = (
MailPoet.I18n.t('multipleFormsTrashed')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onDelete: function(response) {
var count = ~~response;
var message = null;
onDelete: (response) => {
const count = ~~response.meta.count;
let message = null;
if(count === 1) {
if (count === 1) {
message = (
MailPoet.I18n.t('oneFormDeleted')
);
} else {
message = (
MailPoet.I18n.t('multipleFormsDeleted')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onRestore: function(response) {
var count = ~~response;
var message = null;
onRestore: (response) => {
const count = ~~response.meta.count;
let message = null;
if(count === 1) {
if (count === 1) {
message = (
MailPoet.I18n.t('oneFormRestored')
);
} else {
message = (
MailPoet.I18n.t('multipleFormsRestored')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
}

View File

@ -53,7 +53,10 @@ function(
}
if(data.action) {
this.props.onBulkAction(selected_ids, data).then(onSuccess);
const promise = this.props.onBulkAction(selected_ids, data);
if (promise !== false) {
promise.then(onSuccess);
};
}
this.setState({

View File

@ -577,7 +577,7 @@ const Listing = React.createClass({
&& this.state.selected_ids.length === 0
&& selected_ids !== 'all'
) {
return;
return false;
}
this.setState({ loading: true });

View File

@ -17,8 +17,8 @@ import {
} from 'newsletters/scheduling/common.jsx'
const messages = {
onTrash(response) {
const count = ~~response;
onTrash: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -28,12 +28,12 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersTrashed')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onDelete(response) {
const count = ~~response;
onDelete: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -43,12 +43,12 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersDeleted')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onRestore(response) {
const count = ~~response;
onRestore: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -58,7 +58,7 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersRestored')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
}
@ -127,16 +127,23 @@ const newsletter_actions = [
return MailPoet.Ajax.post({
endpoint: 'newsletters',
action: 'duplicate',
data: newsletter.id
}).done(function(response) {
if (response !== false && response.subject !== undefined) {
MailPoet.Notice.success(
(MailPoet.I18n.t('newsletterDuplicated')).replace(
'%$1s', response.subject
)
data: {
id: newsletter.id
}
}).done((response) => {
MailPoet.Notice.success(
(MailPoet.I18n.t('newsletterDuplicated')).replace(
'%$1s', response.data.subject
)
);
refresh();
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(function(error) { return error.message; }),
{ scroll: true }
);
}
refresh();
});
}
},

View File

@ -12,8 +12,8 @@ import { QueueMixin, StatisticsMixin } from 'newsletters/listings/mixins.jsx'
const mailpoet_tracking_enabled = (!!(window['mailpoet_tracking_enabled']));
const messages = {
onTrash(response) {
const count = ~~response;
onTrash: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -23,12 +23,12 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersTrashed')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onDelete(response) {
const count = ~~response;
onDelete: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -38,12 +38,12 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersDeleted')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onRestore(response) {
const count = ~~response;
onRestore: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -53,7 +53,7 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersRestored')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
}
@ -122,16 +122,23 @@ const newsletter_actions = [
return MailPoet.Ajax.post({
endpoint: 'newsletters',
action: 'duplicate',
data: newsletter.id
}).done(function(response) {
if (response !== false && response.subject !== undefined) {
MailPoet.Notice.success(
(MailPoet.I18n.t('newsletterDuplicated')).replace(
'%$1s', response.subject
)
data: {
id: newsletter.id
}
}).done((response) => {
MailPoet.Notice.success(
(MailPoet.I18n.t('newsletterDuplicated')).replace(
'%$1s', response.data.subject
)
);
refresh();
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(function(error) { return error.message; }),
{ scroll: true }
);
}
refresh();
});
}
},

View File

@ -15,8 +15,8 @@ const mailpoet_segments = window.mailpoet_segments || {};
const mailpoet_tracking_enabled = (!!(window['mailpoet_tracking_enabled']));
const messages = {
onTrash(response) {
const count = ~~response;
onTrash: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -26,12 +26,12 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersTrashed')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onDelete(response) {
const count = ~~response;
onDelete: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -41,12 +41,12 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersDeleted')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onRestore(response) {
const count = ~~response;
onRestore: (response) => {
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -56,7 +56,7 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleNewslettersRestored')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
}
@ -125,16 +125,23 @@ const newsletter_actions = [
return MailPoet.Ajax.post({
endpoint: 'newsletters',
action: 'duplicate',
data: newsletter.id
}).done(function(response) {
if (response !== false && response.subject !== undefined) {
MailPoet.Notice.success(
(MailPoet.I18n.t('newsletterDuplicated')).replace(
'%$1s', response.subject
)
data: {
id: newsletter.id
}
}).done((response) => {
MailPoet.Notice.success(
(MailPoet.I18n.t('newsletterDuplicated')).replace(
'%$1s', response.data.subject
)
);
refresh();
}).fail((response) => {
if (response.errors.length > 0) {
MailPoet.Notice.error(
response.errors.map(function(error) { return error.message; }),
{ scroll: true }
);
}
refresh();
});
}
},

View File

@ -113,17 +113,16 @@ const WelcomeScheduling = React.createClass({
type: 'welcome',
options: this.state
}
}).done(function(response) {
if (response.result && response.newsletter.id) {
this.showTemplateSelection(response.newsletter.id);
} else {
}).done((response) => {
this.showTemplateSelection(response.data.id);
}).fail((response) => {
if (response.errors.length > 0) {
response.errors.map(function(error) {
MailPoet.Notice.error(error);
});
MailPoet.Notice.error(
response.errors.map(function(error) { return error.message; }),
{ scroll: true }
);
}
}
}.bind(this));
});
},
showTemplateSelection: function(newsletterId) {
this.context.router.push(`/template/${ newsletterId }`);

View File

@ -57,18 +57,17 @@ define(
data: _.extend({}, this.state, {
type: 'welcome',
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}`);

View File

@ -37,7 +37,7 @@ var columns = [
const messages = {
onTrash: (response) => {
let count = ~~response.meta.count;
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -47,12 +47,12 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleSegmentsTrashed')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onDelete: (response) => {
let count = ~~response.meta.count;
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -62,12 +62,12 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleSegmentsDeleted')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onRestore: (response) => {
let count = ~~response.meta.count;
const count = ~~response.meta.count;
let message = null;
if (count === 1) {
@ -77,7 +77,7 @@ const messages = {
} else {
message = (
MailPoet.I18n.t('multipleSegmentsRestored')
).replace('%$1d', count);
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
}

View File

@ -37,59 +37,50 @@ const columns = [
];
const messages = {
onTrash: function(response) {
if (response) {
var message = null;
if (~~response === 1) {
message = (
MailPoet.I18n.t('oneSubscriberTrashed')
);
} else if (~~response > 1) {
message = (
MailPoet.I18n.t('multipleSubscribersTrashed')
).replace('%$1d', (~~response).toLocaleString());
}
onTrash: (response) => {
const count = ~~response.meta.count;
let message = null;
if (message !== null) {
MailPoet.Notice.success(message);
}
if (count === 1) {
message = (
MailPoet.I18n.t('oneSubscriberTrashed')
);
} else {
message = (
MailPoet.I18n.t('multipleSubscribersTrashed')
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onDelete: function(response) {
if (response) {
var message = null;
if (~~response === 1) {
message = (
MailPoet.I18n.t('oneSubscriberDeleted')
);
} else if (~~response > 1) {
message = (
MailPoet.I18n.t('multipleSubscribersDeleted')
).replace('%$1d', ~~response);
}
onDelete: (response) => {
const count = ~~response.meta.count;
let message = null;
if (message !== null) {
MailPoet.Notice.success(message);
}
if (count === 1) {
message = (
MailPoet.I18n.t('oneSubscriberDeleted')
);
} else {
message = (
MailPoet.I18n.t('multipleSubscribersDeleted')
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
},
onRestore: function(response) {
if (response) {
var message = null;
if (~~response === 1) {
message = (
MailPoet.I18n.t('oneSubscriberRestored')
);
} else if (~~response > 1) {
message = (
MailPoet.I18n.t('multipleSubscribersRestored')
).replace('%$1d', (~~response).toLocaleString());
}
onRestore: (response) => {
const count = ~~response.meta.count;
let message = null;
if (message !== null) {
MailPoet.Notice.success(message);
}
if (count === 1) {
message = (
MailPoet.I18n.t('oneSubscriberRestored')
);
} else {
message = (
MailPoet.I18n.t('multipleSubscribersRestored')
).replace('%$1d', count.toLocaleString());
}
MailPoet.Notice.success(message);
}
};
@ -120,8 +111,8 @@ const bulk_actions = [
onSuccess: function(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleSubscribersMovedToList')
.replace('%$1d', (~~(response.subscribers)).toLocaleString())
.replace('%$2s', response.segment)
.replace('%$1d', (~~(response.meta.count)).toLocaleString())
.replace('%$2s', response.meta.segment)
);
}
},
@ -151,8 +142,8 @@ const bulk_actions = [
onSuccess: function(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleSubscribersAddedToList')
.replace('%$1d', (~~response.subscribers).toLocaleString())
.replace('%$2s', response.segment)
.replace('%$1d', (~~response.meta.count).toLocaleString())
.replace('%$2s', response.meta.segment)
);
}
},
@ -182,8 +173,8 @@ const bulk_actions = [
onSuccess: function(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleSubscribersRemovedFromList')
.replace('%$1d', (~~response.subscribers).toLocaleString())
.replace('%$2s', response.segment)
.replace('%$1d', (~~response.meta.count).toLocaleString())
.replace('%$2s', response.meta.segment)
);
}
},
@ -193,7 +184,7 @@ const bulk_actions = [
onSuccess: function(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleSubscribersRemovedFromAllLists')
.replace('%$1d', (~~response).toLocaleString())
.replace('%$1d', (~~response.meta.count).toLocaleString())
);
}
},
@ -203,7 +194,7 @@ const bulk_actions = [
onSuccess: function(response) {
MailPoet.Notice.success(
MailPoet.I18n.t('multipleConfirmationEmailsSent')
.replace('%$1d', (~~response).toLocaleString())
.replace('%$1d', (~~response.meta.count).toLocaleString())
);
}
},

View File

@ -273,8 +273,8 @@ class Forms extends APIEndpoint {
'\MailPoet\Models\Form',
$data
);
$count = $bulk_action->apply();
return $this->successResponse(null, array('count' => $count));
$meta = $bulk_action->apply();
return $this->successResponse(null, $meta);
} catch(\Exception $e) {
return $this->errorResponse(array(
$e->getCode() => $e->getMessage()

View File

@ -97,8 +97,6 @@ class Newsletters extends APIEndpoint {
}
function setStatus($data = array()) {
$id = (isset($data['id'])) ? (int)$data['id'] : false;
$newsletter = Newsletter::findOne($id);
$status = (isset($data['status']) ? $data['status'] : null);
if(!$status) {
@ -107,6 +105,9 @@ class Newsletters extends APIEndpoint {
));
}
$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.')
@ -120,7 +121,7 @@ class Newsletters extends APIEndpoint {
return $this->errorResponse($errors);
} else {
return $this->successResponse(
$newsletter->asArray()
Newsletter::findOne($newsletter->id)->asArray()
);
}
}
@ -340,8 +341,8 @@ class Newsletters extends APIEndpoint {
'\MailPoet\Models\Newsletter',
$data
);
$count = $bulk_action->apply();
return $this->successResponse(null, array('count' => $count));
$meta = $bulk_action->apply();
return $this->successResponse(null, $meta);
} catch(\Exception $e) {
return $this->errorResponse(array(
$e->getCode() => $e->getMessage()

View File

@ -148,8 +148,8 @@ class Segments extends APIEndpoint {
'\MailPoet\Models\Segment',
$data
);
$count = $bulk_action->apply();
return $this->successResponse(null, array('count' => $count));
$meta = $bulk_action->apply();
return $this->successResponse(null, $meta);
} catch(\Exception $e) {
return $this->errorResponse(array(
$e->getCode() => $e->getMessage()

View File

@ -201,8 +201,8 @@ class Subscribers extends APIEndpoint {
'\MailPoet\Models\Subscriber',
$data
);
$count = $bulk_action->apply();
return $this->successResponse(null, array('count' => $count));
$meta = $bulk_action->apply();
return $this->successResponse(null, $meta);
} catch(\Exception $e) {
return $this->errorResponse(array(
$e->getCode() => $e->getMessage()

View File

@ -77,7 +77,7 @@ class Model extends \Sudzy\ValidModel {
static function bulkTrash($orm) {
$model = get_called_class();
return self::bulkAction($orm, function($ids) use($model) {
$count = self::bulkAction($orm, function($ids) use($model) {
self::rawExecute(join(' ', array(
'UPDATE `'.$model::$_table.'`',
'SET `deleted_at` = NOW()',
@ -86,13 +86,17 @@ class Model extends \Sudzy\ValidModel {
$ids
);
});
return array('count' => $count);
}
static function bulkDelete($orm) {
$model = get_called_class();
return self::bulkAction($orm, function($ids) use($model) {
$count = self::bulkAction($orm, function($ids) use($model) {
$model::whereIn('id', $ids)->deleteMany();
});
return array('count' => $count);
}
function restore() {
@ -101,7 +105,7 @@ class Model extends \Sudzy\ValidModel {
static function bulkRestore($orm) {
$model = get_called_class();
return self::bulkAction($orm, function($ids) use($model) {
$count = self::bulkAction($orm, function($ids) use($model) {
self::rawExecute(join(' ', array(
'UPDATE `'.$model::$_table.'`',
'SET `deleted_at` = NULL',
@ -110,6 +114,8 @@ class Model extends \Sudzy\ValidModel {
$ids
);
});
return array('count' => $count);
}
static function bulkAction($orm, $callback = false) {

View File

@ -212,7 +212,7 @@ class Segment extends Model {
}
static function bulkTrash($orm) {
return parent::bulkAction($orm, function($ids) {
$count = parent::bulkAction($orm, function($ids) {
parent::rawExecute(join(' ', array(
'UPDATE `'.self::$_table.'`',
'SET `deleted_at` = NOW()',
@ -220,14 +220,18 @@ class Segment extends Model {
'AND `type` = "default"'
)), $ids);
});
return array('count' => $count);
}
static function bulkDelete($orm) {
return parent::bulkAction($orm, function($ids) {
$count = parent::bulkAction($orm, function($ids) {
// delete segments (only default)
Segment::whereIn('id', $ids)
->where('type', 'default')
->deleteMany();
});
return array('count' => $count);
}
}

View File

@ -538,7 +538,7 @@ class Subscriber extends Model {
if($segment === false) return false;
$subscribers_count = parent::bulkAction($orm,
$count = parent::bulkAction($orm,
function($subscriber_ids) use($segment) {
SubscriberSegment::subscribeManyToSegments(
$subscriber_ids, array($segment->id)
@ -547,7 +547,7 @@ class Subscriber extends Model {
);
return array(
'subscribers' => $subscribers_count,
'count' => $count,
'segment' => $segment->name
);
}
@ -558,7 +558,7 @@ class Subscriber extends Model {
if($segment === false) return false;
$subscribers_count = parent::bulkAction($orm,
$count = parent::bulkAction($orm,
function($subscriber_ids) use($segment) {
SubscriberSegment::deleteManySubscriptions($subscriber_ids);
SubscriberSegment::subscribeManyToSegments(
@ -568,7 +568,7 @@ class Subscriber extends Model {
);
return array(
'subscribers' => $subscribers_count,
'count' => $count,
'segment' => $segment->name
);
}
@ -579,7 +579,7 @@ class Subscriber extends Model {
if($segment === false) return false;
$subscribers_count = $orm->count();
$count = $orm->count();
parent::bulkAction($orm, function($subscriber_ids) use($segment) {
SubscriberSegment::deleteManySubscriptions(
@ -588,19 +588,21 @@ class Subscriber extends Model {
});
return array(
'subscribers' => $subscribers_count,
'count' => $count,
'segment' => $segment->name
);
}
static function bulkRemoveFromAllLists($orm, $data = array()) {
$subscribers_count = $orm->count();
$count = $orm->count();
parent::bulkAction($orm, function($subscriber_ids) {
SubscriberSegment::deleteManySubscriptions($subscriber_ids);
});
return $subscribers_count;
return array(
'count' => $count
);
}
static function bulkSendConfirmationEmail($orm) {
@ -615,13 +617,15 @@ class Subscriber extends Model {
$emails_sent++;
}
}
return $emails_sent;
}
return false;
return array(
'count' => $emails_sent
);
}
static function bulkTrash($orm) {
return parent::bulkAction($orm, function($subscriber_ids) {
$count = parent::bulkAction($orm, function($subscriber_ids) {
self::rawExecute(join(' ', array(
'UPDATE `'.self::$_table.'`',
'SET `deleted_at` = NOW()',
@ -633,10 +637,12 @@ class Subscriber extends Model {
$subscriber_ids
);
});
return array('count' => $count);
}
static function bulkDelete($orm) {
return parent::bulkAction($orm, function($subscriber_ids) {
$count = parent::bulkAction($orm, function($subscriber_ids) {
// delete all subscriber/segment relationships
SubscriberSegment::deleteManySubscriptions($subscriber_ids);
@ -645,6 +651,8 @@ class Subscriber extends Model {
->whereNull('wp_user_id')
->deleteMany();
});
return array('count' => $count);
}
static function subscribed($orm) {