added last bulk actions messages

This commit is contained in:
Jonathan Labreuille
2015-10-22 15:26:31 +02:00
parent 50e888913c
commit 5e5008472c
7 changed files with 130 additions and 39 deletions

View File

@@ -308,7 +308,13 @@ define(
endpoint: this.props.endpoint, endpoint: this.props.endpoint,
action: 'restore', action: 'restore',
data: id data: id
}).done(function() { }).done(function(response) {
if(
this.props.messages !== undefined
&& this.props.messages['onRestore'] !== undefined
) {
this.props.messages.onRestore(response);
}
this.getItems(); this.getItems();
}.bind(this)); }.bind(this));
}, },
@@ -325,7 +331,23 @@ define(
id: id, id: id,
confirm: confirm confirm: confirm
} }
}).done(function() { }).done(function(response) {
if(confirm === true) {
if(
this.props.messages !== undefined
&& this.props.messages['onConfirmDelete'] !== undefined
) {
this.props.messages.onConfirmDelete(response);
}
} else {
if(
this.props.messages !== undefined
&& this.props.messages['onDelete'] !== undefined
) {
this.props.messages.onDelete(response);
}
}
this.getItems(); this.getItems();
}.bind(this)); }.bind(this));
}, },
@@ -485,11 +507,13 @@ define(
bulk_actions = [ bulk_actions = [
{ {
name: 'restore', name: 'restore',
label: 'Restore' label: 'Restore',
onSuccess: this.props.messages.onRestore
}, },
{ {
name: 'trash', name: 'trash',
label: 'Delete permanently', label: 'Delete permanently',
onSuccess: this.props.messages.onConfirmDelete,
getData: function() { getData: function() {
return { confirm: true }; return { confirm: true };
} }

View File

@@ -59,6 +59,63 @@ define(
}, },
]; ];
var messages = {
onDelete: function(response) {
var count = ~~response.subscribers;
var message = null;
if(count === 1) {
message = (
'1 subscriber was moved to the trash.'
).replace('%$1d', count);
} else if(count > 1) {
message = (
'%$1d subscribers were moved to the trash.'
).replace('%$1d', count);
}
if(message !== null) {
MailPoet.Notice.success(message);
}
},
onConfirmDelete: function(response) {
var count = ~~response.subscribers;
var message = null;
if(count === 1) {
message = (
'1 subscriber was permanently deleted.'
).replace('%$1d', count);
} else if(count > 1) {
message = (
'%$1d subscribers were permanently deleted.'
).replace('%$1d', count);
}
if(message !== null) {
MailPoet.Notice.success(message);
}
},
onRestore: function(response) {
var count = ~~response.subscribers;
var message = null;
if(count === 1) {
message = (
'1 subscriber has been restored from the trash.'
).replace('%$1d', count);
} else if(count > 1) {
message = (
'%$1d subscribers have been restored from the trash.'
).replace('%$1d', count);
}
if(message !== null) {
MailPoet.Notice.success(message);
}
}
};
var bulk_actions = [ var bulk_actions = [
{ {
name: 'moveToList', name: 'moveToList',
@@ -162,12 +219,12 @@ define(
{ {
name: 'trash', name: 'trash',
label: 'Trash', label: 'Trash',
onSuccess: function(response) { getData: function() {
MailPoet.Notice.success( return {
'%$1d subscribers were moved to the trash.' confirm: false
.replace('%$1d', ~~response.subscribers) }
); },
} onSuccess: messages.onDelete
} }
]; ];
@@ -201,8 +258,6 @@ define(
return segment.name; return segment.name;
}).join(', '); }).join(', ');
var row_actions = false; var row_actions = false;
return ( return (
@@ -245,7 +300,9 @@ define(
endpoint="subscribers" endpoint="subscribers"
onRenderItem={ this.renderItem } onRenderItem={ this.renderItem }
columns={ columns } columns={ columns }
bulk_actions={ bulk_actions } /> bulk_actions={ bulk_actions }
messages={ messages }
/>
</div> </div>
); );
} }

View File

@@ -71,10 +71,17 @@ class Handler {
return $this->model; return $this->model;
} }
function count() {
return (int)$this->model->count();
}
function getSelectionIds() { function getSelectionIds() {
$models = $this->getSelection()->select('id')->findMany(); $models = $this->getSelection()
->select('id')
->findArray();
return array_map(function($model) { return array_map(function($model) {
return (int)$model->id; return (int)$model['id'];
}, $models); }, $models);
} }

View File

@@ -322,9 +322,10 @@ class Subscriber extends Model {
} }
static function trash($listing, $data = array()) { static function trash($listing, $data = array()) {
if(isset($data['confirm']) && (bool)$data['confirm'] === true) { $confirm_delete = filter_var($data['confirm'], FILTER_VALIDATE_BOOLEAN);
if($confirm_delete) {
// delete relations with all segments // delete relations with all segments
$subscribers = $listing->getSelection()->findMany(); $subscribers = $listing->getSelection()->findResultSet();
if(!empty($subscribers)) { if(!empty($subscribers)) {
$subscribers_count = 0; $subscribers_count = 0;
@@ -340,25 +341,25 @@ class Subscriber extends Model {
return false; return false;
} else { } else {
// soft delete // soft delete
$subscribers = $listing->getSelection()->findResultSet(); $subscribers = $listing->getSelection()
if(!empty($subscribers)) { ->findResultSet()
$subscribers->set_expr('deleted_at', 'NOW()'); ->set_expr('deleted_at', 'NOW()')
$subscribers->save(); ->save();
return array( return array(
'subscribers' => $subscribers->count() 'subscribers' => $subscribers->count()
); );
}
return false;
} }
} }
static function restore($listing, $data = array()) { static function restore($listing, $data = array()) {
$subscribers = $listing->getSelection()->findResultSet(); $subscribers = $listing->getSelection()
if(!empty($subscribers)) { ->findResultSet()
$subscribers->set_expr('deleted_at', 'NULL'); ->set_expr('deleted_at', 'NULL')
return $subscribers->save(); ->save();
}
return false; return array(
'subscribers' => $subscribers->count()
);
} }
} }

View File

@@ -57,7 +57,7 @@ class Subscribers {
$subscriber = Subscriber::findOne($id); $subscriber = Subscriber::findOne($id);
if($subscriber !== false) { if($subscriber !== false) {
$subscriber->set_expr('deleted_at', 'NULL'); $subscriber->set_expr('deleted_at', 'NULL');
$result = $subscriber->save(); $result = array('subscribers' => (int)$subscriber->save());
} else { } else {
$result = false; $result = false;
} }
@@ -66,12 +66,14 @@ class Subscribers {
function delete($data = array()) { function delete($data = array()) {
$subscriber = Subscriber::findOne($data['id']); $subscriber = Subscriber::findOne($data['id']);
$confirm_delete = filter_var($data['confirm'], FILTER_VALIDATE_BOOLEAN);
if($subscriber !== false) { if($subscriber !== false) {
if(isset($data['confirm']) && (bool)$data['confirm'] === true) { if($confirm_delete) {
$result = $subscriber->delete(); $subscriber->delete();
$result = array('subscribers' => 1);
} else { } else {
$subscriber->set_expr('deleted_at', 'NOW()'); $subscriber->set_expr('deleted_at', 'NOW()');
$result = $subscriber->save(); $result = array('subscribers' => (int)$subscriber->save());
} }
} else { } else {
$result = false; $result = false;

View File

@@ -9,7 +9,7 @@ class ListingCest {
function itShouldReturnListingData() { function itShouldReturnListingData() {
$listing = new Listing\Handler( $listing = new Listing\Handler(
\Model::factory('\MailPoet\Models\Subscriber'), '\MailPoet\Models\Subscriber',
array() array()
); );
@@ -27,7 +27,7 @@ class ListingCest {
$I->generateSubscribers(30, array('status' => 'subscribed')); $I->generateSubscribers(30, array('status' => 'subscribed'));
$listing = new Listing\Handler( $listing = new Listing\Handler(
\Model::factory('\MailPoet\Models\Subscriber'), '\MailPoet\Models\Subscriber',
array('group' => 'subscribed') array('group' => 'subscribed')
); );
$result = $listing->get(); $result = $listing->get();
@@ -42,7 +42,7 @@ class ListingCest {
)); ));
$listing = new Listing\Handler( $listing = new Listing\Handler(
\Model::factory('\MailPoet\Models\Subscriber'), '\MailPoet\Models\Subscriber',
array( array(
'search' => 'j.d' 'search' => 'j.d'
) )