Success messages on bulk actions

- added message for all bulk actions except trash related ones
- fixed issue with mailpoet notice and react router
This commit is contained in:
Jonathan Labreuille
2015-10-21 19:14:51 +02:00
parent dcb094fcd1
commit 50e888913c
6 changed files with 117 additions and 17 deletions

View File

@ -45,6 +45,10 @@ function(
data.action = this.state.action;
if(action['onSuccess'] !== undefined) {
data.onSuccess = action.onSuccess;
}
if(data.action) {
this.props.onBulkAction(selected_ids, data);
}

View File

@ -340,6 +340,11 @@ define(
this.setState({ loading: true });
var data = params || {};
var callback = ((data['onSuccess'] !== undefined)
? data['onSuccess']
: function() {}
);
delete data.onSuccess;
data.listing = {
offset: 0,
@ -354,8 +359,9 @@ define(
endpoint: this.props.endpoint,
action: 'bulk_action',
data: data
}).done(function() {
}).done(function(response) {
this.getItems();
callback(response);
}.bind(this));
},
handleSearch: function(search) {

View File

@ -121,6 +121,22 @@ define('notice', ['mailpoet', 'jquery'], function(MailPoet, jQuery) {
// set message
this.setMessage(this.options.message);
// position notice
this.element.insertAfter(jQuery('h2.title'));
// set class name
switch(this.options.type) {
case 'success':
this.element.addClass('updated');
break;
case 'system':
this.element.addClass('update-nag');
break;
case 'error':
this.element.addClass('error');
break;
}
// make the notice appear
this.element.fadeIn(200);

View File

@ -77,6 +77,13 @@ define(
return {
segment_id: ~~(jQuery('#move_to_segment').val())
}
},
onSuccess: function(response) {
MailPoet.Notice.success(
'%$1d subscribers were moved to list <strong>%$2s</strong>.'
.replace('%$1d', ~~response.subscribers)
.replace('%$2s', response.segment)
);
}
},
{
@ -96,6 +103,13 @@ define(
return {
segment_id: ~~(jQuery('#add_to_segment').val())
}
},
onSuccess: function(response) {
MailPoet.Notice.success(
'%$1d subscribers were added to list <strong>%$2s</strong>.'
.replace('%$1d', ~~response.subscribers)
.replace('%$2s', response.segment)
);
}
},
{
@ -115,19 +129,45 @@ define(
return {
segment_id: ~~(jQuery('#remove_from_segment').val())
}
},
onSuccess: function(response) {
MailPoet.Notice.success(
'%$1d subscribers were removed from list <strong>%$2s</strong>.'
.replace('%$1d', ~~response.subscribers)
.replace('%$2s', response.segment)
);
}
},
{
name: 'removeFromAllLists',
label: 'Remove from all lists'
label: 'Remove from all lists',
onSuccess: function(response) {
MailPoet.Notice.success(
'%$1d subscribers were removed from all lists.'
.replace('%$1d', ~~response.subscribers)
.replace('%$2s', response.segment)
);
}
},
{
name: 'confirmUnconfirmed',
label: 'Confirm unconfirmed'
label: 'Confirm unconfirmed',
onSuccess: function(response) {
MailPoet.Notice.success(
'%$1d subscribers have been confirmed.'
.replace('%$1d', ~~response.subscribers)
);
}
},
{
name: 'trash',
label: 'Trash'
label: 'Trash',
onSuccess: function(response) {
MailPoet.Notice.success(
'%$1d subscribers were moved to the trash.'
.replace('%$1d', ~~response.subscribers)
);
}
}
];

View File

@ -199,6 +199,7 @@ class Subscriber extends Model {
$segment = Segment::findOne($segment_id);
if($segment !== false) {
$subscribers_count = 0;
$subscribers = $listing->getSelection()->findMany();
foreach($subscribers as $subscriber) {
// remove subscriber from all segments
@ -209,8 +210,13 @@ class Subscriber extends Model {
$association->subscriber_id = $subscriber->id;
$association->segment_id = $segment->id;
$association->save();
$subscribers_count++;
}
return true;
return array(
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
return false;
}
@ -225,7 +231,11 @@ class Subscriber extends Model {
SubscriberSegment::whereIn('subscriber_id', $subscriber_ids)
->where('segment_id', $segment->id)
->deleteMany();
return true;
return array(
'subscribers' => count($subscriber_ids),
'segment' => $segment->name
);
}
return false;
}
@ -242,7 +252,10 @@ class Subscriber extends Model {
SubscriberSegment::whereIn('subscriber_id', $subscriber_ids)
->whereIn('segment_id', $segment_ids)
->deleteMany();
return true;
return array(
'subscribers' => count($subscriber_ids)
);
}
return false;
}
@ -254,11 +267,17 @@ class Subscriber extends Model {
->findMany();
if(!empty($subscribers)) {
$subscribers_count = 0;
foreach($subscribers as $subscriber) {
$subscriber->set('status', 'subscribed');
$subscriber->save();
if($subscriber->save() === true) {
$subscribers_count++;
}
return true;
}
return array(
'subscribers' => $subscribers_count
);
}
return false;
}
@ -283,15 +302,21 @@ class Subscriber extends Model {
$segment = Segment::findOne($segment_id);
if($segment !== false) {
$subscribers_count = 0;
$subscribers = $listing->getSelection()->findMany();
foreach($subscribers as $subscriber) {
// create relation with segment
$association = \MailPoet\Models\SubscriberSegment::create();
$association->subscriber_id = $subscriber->id;
$association->segment_id = $segment->id;
$association->save();
if($association->save()) {
$subscribers_count++;
}
return true;
}
return array(
'subscribers' => $subscribers_count,
'segment' => $segment->name
);
}
return false;
}
@ -302,10 +327,15 @@ class Subscriber extends Model {
$subscribers = $listing->getSelection()->findMany();
if(!empty($subscribers)) {
$subscribers_count = 0;
foreach($subscribers as $subscriber) {
$subscriber->delete();
if($subscriber->delete()) {
$subscribers_count++;
}
return true;
}
return array(
'subscribers' => $subscribers_count
);
}
return false;
} else {
@ -313,7 +343,11 @@ class Subscriber extends Model {
$subscribers = $listing->getSelection()->findResultSet();
if(!empty($subscribers)) {
$subscribers->set_expr('deleted_at', 'NOW()');
return $subscribers->save();
$subscribers->save();
return array(
'subscribers' => $subscribers->count()
);
}
return false;
}

View File

@ -1,10 +1,10 @@
<!-- system notices -->
<div id="mailpoet_notice_system" class="mailpoet_notice update-nag" style="display:none;"></div>
<div id="mailpoet_notice_system" class="mailpoet_notice" style="display:none;"></div>
<!-- main container -->
<div class="wrap">
<!-- notices -->
<div id="mailpoet_notice_error" class="mailpoet_notice error" style="display:none;"></div>
<div id="mailpoet_notice_success" class="mailpoet_notice updated" style="display:none;"></div>
<div id="mailpoet_notice_error" class="mailpoet_notice" style="display:none;"></div>
<div id="mailpoet_notice_success" class="mailpoet_notice" style="display:none;"></div>
<!-- title block -->
<% block title %><% endblock %>