Your IP : 216.73.216.240


Current Path : /home/juvelize/www/components/com_acymailing/controllers/
Upload File :
Current File : /home/juvelize/www/components/com_acymailing/controllers/newsletter.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 NewsletterController extends acymailingController{

	function form(){
		return $this->edit();
	}

	function listing(){
		$listid = JRequest::getInt('listid');
		$redirect = empty($listid) ? acymailing_completeLink('lists',false,true) : acymailing_completeLink('archive&listid='.$listid,false,true);
		$this->setRedirect($redirect);
	}

	function checkAccessList(){
		$listid = JRequest::getInt('listid');
		if(empty($listid)){
			$listClass = acymailing_get('class.list');
			$allAllowedLists = $listClass->getFrontendLists();
			if(!empty($allAllowedLists)){
				$firstList = reset($allAllowedLists);
				$listid = $firstList->listid;
				JRequest::setVar('listid',$listid);
			}
		}

		if(empty($listid)) return false;
		$my = JFactory::getUser();
		$listClass = acymailing_get('class.list');
		$myList = $listClass->get($listid);
		if(empty($myList->listid)) die('Invalid List');
			 if(!empty($my->id) AND (int)$my->id == (int)$myList->userid) return true;
		if(empty($my->id) OR $myList->access_manage =='none') return false;
		if($myList->access_manage != 'all'){
			if(!acymailing_isAllowed($myList->access_manage)) return false;
		}
		return true;
	}

	function scheduleconfirm(){
		if(!$this->checkAccess()) return;
		JRequest::setVar( 'layout', 'scheduleconfirm'  );
		return parent::display();
	}

	function schedule(){
		if(!$this->isAllowed('newsletters','schedule')) return;
		JRequest::checkToken() or die( 'Invalid Token' );
		if(!$this->checkAccess()) return;

		$mailid = acymailing_getCID('mailid');

		$senddate = JRequest::getString( 'senddate','');
		$user = JFactory::getUser();

		if(empty($senddate)){
			acymailing_display(JText::_('SPECIFY_DATE'),'warning');
			return $this->scheduleconfirm();
		}

		$realSendDate = acymailing_getTime($senddate);
		if($realSendDate<time()){
			acymailing_display(JText::_('DATE_FUTURE'),'warning');
			return $this->scheduleconfirm();
		}

		$mail = new stdClass();
		$mail->mailid = $mailid;
		$mail->senddate = $realSendDate;
		$mail->sentby = $user->id;
		$mail->published = 2;

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

		$myNewsletter = $mailClass->get($mailid);

		JRequest::setVar('tmpl','component');

		acymailing_display(JText::sprintf('AUTOSEND_DATE','<b><i>'.$myNewsletter->subject.'</i></b>',acymailing_getDate($realSendDate)),'success');

		$config = acymailing_config();
		$redirecturl = $config->get('redirect_schedule');
		if(empty($redirecturl)) $redirecturl = "index.php?option=com_acymailing&ctrl=archive&listid=".JRequest::getInt('listid');

		$js = "setTimeout('redirect()',2000); function redirect(){window.top.location.href = '".$redirecturl."'; }";

		$doc = JFactory::getDocument();
		$doc->addScriptDeclaration( $js );

	}

	function unschedule(){
		if(!$this->isAllowed('newsletters','schedule')) return;
		if(!$this->checkAccess()) return;

		$mailid = acymailing_getCID('mailid');
		(JRequest::checkToken() && !empty($mailid)) or die( 'Invalid Token' );
		$mail = new stdClass();
		$mail->mailid = $mailid;
		$mail->senddate = 0;
		$mail->published = 0;

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

		$app = JFactory::getApplication();
		$app->enqueueMessage(JText::_('SUCC_UNSCHED'));

		return $this->preview();
	}

	function checkAccessNewsletter($edit = true){
		$mailid = acymailing_getCID('mailid');
		$listid = JRequest::getInt('listid');
		if(empty($mailid)) return true;

		$db = JFactory::getDBO();

		$db->setQuery('SELECT * FROM `#__acymailing_mail` WHERE mailid = '.intval($mailid));
		$mail = $db->loadObject();
		if(empty($mail->mailid)) return false;
		$config = acymailing_config();
		$my = JFactory::getUser();
		if($edit AND !$config->get('frontend_modif',1) AND $my->id != $mail->userid) return false;
		if($edit AND !$config->get('frontend_modif_sent',1) AND !empty($mail->senddate)) return false;

		$db->setQuery('SELECT `mailid` FROM `#__acymailing_listmail` WHERE `mailid` = '.intval($mailid).' AND `listid` = '.intval($listid));
		$result = $db->loadResult();
		if(empty($result) && $my->id != $mail->userid) return false;

		return true;
	}

	function checkAccess($edit = true){
		$app = JFactory::getApplication();
		$listid = JRequest::getInt('listid');
		if(!$this->checkAccessList()){
			$app->enqueueMessage('You can not have access to this list','error');
			$this->setRedirect('index.php?option=com_acymailing&ctrl=archive&listid='.$listid);
			return false;
		}

		if(!$this->checkAccessNewsletter($edit)){
			$app->enqueueMessage('You can not have access to this Newsletter','error');
			$this->setRedirect('index.php?option=com_acymailing&ctrl=archive&listid='.$listid);
			return false;
		}

		return true;
	}

	function delete(){
		if(!$this->checkAccess()) return;

		list($mailid,$attachid) = explode('_',JRequest::getCmd('value'));
		$mailid = intval($mailid);
		if(empty($mailid)) return false;

		$db	= JFactory::getDBO();
		$db->setQuery('SELECT `attach` FROM '.acymailing_table('mail').' WHERE mailid = '.$mailid.' LIMIT 1');
		$attachment = $db->loadResult();
		if(empty($attachment)) return;
		$attach = unserialize($attachment);

		unset($attach[$attachid]);
		$attachdb = serialize($attach);

		$db->setQuery('UPDATE '.acymailing_table('mail').' SET attach = '.$db->Quote($attachdb).' WHERE mailid = '.$mailid.' LIMIT 1');

		$db->query();
		exit;
	}

	function store(){

		JRequest::checkToken() or die( 'Invalid Token' );
		if(!$this->checkAccess()) return;

		$app = JFactory::getApplication();

		$mailClass = acymailing_get('class.mail');
		$status = $mailClass->saveForm();
		if($status){
			$app->enqueueMessage(JText::_( 'JOOMEXT_SUCC_SAVED' ), 'message');
		}else{
			$app->enqueueMessage(JText::_( 'ERROR_SAVING' ), 'error');
			if(!empty($mailClass->errors)){
				foreach($mailClass->errors as $oneError){
					$app->enqueueMessage($oneError, 'error');
				}
			}
		}
	}

	function edit(){
		if(!$this->checkAccess()) return;
		JRequest::setVar( 'layout', 'form'  );
		return parent::display();
	}

	function savepreview(){
		$this->store();
		return $this->preview();
	}

	function preview(){
		if(!$this->checkAccess()) return;
		JRequest::setVar( 'layout', 'preview'  );
		return parent::display();
	}

	function replacetags(){
		$this->store();
		return $this->edit();

	}

	function sendtest(){
		$this->_sendtest();
		return $this->preview();
	}

	function sendconfirm(){
		if(!$this->checkAccess()) return;
		JRequest::setVar( 'layout', 'sendconfirm'  );
		return parent::display();
	}

	function send(){
		if(!$this->isAllowed('newsletters','send')) return;
		JRequest::checkToken() or die( 'Invalid Token' );
		if(!$this->checkAccess()) return;

		$app = JFactory::getApplication();
		$user = JFactory::getUser();

		$mailid = acymailing_getCID('mailid');
		if(empty($mailid)) exit;

		$time = time();
		$queueClass = acymailing_get('class.queue');
		$nbEmails = $queueClass->nbQueue($mailid);
		if($nbEmails > 0){
			$app->enqueueMessage(JText::sprintf('ALREADY_QUEUED',$nbEmails),'notice');
			return;
		}

		$queueClass->onlynew = JRequest::getInt('onlynew');
		$queueClass->mindelay = JRequest::getInt('mindelay');
		$totalSub = $queueClass->queue($mailid,$time);

		if(empty($totalSub)){
			$app->enqueueMessage(JText::_('NO_RECEIVER'),'notice');
			return;
		}

		$mailObject = new stdClass();
		$mailObject->senddate = $time;
		$mailObject->published = 1;
		$mailObject->mailid = $mailid;
		$mailObject->sentby = $user->id;
		$db = JFactory::getDBO();
		$db->updateObject(acymailing_table('mail'),$mailObject,'mailid');

		acymailing_display(JText::sprintf('ADDED_QUEUE',$totalSub));
		acymailing_display(JText::sprintf('AUTOSEND_CONFIRMATION',$totalSub));

		$config = acymailing_config();
		$redirecturl = $config->get('redirect_send');
		if(empty($redirecturl)) $redirecturl = acymailing_completeLink("archive&listid=".JRequest::getInt('listid'),false,true);
		$js = "setTimeout('redirect()',2000); function redirect(){window.top.location.href = '$redirecturl'; }";
		$doc = JFactory::getDocument();
		$doc->addScriptDeclaration( $js );
		return false;
	}

	function _sendtest(){
		JRequest::checkToken() or die( 'Invalid Token' );
		if(!$this->checkAccess()) return;

		$mailid = acymailing_getCID('mailid');

		$receiver_type = JRequest::getVar('receiver_type','','','string');

		if(empty($mailid) OR empty($receiver_type)) return false;

		$mailer = acymailing_get('helper.mailer');
		$mailer->forceVersion = JRequest::getVar('test_html',1,'','int');
		$mailer->autoAddUser = true;
		$mailer->checkConfirmField = false;

		$receivers = array();
		if($receiver_type == 'user'){
			$user = JFactory::getUser();
			$receivers[] = $user->email;
		}elseif($receiver_type == 'other'){
			$receiverEntry = JRequest::getVar('test_email','','','string');
			if(substr_count($receiverEntry,'@')>1){
				$receivers = explode(' ',trim(preg_replace('# +#',' ',str_replace(array(';',','),' ',$receiverEntry))));
			}else{
				$receivers[] = trim($receiverEntry);
			}
		}else{
			$gid = substr($receiver_type,strpos($receiver_type,'_')+1);
			if(empty($gid)) return false;
			$db = JFactory::getDBO();
			$db->setQuery('SELECT email from '.acymailing_table('users',false).' WHERE gid = '.intval($gid));
			$receivers = acymailing_loadResultArray($db);
		}

		if(empty($receivers)){
			$app = JFactory::getApplication();
			$app->enqueueMessage(JText::_('NO_SUBSCRIBER'), 'notice');
			return false;
		}

		$result = true;
		foreach($receivers as $receiver){
			$result = $mailer->sendOne($mailid,$receiver) && $result;
		}

		return $result;
	}

	function stats(){
		if(!$this->isAllowed('statistics','manage')) return;
		if(!$this->checkAccess(false)) return;
		JRequest::setVar( 'layout', 'stats'  );
		return parent::display();
	}

	function statsclick(){
		if(!$this->isAllowed('statistics','manage') || !$this->isAllowed('subscriber','view')) return;
		if(!$this->checkAccess(false)) return;
		JRequest::setVar( 'layout', 'statsclick'  );
		return parent::display();
	}

	function detailstats(){
		if(!$this->isAllowed('statistics','manage') || !$this->isAllowed('subscriber','view')) return;
		if(!$this->checkAccess(false)) return;
		JRequest::setVar( 'layout', 'detailstats'  );
		return parent::display();
	}
}