166 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package    JEM
 | |
|  * @copyright  (C) 2013-2024 joomlaeventmanager.net
 | |
|  * @copyright  (C) 2005-2009 Christoph Lukes
 | |
|  * @license    https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
 | |
|  */
 | |
| 
 | |
| defined('_JEXEC') or die;
 | |
| 
 | |
| use Joomla\CMS\Factory;
 | |
| use Joomla\CMS\Uri\Uri;
 | |
| use Joomla\CMS\Language\Text;
 | |
| use Joomla\CMS\Session\Session;
 | |
| 
 | |
| require_once (JPATH_COMPONENT_SITE.'/classes/controller.form.class.php');
 | |
| 
 | |
| /**
 | |
|  * Event Controller
 | |
|  */
 | |
| class JemControllerMailto extends JemControllerForm
 | |
| {
 | |
| 	// protected $view_item = 'editevent';
 | |
| 	// protected $view_list = 'eventslist';
 | |
| 	protected $_id = 0;
 | |
| 
 | |
| 	
 | |
| 	public function getModel($name = 'mailto', $prefix = '', $config = array('ignore_request' => true))
 | |
| 	{
 | |
| 		$model = parent::getModel($name, $prefix, $config);
 | |
| 
 | |
| 		return $model;
 | |
| 	}
 | |
| 	
 | |
| 	public function save($key = NULL, $urlVar = NULL){
 | |
| 		Session::checkToken() or jexit(Text::_('JINVALID_TOKEN'));
 | |
| 
 | |
| 		$app        = Factory::getApplication();
 | |
| 		$model      = $this->getModel('mailto');
 | |
| 		$data       = $model->getData();
 | |
| 		$uri        = Uri::getInstance();
 | |
| 		$form       = $model->getForm();
 | |
| 		$post_link  = $this->input->post->get('link', '', 'post');
 | |
| 		$currentUri = $uri->toString() . '&link='.$post_link;
 | |
| 		
 | |
| 		if (!$form)
 | |
| 		{
 | |
| 			$app->enqueueMessage($model->getError(), 'error');
 | |
| 
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		if (!$model->validate($form, $data))
 | |
| 		{
 | |
| 			$errors = $model->getErrors();
 | |
| 
 | |
| 			foreach ($errors as $error)
 | |
| 			{
 | |
| 				$errorMessage = $error;
 | |
| 
 | |
| 				if ($error instanceof Exception)
 | |
| 				{
 | |
| 					$errorMessage = $error->getMessage();
 | |
| 				}
 | |
| 
 | |
| 				$app->enqueueMessage($errorMessage, 'error');
 | |
| 			}
 | |
| 
 | |
| 			$this->setRedirect($currentUri);
 | |
| 		}
 | |
| 
 | |
| 		$headers = array (
 | |
| 			'Content-Type:',
 | |
| 			'MIME-Version:',
 | |
| 			'Content-Transfer-Encoding:',
 | |
| 			'bcc:',
 | |
| 			'cc:'
 | |
| 		);
 | |
| 		foreach ($data as $key => $value)
 | |
| 		{
 | |
| 			foreach ($headers as $header)
 | |
| 			{
 | |
| 				if (is_string($value) && strpos($value, $header) !== false)
 | |
| 				{
 | |
| 					$app->enqueueMessage(403, 'error');
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		unset($headers, $fields);
 | |
| 
 | |
| 		$siteName = $app->get('sitename');
 | |
| 		$link     = JemMailtoHelper::validateHash($this->input->post->get('link', '', 'post'));
 | |
| 		
 | |
| 		// Verify that this is a local link
 | |
| 		if (!$link || !Uri::isInternal($link))
 | |
| 		{
 | |
| 			// Non-local url...
 | |
| 			$app->enqueueMessage( Text::_('COM_JEM_MAILTO_EMAIL_NOT_SENT'), 'error');
 | |
| 			$this->setRedirect($currentUri);
 | |
| 		}
 | |
| 
 | |
| 		$subject_default = Text::sprintf('COM_JEM_MAILTO_SENT_BY', $data['sender']);
 | |
| 		$subject         = $data['subject'] !== '' ? $data['subject'] : $subject_default;
 | |
| 		$error = false;
 | |
| 
 | |
| 		if (!$data['emailto'] || !JMailHelper::isEmailAddress($data['emailto']))
 | |
| 		{
 | |
| 			$error = Text::sprintf('COM_JEM_MAILTO_EMAIL_INVALID', $data['emailto']);
 | |
| 
 | |
| 			$app->enqueueMessage( $error, 'error');
 | |
| 		}
 | |
| 
 | |
| 		// Check for a valid from address
 | |
| 		if (!$data['emailfrom'] || !JMailHelper::isEmailAddress($data['emailfrom']))
 | |
| 		{
 | |
| 			$error = Text::sprintf('COM_JEM_MAILTO_EMAIL_INVALID', $data['emailfrom']);
 | |
| 
 | |
| 			$app->enqueueMessage( $error, 'error');
 | |
| 		}
 | |
| 
 | |
| 		if ($error)
 | |
| 		{
 | |
| 			return $this->setRedirect($currentUri);
 | |
| 			return false;
 | |
| 		}
 | |
| 		$msg  = Text::_('COM_JEM_MAILTO_EMAIL_MSG');
 | |
| 		$body = sprintf($msg, $siteName, $data['sender'], $data['emailfrom'], $link);
 | |
| 
 | |
| 		// To send we need to use punycode.
 | |
| 		$data['emailfrom'] = JStringPunycode::emailToPunycode($data['emailfrom']);
 | |
| 		$data['emailfrom'] = JMailHelper::cleanAddress($data['emailfrom']);
 | |
| 		$data['emailto']   = JStringPunycode::emailToPunycode($data['emailto']);
 | |
| 		$from = array($data['emailfrom'], $data['sender']);
 | |
| 
 | |
| 		// Clean the email data
 | |
| 		$subject = JMailHelper::cleanSubject($subject);
 | |
| 		$body    = JMailHelper::cleanBody($body);
 | |
| 
 | |
| 		//--------------start new code ------------
 | |
| 		$mailer = Factory::getMailer();
 | |
| 		$mailer->setSender($from);
 | |
| 		$mailer->addRecipient($data['emailto']);
 | |
| 		$mailer->setSubject($subject);
 | |
| 		$mailer->setBody($body);
 | |
| 		$mailer->isHTML();
 | |
| 		try{
 | |
| 			if (!$mailer->send())
 | |
| 			{
 | |
| 				$app->enqueueMessage( Text::_('COM_JEM_MAILTO_EMAIL_NOT_SENT'), 'error');
 | |
| 				$this->setRedirect($currentUri);
 | |
| 				return false;
 | |
| 			}
 | |
| 		}catch(Exception $e){
 | |
| 			$app->enqueueMessage($e->getMessage(), 'notice');			
 | |
| 			$this->setRedirect($currentUri);
 | |
| 			return false;
 | |
| 		}
 | |
| 		$currentUri .= '&layout=sent';
 | |
| 		$this->setRedirect($currentUri);
 | |
| 		//--------------end new code ------------
 | |
| 
 | |
|     }
 | |
| 
 | |
| }
 |