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)=>{