Your IP : 216.73.216.240


Current Path : /home/juvelize/www/administrator/components/com_acymailing/helpers/
Upload File :
Current File : /home/juvelize/www/administrator/components/com_acymailing/helpers/cron.php

<?php
/**
 * @package	Acymailing for Joomla!
 * @version	4.0.1
 * @author	acyba.com
 * @copyright	(C) 2009-2012 ACYBA S.A.RL. All rights reserved.
 * @license	GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */
defined('_JEXEC') or die('Restricted access');
?><?php

class cronHelper{

	var $report = false;
	var $messages = array();
	var $detailMessages = array();
	var $processed = false;
	var $executed = false;
	var $mainmessage = '';
	var $errorDetected = false;

	function cron(){


		$time = time();
		$config = acymailing_config();

		$firstMessage = JText::sprintf('CRON_TRIGGERED',acymailing_getDate(time()));
		$this->messages[] = $firstMessage;
		if($this->report){
			acymailing_display($firstMessage,'info');
		}

		if($config->get('cron_next') > $time){

			if($config->get('cron_next') > ($time + $config->get('cron_frequency'))){
				$newConfig = new stdClass();
				$newConfig->cron_next = $time + $config->get('cron_frequency');
				$config->save($newConfig);
			}

			$nottime = JText::sprintf('CRON_NEXT',acymailing_getDate($config->get('cron_next')));
			$this->messages[] = $nottime;
			if($this->report){
				acymailing_display($nottime,'info');
			}
			return false;
		}

		$queueHelper = acymailing_get('helper.queue');

		$this->executed = true;

		$newConfig = new stdClass();
		$newConfig->cron_next = $config->get('cron_next') + $config->get('cron_frequency');
		if($newConfig->cron_next <= $time OR $newConfig->cron_next> $time + $config->get('cron_frequency')) $newConfig->cron_next = $time + $config->get('cron_frequency');

		$newConfig->cron_last = $time;
		$userHelper = acymailing_get('helper.user');
		$newConfig->cron_fromip = $userHelper->getIP();

		$config->save($newConfig);

		if($config->get('queue_type') != 'manual'){
			$queueHelper->send_limit = (int) $config->get('queue_nbmail_auto');
			$queueHelper->report = false;
			$queueHelper->process();
			if(!empty($queueHelper->messages)){
				$this->detailMessages = array_merge($this->detailMessages,$queueHelper->messages);
			}
			if(!empty($queueHelper->nbprocess)) $this->processed = true;
			$this->mainmessage = JText::sprintf('CRON_PROCESS',$queueHelper->nbprocess,$queueHelper->successSend,$queueHelper->errorSend);
			$this->messages[] = $this->mainmessage;

			if(!empty($queueHelper->errorSend)) $this->errorDetected = true;
			if(!empty($queueHelper->stoptime) AND time()>$queueHelper->stoptime) return true;
		}

		if(acymailing_level(2)){
			$autonewsHelper = acymailing_get('helper.autonews');
			$resultAutonews = $autonewsHelper->generate();
			if(!empty($autonewsHelper->messages)){
				$this->messages = array_merge($this->messages,$autonewsHelper->messages);
				$this->processed = true;
			}

			if(!empty($queueHelper->stoptime) AND time()>$queueHelper->stoptime) return true;
		}

		$schedHelper = acymailing_get('helper.schedule');
		$resultSchedule = $schedHelper->queueScheduled();
		if($resultSchedule){
			if(!empty($schedHelper->nbNewsletterScheduled)) $this->messages[] = JText::sprintf('NB_SCHED_NEWS',$schedHelper->nbNewsletterScheduled);
			$this->detailMessages = array_merge($this->detailMessages,$schedHelper->messages);
			$this->processed = true;
		}

		if(!empty($queueHelper->stoptime) AND time()>$queueHelper->stoptime) return true;

		if($config->get('cron_plugins_next') < $time){
			$newConfig = new stdClass();
			$newConfig->cron_plugins_next = $config->get('cron_plugins_next',0) + 86400;
			if($newConfig->cron_plugins_next <= $time) $newConfig->cron_plugins_next = $time + 86400;
			$config->save($newConfig);

			JPluginHelper::importPlugin('acymailing');
			$dispatcher = JDispatcher::getInstance();
			$resultsTrigger = $dispatcher->trigger('onAcyCronTrigger');
			if(!empty($resultsTrigger)){
				$this->processed = true;
				$this->messages = array_merge($this->messages,$resultsTrigger);
			}

			if(acymailing_level(3)){
				$filterClass = acymailing_get('class.filter');
				$filterClass->trigger('daycron');
				if(!empty($filterClass->report)){
					$this->processed = true;
					$this->messages = array_merge($this->messages,$filterClass->report);
				}
			}

			if(date('w') == 0){
				$detailedStatsFrequ = intval($config->get('delete_stats'));
				$historyFrequ = intval($config->get('delete_history'));
				$db = JFactory::getDBO();
				if(!empty($detailedStatsFrequ)){
					$db->setQuery('DELETE FROM `#__acymailing_userstats` WHERE `senddate` <= '.(time() - $detailedStatsFrequ));
					$db->query();

					$db->setQuery('DELETE FROM `#__acymailing_urlclick` WHERE `date` <= '.(time() - $detailedStatsFrequ));
					$db->query();

				}
				if(!empty($historyFrequ)){
					$db->setQuery('DELETE FROM `#__acymailing_history` WHERE `date` <= '.(time() - $historyFrequ));
					$db->query();
				}

				if((int) date('j') < 8){
					$db->setQuery('OPTIMIZE TABLE `#__acymailing_queue`');
					$db->query();
				}
			}

			if(!empty($queueHelper->stoptime) AND time()>$queueHelper->stoptime) return true;
		}

		if(acymailing_level(3) && $config->get('auto_bounce',0) && $time > (int)$config->get('auto_bounce_next',0) && (empty($queueHelper->stoptime) || time() < $queueHelper->stoptime-5)){
			$newConfig = new stdClass();
			$newConfig->auto_bounce_next = $time + (int) $config->get('auto_bounce_frequency',0);
			$newConfig->auto_bounce_last = $time;
			$config->save($newConfig);
			$bounceClass = acymailing_get('helper.bounce');
			$bounceClass->report = false;
			$newConfig = new stdClass();
			if($bounceClass->init() && $bounceClass->connect()){
				$nbMessages = $bounceClass->getNBMessages();
				$this->messages[] = JText::sprintf('NB_MAIL_MAILBOX',$nbMessages);
				$newConfig->auto_bounce_report = JText::sprintf('NB_MAIL_MAILBOX',$nbMessages);
				$this->detailMessages[] = JText::sprintf('NB_MAIL_MAILBOX',$nbMessages);
				if(!empty($nbMessages)){
					$bounceClass->handleMessages();
					$bounceClass->close();
					$this->processed = true;
				}
				$this->detailMessages = array_merge($this->detailMessages,$bounceClass->messages);
			}else{
				$bounceErrors = $bounceClass->getErrors();
				$newConfig->auto_bounce_report = implode('<br/>',$bounceErrors);
				$this->messages = array_merge($this->messages,$bounceErrors);
				$this->processed = true;
				$this->errorDetected = true;
			}
			$config->save($newConfig);
			if(!empty($queueHelper->stoptime) AND time()>$queueHelper->stoptime) return true;
		}

		return true;

	}

	function report(){

		$config = acymailing_config();

		$sendreport = $config->get('cron_sendreport');
		$mailer = acymailing_get('helper.mailer');

		if(($sendreport == 2 && $this->processed) || $sendreport == 1  || ($sendreport == 3 && $this->errorDetected ) ){
			$mailer->report = false;
			$mailer->autoAddUser = true;
			$mailer->checkConfirmField = false;
			$mailer->addParam('report',implode('<br/>',$this->messages));
			$mailer->addParam('mainreport',$this->mainmessage);
			$mailer->addParam('detailreport',implode('<br/>',$this->detailMessages));
			$receiverString = $config->get('cron_sendto');
			$receivers = array();
			if(substr_count($receiverString,'@')>1){
				$receivers = explode(' ',trim(preg_replace('# +#',' ',str_replace(array(';',','),' ',$receiverString))));
			}else{
				$receivers[] = trim($receiverString);
			}
			if(!empty($receivers)){
				foreach($receivers as $oneReceiver){
					$mailer->sendOne('report',$oneReceiver);
				}
			}
		}

		if(!$this->executed) return;
		$newConfig = new stdClass();
		$newConfig->cron_report = implode("\n",$this->messages);
		if(strlen($newConfig->cron_report) > 800) $newConfig->cron_report = substr($newConfig->cron_report,0,795).'...';
		$config->save($newConfig);

		if($this->processed) $this->saveReport();

	}

	function saveReport(){
		$config = acymailing_config();
		$saveReport = $config->get('cron_savereport');
		if(empty($saveReport)) return;

		$reportPath = JPath::clean(ACYMAILING_ROOT.trim(html_entity_decode($config->get('cron_savepath'))));
		if(!is_dir(dirname($reportPath))){
			acymailing_createDir(dirname($reportPath));
			$htaccess = 'Order deny,allow'."\r\n".'Deny from all';
			JFile::write(dirname($reportPath).DS.'.htaccess',$htaccess);
		}
		file_put_contents($reportPath, "\r\n"."\r\n".str_repeat('*',150)."\r\n".str_repeat('*',20).str_repeat(' ',5).acymailing_getDate(time()).str_repeat(' ',5).str_repeat('*',20)."\r\n", FILE_APPEND);
		@file_put_contents($reportPath, implode("\r\n",$this->messages), FILE_APPEND);
		if($saveReport == 2 AND !empty($this->detailMessages)){
			@file_put_contents($reportPath, "\r\n"."---- Details ----"."\r\n", FILE_APPEND);
			@file_put_contents($reportPath, implode("\r\n",$this->detailMessages), FILE_APPEND);
		}

	}
}//endclass