Your IP : 216.73.217.80


Current Path : /home/jlgagfroyt/www/AAOLD/administrator/components/com_acymailing/helpers/
Upload File :
Current File : /home/jlgagfroyt/www/AAOLD/administrator/components/com_acymailing/helpers/campaign.php

<?php
/**
 * @package	AcyMailing for Joomla!
 * @version	5.10.15
 * @author	acyba.com
 * @copyright	(C) 2009-2020 ACYBA S.A.R.L. All rights reserved.
 * @license	GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */

defined('_JEXEC') or die('Restricted access');
?><?php

class acycampaignHelper{

	var $campaigndelay = 0;
	var $skipedfollowups = 0;

	function start($subid, $listids){

		$listCampaignClass = acymailing_get('class.listcampaign');
		$campaignids = $listCampaignClass->getAffectedCampaigns($listids);

		if(empty($campaignids)) return true;

		$campaignSubscription = acymailing_get('class.listsub');
		$campaignSubscription->type = 'campaign';
		$subscription = $campaignSubscription->getSubscription($subid);

		$campaignAdded = array();
		$time = time();
		foreach($campaignids as $id => $campaignid){
			if(!empty($subscription[$campaignid]) AND $subscription[$campaignid]->status == 1 AND $subscription[$campaignid]->unsubdate > $time){
				continue;
			}

			$campaignAdded[] = $campaignid;
		}

		if(empty($campaignAdded)) return true;

		$config = acymailing_config();

		$query = 'SELECT a.`listid`, max(b.`senddate`) as maxsenddate FROM '.acymailing_table('listmail').' as a JOIN '.acymailing_table('mail').' as b on a.`mailid` = b.`mailid`';
		$query .= ' WHERE a.`listid` IN ('.implode(',', $campaignAdded).') AND b.`published` = 1 GROUP BY a.listid';
		$maxunsubdate = acymailing_loadObjectList($query);

		if(empty($maxunsubdate)) return true;

		$allDelays = array();
		$currentDay = date('w');
		if($currentDay == 0) $currentDay = 7;
		if(empty($this->campaigndelay)){
			$allDelays = acymailing_loadObjectList('SELECT `startrule` , `listid` FROM #__acymailing_list WHERE `startrule` != "0" AND `startrule` != "'.intval($currentDay).'" AND `listid` IN ('.implode(',', $campaignAdded).')', 'listid');
		}

		$firstDelays = array();
		if(!empty($this->skipedfollowups)){
			foreach($maxunsubdate as $onecampaign){
				$firstDelays[$onecampaign->listid] = intval(acymailing_loadResult('SELECT b.`senddate` FROM '.acymailing_table('listmail').' AS a JOIN '.acymailing_table('mail').' AS b on a.`mailid` = b.`mailid` WHERE a.`listid` = '.intval($onecampaign->listid).' AND b.`published` = 1 ORDER BY b.`senddate` ASC LIMIT '.intval($this->skipedfollowups).',1'));
			}
		}

		$queryInsert = array();
		foreach($maxunsubdate as $onecampaign){
			$allDelays[$onecampaign->listid] = empty($allDelays[$onecampaign->listid]) ? $this->campaigndelay : ((($allDelays[$onecampaign->listid]->startrule - $currentDay + 7) % 7) * 60 * 60 * 24);
			$queryInsert[] = $onecampaign->listid.','.$subid.','.($time + $allDelays[$onecampaign->listid] - intval(@$firstDelays[$onecampaign->listid])).','.($time + $onecampaign->maxsenddate + $allDelays[$onecampaign->listid] - intval(@$firstDelays[$onecampaign->listid])).',1';
		}

		$query = 'REPLACE INTO '.acymailing_table('listsub').' (listid,subid,subdate,unsubdate,status) VALUES ('.implode('),(', $queryInsert).')';
		acymailing_query($query);

		$result = true;
		foreach($maxunsubdate as $onecampaign){

			$querySelect = 'SELECT '.$subid.',a.`mailid`,'.($time + $allDelays[$onecampaign->listid] - intval(@$firstDelays[$onecampaign->listid])).' + b.`senddate`,'.(int)$config->get('priority_followup', 2);
			$querySelect .= ' FROM '.acymailing_table('listmail').' AS a JOIN '.acymailing_table('mail').' AS b on a.`mailid` = b.`mailid`';
			$querySelect .= ' WHERE a.`listid` = '.$onecampaign->listid.' AND b.`published` = 1 ORDER BY b.`senddate` ASC';
			if(!empty($this->skipedfollowups)) $querySelect .= ' LIMIT '.intval($this->skipedfollowups).',10000';
			$query = 'INSERT IGNORE INTO '.acymailing_table('queue').' (`subid`,`mailid`,`senddate`,`priority`) '.$querySelect;

			$res = acymailing_query($query);
			$result = $res !== false && $result;
		}
		return $result;
	}

	private function addQueue($campaignId, &$subids, $followupToAdd){

		if(empty($subids) || empty($followupToAdd)) return;

		$query = 'SELECT sub.subid FROM `#__acymailing_subscriber` AS sub';
		$query .= ' LEFT JOIN `#__acymailing_listsub` AS campaign ON sub.subid=campaign.subid AND campaign.listid='.intval($campaignId);
		$query .= ' WHERE campaign.subid IS NULL AND sub.subid IN ('.implode(',', $subids).')';

		$listSubidOk = acymailing_loadResultArray($query);

		if(empty($listSubidOk)) return;

		$mailToAdd = '';
		$max = 0;
		foreach($listSubidOk as $oneSubId){
			foreach($followupToAdd as $oneFollow){
				$mailToAdd .= '('.intval($oneSubId).','.$oneFollow->mailid.','.$oneFollow->senddate.','.$oneFollow->priority.'),';
				if($oneFollow->senddate > $max) $max = $oneFollow->senddate;
			}
		}

		$query = 'INSERT IGNORE INTO `#__acymailing_listsub` (listid,subid,subdate,status,unsubdate) ';
		$query .= 'SELECT '.intval($campaignId).',subid,'.time().',1,'.$max.' FROM #__acymailing_subscriber WHERE subid IN ('.implode(',', $listSubidOk).')';
		acymailing_query($query);

		$mailToAdd = rtrim($mailToAdd, ',');
		$queryInsert = 'INSERT IGNORE INTO '.acymailing_table('queue').' (`subid`,`mailid`,`senddate`,`priority`) VALUES '.$mailToAdd;
		acymailing_query($queryInsert);
	}

	function autoSubCampaign(&$subids, $campaignId){
		$config = acymailing_config();
		$time = time();

		$querySelect = 'SELECT a.`mailid`,'.$time.' + b.`senddate` AS senddate,'.(int)$config->get('priority_followup', 2).' AS priority';
		$querySelect .= ' FROM '.acymailing_table('listmail').' AS a LEFT JOIN '.acymailing_table('mail').' AS b ON a.`mailid` = b.`mailid`';
		$querySelect .= ' WHERE a.`listid`='.$campaignId.' AND b.`published` = 1';
		$followupToAdd = acymailing_loadObjectList($querySelect);

		if(empty($followupToAdd)) return true;

		$users = array();
		foreach($subids as $subid){
			$users[] = $subid;
			if(count($users) == 50){
				$this->addQueue($campaignId, $users, $followupToAdd);
				$users = array();
			}
		}

		$this->addQueue($campaignId, $users, $followupToAdd);

		return true;
	}

	function stop($subid, $listids){
		$listCampaignClass = acymailing_get('class.listcampaign');
		$campaignids = $listCampaignClass->getAffectedCampaigns($listids);

		if(empty($campaignids)) return true;

		$selectquery = 'SELECT `mailid` FROM '.acymailing_table('listmail').' WHERE `listid` IN ('.implode(',', $campaignids).')';
		$query = 'DELETE FROM '.acymailing_table('queue').' WHERE `subid` = '.$subid.' AND `mailid` IN ('.$selectquery.')';

		acymailing_query($query);

		$time = time();
		return acymailing_query('UPDATE '.acymailing_table('listsub').' SET `unsubdate` = '.$time.', `status` = -1 WHERE `subid` = '.$subid.'. AND `listid` IN ('.implode(',', $campaignids).')');
	}

	function updateUnsubdate($campaignid, $newdelay){
		$campaignid = intval($campaignid);
		$newdelay = intval($newdelay);

		$query = 'UPDATE `#__acymailing_listsub` SET `unsubdate` = `subdate` + '.$newdelay.' WHERE listid = '.$campaignid.' AND `subdate` + '.$newdelay.' > `unsubdate` AND `status` = 1 AND `subdate` > '.(time() - $newdelay);
		acymailing_query($query);
	}

	function unsubCampaign(&$subids, $campaignId){
		acymailing_arrayToInteger($subids);

		acymailing_query('DELETE q.* FROM #__acymailing_queue AS q JOIN #__acymailing_listmail AS lm ON q.mailid = lm.mailid AND lm.listid = '.intval($campaignId).' WHERE q.subid IN ('.implode(',', $subids).')');
		acymailing_query('UPDATE #__acymailing_listsub SET status = -1, unsubdate = '.time().' WHERE subid IN ('.implode(',', $subids).') AND listid = '.intval($campaignId));
	}
}//endclass