<?php

/**

 * @package	AcyMailing for Joomla!

 * @version	5.6.0

 * @author	acyba.com

 * @copyright	(C) 2009-2016 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 FileController extends acymailingController{

	function language(){

		JRequest::setVar('layout', 'language');

		return parent::display();

	}



	function save(){

		JRequest::checkToken() or die('Invalid Token');



		$this->_savelanguage();

		return $this->language();

	}



	function savecss(){

		if(!$this->isAllowed('configuration', 'manage')) return;

		JRequest::checkToken() or die('Invalid Token');



		$file = JRequest::getCmd('file');

		if(!preg_match('#^([-a-z0-9]*)_([-_a-z0-9]*)$#i', $file, $result)){

			acymailing_display('Could not load the file '.$file.' properly');

			exit;

		}

		$type = $result[1];

		$fileName = $result[2];



		jimport('joomla.filesystem.file');



		$path = ACYMAILING_MEDIA.'css'.DS.$type.'_'.$fileName.'.css';

		$csscontent = JRequest::getString('csscontent');



		$alreadyExists = file_exists($path);



		if(JFile::write($path, $csscontent)){

			acymailing_enqueueMessage(JText::_('JOOMEXT_SUCC_SAVED'), 'success');

			$varName = JRequest::getCmd('var');

			if(!$alreadyExists){

				$js = "var optn = document.createElement(\"OPTION\");

						optn.text = '$fileName'; optn.value = '$fileName';

						mydrop = window.top.document.getElementById('".$varName."_choice');

						mydrop.options.add(optn);

						lastid = 0; while(mydrop.options[lastid+1]){lastid = lastid+1;} mydrop.selectedIndex = lastid;

						window.top.updateCSSLink('".$varName."','$type','$fileName');";

				$doc = JFactory::getDocument();

				$doc->addScriptDeclaration($js);

			}

			$config = acymailing_config();

			$newConfig = new stdClass();

			$newConfig->$varName = $fileName;

			$config->save($newConfig);

		}else{

			acymailing_enqueueMessage(JText::sprintf('FAIL_SAVE', $path), 'error');

		}



		return $this->css();

	}



	function css(){

		JRequest::setVar('layout', 'css');

		return parent::display();

	}



	function latest(){

		return $this->language();

	}



	function send(){

		if(!$this->isAllowed('configuration', 'manage')) return;

		JRequest::checkToken() or die('Invalid Token');



		$bodyEmail = JRequest::getString('mailbody');

		$code = JRequest::getCmd('code');

		JRequest::setVar('code', $code);



		if(empty($code)) return;



		jimport('joomla.filesystem.file');



		$config = acymailing_config();

		$mailer = acymailing_get('helper.mailer');

		$mailer->Subject = '[ACYMAILING LANGUAGE FILE] '.$code;

		$mailer->Body = 'The website '.ACYMAILING_LIVE.' using AcyMailing '.$config->get('level').' '.$config->get('version').' sent a language file : '.$code;

		$mailer->Body .= "\n"."\n"."\n".$bodyEmail;



		$extrafile = JLanguage::getLanguagePath(JPATH_ROOT).DS.$code.DS.$code.'.com_acymailing_custom.ini';



		if(file_exists($extrafile)){

			$mailer->Body .= "\n"."\n"."\n".'Custom content:'."\n".file_get_contents($extrafile);

		}

		$user = JFactory::getUser();

		$mailer->AddAddress($user->email, $user->name);

		$mailer->AddAddress('translate@acyba.com', 'Acyba Translation Team');

		$mailer->report = false;



		$path = JPath::clean(JLanguage::getLanguagePath(JPATH_ROOT).DS.$code.DS.$code.'.com_acymailing.ini');

		$mailer->AddAttachment($path);



		$result = $mailer->Send();

		if($result){

			acymailing_display(JText::_('THANK_YOU_SHARING'), 'success');

			acymailing_display($mailer->reportMessage, 'success');

		}else{

			acymailing_display($mailer->reportMessage, 'error');

		}

	}



	function share(){

		if(!$this->isAllowed('configuration', 'manage')) return;

		JRequest::checkToken() or die('Invalid Token');



		if($this->_savelanguage()){

			JRequest::setVar('layout', 'share');

			return parent::display();

		}else{

			return $this->language();

		}

	}



	function _savelanguage(){

		if(!$this->isAllowed('configuration', 'manage')) return;

		JRequest::checkToken() or die('Invalid Token');



		jimport('joomla.filesystem.file');

		$code = JRequest::getCmd('code');

		JRequest::setVar('code', $code);

		$content = JRequest::getVar('content', '', '', 'string', JREQUEST_ALLOWHTML);

		$content = str_replace('</textarea>', '', $content);



		if(empty($code) OR empty($content)) return;



		$path = JLanguage::getLanguagePath(JPATH_ROOT).DS.$code.DS.$code.'.com_acymailing.ini';

		$result = JFile::write($path, $content);

		if($result){

			acymailing_enqueueMessage(JText::_('JOOMEXT_SUCC_SAVED'), 'success');

			$js = "window.top.document.getElementById('image$code').className = 'acyicon-edit'";

			$doc = JFactory::getDocument();

			$doc->addScriptDeclaration($js);



			$updateHelper = acymailing_get('helper.update');

			$updateHelper->installMenu($code);

		}else{

			acymailing_enqueueMessage(JText::sprintf('FAIL_SAVE', $path), 'error');

		}



		$customcontent = JRequest::getVar('customcontent', '', '', 'string', JREQUEST_ALLOWHTML);

		$customcontent = str_replace('</textarea>', '', $customcontent);

		$custompath = JLanguage::getLanguagePath(JPATH_ROOT).DS.$code.DS.$code.'.com_acymailing_custom.ini';

		$customresult = JFile::write($custompath, $customcontent);

		if(!$customresult) acymailing_enqueueMessage(JText::sprintf('FAIL_SAVE', $custompath), 'error');



		return $result;

	}



	function installLanguages(){

		$languages = JRequest::getString('languages');

		ob_start();

		$languagesContent = acymailing_fileGetContent(ACYMAILING_UPDATEURL.'loadLanguages&json=1&codes='.$languages);

		$warnings = ob_get_clean();

		if(!empty($warnings) && defined('JDEBUG') && JDEBUG) echo $warnings;



		if(empty($languagesContent)){

			acymailing_display('Could not load the language files from our server, you can update them in the AcyMailing configuration page, tab "Languages" or start your own translation and share it', 'error');

			exit;

		}



		$decodedLanguages = json_decode($languagesContent, true);



		jimport('joomla.filesystem.file');

		$updateHelper = acymailing_get('helper.update');

		$success = array();

		$error = array();



		foreach($decodedLanguages as $code => $content){

			if(empty($content)){

				$error[] = 'The language '.$code.' was not found on our server, you can start your own translation in the AcyMailing configuration page, tab "Languages" then share it';

				continue;

			}



			if(JFile::write(JPATH_SITE.DS.'language'.DS.$code.DS.$code.'.com_acymailing.ini', $content)){

				$updateHelper->installMenu($code);

				$success[] = 'Successfully installed language: '.$code;

			}else{

				$error[] = JText::sprintf('FAIL_SAVE', $code.'.com_acymailing.ini');

			}

		}



		if(!empty($success)) acymailing_display($success, 'success');

		if(!empty($error)) acymailing_display($error, 'error');

		exit;

	}



	function select(){

		JRequest::setVar('layout', 'select');

		return parent::display();

	}



	function downloadAcySMS(){

		$headers = get_headers('https://www.acyba.com/download-area/download/component-acysms/level-express.html',1);

		$package = acymailing_fileGetContent('https://www.acyba.com/download-area/download/component-acysms/level-express.html');

		if(empty($headers['Content-Disposition']) || empty($package)) exit;



		jimport('joomla.filesystem.file');

		jimport('joomla.filesystem.archive');



		$fileName = strpos($headers['Content-Disposition'], '.zip') === false ? 'com_acysms.tar.gz' : 'com_acysms.zip';

		if(JFile::write(JPATH_SITE.DS.'tmp'.DS.'acysms'.DS.$fileName, $package) && JArchive::extract(JPATH_SITE.DS.'tmp'.DS.'acysms'.DS.$fileName, JPATH_SITE.DS.'tmp'.DS.'acysms')) echo 'success';



		exit;

	}



	function installPackage(){

		if(!ACYMAILING_J16) include_once(JPATH_SITE.DS.'libraries'.DS.'joomla'.DS.'installer'.DS.'installer.php');

		jimport('joomla.filesystem.folder');

		$installer = JInstaller::getInstance();



		if($installer->install(JPATH_SITE.DS.'tmp'.DS.'acysms')){

			JFolder::delete(JPATH_SITE.DS.'tmp'.DS.'acysms');

			echo 'success';

		}



		exit;

	}

}

