Added links click count stats to campaign view

This commit is contained in:
Andris Reinman 2016-05-05 14:34:54 +03:00
parent 84869dafa7
commit 09de6e4576
5 changed files with 396 additions and 245 deletions

View file

@ -177,29 +177,89 @@ module.exports.get = (id, withSegment, callback) => {
let campaign = tools.convertKeys(rows[0]);
if (!campaign.segment || !withSegment) {
return callback(null, campaign);
} else {
segments.get(campaign.segment, (err, segment) => {
if (err || !segment) {
// ignore
return callback(null, campaign);
}
segments.subscribers(segment.id, true, (err, subscribers) => {
if (err || !subscribers) {
segment.subscribers = 0;
} else {
segment.subscribers = subscribers;
let handleSegment = () => {
if (!campaign.segment || !withSegment) {
return callback(null, campaign);
} else {
segments.get(campaign.segment, (err, segment) => {
if (err || !segment) {
// ignore
return callback(null, campaign);
}
campaign.segment = segment;
return callback(null, campaign);
segments.subscribers(segment.id, true, (err, subscribers) => {
if (err || !subscribers) {
segment.subscribers = 0;
} else {
segment.subscribers = subscribers;
}
campaign.segment = segment;
return callback(null, campaign);
});
});
});
}
};
if (!campaign.parent) {
return handleSegment();
}
db.getConnection((err, connection) => {
if (err) {
return callback(err);
}
connection.query('SELECT `id`, `cid`, `name` FROM campaigns WHERE id=?', [campaign.parent], (err, rows) => {
connection.release();
if (err) {
return callback(err);
}
if (!rows || !rows.length) {
return handleSegment();
}
campaign.parent = tools.convertKeys(rows[0]);
return handleSegment();
});
});
});
});
};
module.exports.getLinks = (id, callback) => {
id = Number(id) || 0;
if (id < 1) {
return callback(new Error('Missing Campaign ID'));
}
db.getConnection((err, connection) => {
if (err) {
return callback(err);
}
let query = 'SELECT `id`, `url`, `clicks` FROM links WHERE `campaign`=? LIMIT 1000';
connection.query(query, [id], (err, rows) => {
connection.release();
if (err) {
return callback(err);
}
if (!rows || !rows.length) {
return callback(null, []);
}
let links = rows.map(
row => tools.convertKeys(row)
).sort((a, b) => (
a.url.replace(/^https?:\/\/(www.)?/, '').toLowerCase()).localeCompare(b.url.replace(/^https?:\/\/(www.)?/, '').toLowerCase()));
return callback(null, links);
});
});
};
module.exports.create = (campaign, opts, callback) => {
campaign = tools.convertKeys(campaign);