HEX
Server: LiteSpeed
System: Linux lp015.web24.net.au 2.6.32-954.3.5.lve1.4.93.el6.x86_64 #1 SMP Wed Oct 4 17:04:29 UTC 2023 x86_64
User: pgkdistr (10190)
PHP: 8.1.32
Disabled: opcache_get_status
Upload Files
File: /var/www/vhosts/pgkdistribution.com.au/citisolar.com.au/tmp/testimonials/site/helper/email.php
<?php
/**
* @Copyright Freestyle Joomla (C) 2010
* @license GNU/GPL http://www.gnu.org/copyleft/gpl.html
*     
* This file is part of Freestyle Testimonials
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
**/
?>
<?php
require_once (JPATH_SITE.DS.'components'.DS.'com_fst'.DS.'helper'.DS.'fields.php');

class FST_EMail
{
	function Get_Sender()
	{
		$config =& JFactory::getConfig();

		$address = 	$config->getValue( 'config.mailfrom' );
		$name = $config->getValue( 'config.fromname' );

		if (FST_Settings::get('support_email_from_name') != "")
			$name = FST_Settings::get('support_email_from_name');

		if (FST_Settings::get('support_email_from_address') != "")
			$address = FST_Settings::get('support_email_from_address');

		return array( $address, $name );
	}

	function Send_Comment($comments)
	{	
		if ($comments->dest_email == "") 
		{
			return;
		}
		
		$mailer =& JFactory::getMailer();
		$config =& JFactory::getConfig();
		$sender = FST_EMail::Get_Sender();
		$mailer->setSender($sender);
		$recipient = array($comments->dest_email);
		$mailer->addRecipient($recipient);
		
		$tpl = $comments->handler->EMail_GetTemplate($comments->moderate);
		$template = FST_EMail::Get_Template($tpl);
		
		$data = $comments->comment;
		$data['moderated'] = $comments->moderate;
		if ($data['moderated'] == 0)
			$data['moderated'] = "";
			
		if (!array_key_exists('customfields',$data))
			$data['customfields'] = "";
		if (!array_key_exists('email',$data))
			$data['email'] = "";
		if (!array_key_exists('website',$data))
			$data['website'] = "";
		if (!array_key_exists('linkmod',$data))
			$data['linkmod'] = "";
		if (!array_key_exists('linkart',$data))
			$data['linkart'] = "";
		
		if ($comments->moderate)
		{
			$data['linkmod'] = $comments->GetModLink();
		}
			
		$links = $comments->handler->EMail_AddFields($data);
		$links['linkart'] = 1;
		$links['linkmod'] = 1;
		
		if ($data['moderated'] == 0)
		{
			$data['moderated'] = "";
			$data['linkmod'] = "";
		}
		if ($template['ishtml'])
		{
			$data['article'] = "<a href='{$data['linkart']}'>{$data['article']}</a>";
			FST_EMail::ProcessLinks($data, $links);
			
			// add custom fields html style
			$customfields = "";
			foreach($comments->customfields as &$field)
				$customfields .= $field['description'] . ": " . $data['custom_' . $field['id']] . "<br />";
			$data['customfields'] = $customfields;
		} else {
			// add custom fields text style
			$customfields = "";
			foreach($comments->customfields as &$field)
				$customfields .= $field['description'] . ": " . $data['custom_' . $field['id']] . "\n";
			$data['customfields'] = $customfields;
		}
		
		file_put_contents("printr.txt",print_r($data,true));

		$email = FST_EMail::ParseGeneralTemplate($template, $data);
		
		/*print_p($comments);
		print_p($data);
		print_p($email);*/
		
		$mailer->isHTML($template['ishtml']);
		$mailer->setSubject($email['subject']);
		$mailer->setBody($email['body']);

		//print_p($email);

		//exit;
		$send =& $mailer->Send();	
	}
	
	function ProcessLinks(&$data, $links)
	{
		foreach ($links as $link => $temp)
		{
			if ($data[$link] == "")
				continue;
			$data[$link] = "<a href='{$data[$link]}'>here</a>";	
		}
	}
	
	function ParseGeneralTemplate($template, $data)
	{
		if ($template['ishtml'])
		{
			$data['body'] = str_replace("\n","<br>\n",$data['body']);	
		}
	
		foreach($data as $var => $value)
			$vars[] = FST_EMail::BuildVar($var,$value);

		$email['subject'] = FST_EMail::ParseText($template['subject'],$vars);
		$email['body'] = FST_EMail::ParseText($template['body'],$vars);
	
		return $email;			
	}
	
	function Admin_Reply(&$ticket, $subject, $body)
	{
		// ticket replyd to
		if (FST_Settings::get('support_email_on_reply') == 1)
		{		
			$db =& JFactory::getDBO();

			$custid = $ticket['user_id'];
			$qry = "SELECT * FROM #__users WHERE id = '{$db->getEscaped($custid)}'";
			$db->setQuery($qry);
			$custrec = $db->loadAssoc();
		
			$email = $custrec['email'];
		
			$mailer =& JFactory::getMailer();

			$config =& JFactory::getConfig();
			$sender = FST_EMail::Get_Sender();
		
			$mailer->setSender($sender);
		
			FST_EMail::AddTicketRecpts($mailer, $ticket, $custrec);
		
			$template = FST_EMail::Get_Template('email_on_reply');
			$email = FST_EMail::ParseTemplate($template,$ticket,$subject,$body,$template['ishtml']);
		
			$mailer->isHTML($template['ishtml']);
			$mailer->setSubject($email['subject']);
			$mailer->setBody($email['body']);
		
			/*print_p($mailer);
			exit;*/
			$send =& $mailer->Send();
			/*
			print_p($send);
			print_p($mailer);
			exit;*/
		}
	}
	
	function AddTicketRecpts(&$mailer, &$ticket, &$custrec)
	{
		// add ticket user as recipient
		if ($ticket['user_id'] == 0)
		{
			$recipient = array($ticket['email']/*, $ticket['unregname']*/);
		} else {
			$recipient = array($custrec['email']/*, $custrec['name']*/);
		}
		
		$mailer->addRecipient($recipient);
		
		// check for any ticket cc users
		FST_EMail::GetTicketCC($ticket);
		
		if (count($ticket['cc'] > 0))
		{
			foreach ($ticket['cc'] as $cc)
			{
				$mailer->addCC(array($cc['email']/*, $cc['name']*/));	
			}
		}		
		
		// if user_id on ticket is set, then check for any group recipients
		if ($ticket['user_id'] > 0)
		{
			$db =& JFactory::getDBO();
			
			// get groups that the user belongs to
			$qry = "SELECT * FROM #__fst_ticket_group WHERE id IN (SELECT group_id FROM #__fst_ticket_group_members WHERE user_id = '{$db->getEscaped($ticket['user_id'])}')";
			$db->setQuery($qry);
			//echo $qry."<br>";
			$groups = $db->loadObjectList('id');
			
			if (count($groups) > 0)
			{
				//print_p($groups);
			
				$gids = array();
			
				foreach ($groups as $id => &$group)
				{
					$gids[$id] = $id;	
				}
			
				// get list of users in the groups
				$qry = "SELECT m.*, u.email, u.name FROM #__fst_ticket_group_members as m LEFT JOIN #__users as u ON m.user_id = u.id WHERE group_id IN (" . implode(", ",$gids) . ")";
				$db->setQuery($qry);
				//echo $qry."<br>";
				$users = $db->loadObjectList();
				//print_p($users);
				
				$toemail = array();
				
				// for all users, if group has cc or user has cc then add to cc list			
				foreach($users as &$user)
				{
					if ($user->allemail || $groups[$user->group_id]->allemail)
					{
						$toemail[$user->email] = $user->name;

					}
				}	
				
				foreach ($toemail as $email => $name)
					$mailer->addCC(array($email/*, $name*/));	
			}
			
			
			
		}
	}
	
	function GetTicketCC(&$ticket)
	{
		$db =& JFactory::getDBO();
		$qry = "SELECT u.name, u.id, u.email FROM #__fst_ticket_cc as c LEFT JOIN #__users as u ON c.user_id = u.id WHERE c.ticket_id = {$ticket['id']} ORDER BY name";
		$db->setQuery($qry);
		$ticket['cc'] = $db->loadAssocList();
	}

	function Admin_Forward(&$ticket, $subject, $body)
	{
		// ticket replyd to
		if (FST_Settings::get('support_email_handler_on_forward') == 1)
		{		
			$db =& JFactory::getDBO();

			$admin_id = $ticket['admin_id'];
			$query = " SELECT a.*, au.name, au.username, au.email FROM #__fst_user as a ";
			$query .= " LEFT JOIN #__users as au ON a.user_id = au.id ";
			$query .= " WHERE a.id = '{$db->getEscaped($admin_id)}'";
			$db->setQuery($query);
			$admin_rec = $db->loadAssoc();
		
			$email = $admin_rec['email'];
		
			$mailer =& JFactory::getMailer();

			$config =& JFactory::getConfig();
			$sender = FST_EMail::Get_Sender();
	
			$mailer->setSender($sender);
		
			$recipient = array($admin_rec['email']);
			//print_r($recipient);
			$mailer->addRecipient($recipient);
		
			$template = FST_EMail::Get_Template('email_handler_on_forward');
			$email = FST_EMail::ParseTemplate($template,$ticket,$subject,$body,$template['ishtml']);

			$mailer->isHTML($template['ishtml']);
			$mailer->setSubject($email['subject']);
			$mailer->setBody($email['body']);
		
			$send =& $mailer->Send();
		}
	}

	function User_Create(&$ticket, $subject, $body)
	{
		// ticket replyd to
		if (FST_Settings::get('support_email_on_create') == 1)
		{		
			$db =& JFactory::getDBO();

			$custid = $ticket['user_id'];
			$qry = "SELECT * FROM #__users WHERE id = '{$db->getEscaped($custid)}'";
			$db->setQuery($qry);
			$custrec = $db->loadAssoc();
		
			$email = $custrec['email'];
		
			$mailer =& JFactory::getMailer();

			$config =& JFactory::getConfig();
			$sender = FST_EMail::Get_Sender();
		
			$mailer->setSender($sender);
		
			$recipient = array($custrec['email']);
		
			$mailer->addRecipient($recipient);
		
			$template = FST_EMail::Get_Template('email_on_create');
			$email = FST_EMail::ParseTemplate($template,$ticket,$subject,$body,$template['ishtml']);

			$mailer->isHTML($template['ishtml']);
			$mailer->setSubject($email['subject']);
			$mailer->setBody($email['body']);
		
			$send =& $mailer->Send();
		}
	}

	function User_Create_Unreg(&$ticket, $subject, $body)
	{
		// ticket replyd to
		if (FST_Settings::get('support_email_on_create') == 1)
		{		
			$db =& JFactory::getDBO();

			$custid = $ticket['user_id'];
			$qry = "SELECT * FROM #__users WHERE id = '{$db->getEscaped($custid)}'";
			$db->setQuery($qry);
			$custrec = $db->loadAssoc();
		
			$email = $custrec['email'];
		
			$mailer =& JFactory::getMailer();

			$config =& JFactory::getConfig();
			$sender = FST_EMail::Get_Sender();
		
			$mailer->setSender($sender);
		
			$recipient = array($ticket['email']);
		
			$mailer->addRecipient($recipient);
		
			$template = FST_EMail::Get_Template('email_on_create_unreg');
			$email = FST_EMail::ParseTemplate($template,$ticket,$subject,$body,$template['ishtml']);

			$mailer->isHTML($template['ishtml']);
			$mailer->setSubject($email['subject']);
			$mailer->setBody($email['body']);
		
			$send =& $mailer->Send();
		}
	}

	function Admin_Create(&$ticket, $subject, $body)
	{
		// ticket replyd to
		if (FST_Settings::get('support_email_handler_on_create') == 1)
		{		
			$db =& JFactory::getDBO();

			$admin_id = $ticket['admin_id'];
			if ($admin_id < 1)
			{
				$admin_rec['email'] = trim(FST_Settings::get('support_email_unassigned'));
				
				if ($admin_rec['email'] == "")
					return;
			} else {
		
				$query = " SELECT a.*, au.name, au.username, au.email FROM #__fst_user as a ";
				$query .= " LEFT JOIN #__users as au ON a.user_id = au.id ";
				$query .= " WHERE a.id = '{$db->getEscaped($admin_id)}'";
				$db->setQuery($query);
				$admin_rec = $db->loadAssoc();
			} 
		
			$custid = $ticket['user_id'];
			$qry = "SELECT * FROM #__users WHERE id = '{$db->getEscaped($custid)}'";
			$db->setQuery($qry);
			$custrec = $db->loadAssoc();

			$email = $custrec['email'];
		
			$mailer =& JFactory::getMailer();

			$config =& JFactory::getConfig();
			$sender = FST_EMail::Get_Sender();
		
			$mailer->setSender($sender);
		
			$recipient = array($admin_rec['email']);
			//print_r($recipient);
			$mailer->addRecipient($recipient);
		
			$template = FST_EMail::Get_Template('email_handler_on_create');
			$email = FST_EMail::ParseTemplate($template,$ticket,$subject,$body,$template['ishtml']);

			$mailer->isHTML($template['ishtml']);
			$mailer->setSubject($email['subject']);
			$mailer->setBody($email['body']);

			$send =& $mailer->Send();
		}
	}

	function User_Reply(&$ticket, $subject, $body)
	{
		if (FST_Settings::get('support_email_handler_on_reply') == 1)
		{		
			$db =& JFactory::getDBO();

			$admin_id = $ticket['admin_id'];
			if ($admin_id < 1)
				return;
		
			$query = " SELECT a.*, au.name, au.username, au.email FROM #__fst_user as a ";
			$query .= " LEFT JOIN #__users as au ON a.user_id = au.id ";
			$query .= " WHERE a.id = '{$db->getEscaped($admin_id)}'";
			$db->setQuery($query);
			$admin_rec = $db->loadAssoc();
		
			//print_r($admin_rec);
		
			$email = $admin_rec['email'];
		
			$mailer =& JFactory::getMailer();

			$config =& JFactory::getConfig();
			$sender = FST_EMail::Get_Sender();
		
			$mailer->setSender($sender);
		
			$recipient = array($admin_rec['email']);
			//print_r($recipient);
			$mailer->addRecipient($recipient);
		
			$template = FST_EMail::Get_Template('email_handler_on_reply');
			$email = FST_EMail::ParseTemplate($template,$ticket,$subject,$body,$template['ishtml']);

			$mailer->isHTML($template['ishtml']);
			$mailer->setSubject($email['subject']);
			$mailer->setBody($email['body']);
		
			$send =& $mailer->Send();
		}
	}

	function &GetHandler($admin_id)
	{
		if ($admin_id == 0)
		{
			$res = array("name" => JText::_("UNASSIGNED"),"username" => JText::_("UNASSIGNED"),"email" => "");
			return $res;	
		}
		$db =& JFactory::getDBO();
		$query = " SELECT a.*, au.name, au.username, au.email FROM #__fst_user as a ";
		$query .= " LEFT JOIN #__users as au ON a.user_id = au.id ";
		$query .= " WHERE a.id = '{$db->getEscaped($admin_id)}'";
		$db->setQuery($query);
		$handler = $db->loadAssoc();
		return $handler;
	} 

	function &GetUser($user_id)
	{
		$db =& JFactory::getDBO();
		$qry = "SELECT * FROM #__users WHERE id = '{$db->getEscaped($user_id)}'";
		$db->setQuery($qry);
		$row = $db->loadAssoc();
		return $row;
	}

	function GetStatus($status_id)
	{
		$db =& JFactory::getDBO();
		$qry = "SELECT title FROM #__fst_ticket_status WHERE id = '{$db->getEscaped($status_id)}'";	
		$db->setQuery($qry);
		$row = $db->loadAssoc();
		return $row['title'];
	}

	function GetArticle($artid)
	{
		$db =& JFactory::getDBO();
		$qry = "SELECT title FROM #__fst_kb_art WHERE id = '{$db->getEscaped($artid)}'";	
		$db->setQuery($qry);
		$row = $db->loadAssoc();
		return $row['title'];
	}

	function GetPriority($pri_id)
	{
		$db =& JFactory::getDBO();
		$qry = "SELECT title FROM #__fst_ticket_pri WHERE id = '{$db->getEscaped($pri_id)}'";	
		$db->setQuery($qry);
		$row = $db->loadAssoc();
		return $row['title'];
	}

	function GetCategory($cat_id)
	{
		$db =& JFactory::getDBO();
		$qry = "SELECT title FROM #__fst_ticket_cat WHERE id = '{$db->getEscaped($cat_id)}'";	
		$db->setQuery($qry);
		$row = $db->loadAssoc();
		return $row['title'];
	}

	function GetDepartment($dept_id)
	{
		$db =& JFactory::getDBO();
		$qry = "SELECT title FROM #__fst_ticket_dept WHERE id = '{$db->getEscaped($dept_id)}'";	
		$db->setQuery($qry);
		$row = $db->loadAssoc();
		return $row['title'];
	}

	function GetProduct($prod_id)
	{
		$db =& JFactory::getDBO();
		$qry = "SELECT title FROM #__fst_prod WHERE id = '{$db->getEscaped($prod_id)}'";	
		$db->setQuery($qry);
		$row = $db->loadAssoc();
		return $row['title'];
	}

	function &ParseTemplate($template,&$ticket,$subject,$body,$ishtml)
	{
		$handler = FST_EMail::GetHandler($ticket['admin_id']);
		$custrec = FST_EMail::GetUser($ticket['user_id']);
	
		$subject = trim(str_ireplace("re:","",$subject));
		$vars[] = FST_EMail::BuildVar('subject',$subject);
		if ($ishtml)
		{
			$body = str_replace("\n","<br>\n",$body);	
		}
		$vars[] = FST_EMail::BuildVar('body',$body);
		$vars[] = FST_EMail::BuildVar('reference',$ticket['reference']);
		$vars[] = FST_EMail::BuildVar('password',$ticket['password']);
		
		if ($ticket['user_id'] == 0)
		{
			$vars[] = FST_EMail::BuildVar('user_name',$ticket['unregname']);
			$vars[] = FST_EMail::BuildVar('user_username',JText::_("UNREGISTERED"));
			$vars[] = FST_EMail::BuildVar('user_email',$ticket['email']);
		} else {
			$vars[] = FST_EMail::BuildVar('user_name',$custrec['name']);
			$vars[] = FST_EMail::BuildVar('user_username',$custrec['username']);
			$vars[] = FST_EMail::BuildVar('user_email',$custrec['email']);
		}
		$vars[] = FST_EMail::BuildVar('handler_name',$handler['name']);
		$vars[] = FST_EMail::BuildVar('handler_username',$handler['username']);
		$vars[] = FST_EMail::BuildVar('handler_email',$handler['email']);
		
		$vars[] = FST_EMail::BuildVar('ticket_id',$ticket['id']);
		$vars[] = FST_EMail::BuildVar('status',FST_EMail::GetStatus($ticket['ticket_status_id']));
		$vars[] = FST_EMail::BuildVar('priority',FST_EMail::GetPriority($ticket['ticket_pri_id']));
		$vars[] = FST_EMail::BuildVar('category',FST_EMail::GetCategory($ticket['ticket_cat_id']));
		$vars[] = FST_EMail::BuildVar('department',FST_EMail::GetDepartment($ticket['ticket_dept_id']));
		$vars[] = FST_EMail::BuildVar('product',FST_EMail::GetProduct($ticket['prod_id']));
		
		$uri =& JURI::getInstance();
		$baseUrl = $uri->toString( array('scheme', 'host', 'port'));
		
		$vars[] = FST_EMail::BuildVar('ticket_link',$baseUrl . FSTRoute::_('index.php?option=com_fst&view=ticket&ticketid=' . $ticket['id']));

		$config = JFactory::getConfig();
		$sitename = $config->getValue('sitename');
		if (FST_Settings::get('support_email_site_name') != "")
			$sitename = FST_Settings::get('support_email_site_name');

		$vars[] = FST_EMail::BuildVar('websitetitle',$sitename);
	
		// need to add the tickets custom fields to the output here
		
		$fields = FSTCF::GetAllCustomFields(true);
		$values = FSTCF::GetTicketValues($ticket['id'],$ticket);
		
		foreach ($fields as $fid => &$field)
		{
			$name = "custom_" . $fid;
			$value = "";
			if (array_key_exists($fid, $values))
				$value = $values[$fid]['value'];
			//echo "$name -> $value<br>";
			$vars[] = FST_EMail::BuildVar($name, $value);
		}
		
		$email['subject'] = FST_EMail::ParseText($template['subject'],$vars);
		$email['body'] = FST_EMail::ParseText($template['body'],$vars);
	
		if ($template['ishtml'])
			$email['subject'] = str_replace("\n","<br \>\n",$email['subject']);

		//print_p($vars);
		//print_p($email);
		//exit;
		return $email;	
	}

	function BuildVar($name,$value)
	{
		$data['name'] = $name;
		$data['value'] = $value;
		return $data;
	}

	function ParseText($text,&$vars)
	{
		foreach ($vars as $var)
		{
			//echo "Proc : {$var['name']}<br>";
			$value = $var['value'];
			$block = "{".$var['name']."}";
			$start = "{".$var['name']."_start}";
			$end = "{".$var['name']."_end}";
		
			if ($value != "")
			{
				$text = str_replace($block, $value, $text);	
				$text = str_replace($start, "", $text);	
				$text = str_replace($end, "", $text);	
			} else {
				$text = str_replace($block, "", $text);	
				$pos_end = strpos($text, $end);
				$pos_beg = strpos($text, $start);
				//echo "$start = $pos_beg, $end = $pos_end<br>";
				if ($pos_end && $pos_beg){
					$text = substr_replace($text, '', $pos_beg, ($pos_end - $pos_beg) + strlen($end));
				}
			}
		}
		return $text;
	}

	function Get_Template($tmpl)
	{
		$db =& JFactory::getDBO();
		$qry = 	"SELECT body, subject, ishtml FROM #__fst_emails WHERE tmpl = '{$db->getEscaped($tmpl)}'";
		$db->setQuery($qry);
		return $db->loadAssoc();
	}
}