Your IP : 216.73.217.80


Current Path : /home/jlgagfroyt/www/AAOLD/tmp/install_5a7a035c40e28/back/helpers/
Upload File :
Current File : /home/jlgagfroyt/www/AAOLD/tmp/install_5a7a035c40e28/back/helpers/autonews.php

<?php
/**
 * @package	AcyMailing for Joomla!
 * @version	5.9.1
 * @author	acyba.com
 * @copyright	(C) 2009-2018 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 acyautonewsHelper{

	var $messages = array();
	var $mailClass = null;
	var $dispatcher = null;
	var $time;

	function generate($toGenerate = array()){
		$this->time = time();
		$query = 'SELECT `mailid` FROM '.acymailing_table('mail').' WHERE `type` = \'autonews\' AND `published`= 1 AND `senddate` < '.$this->time;
		
		if(!empty($toGenerate)){
			acymailing_arrayToInteger($toGenerate);
			$query .= ' AND mailid IN ('.implode(',', $toGenerate).')';
		}

		$autonews = acymailing_loadResultArray($query);

		if(empty($autonews)) return false;

		$this->mailClass = acymailing_get('class.mail');

		acymailing_importPlugin('acymailing');

		foreach($autonews as $mailid){
			$oneAutonews = $this->mailClass->get($mailid);

			if(empty($oneAutonews->params['lastgenerateddate'])){
				if(is_numeric($oneAutonews->frequency)){
					$oneAutonews->params['lastgenerateddate'] = $this->time - $oneAutonews->frequency;
				}else{
					$hourMin = empty($oneAutonews->senddate) ? '' : date(' H:i', $oneAutonews->senddate);

					if(strpos($oneAutonews->frequency, 'on_') !== false){
						$values = explode('_', ltrim($oneAutonews->frequency, 'on_'));
						$currentDayKey = array_search(date('l'), $values);
						if($currentDayKey === false) $currentDayKey = 0;

						if(isset($values[$currentDayKey-1])){
							$oneAutonews->params['lastgenerateddate'] = strtotime('previous '.$values[$currentDayKey-1].$hourMin);
						}else{
							$oneAutonews->params['lastgenerateddate'] = strtotime('previous '.end($values).$hourMin);
						}
					}else{
						$detailDay = explode('_', $oneAutonews->frequency);
						$dateTmp = strtotime($detailDay[0].' '.$detailDay[1].' of '.date('F Y').$hourMin);
						if(time() < $dateTmp){
							$newMonthYear = date('F Y', mktime(date("H", $dateTmp), date("i", $dateTmp), date("s", $dateTmp), date("n", $dateTmp) - 1, date("j", $dateTmp), date("Y", $dateTmp)));
							$dateTmp = strtotime($detailDay[0].' '.$detailDay[1].' of '.$newMonthYear.$hourMin);
						}
						$oneAutonews->params['lastgenerateddate'] = $dateTmp;
					}
				}
			}
			if(!$this->_generatingStatus($oneAutonews)) continue;
			$this->_generateAutoNews($oneAutonews);
		}

		return true;
	}


	private function _generateAutoNews($newNewsletter){

		$newNewsletter->senddate = $this->time;
		$newNewsletter->type = 'news';
		if(!empty($newNewsletter->params['generate'])){
			$newNewsletter->published = 2;
		}else $newNewsletter->published = 0;

		$notifyUsers = $newNewsletter->params['generateto'];

		$mailidModel = $newNewsletter->mailid;
		unset($newNewsletter->mailid);
		unset($newNewsletter->username);
		unset($newNewsletter->name);
		unset($newNewsletter->email);

		$newNewsletter->key = acymailing_generateKey(8);

		$issueNb = $newNewsletter->params['issuenb'];
		$newNewsletter->body = str_replace('{issuenb}', $issueNb, $newNewsletter->body);
		$newNewsletter->altbody = str_replace('{issuenb}', $issueNb, $newNewsletter->altbody);
		$newNewsletter->subject = str_replace('{issuenb}', $issueNb, $newNewsletter->subject);

		unset($newNewsletter->template);
		$newNewsletter->mailid = $this->mailClass->save($newNewsletter);

		if(!empty($newNewsletter->tempid)){
			if(!isset($this->templateClass)) $this->templateClass = acymailing_get('class.template');
			$newNewsletter->template = $this->templateClass->get($newNewsletter->tempid);
		}

		$mailer = acymailing_get('helper.mailer');
		$mailer->triggerTagsWithRightLanguage($newNewsletter, false);

		unset($newNewsletter->template);
		unset($newNewsletter->attach);
		$this->mailClass->save($newNewsletter);

		$query = 'INSERT IGNORE INTO '.acymailing_table('listmail').' (mailid,listid) SELECT '.$newNewsletter->mailid.', b.`listid` FROM '.acymailing_table('listmail').' as b';
		$query .= ' WHERE b.mailid = '.$mailidModel;

		$res = acymailing_query($query);
		if($res === false){
			$this->messages[] = 'Could not assign the Newsletter to your lists : '.acymailing_getDBError();
		}

		acymailing_query('INSERT IGNORE INTO '.acymailing_table('tagmail').' (`tagid`,`mailid`) SELECT `tagid`,'.$newNewsletter->mailid.' FROM '.acymailing_table('tagmail').' WHERE `mailid` = '.intval($mailidModel));

		$this->messages[] = acymailing_translation_sprintf('NEWSLETTER_GENERATED', $newNewsletter->mailid, '<b><i>'.$newNewsletter->subject.'</i></b>');

		if(!empty($notifyUsers)){
			$mailer->report = acymailing_isAdmin();
			$mailer->autoAddUser = true;
			$mailer->checkConfirmField = false;
			$mailer->checkEnabled = false;
			$mailer->checkPublished = false;
			$mailer->checkAccept = false;
			$mailer->loadedToSend = true;
			$mailer->addParam('issuenb', $issueNb);
			$intro = acymailing_translation('AUTONEWS_GENERATE_INTRO').'<br /><br />';
			if(!empty($newNewsletter->params['generate'])){
				$intro .= acymailing_translation('AUTONEWS_GENERATE_INTRO_SENT');
			}else{
				$config = acymailing_config();
				$itemId = $config->get('itemid', 0);
				$item = empty($itemId) ? '' : '&Itemid='.$itemId;

				$intro .= '<a href="'.acymailing_frontendLink('archive&task=sendautonews&mailid='.$newNewsletter->mailid.'&key='.$newNewsletter->key.'-'.$newNewsletter->senddate, false, false, true).$item.'" >'.acymailing_translation('AUTONEWS_GENERATE_INTRO_REVIEW').'</a>';
			}

			$mailer->introtext = '<div align="center" style="max-width:600px;margin:auto;margin-top:10px;margin-bottom:10px;padding:10px;border:1px solid #cccccc;background-color:#f6f6f6;color:#333333;">'.$intro.'</div>';

			$allUsers = explode(' ', trim(str_replace(array(';', ','), ' ', $notifyUsers)));
			foreach($allUsers as $oneUser){
				if(empty($oneUser)) continue;
				$mailer->sendOne($newNewsletter->mailid, $oneUser);
			}
		}
	}


	private function _generatingStatus(&$oneAutonews){
		$results = acymailing_trigger('acymailing_generateautonews', array(&$oneAutonews));
		$return = true;
		foreach($results as $oneResult){
			if(isset($oneResult->status) && !$oneResult->status){
				$return = false;
				$this->messages[] = acymailing_translation_sprintf('NEWSLETTER_NOT_GENERATED', $oneAutonews->mailid, $oneResult->message);
				break;
			}
		}

		$newMail = new stdClass();
		$newMail->mailid = $oneAutonews->mailid;

		if(is_numeric($oneAutonews->frequency)){
			if($oneAutonews->frequency >= 2592000 AND $oneAutonews->frequency % 2592000 == 0){
				$newMail->senddate = mktime(date("H", $oneAutonews->senddate), date("i", $oneAutonews->senddate), date("s", $oneAutonews->senddate), date("n", $oneAutonews->senddate) + ($oneAutonews->frequency / 2592000), date("j", $oneAutonews->senddate), date("Y", $oneAutonews->senddate));
			}else{
				$newMail->senddate = $oneAutonews->senddate + $oneAutonews->frequency;
			}
		}else{
			$hourMin = !empty($oneAutonews->senddate) ? date(' H:i', $oneAutonews->senddate) : '';

			if(strpos($oneAutonews->frequency, 'on_') !== false){
				$values = explode('_', ltrim($oneAutonews->frequency, 'on_'));
				$currentDayKey = array_search(date('l'), $values);
				if($currentDayKey === false){
					$return = false;
					$this->messages[] = acymailing_translation_sprintf('NEWSLETTER_NOT_GENERATED', $oneAutonews->mailid, 'Only sending on '.implode(', ', $values));
					$newMail->senddate = time() + 86400;
				}else{
					if(isset($values[$currentDayKey+1])){
						$newMail->senddate = strtotime('next '.$values[$currentDayKey+1].$hourMin);
					}else{
						$newMail->senddate = strtotime('next '.$values[0].$hourMin);
					}
				}
			}else{
				$detailDay = explode('_', $oneAutonews->frequency);
				$dateTmp = strtotime($detailDay[0].' '.$detailDay[1].' of '.date('F Y').$hourMin);
				if(time() > $dateTmp){
					$newMonthYear = date('F Y', mktime(date("H", $dateTmp), date("i", $dateTmp), date("s", $dateTmp), date("n", $dateTmp) + 1, date("j", $dateTmp), date("Y", $dateTmp)));
					$dateTmp = strtotime($detailDay[0].' '.$detailDay[1].' of '.$newMonthYear.$hourMin);
				}
				$newMail->senddate = $dateTmp;
			}
		}

		$newMail->params = $oneAutonews->params;
		if(is_numeric($oneAutonews->frequency) && ($newMail->senddate < $this->time || $newMail->senddate > $this->time + 2 * $oneAutonews->frequency)) $newMail->senddate = $this->time + $oneAutonews->frequency;

		if($return){
			$newMail->params['lastgenerateddate'] = $this->time;
			$newMail->params['issuenb'] = empty($newMail->params['issuenb']) ? 1 : $newMail->params['issuenb'] + 1;
		}

		$this->mailClass->save($newMail);

		return $return;
	}
}//endclass