letquery='SELECT '+tableFields.join(', ')+' FROM `triggers` LEFT JOIN `campaigns` `source` ON `source`.`id`=`triggers`.`source_campaign` LEFT JOIN `campaigns` `dest` ON `dest`.`id`=`triggers`.`dest_campaign` LEFT JOIN `lists` ON `lists`.`id`=`triggers`.`list` LEFT JOIN `custom_fields` ON `custom_fields`.`list` = `triggers`.`list` AND `custom_fields`.`column`=`triggers`.`column` ORDER BY `triggers`.`name`';
row.formatted=util.format('%s days after %s',days,row.rule==='subscription'?row.columnName:(util.format('%s <a href="/campaigns/view/%s">%s</a>',defaultEventMap[row.column],row.sourceCampaign,row.sourceCampaignName)));
letintervalQuery=(column,seconds,treshold)=>column+' <= NOW() - INTERVAL '+seconds+' SECOND AND '+column+' >= NOW() - INTERVAL '+(treshold+seconds)+' SECOND';
letquery=false;
switch(trigger.rule){
case'subscription':
query='SELECT id FROM `subscription__'+trigger.list+'` subscription WHERE '+intervalQuery('`'+trigger.column+'`',trigger.seconds,treshold)+' AND id NOT IN (SELECT subscription FROM `trigger__'+id+'` triggertable WHERE triggertable.`list` = '+trigger.list+' AND triggertable.`subscription` = subscription.`id`) LIMIT '+limit;
break;
case'campaign':
switch(trigger.column){
case'delivered':
query='SELECT subscription.id AS id FROM `subscription__'+trigger.list+'` subscription LEFT JOIN `campaign__'+trigger.sourceCampaign+'` campaign ON campaign.list='+trigger.list+' AND subscription.id=campaign.subscription WHERE campaign.status=1 AND '+intervalQuery('`campaign`.`created`',trigger.seconds,treshold)+' AND subscription.id NOT IN (SELECT subscription FROM `trigger__'+id+'` triggertable WHERE triggertable.`list` = '+trigger.list+' AND triggertable.`subscription` = subscription.`id`) LIMIT '+limit;
break;
case'not_clicked':
query='SELECT subscription.id AS id FROM `subscription__'+trigger.list+'` subscription LEFT JOIN `campaign__'+trigger.sourceCampaign+'` campaign ON campaign.list='+trigger.list+' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__'+trigger.sourceCampaign+'` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=0 WHERE campaign.status=1 AND '+intervalQuery('`campaign`.`created`',trigger.seconds,treshold)+' AND tracker.created IS NULL AND subscription.id NOT IN (SELECT subscription FROM `trigger__'+id+'` triggertable WHERE triggertable.`list` = '+trigger.list+' AND triggertable.`subscription` = subscription.`id`) LIMIT '+limit;
break;
case'not_opened':
query='SELECT subscription.id AS id FROM `subscription__'+trigger.list+'` subscription LEFT JOIN `campaign__'+trigger.sourceCampaign+'` campaign ON campaign.list='+trigger.list+' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__'+trigger.sourceCampaign+'` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=-1 WHERE campaign.status=1 AND '+intervalQuery('`campaign`.`created`',trigger.seconds,treshold)+' AND tracker.created IS NULL AND subscription.id NOT IN (SELECT subscription FROM `trigger__'+id+'` triggertable WHERE triggertable.`list` = '+trigger.list+' AND triggertable.`subscription` = subscription.`id`) LIMIT '+limit;
break;
case'clicked':
query='SELECT subscription.id AS id FROM `subscription__'+trigger.list+'` subscription LEFT JOIN `campaign__'+trigger.sourceCampaign+'` campaign ON campaign.list='+trigger.list+' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__'+trigger.sourceCampaign+'` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=0 WHERE campaign.status=1 AND '+intervalQuery('`tracker`.`created`',trigger.seconds,treshold)+' AND subscription.id NOT IN (SELECT subscription FROM `trigger__'+id+'` triggertable WHERE triggertable.`list` = '+trigger.list+' AND triggertable.`subscription` = subscription.`id`) LIMIT '+limit;
break;
case'opened':
query='SELECT subscription.id AS id FROM `subscription__'+trigger.list+'` subscription LEFT JOIN `campaign__'+trigger.sourceCampaign+'` campaign ON campaign.list='+trigger.list+' AND subscription.id=campaign.subscription LEFT JOIN `campaign_tracker__'+trigger.sourceCampaign+'` tracker ON tracker.list=campaign.list AND tracker.subscriber=subscription.id AND tracker.link=-1 WHERE campaign.status=1 AND '+intervalQuery('`tracker`.`created`',trigger.seconds,treshold)+' AND subscription.id NOT IN (SELECT subscription FROM `trigger__'+id+'` triggertable WHERE triggertable.`list` = '+trigger.list+' AND triggertable.`subscription` = subscription.`id`) LIMIT '+limit;
break;
}
break;
}
callback(null,query);
});
};
module.exports.get=(id,callback)=>{
id=Number(id)||0;
if(id<1){
returncallback(newError('Missing Trigger ID'));
}
db.getConnection((err,connection)=>{
if(err){
returncallback(err);
}
connection.query('SELECT * FROM triggers WHERE id=?',[id],(err,rows)=>{
letquery='SELECT COUNT(`subscription__'+trigger.list+'`.`id`) AS total FROM `subscription__'+trigger.list+'` JOIN `trigger__'+trigger.id+'` ON `trigger__'+trigger.id+'`.`list`=? AND `trigger__'+trigger.id+'`.`subscription`=`subscription__'+trigger.list+'`.`id`';
query='SELECT SQL_CALC_FOUND_ROWS * FROM `subscription__'+trigger.list+'` JOIN `trigger__'+trigger.id+'` ON `trigger__'+trigger.id+'`.`list`=? AND `trigger__'+trigger.id+'`.`subscription`=`subscription__'+trigger.list+'`.`id AND (email LIKE ? OR first_name LIKE ? OR last_name LIKE ?) ORDER BY '+ordering.join(', ')+' LIMIT ? OFFSET ?';
query='SELECT SQL_CALC_FOUND_ROWS * FROM `subscription__'+trigger.list+'` JOIN `trigger__'+trigger.id+'` ON `trigger__'+trigger.id+'`.`list`=? AND `trigger__'+trigger.id+'`.`subscription`=`subscription__'+trigger.list+'`.`id` ORDER BY '+ordering.join(', ')+' LIMIT ? OFFSET ?';
args=values.concat(args);
}
connection.query(query,args,(err,rows)=>{
if(err){
connection.release();
returncallback(err);
}
connection.query('SELECT FOUND_ROWS() AS total',(err,filteredTotal)=>{