Skip to content

Commit 9cb3a2c

Browse files
authored
Merge pull request #111 from Human-Connection/103-filtering-ordering-bulk-action-support
103 filtering ordering bulk action support
2 parents baea74d + 0da3c30 commit 9cb3a2c

File tree

3 files changed

+74
-8
lines changed

3 files changed

+74
-8
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,6 @@ typings/
6161

6262
# next.js build output
6363
.next
64+
65+
# JetBrains IDEs
66+
.idea/*

core/db.js

+40-5
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,25 @@ exports.getEntries = function(filter, callback){
6666
}
6767

6868
if (filter['profileImage'] === 1) {
69-
sql += (filter['active'] === 1 ? ' AND' : ' WHERE') + ' image != \'\'';
69+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' image != \'\'';
7070
}
7171

72-
let orderByDate = filter['orderByDate'] === 'asc' ? 'ASC' : 'DESC';
72+
if (filter['confirmed'] === 'yes') {
73+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' email_confirmed = 1';
74+
} else if (filter['confirmed'] === 'no') {
75+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' email_confirmed = 0';
76+
}
77+
78+
if (filter['status'] === 'active' && filter['active'] !== 1) {
79+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' status = 1';
80+
} else if (filter['status'] === 'inactive' && filter['active'] !== 1) {
81+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' status = 0';
82+
}
83+
84+
let orderBy = filter['orderBy'] ? filter['orderBy'] : 'id';
85+
let order = filter['order'] ? filter['order'] : 'desc';
7386

74-
sql += ' ORDER BY ID ' + orderByDate + ' LIMIT ? OFFSET ?;';
87+
sql += ' ORDER BY ' + orderBy + ' '+ order + ' LIMIT ? OFFSET ?;';
7588

7689
// make the query
7790
connection.query(sql, [filter['limit'], filter['offset']], function(err, results) {
@@ -159,11 +172,33 @@ exports.deleteEntry = function(id, callback){
159172
});
160173
};
161174

162-
exports.getCount = function(callback){
175+
exports.getCount = function(filter, callback){
176+
console.log(filter);
163177
pool.getConnection(function(err, connection) {
164178
if(err) { console.log(err); callback(true); return; }
165179

166-
let sql = "SELECT count(*) as cnt FROM entries WHERE email_confirmed > 0 AND status < 2 AND country != '';";
180+
// let sql = "SELECT count(*) as cnt FROM entries WHERE email_confirmed > 0 AND status < 2 AND country != '';";
181+
let sql = 'SELECT count(*) as cnt FROM entries';
182+
183+
if (filter['active'] === 1) {
184+
sql += ' WHERE email_confirmed > 0 AND status < 2 AND country != \'\'';
185+
}
186+
187+
if (filter['profileImage'] === 1) {
188+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' image != \'\'';
189+
}
190+
191+
if (filter['confirmed'] === 'yes') {
192+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' email_confirmed = 1';
193+
} else if (filter['confirmed'] === 'no') {
194+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' email_confirmed = 0';
195+
}
196+
197+
if (filter['status'] === 'active' && filter['active'] !== 1) {
198+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' status = 1';
199+
} else if (filter['status'] === 'inactive' && filter['active'] !== 1) {
200+
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' status = 0';
201+
}
167202

168203
// make the query
169204
connection.query(sql, function(err, results) {

core/entryController.js

+31-3
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,34 @@ exports.getAll = function(req, res) {
1111
const ORDER_BY_DATE_ASC = 'asc',
1212
ORDER_BY_DATE_DESC = 'desc';
1313

14+
const orderByAcceptedAttributes = [
15+
'id',
16+
'email',
17+
'firstname',
18+
'lastname',
19+
'country',
20+
'email_confirmed',
21+
'status',
22+
'anon',
23+
'created_at',
24+
'confirmed_at',
25+
];
26+
1427
let filter = {};
1528
filter['limit'] = parseInt(req.query.limit) || 10;
1629
filter['offset'] = parseInt(req.query.offset) || 0;
17-
filter['active'] = parseInt(req.query.isActive) || 1;
18-
filter['orderByDate'] = (req.query.orderByDate === ORDER_BY_DATE_ASC) ? ORDER_BY_DATE_ASC : ORDER_BY_DATE_DESC;
30+
filter['active'] = parseInt(req.query.isActive) === 0 ? 0 : 1;
1931
filter['profileImage'] = parseInt(req.query.profileImage) || 0;
32+
filter['confirmed'] = req.query.confirmed === 'yes' || req.query.confirmed === 'no' ? req.query.confirmed : 'all';
33+
filter['status'] = req.query.status === 'active' || req.query.status === 'inactive' ? req.query.status : 'all';
34+
35+
// 'orderBy' && 'order' are parameters from the WP admin backend for ordering the entries list
36+
if (req.query.orderBy && orderByAcceptedAttributes.includes(req.query.orderBy)) {
37+
if (req.query.order && (req.query.order === 'asc' || req.query.order === 'desc')) {
38+
filter['orderBy'] = req.query.orderBy;
39+
filter['order'] = req.query.order;
40+
}
41+
}
2042

2143
db.getEntries(filter, function(results, err){
2244
if(!err){
@@ -98,7 +120,13 @@ exports.deleteEntry = function(request, response){
98120
};
99121

100122
exports.getCount = function(req, res) {
101-
db.getCount(function(results, err){
123+
let filter = {};
124+
filter['active'] = parseInt(req.query.isActive) === 0 ? 0 : 1;
125+
filter['profileImage'] = parseInt(req.query.profileImage) || 0;
126+
filter['confirmed'] = req.query.confirmed === 'yes' || req.query.confirmed === 'no' ? req.query.confirmed : 'all';
127+
filter['status'] = req.query.status === 'active' || req.query.status === 'inactive' ? req.query.status : 'all';
128+
129+
db.getCount(filter, function(results, err){
102130
if(!err){
103131
// TODO switch to json when clocks have been adjusted to new API
104132
// res.status(200).json({success : true, count : results[0]['cnt']});

0 commit comments

Comments
 (0)