Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,6 @@ typings/

# next.js build output
.next

# JetBrains IDEs
.idea/*
45 changes: 40 additions & 5 deletions core/db.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,25 @@ exports.getEntries = function(filter, callback){
}

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

let orderByDate = filter['orderByDate'] === 'asc' ? 'ASC' : 'DESC';
if (filter['confirmed'] === 'yes') {
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' email_confirmed = 1';
} else if (filter['confirmed'] === 'no') {
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' email_confirmed = 0';
}

if (filter['status'] === 'active' && filter['active'] !== 1) {
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' status = 1';
} else if (filter['status'] === 'inactive' && filter['active'] !== 1) {
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' status = 0';
}

let orderBy = filter['orderBy'] ? filter['orderBy'] : 'id';
let order = filter['order'] ? filter['order'] : 'desc';

sql += ' ORDER BY ID ' + orderByDate + ' LIMIT ? OFFSET ?;';
sql += ' ORDER BY ' + orderBy + ' '+ order + ' LIMIT ? OFFSET ?;';

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

exports.getCount = function(callback){
exports.getCount = function(filter, callback){
console.log(filter);
pool.getConnection(function(err, connection) {
if(err) { console.log(err); callback(true); return; }

let sql = "SELECT count(*) as cnt FROM entries WHERE email_confirmed > 0 AND status < 2 AND country != '';";
// let sql = "SELECT count(*) as cnt FROM entries WHERE email_confirmed > 0 AND status < 2 AND country != '';";
let sql = 'SELECT count(*) as cnt FROM entries';

if (filter['active'] === 1) {
sql += ' WHERE email_confirmed > 0 AND status < 2 AND country != \'\'';
}

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

if (filter['confirmed'] === 'yes') {
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' email_confirmed = 1';
} else if (filter['confirmed'] === 'no') {
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' email_confirmed = 0';
}

if (filter['status'] === 'active' && filter['active'] !== 1) {
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' status = 1';
} else if (filter['status'] === 'inactive' && filter['active'] !== 1) {
sql += (sql.includes('WHERE') ? ' AND' : ' WHERE') + ' status = 0';
}

// make the query
connection.query(sql, function(err, results) {
Expand Down
34 changes: 31 additions & 3 deletions core/entryController.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,34 @@ exports.getAll = function(req, res) {
const ORDER_BY_DATE_ASC = 'asc',
ORDER_BY_DATE_DESC = 'desc';

const orderByAcceptedAttributes = [
'id',
'email',
'firstname',
'lastname',
'country',
'email_confirmed',
'status',
'anon',
'created_at',
'confirmed_at',
];

let filter = {};
filter['limit'] = parseInt(req.query.limit) || 10;
filter['offset'] = parseInt(req.query.offset) || 0;
filter['active'] = parseInt(req.query.isActive) || 1;
filter['orderByDate'] = (req.query.orderByDate === ORDER_BY_DATE_ASC) ? ORDER_BY_DATE_ASC : ORDER_BY_DATE_DESC;
filter['active'] = parseInt(req.query.isActive) === 0 ? 0 : 1;
filter['profileImage'] = parseInt(req.query.profileImage) || 0;
filter['confirmed'] = req.query.confirmed === 'yes' || req.query.confirmed === 'no' ? req.query.confirmed : 'all';
filter['status'] = req.query.status === 'active' || req.query.status === 'inactive' ? req.query.status : 'all';

// 'orderBy' && 'order' are parameters from the WP admin backend for ordering the entries list
if (req.query.orderBy && orderByAcceptedAttributes.includes(req.query.orderBy)) {
if (req.query.order && (req.query.order === 'asc' || req.query.order === 'desc')) {
filter['orderBy'] = req.query.orderBy;
filter['order'] = req.query.order;
}
}

db.getEntries(filter, function(results, err){
if(!err){
Expand Down Expand Up @@ -98,7 +120,13 @@ exports.deleteEntry = function(request, response){
};

exports.getCount = function(req, res) {
db.getCount(function(results, err){
let filter = {};
filter['active'] = parseInt(req.query.isActive) === 0 ? 0 : 1;
filter['profileImage'] = parseInt(req.query.profileImage) || 0;
filter['confirmed'] = req.query.confirmed === 'yes' || req.query.confirmed === 'no' ? req.query.confirmed : 'all';
filter['status'] = req.query.status === 'active' || req.query.status === 'inactive' ? req.query.status : 'all';

db.getCount(filter, function(results, err){
if(!err){
// TODO switch to json when clocks have been adjusted to new API
// res.status(200).json({success : true, count : results[0]['cnt']});
Expand Down