AnonSec Shell
Server IP : 54.36.91.62  /  Your IP : 216.73.217.94
Web Server : Apache
System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : coopiak ( 151928)
PHP Version : 8.3.23
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/coopiak/amisdesseniors-fr/catalog/administrator/components/com_djclassifieds/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/catalog/administrator/components/com_djclassifieds/lib/djnotify.php
<?php
/**
 * @package DJ-Classifieds
 * @copyright Copyright (C) DJ-Extensions.com, All rights reserved.
 * @license http://www.gnu.org/licenses GNU/GPL
 * @author url: http://dj-extensions.com
 * @author email contact@dj-extensions.com
 */

defined('_JEXEC') or die('Restricted access');

require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djaccess.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djcategory.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djimage.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djseo.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djpayment.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djfield.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djtheme.php');
require_once(JPATH_ROOT.'/components/com_djclassifieds/model.php');

class DJClassifiedsNotify
{
	static function getFromname()
	{
		$config = JFactory::getConfig();
		$fromname = $config->get('fromname');
		if(!$fromname){
			$fromname = $config->get('sitename');
		}
		return $fromname;
	}

	static function getAdminMailto()
	{
		$app = JFactory::getApplication();
		$par = JComponentHelper::getParams('com_djclassifieds');
		
		$mailto = trim($par->get('notify_user_email',''));

		if($mailto){
			$mailto_arr = explode(',', $mailto);
			if(count($mailto_arr) > 1){
				$mailto = array();
				foreach($mailto_arr as $email){
					$email = trim($email);
					if(filter_var($email, FILTER_VALIDATE_EMAIL)){
						$mailto[] = $email;
					}
				}
				if(count($mailto) == 1){
					$mailto = $mailto[0];
				}
			}elseif(!filter_var($mailto, FILTER_VALIDATE_EMAIL)){
				$mailto = '';
			}
		}
		if(!$mailto){
			$mailto = $app->getCfg('mailfrom');
		}

		return $mailto;
	}

	public static function notifyExpired($limit=0,$msg=1)
	{
		$app = JFactory::getApplication();
		$db	= JFactory::getDBO();
        $par = JComponentHelper::getParams('com_djclassifieds');				
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
		$notify_days = $par->get('notify_days','0');
		
		if($notify_days>0){			
			$date_exp = JFactory::getDate('now + '.$notify_days.' day')->toSQL();
			$lim = '';
			
			if($limit>0){
				$lim = ' LIMIT '.$limit;	
			}
			
			$query = "SELECT i.id, i.cat_id, i.name, i.alias, i.intro_desc, i.description, i.user_id, i.promotions, i.email, i.published, i.token, c.name as c_name, c.alias as c_alias, u.name as u_name, u.email as u_email, u.username as u_username "
					."FROM #__djcf_items i "
					."LEFT JOIN #__djcf_categories c ON c.id=i.cat_id "
					."LEFT JOIN #__users u ON u.id=i.user_id "
					."WHERE i.notify=0 AND i.date_exp < '".$date_exp."' ".$lim;
			$db->setQuery($query);
			$items = $db->loadObjectList();
			
			$update_id = '';
			$items_c = 0;
			
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 18 LIMIT 1";
			$db->setQuery($query);
			$email = $db->loadObject();
			
			foreach($items as $i){
				$mailto = '';
				$receiver = '';
				if($i->user_id){
					$mailto = $i->u_email;
					$receiver = JFactory::getUser($i->user_id);
				}else{
					$mailto = $i->email;
				}	

				$app->triggerEvent('onDJClassifiedsPrepareEmail', array($email, $i, $receiver));

				if (filter_var($mailto, FILTER_VALIDATE_EMAIL)) {
					$subject = self::parseMessageSubject($email->title,$email->id,$i,$receiver);
					$m_message = self::parseMessageBody($email->content,$email->id,$i,$receiver);
					$m_message = str_ireplace('[[advert_expire_days]]', $notify_days, $m_message);
					
					if(!$m_message){
						return false;
					}

					$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $m_message, true, null, ($par->get('notify_expire_copy_admin','0') ? self::getAdminMailto() : null));
					if(!is_object($sent)){
						$update_id .= $i->id.', ';
						$items_c++;
					}elseif($msg==1){
						$app->enqueueMessage('Sending expiration notification email failed for user '.($i->user_id ? $i->user_id : $i->email), 'warning');
					}
				}else{ 
					$update_id .= $i->id.', ';
					$items_c++;
				}
			}

			if($items_c>0){
				$update_id = substr($update_id, 0, -2);
				$query = "UPDATE #__djcf_items SET notify=1 WHERE id IN (".$update_id.")";
				$db->setQuery($query);
				$db->execute();
				if($msg==1){
					$app->enqueueMessage($items_c.' '.JText::_('COM_DJCLASSIFIEDS_NOTIFICATIONS_SENT'), 'success');
				}
			}
		}
	}

	public static function notifyPromotionsExpired($limit=0,$msg=1)
	{
		$app = JFactory::getApplication();
		$db	= JFactory::getDBO();
        $par = JComponentHelper::getParams('com_djclassifieds');				
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
		$notify_days = $par->get('notify_days','0');
		$date_now = JFactory::getDate('now')->toSQL();
		
		if($notify_days>0){			
			$date_exp = JFactory::getDate('now + '.$notify_days.' day')->toSQL();
			$lim = '';
			
			if($limit>0){
				$lim = ' LIMIT '.$limit;	
			}
			
			$query = "SELECT ip.id as ip_id, ip.prom_id, i.id, i.cat_id, i.name, i.alias, i.intro_desc, i.description, i.user_id, i.promotions, i.email, i.published, i.token, c.name as c_name, c.alias as c_alias, u.name as u_name, u.email as u_email, u.username as u_username "
					."FROM #__djcf_items i "
					."LEFT JOIN #__djcf_items_promotions ip ON i.id=ip.item_id "
					."LEFT JOIN #__djcf_categories c ON c.id=i.cat_id "
					."LEFT JOIN #__users u ON u.id=i.user_id "
					."WHERE i.date_exp > '".$date_now."' AND i.published=1 AND ip.notify=0 AND ip.date_exp < '".$date_exp."' AND ip.date_exp > '".$date_now."' ".$lim;
			$db->setQuery($query);
			$items_proms = $db->loadObjectList();
			
			$update_id = '';
			$items_c = 0;
			
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 38 LIMIT 1";
			$db->setQuery($query);
			$email = $db->loadObject();
			
			foreach($items_proms as $i){
				$mailto = '';
				$receiver = '';
				if($i->user_id){
					$mailto = $i->u_email;
					$receiver = JFactory::getUser($i->user_id);
				}else{
					$mailto = $i->email;
				}	

				$app->triggerEvent('onDJClassifiedsPrepareEmail', array($email, $i, $receiver));

				if (filter_var($mailto, FILTER_VALIDATE_EMAIL)) {
					$query = "SELECT * FROM #__djcf_promotions WHERE id=".$i->prom_id;
					$db->setQuery($query);
					$prom = $db->loadObject();

					$subject = self::parseMessageSubject($email->title,$email->id,$i,$receiver,'','','','','','','','','','','','','','',array(),array(),$prom);
					$m_message = self::parseMessageBody($email->content,$email->id,$i,$receiver,'','','','','','','','','','','','','','',array(),array(),$prom);
					$m_message = str_ireplace('[[prom_expire_days]]', $notify_days, $m_message);
					
					if(!$m_message){
						return false;
					}

					$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $m_message, true, null, ($par->get('notify_expire_copy_admin','0') ? self::getAdminMailto() : null));
					if(!is_object($sent)){
						$update_id .= $i->ip_id.', ';
						$items_c++;
					}elseif($msg==1){
						$app->enqueueMessage('Sending expiration notification email failed for user '.($i->user_id ? $i->user_id : $i->email), 'warning');
					}
				}else{ 
					$update_id .= $i->ip_id.', ';
					$items_c++;
				}
			}

			if($items_c>0){
				$update_id = substr($update_id, 0, -2);
				$query = "UPDATE #__djcf_items_promotions SET notify=1 WHERE id IN (".$update_id.")";
				$db->setQuery($query);
				$db->execute();
				if($msg==1){
					$app->enqueueMessage($items_c.' '.JText::_('COM_DJCLASSIFIEDS_NOTIFICATIONS_SENT'), 'success');
				}
			}
		}
	}
	
	public static function notifyAdmin($item, $new_ad = true)
	{
		$app = JFactory::getApplication();
		$par = JComponentHelper::getParams('com_djclassifieds');	
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();

		if($par->get('notify_admin','0')){
			$item = $djmodel->getItemById($item->id);
			
			if($new_ad){
				$email_id = 9;
			}else{
				$email_id = 10;
			}
			
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = ".$email_id." LIMIT 1";
			$db->setQuery($query);
			$email = $db->loadObject();

			$mailto = self::getAdminMailto();
			
			$mailfrom = $app->getCfg('mailfrom');
			$fromname = self::getFromname();
				
			$subject = self::parseMessageSubject($email->title,$email->id,$item);
			$m_message = self::parseMessageBody($email->content,$email->id,$item);
			
			$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $m_message);
			return $sent;
		}
	}

	public static function notifyNewAdvertUser($item)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$par = JComponentHelper::getParams('com_djclassifieds');	
		$user = JFactory::getUser();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($item->id);
		
		if($user->id){
			$mailto = $user->email;
		}else{
			$mailto = $item->email;
		}								
		$mailfrom = $app->getCfg('mailfrom');			    
		$fromname = self::getFromname();

		if(!$user->id){
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 21 LIMIT 1";
			$db->setQuery($query);
			$email = $db->loadObject();
		}else{
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 11 LIMIT 1";
			$db->setQuery($query);
			$email = $db->loadObject();
		}
		
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$user);
		$m_message = self::parseMessageBody($email->content,$email->id,$item,$user);

		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $m_message);
		return $sent;
	}
	
	public static function notifyAuctions()
	{
		$db = JFactory::getDBO();		
		$date_now = JFactory::getDate()->toSQL();

		$query = "SELECT i.*, c.name as c_name, c.alias as c_alias,u.name as u_name,u.email as u_email, u.username as u_username "
				."FROM #__djcf_items i "
					."LEFT JOIN #__djcf_categories c ON c.id=i.cat_id "
					."LEFT JOIN #__users u ON u.id=i.user_id "
				."WHERE i.notify<2 AND i.date_exp < '".$date_now."' AND i.auction=1";
		$db->setQuery($query);
		$items = $db->loadObjectList();
		
		if($items){
			foreach($items as $item){
				$query = "SELECT a.*, u.name, u.username, u.email "
						."FROM #__djcf_auctions a "
						."LEFT JOIN #__users u ON u.id=a.user_id "
						."WHERE a.item_id=".$item->id." "
						."ORDER BY a.price DESC";
				$db->setQuery($query);
				$bids = $db->loadObjectList();
				$win = 0;
				$winner = '';
				$win_id = 0;
				$win_price = 0;
				if($bids){
					foreach($bids as $b => $bid){
						$bidder = new stdClass();
						$bidder->id = $bid->user_id;
						$bidder->name = $bid->name;
						$bidder->username = $bid->username;
						$bidder->email = $bid->email;
						
						if($b>0){
							if($win_id!=$bid->user_id){
								DJClassifiedsNotify::notifyAuctionsWinBidder($item->id,$bidder,$bid->price,15);	
							}
						}else{
							if($bid->win){ //if($bid->price>=$item->price_reserve){
								DJClassifiedsNotify::notifyAuctionsWinBidder($item->id,$bidder,$bid->price);
								$win = 1;
							}else{
								DJClassifiedsNotify::notifyAuctionsWinBidder($item->id,$bidder,$bid->price,14);
							}
							$win_id = $bid->user_id;
							$win_price = $bid->price;
							$winner = $bidder;
						}						
					}
					if($win){						
						self::notifyAuctionsWinAuthor($item->id,$winner,$win_price);
					}else{
						self::notifyAuctionsWinAuthor($item->id,$winner,$win_price,13);
					}
				}else{
					self::notifyAuctionsWinAuthor($item->id,'','',12);
				}
				
				$query = "UPDATE `#__djcf_items` SET notify=2 WHERE id=".$item->id;
				$db->setQuery($query);
				$db->execute();
			}
		}	
	}

	public static function notifyAuctionsBidAuthor($id, $bidder, $bid)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
			
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 1 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		$receiver = '';
		if($item->user_id){
			$mailto = $item->u_email;
			$receiver = JFactory::getUser($item->user_id);
		}else{
			$mailto = $item->email;
		}
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
		
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,$bidder,$bid);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,$bidder,$bid);
		
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}
	
	public static function notifyAuctionsBidBidder($id, $bidder, $bid)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 2 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		$receiver = $bidder;
		
		$mailto = $bidder->email;
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,$bidder,$bid);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,$bidder,$bid);
			
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}
	
	public static function notifyAuctionsBidOutbid($id, $bidder, $bid, $prev_bid)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 3 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		
		$receiver = JFactory::getUser($prev_bid->user_id);
		$mailto = $receiver->email;				
		
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,$bidder,$bid);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,$bidder,$bid);
			
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}
	
	public static function notifyAuctionsWinAuthor($id, $bidder, $bid, $email_id=4)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = ".$email_id." LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		$receiver = '';
		if($item->user_id){
			$mailto = $item->u_email;
			$receiver = JFactory::getUser($item->user_id);
		}else{
			$mailto = $item->email;
		}
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,$bidder,$bid);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,$bidder,$bid);
			
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}
	
	public static function notifyAuctionsWinBidder($id, $bidder, $bid, $email_id=5)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = ".$email_id." LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		$receiver = $bidder;
	
		$mailto = $bidder->email;
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();

		$item->purchase_details = self::getPurchaseDetails($item->user_id);
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,$bidder,$bid);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,$bidder,$bid);
			
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}	

	public static function messageAuthorToBidder($id, $bidder, $item, $bid, $owner, $title, $msg)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 6 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		
		$receiver = $bidder;
	
		$mailto = $bidder->email;
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($title,$email->id,$item,$receiver,$bidder,$bid,$msg,$owner);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,$bidder,$bid,$msg,$owner);
			
		$replyto = $owner->email;
		$replytoname = $owner->username;
		
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message, true, null, null, null, $replyto, $replytoname);
		return $sent;
	}	
	
	public static function messageAskFormContact($item, $author, $msg, $files, $replyto, $replytoname, $custom_fields_msg, $cc = array(), $bcc = array())
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$par = JComponentHelper::getParams('com_djclassifieds');
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 7 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
	
		$receiver = '';
		if($item->user_id){
			$mailto = $item->u_email;
			$receiver = JFactory::getUser($item->user_id);
		}else{
			$mailto = $item->email;
			$receiver = new StdClass;
			$receiver->id = '0';
			$receiver->name = '';
			$receiver->username = '';
			$receiver->email = $mailto;
		}
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();

		$app->triggerEvent('onDJClassifiedsPrepareEmail', array($email, $item, $receiver, $msg, $author, $custom_fields_msg));
			
		$msg = nl2br($msg);
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
			
		$attachment = !empty($files['ask_file']['name']) ? $files['ask_file'] : null;
		
		if($par->get('ask_seller_msg_target','0')==0){	// Advert autor email and DJ-Classifieds message plugins
			$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message, true, $cc, $bcc, $attachment, $replyto, $replytoname);
		}else{ // Only DJ-Classifieds message plugins
			$sent = null;
			if($cc){
				self::emailSend($email->id, $mailfrom, $fromname, $cc, $subject, $message, true, null, $bcc, $attachment, $replyto, $replytoname);
			}elseif($bcc){
				foreach($bcc as $bcc_email){
					self::emailSend($email->id, $mailfrom, $fromname, $bcc_email, $subject, $message, true, null, null, $attachment, $replyto, $replytoname);
				}
			}
		}

		if($par->get('ask_seller_copy_sender','0')==1){
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 33 LIMIT 1";
			$db->setQuery($query);
			$email_sender = $db->loadObject();

			$subject_sender = self::parseMessageSubject($email_sender->title,$email_sender->id,$item,$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
			$message_sender = self::parseMessageBody($email_sender->content,$email_sender->id,$item,$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
			$app->triggerEvent('onDJClassifiedsSendCopyMessage', array($item,$author,$author['email'],$mailfrom,$fromname,'','',$subject_sender,$message_sender,$files,$custom_fields_msg));

			if(!empty($author)){
				self::emailSend($email_sender->id, $mailfrom, $fromname, $author['email'], $subject_sender, $message_sender, true, null, null, $attachment, $replyto, $replytoname);
			}
		}

		if($par->get('ask_seller_copy_admin',0)){
			self::emailSend($email->id, $mailfrom, $fromname, self::getAdminMailto(), $subject, $message, true, null, null, $attachment, $replyto, $replytoname);
		}

		JPluginHelper::importPlugin('djclassifiedsmessage');		
		$app->triggerEvent('onDJClassifiedsSendMessage', array(&$item,&$author,&$mailto,&$mailfrom,&$fromname,&$replyto,&$replytoname,&$subject,&$msg,&$files,&$custom_fields_msg));
		
		return $sent;
	}

	public static function messageProfileAskFormContact($profile, $author, $msg, $files, $replyto, $replytoname, $custom_fields_msg, $cc = array(), $bcc = array())
	{
		$app = JFactory::getApplication();
		$par = JComponentHelper::getParams('com_djclassifieds');
		$db = JFactory::getDBO();
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 34 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();

		$mailto = $profile['user']->email;
		$receiver = $profile['user'];

		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();

		$app->triggerEvent('onDJClassifiedsPrepareEmail', array($email, null, $receiver, $msg, $author, $custom_fields_msg));
			
		$msg = nl2br($msg);
		$subject = self::parseMessageSubject($email->title,$email->id,'',$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
		$message = self::parseMessageBody($email->content,$email->id,'',$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
			
		$attachment = !empty($files['ask_file']['name']) ? $files['ask_file'] : null;
	
		JPluginHelper::importPlugin('djclassifiedsmessage');
		$app->triggerEvent('onDJClassifiedsSendProfileMessage', array($profile,$author,$mailto,$mailfrom,$fromname,$replyto,$replytoname,$subject,$message,$files,$custom_fields_msg));          
		
		if($par->get('ask_seller_msg_target','0')==0){	// Advert autor email and DJ-Classifieds message plugins
			$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message, true, $cc, $bcc, $attachment, $replyto, $replytoname);
		}else{ // Only DJ-Classifieds message plugins
			$sent = null;
			if($cc){
				self::emailSend($email->id, $mailfrom, $fromname, $cc, $subject, $message, true, null, $bcc, $attachment, $replyto, $replytoname);
			}elseif($bcc){
				foreach($bcc as $bcc_email){
					self::emailSend($email->id, $mailfrom, $fromname, $bcc_email, $subject, $message, true, null, null, $attachment, $replyto, $replytoname);
				}
			}
		}

		if($par->get('ask_seller_copy_sender','0')==1){
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 33 LIMIT 1";
			$db->setQuery($query);
			$email_sender = $db->loadObject();
				
			$subject_sender = self::parseMessageSubject($email_sender->title,$email_sender->id,'',$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
			$message_sender = self::parseMessageBody($email_sender->content,$email_sender->id,'',$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
			$app->triggerEvent('onDJClassifiedsSendCopyMessage', array('',$author,$author['email'],$mailfrom,$fromname,'','',$subject_sender,$message_sender,$files,$custom_fields_msg));

			if(!empty($author)){
				self::emailSend($email_sender->id, $mailfrom, $fromname, $author['email'], $subject_sender, $message_sender, true, null, null, $attachment, $replyto, $replytoname);
			}
		}

		if($par->get('ask_seller_copy_admin',0)){
			self::emailSend($email->id, $mailfrom, $fromname, self::getAdminMailto(), $subject, $message, true, null, null, $attachment, $replyto, $replytoname);
		}

		return $sent;
	}

	public static function messageAskFormNotification($item, $author, $msg, $files, $replyto, $replytoname, $custom_fields_msg)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 27 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
	
		$receiver = '';
		if($item->user_id){
			$mailto = $item->u_email;
			$receiver = JFactory::getUser($item->user_id);
		}else{
			$mailto = $item->email;
		}
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();

		$attachment = !empty($files['ask_file']['name']) ? $files['ask_file'] : null;
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);	
	
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message, true, null, null, $attachment, $replyto, $replytoname);
		return $sent;
	}	
	
	public static function messageAskProfileFormNotification($profile, $author, $msg, $files, $replyto, $replytoname, $custom_fields_msg)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 36 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		
		$mailto = $profile['user']->email;
		$receiver = $profile['user']->id;
		
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();

		$attachment = !empty($files['ask_file']['name']) ? $files['ask_file'] : null;
			
		$subject = self::parseMessageSubject($email->title,$email->id,'',$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
		$message = self::parseMessageBody($email->content,$email->id,'',$receiver,'','','','',$msg,$author,'','','','',$custom_fields_msg);
	
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message, true, null, null, $attachment, $replyto, $replytoname);
		return $sent;
	}
	
	public static function messageAbuseFormContact($item, $author, $msg, $mailto)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 8 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
	
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,'','','','','','','',$msg,$author);
		$message = self::parseMessageBody($email->content,$email->id,$item,'','','','','','','',$msg,$author);
			
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}

	public static function notifyBuynowBuyer($id, $buyer, $quantity)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
		
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 16 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();		
		
		$receiver = $buyer;
		$mailto = $buyer->email;
		
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
		
		$item->purchase_details = self::getPurchaseDetails($item->user_id);
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','','','','','',$buyer,$quantity);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','','','','','',$buyer,$quantity);
		
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}
	
	public static function notifyBuynowAuthor($id, $buyer, $quantity)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 17 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		
		$receiver = '';
		if($item->user_id){
			$mailto = $item->u_email;
			$receiver = JFactory::getUser($item->user_id);
		}else{
			$mailto = $item->email;
		}		
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();

		$item->purchase_details = self::getPurchaseDetails($item->user_id);
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','','','','','',$buyer,$quantity);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','','','','','',$buyer,$quantity);
		
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}	
	
	public static function notifyUserPublication($id, $new_status)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 19 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
		
		$item->published = $new_status;
	
		$receiver = '';
		if($item->user_id){
			$mailto = $item->u_email;
			$receiver = JFactory::getUser($item->user_id);
		}else{
			$mailto = $item->email;
		}
				
		if($mailto==''){
			return true;
		}
		if(!filter_var(str_replace("'","",$mailto),FILTER_VALIDATE_EMAIL)){
			return true;
		}
		
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver);
	
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}

	public static function notifyUserPayment($type, $id, $payment_info)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$djmodel = new DJClassifiedsModel();

		$item = '';
		if($type == ''){
			$item = $djmodel->getItemById($id);
		}
		
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 20 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
	
		$receiver = '';
		if($item){
			if($item->user_id){
				$mailto = $item->u_email;
				$receiver = JFactory::getUser($item->user_id);
			}else{
				$mailto = $item->email;
			}
		}else{
			$mailto = $user->email;
			$receiver = $user;
		}
		
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','','','','','','','','',$payment_info);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','','','','','','','','',$payment_info);
	
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		self::emailSend($email->id, $mailfrom, $fromname, self::getAdminMailto(), $subject, $message);
		return $sent;
	}

	public static function notifyUserPaymentCompleted($payment)
	{
		JPluginHelper::importPlugin('djclassifieds');
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		$par = JComponentHelper::getParams('com_djclassifieds');

		$payment_info = array();
		$ad_payment_details = array();
		$receiver = '';
		$item_name = '';
		$type = '';
		$item_id = '';
		$item = '';
		$offer = '';
		$order = '';

		if($payment->type==5){					 		
			$type = JText::_('COM_DJCLASSIFIEDS_OFFER');
			$query = "SELECT * FROM #__djcf_offers WHERE id=".$payment->item_id;
			$db->setQuery($query);
			$offer = $db->loadObject();				 
			$item_id = $offer->item_id;
		}else if($payment->type==4){					 		
			$type = JText::_('COM_DJCLASSIFIEDS_BUYNOW');
			$query = "SELECT * FROM #__djcf_orders WHERE id=".$payment->item_id;
			$db->setQuery($query);
			$order = $db->loadObject();
			$item_id = $order->item_id;
		}else if($payment->type==3){					 		
			$type = JText::_('COM_DJCLASSIFIEDS_SUBSCRIPTION_PLAN');
			$query = "SELECT *  FROM #__djcf_plans WHERE id=".$payment->item_id;					
			$db->setQuery($query);
			$plan = $db->loadObject();
			$item_name = $plan->name;
		}else if($payment->type==2){					 		
			$type = JText::_('COM_DJCLASSIFIEDS_PROMOTION_MOVE_TO_TOP');
			$item_id = $payment->item_id;
		}else if($payment->type==1){					 		
			$type = JText::_('COM_DJCLASSIFIEDS_POINTS_PACKAGE');
			$query = "SELECT * FROM #__djcf_points WHERE id=".$payment->item_id;					
			$db->setQuery($query);
			$points = $db->loadResult();
			$item_name = $points->name;
		}else{
			$type = JText::_('COM_DJCLASSIFIEDS_ADVERT');
			$item_id = $payment->item_id;

			if($payment->type_details){
				$ad_payment_details = DJClassifiedsPayment::getAdvertPaymentTypeDetails($payment->type_details);
			}
		}

		if($item_id){
			$item = $djmodel->getItemById($item_id);
			$item_name = $item->name;
		}

		if($ad_payment_details){
			$type .= ' - '.implode(', ', $ad_payment_details);
		}
		
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 35 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();

		if($payment->user_id){
			$receiver = JFactory::getUser($payment->user_id);
			$mailto = $receiver->email;
		}elseif(!empty($item->email)){
			$receiver = new stdClass();
			$receiver->user_id = '0';
			$receiver->user_name = JText::_('COM_DJCLASSIFIEDS_GUEST');
			$receiver->user_username = JText::_('COM_DJCLASSIFIEDS_GUEST');
			$receiver->user_email = $item->email;
			$mailto = $item->email;
		}else{
			return;
		}

		$payment_info['payment_id'] = $payment->id;
		$payment_info['amount'] = $payment->price;
		$payment_info['itemname'] = $item_name;
		$payment_info['info'] = '';
		$payment_info['type'] = $type;
		$payment_info['method'] = str_replace('djcf', '', $payment->method);
		
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();

		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','','','','','','','','',$payment_info,'',$offer);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','','','','','','','','',$payment_info,'',$offer);

		$mailer = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message, true, null, ($par->get('notify_payment_complete_copy_admin', 0) ? self::getAdminMailto() : null), null, null, null, true);

		$app->triggerEvent('onNotifyUserPaymentCompletedPrepareMailer', array(&$mailer, $payment->id));
		return $mailer->Send();
	}

	public static function notifyUserPoints($user_id, $points_info)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser($user_id);
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 22 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();

		$mailto = $user->email;
		$receiver = $user;
		
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,'',$receiver,'','','','','','','','','','','','',$points_info);
		$message = self::parseMessageBody($email->content,$email->id,'',$receiver,'','','','','','','','','','','','',$points_info);
					
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}

	public static function notifyAdminPaymentPoints($type, $payment_info)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 23 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
	
		$receiver = '';
		$mailto = self::getAdminMailto();		
	
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,'',$receiver,'','','','','','','','','','','',$payment_info);
		$message = self::parseMessageBody($email->content,$email->id,'',$receiver,'','','','','','','','','','','',$payment_info);

		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}

	public static function notifyOfferBuyer($id, $buyer, $price, $quantity, $offer_msg='')
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
	
		$offer = array();
		$offer['price'] = $price;
		$offer['quantity'] = $quantity;
		$offer['msg'] = $offer_msg;
		$offer['offerer_name'] = $buyer->name;
		$offer['offerer_email'] = $buyer->email;
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 24 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
	
		$receiver = $buyer;
		$mailto = $buyer->email;
	
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','','','','','','','','','','',$offer);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','','','','','','','','','','',$offer);
			
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}
	
	public static function notifyOfferAuthor($id, $buyer, $price, $quantity, $offer_msg='')
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);
	
		$offer = array();
		$offer['price'] = $price;
		$offer['quantity'] = $quantity;
		$offer['msg'] = $offer_msg;
		$offer['offerer_name'] = $buyer->name;
		$offer['offerer_email'] = $buyer->email;
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 25 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
	
		$receiver = '';
		if($item->user_id){
			$mailto = $item->u_email;
			$receiver = JFactory::getUser($item->user_id);
		}else{
			$mailto = $item->email;
		}
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','','','','','','','','','','',$offer);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','','','','','','','','','','',$offer);
	
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}
	
	public static function messageOfferAuthorToOfferer($id, $bidder, $item, $offer)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
	
		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 26 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();
	
		$receiver = $bidder;
	
		$mailto = $bidder->email;
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = self::parseMessageSubject($email->title,$email->id,$item,$receiver,'','','','','','','','','','','','','',$offer);
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','','','','','','','','','','',$offer);
			
		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}
	
	public static function notifySearchAlerts()
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
	
		$query = "SELECT i.id, i.cat_id, i.name, i.alias, i.intro_desc, i.description, i.user_id, i.promotions, i.email, i.published, i.price, c.id c_id, c.name as c_name, c.alias as c_alias, r.id r_id, r.name r_name, r.alias r_alias, s.user_id "
				."FROM #__djcf_search_notifications s "
				."INNER JOIN #__djcf_items i ON s.item_id=i.id "
				."LEFT JOIN #__djcf_categories c ON i.cat_id=c.id "
				."LEFT JOIN #__djcf_regions r ON i.region_id = r.id "
				."ORDER BY s.user_id";
		$db->setQuery($query);
		$items_a = $db->loadObjectList();

		$items = array();
		$id_arr = array();
		foreach($items_a as $item){
			$id_arr[] = $item->id;
			if(!isset($items[$item->user_id])){
				$items[$item->user_id] = array();
			}
			$items[$item->user_id][] = $item;
		}

		$items_img = $id_arr ? DJClassifiedsImage::getAdsImages(implode(',', $id_arr)) : array();

		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 28 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();

		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		foreach($items as $u_id=>$item_u){
			$items_list = '';
				
			foreach($item_u as $item){				
				$img_url = '';
				foreach($items_img as $img){
					if($item->id==$img->item_id){
						$img_url = $img->thumb_m;
						break;														
					}
				}

				$link = JRoute::link('site', DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias,$item->cat_id.':'.$item->c_alias,$item->region_id.':'.$item->r_alias), true, null, true);
				
				if($img_url){
					$items_list .= '<img src="'.JURI::root(false).$img_url.'" alt=""/><br />';
				}
				$items_list .= '<a href="'.$link.'">'.$item->name.'</a><br /><br />';
				
			}
			
			$sa = array();
			$sa['total'] = count($item_u);
			$sa['items_list'] = $items_list;
				
			$receiver = JFactory::getUser($u_id);

			$mailto = $receiver->email;

			$subject = $email->title;
			$message = self::parseMessageBody($email->content,$email->id,'',$receiver,'','','','','','','','','','','','','','',$sa);

			$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
			if(!is_object($sent)){
				$query = "DELETE FROM #__djcf_search_notifications WHERE user_id=".$u_id;
				$db->setQuery($query);
				$db->execute();
			}
		}
	}
	
	public static function notifyAdminRenewAdvert($item)
	{
		$app = JFactory::getApplication();
		$par = JComponentHelper::getParams('com_djclassifieds');
		$db  = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();

		if($par->get('notify_admin','0')){
			$item = $djmodel->getItemById($item->id);

			$email_id = 29;
				
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = ".$email_id." LIMIT 1";
			$db->setQuery($query);
			$email = $db->loadObject();
			
			$mailto = self::getAdminMailto();
				
			$mailfrom = $app->getCfg('mailfrom');
			$fromname = self::getFromname();

			$subject = self::parseMessageSubject($email->title,$email->id,$item);
			$m_message = self::parseMessageBody($email->content,$email->id,$item);				

			$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $m_message);
			return $sent;
		}
	}
	
	public static function notifyAdminBadWords($item)
	{
		$app = JFactory::getApplication();
		$db  = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($item->id);

		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 30 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();

		$mailto = self::getAdminMailto();

		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();

		$subject = self::parseMessageSubject($email->title,$email->id,$item);
		$m_message = self::parseMessageBody($email->content,$email->id,$item);

		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $m_message);
		return $sent;
	}

	public static function notifyConfirmOfferAuthor($id, $buyer, $price, $quantity)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$djmodel = new DJClassifiedsModel();
		
		$item = $djmodel->getItemById($id);

		$offer = array();
		$offer['price'] = $price;
		$offer['quantity'] = $quantity;
		$offer['msg'] = '';
		$offer['offerer_name'] = $buyer->name;
		$offer['offerer_email'] = $buyer->email;

		$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 31 LIMIT 1";
		$db->setQuery($query);
		$email = $db->loadObject();

		$receiver = '';
		if($item->user_id){
			$mailto = $item->u_email;
			$receiver = JFactory::getUser($item->user_id);
		}else{
			$mailto = $item->email;
		}
		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
			
		$subject = $email->title;
		$message = self::parseMessageBody($email->content,$email->id,$item,$receiver,'','','','','','','','','','','','','',$offer);

		$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $message);
		return $sent;
	}

	public static function notifyPlansExpired($notify_days = 0, $limit = 0)
	{
		$app = JFactory::getApplication();
		$db	= JFactory::getDBO();

		$mailfrom = $app->getCfg('mailfrom');
		$fromname = self::getFromname();
		
		if(!$notify_days){
			return;
		}

		$date_now = JFactory::getDate()->toSQL();
		$date_exp = JFactory::getDate('now + '.$notify_days.' day')->toSQL();
		$lim = $limit > 0 ? ' LIMIT '.$limit : '';
				
		$query = "SELECT p.*, ps.id subscr_id, ps.date_exp, u.id as user_id, u.name as u_name, u.email as u_email, u.username as u_username "
				."FROM #__djcf_plans_subscr ps "
				."INNER JOIN #__djcf_plans p ON ps.plan_id=p.id "
				."LEFT JOIN #__users u ON ps.user_id=u.id "
				."WHERE ps.notify_expired=0 AND ps.date_exp!='0000-00-00 00:00:00' AND ps.date_exp > '".$date_now."' AND ps.date_exp < '".$date_exp."' ".$lim;		
		$db->setQuery($query);
		$subs = $db->loadObjectList();

		foreach($subs as $sub){
			$query = "SELECT e.* FROM #__djcf_emails e WHERE e.id = 37 LIMIT 1";
			$db->setQuery($query);
			$email = $db->loadObject();

			$receiver = JFactory::getUser($sub->user_id);
			$mailto = $receiver->email;

			$subject = self::parseMessageSubject($email->title,$email->id,'',$receiver,'','','','','','','','','','','','','','',array(),$sub);
			$m_message = self::parseMessageBody($email->content,$email->id,'',$receiver,'','','','','','','','','','','','','','',array(),$sub);
			$m_message = str_ireplace('[[plan_expire_days]]', $notify_days, $m_message);
			
			$sent = self::emailSend($email->id, $mailfrom, $fromname, $mailto, $subject, $m_message);
			if(!is_object($sent)){
				$query = "UPDATE `#__djcf_plans_subscr` SET notify_expired=1 WHERE id=".$sub->subscr_id;
				$db->setQuery($query);
				$db->execute();
			}
		}	
	}

	public static function getPurchaseDetails($user_id)
	{
		$djmodel = new DJClassifiedsModel();
		$purchase_details = $djmodel->getPurchaseDetails($user_id);

		return $purchase_details;
	}

	public static function parseMessageSubject($message,$message_id,$item=null,$receiver=null,$bidder=null,$bid=null,$bcontact_message=null,$bowner=null,$contact_message=null,$contact_author=null,$abuse_message=null,$abuse_author=null,$buyer=null,$quantity=null,$contact_fields_message=null,$payment_info=null,$points_info=null,$offer=null,$sa=null,$plan=null,$prom=null)
	{
		return self::parseMessage($message,$message_id,$item,$receiver,$bidder,$bid,$bcontact_message,$bowner,$contact_message,$contact_author,$abuse_message,$abuse_author,$buyer,$quantity,$contact_fields_message,$payment_info,$points_info,$offer,$sa,$plan,$prom);
	}

	public static function parseMessageBody($message,$message_id,$item=null,$receiver=null,$bidder=null,$bid=null,$bcontact_message=null,$bowner=null,$contact_message=null,$contact_author=null,$abuse_message=null,$abuse_author=null,$buyer=null,$quantity=null,$contact_fields_message=null,$payment_info=null,$points_info=null,$offer=null,$sa=null,$plan=null,$prom=null)
	{
		$config = JFactory::getConfig();
		$par = JComponentHelper::getParams('com_djclassifieds');
		$message = self::parseMessage($message,$message_id,$item,$receiver,$bidder,$bid,$bcontact_message,$bowner,$contact_message,$contact_author,$abuse_message,$abuse_author,$buyer,$quantity,$contact_fields_message,$payment_info,$points_info,$offer,$sa,$plan,$prom);

		if($par->get('use_email_master_template', '0')){
			$message = str_ireplace('[[email_template]]', $message, $par->get('email_master_template'));
			$message = str_ireplace('[[site_name]]', $config->get('sitename'), $message);
		}

		return $message;
	}
	
	public static function parseMessage($message,$message_id,$item=null,$receiver=null,$bidder=null,$bid=null,$bcontact_message=null,$bowner=null,$contact_message=null,$contact_author=null,$abuse_message=null,$abuse_author=null,$buyer=null,$quantity=null,$contact_fields_message=null,$payment_info=null,$points_info=null,$offer=null,$sa=null,$plan=null,$prom=null)
	{
		$app = JFactory::getApplication();
		$par = JComponentHelper::getParams('com_djclassifieds');
		$djmodel = new DJClassifiedsModel();

		$app->triggerEvent('onAdminBeforeParseEmailBody', array(&$message,$message_id,&$item,&$receiver,&$bidder,&$bid,&$bcontact_message,&$bowner,$contact_message,&$contact_author,&$abuse_message,&$abuse_author,&$buyer,&$quantity,&$contact_fields_message));

		DJClassifiedsTheme::loadFrontLanguage(); // loading lang set on front for proper lang const translations
		$message = JText::_($message); // subject/body as lang consts support

		if($item){
			$item = $djmodel->getItemById($item->id, true); // force db load to make sure the updated status is right
			$link = JRoute::link('site', DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias,$item->cat_id.':'.$item->c_alias,$item->region_id.':'.$item->r_alias).($message_id == '18' ? '&exp_notif=1' : ''), true, null, true);
			
			$message = str_ireplace('[[advert_id]]', $item->id, $message);
			$message = str_ireplace('[[advert_link]]', '<a href="'.$link.'">'.$link.'</a>', $message);
			$message = str_ireplace(array('[[advert_link_url]]', '[[advert_url]]'), $link, $message);
			$message = str_ireplace('[[advert_title]]', $item->name, $message);
			$message = str_ireplace('[[advert_title_link]]', '<a href="'.$link.'">'.$item->name.'</a>', $message);
			$message = str_ireplace('[[advert_category]]', JText::_($item->c_name), $message);
			$message = str_ireplace('[[advert_category_path]]', strip_tags(DJClassifiedsCategory::getCatFullPath($item->cat_id)), $message);
			$message = str_ireplace('[[advert_region]]', JText::_($item->r_name), $message);
			$reg_parts = DJClassifiedsRegion::getRegionParts($item->region_id);
			$message = str_ireplace('[[advert_region_path]]', $reg_parts['reg_path'], $message);
			$message = str_ireplace('[[advert_region_country]]', $reg_parts['country'], $message);
			$message = str_ireplace('[[advert_region_city]]', $reg_parts['city'], $message);
			$addr_parts = array();
			if($item->address) $addr_parts[] = $item->address;
			if($item->post_code) $addr_parts[] = $item->post_code;
			$message = str_ireplace('[[advert_address]]', implode(', ', $addr_parts), $message);
			$message = str_ireplace('[[advert_intro_desc]]', $item->intro_desc, $message);
			$message = str_ireplace('[[advert_desc]]', $item->description, $message);
			if($item->user_id){
				$message = str_ireplace('[[advert_author_name]]', $item->u_name, $message);
				$message = str_ireplace('[[advert_author_email]]', $item->u_email, $message);
			}else{
				$message = str_ireplace('[[advert_author_name]]', JText::_('COM_DJCLASSIFIEDS_GUEST'), $message);
				$message = str_ireplace('[[advert_author_email]]', $item->email, $message);
			}
			if($item->published==1){
			 	$message = str_ireplace('[[advert_status]]', JText::_('COM_DJCLASSIFIEDS_PUBLISHED'), $message);
			}elseif($item->published==2){
				$message = str_ireplace('[[advert_status]]', JText::_('COM_DJCLASSIFIEDS_ARCHIVED'), $message);
			}else{
				$message = str_ireplace('[[advert_status]]', JText::_('COM_DJCLASSIFIEDS_WAITING_FOR_PUBLISH'), $message);
			}	

			if(strpos($message, '[[advert_custom_field_') !== false){
				preg_match('/(?<=\[\[advert_custom_field_)(.*)(?=\]\])/', $message, $matches);
				foreach(array_unique($matches) as $field_name){
					$value = DJClassifiedsField::getFieldValue($field_name, $item->id);
					$message = str_ireplace('[[advert_custom_field_'.$field_name.']]', $value, $message);
				}
			}

			if(strpos($message, '[[advert_image]]') !== false){
				$item_images = DJClassifiedsImage::getAdsImages($item->id);
				$thumb_type = DJClassifiedsImage::getThumbType('email');
				$item_image = '<img src="'.(!empty($item_images[0]) ? JUri::root().ltrim($item_images[0]->thumb_email, '/') : JUri::root().DJClassifiedsTheme::getImgAssetPath('no-image.svg')).'" alt="'.(!empty($item_images[0]) ? $item_images[0]->caption : 'no image').'" style="'.DJClassifiedsImage::getThumbStyle($thumb_type, $par).'" />';
				$message = str_ireplace('[[advert_image]]', $item_image, $message);
			}

			if(strpos($message, '[[advert_edit]]') !== false || strpos($message, '[[advert_edit_link]]') !== false){
				$edit_link = JRoute::link('site', DJClassifiedsSEO::getViewUri('additem').(!$receiver->id && $item->token ? '&token='.$item->token : '&id='.$item->id), true, null, true);
				$message = str_ireplace(array('[[advert_edit]]', '[[advert_edit_link]]'), '<a href="'.$edit_link.'">'.JText::_('COM_DJCLASSIFIEDS_EDITION_LINK').'</a>', $message);
			}
			if(strpos($message, '[[advert_delete]]') !== false || strpos($message, '[[advert_delete_link]]') !== false){
				$delete_link = JRoute::link('site', DJClassifiedsSEO::getViewUri('item').(!$receiver->id && $item->token ? '&task=deleteToken&token='.$item->token : '&task=delete&id='.$item->id), true, null, true);
				$message = str_ireplace(array('[[advert_delete]]', '[[advert_delete_link]]'), '<a href="'.$delete_link.'">'.JText::_('COM_DJCLASSIFIEDS_REMOVE_LINK').'</a>', $message);
			}
		}

		if($receiver){
			$message = str_ireplace('[[user_id]]', $receiver->id, $message);
			$message = str_ireplace('[[user_name]]', $receiver->name, $message);
			$message = str_ireplace('[[user_username]]', $receiver->username, $message);
			$message = str_ireplace('[[user_email]]', $receiver->email, $message);

			if(strpos($message, '[[user_custom_field_') !== false){
				preg_match('/(?<=\[\[user_custom_field_)(.*)(?=\]\])/', $message, $matches);
				foreach(array_unique($matches) as $field_name){
					$value = DJClassifiedsField::getFieldValue($field_name, $receiver->id);
					$message = str_ireplace('[[user_custom_field_'.$field_name.']]', $value, $message);
				}
			}
		}
		if($bid){
			$message = str_ireplace('[[bid_value]]', $bid, $message);
		}
		if($bidder){
			$message = str_ireplace('[[bidder_id]]', $bidder->id, $message);
			$message = str_ireplace('[[bidder_name]]', $bidder->name, $message);
			$message = str_ireplace('[[bidder_username]]', $bidder->username, $message);
			$message = str_ireplace('[[bidder_email]]', $bidder->email, $message);
		}
		if($bcontact_message){
			$message = str_ireplace('[[bcontact_message]]',$bcontact_message, $message);	
		}
		if($bowner){
			$message = str_ireplace('[[bcontact_author_name]]',$bowner->name, $message);
		}
		if($contact_fields_message){
			$message = str_ireplace('[[contact_custom_fields_message]]',$contact_fields_message, $message);
		}
		if($contact_message){
			$message = str_ireplace('[[contact_message]]',$contact_message, $message);
		}
		if($contact_author){
			$message = str_ireplace('[[contact_author_name]]',$contact_author['name'], $message);
			$message = str_ireplace('[[contact_author_email]]',$contact_author['email'], $message);
			if($contact_author['user_id']){
				$message = str_ireplace('[[contact_author_name_link]]','<a href="'.$contact_author['profile'].'">'.$contact_author['profile'].'</a>', $message);
			}else{
				$message = str_ireplace('[[contact_author_name_link]]',$contact_author['name'], $message);
			}
		}
		if($abuse_message){
			$message = str_ireplace('[[abuse_message]]',$abuse_message, $message);
		}
		if($abuse_author){
			$message = str_ireplace('[[abuse_author_name]]',$abuse_author->name, $message);
		}
		
		if($buyer){
			$message = str_ireplace('[[buyer_name]]', $buyer->name, $message);
			$message = str_ireplace('[[buyer_email]]', $buyer->email, $message);
		}					
		if($quantity){
			$message = str_ireplace('[[buynow_quantity]]', $quantity, $message);
			$message = str_ireplace('[[buynow_price]]', strip_tags(DJClassifiedsTheme::priceFormat($item->price, !empty($item->currency) ? $item->currency : '')), $message);
			$price_total = $quantity*$item->price;
			$app->triggerEvent('onAdminPriceParseEmailBody', array(&$message,$message_id,$item,$buyer,&$price_total));			
			$message = str_ireplace('[[buynow_price_total]]', strip_tags(DJClassifiedsTheme::priceFormat($price_total, !empty($item->currency) ? $item->currency : '')), $message);
		}		
		if($quantity || $message_id == '5'){
			$message = str_ireplace('[[purchase_details]]', $item->purchase_details, $message);
		}
		
		if($offer){
			$message = str_ireplace('[[offer_quantity]]', $offer['quantity'], $message);
			$offer_price_per_item = round($offer['price']/$offer['quantity'],2);
			$message = str_ireplace('[[offer_price]]', strip_tags(DJClassifiedsTheme::priceFormat($offer_price_per_item, !empty($item->currency) ? $item->currency : '')), $message);
			$message = str_ireplace('[[offer_price_total]]', strip_tags(DJClassifiedsTheme::priceFormat($offer['price'], !empty($item->currency) ? $item->currency : '')), $message);
			$message = str_ireplace('[[offer_message]]', $offer['msg'], $message);
			$message = str_ireplace('[[offerer_name]]', $offer['offerer_name'], $message);
			$message = str_ireplace('[[offerer_email]]', $offer['offerer_email'], $message);
			if(isset($offer['status'])){
				if($offer['status']==1){
					$offer_status = JText::_('COM_DJCLASSIFIEDS_OFFER_ACCEPTED');
				}else{
					$offer_status = JText::_('COM_DJCLASSIFIEDS_OFFER_DECLINED');
				}
				$message = str_ireplace('[[offer_status]]', $offer_status, $message);
			}
			if(isset($offer['response'])){
				$message = str_ireplace('[[offer_response]]', $offer['response'], $message);
			}
		}
		
		if($payment_info){
			$message = str_ireplace('[[payment_item_name]]', !empty($payment_info['itemname']) ? $payment_info['itemname'] : '', $message);
			$message = str_ireplace('[[payment_price]]', !empty($payment_info['amount']) ? strip_tags(DJClassifiedsTheme::priceFormat($payment_info['amount'], !empty($item->currency) ? $item->currency : '')) : '', $message);
			$message = str_ireplace('[[payment_info]]', !empty($payment_info['info']) ? $payment_info['info'] : '', $message);
			$message = str_ireplace('[[payment_id]]', !empty($payment_info['payment_id']) ? $payment_info['payment_id'] : '', $message);
			$message = str_ireplace('[[payment_type]]', !empty($payment_info['type']) ? $payment_info['type'] : '', $message);
			$message = str_ireplace('[[payment_method]]', !empty($payment_info['method']) ? $payment_info['method'] : '', $message);
			if(strpos($message, '[[payment_date]]') !== false){
				$payment = $djmodel->getPayment($payment_info['payment_id']);
				$message = str_ireplace('[[payment_date]]', !empty($payment->date) ? DJClassifiedsTheme::formatDate(strtotime($payment->date)) : '', $message);
			}
		}
		
		if($points_info){
			$message = str_ireplace('[[points_value]]', $points_info['value'], $message);
			$message = str_ireplace('[[points_description]]', $points_info['description'], $message);
		}
		 
		if($sa){		
			$message = str_ireplace('[[search_total]]', $sa['total'], $message);
			$message = str_ireplace('[[search_adverts]]', $sa['items_list'], $message);		
		}
		
		if($plan){
			$message = str_ireplace('[[plan_id]]', $plan->id, $message);
			$message = str_ireplace('[[plan_name]]', $plan->name, $message);
		}

		if($prom){
			$message = str_ireplace('[[prom_name]]', JText::_($prom->label), $message);
		}

		$message = str_ireplace('[[site_url]]', JUri::root(), $message);
		$message = str_ireplace('[[items_url]]', JRoute::link('site', DJClassifiedsSEO::getCategoryRoute('0:all'), true, null, true), $message);
		$message = str_ireplace('[[additem_url]]', JRoute::link('site', DJClassifiedsSEO::getViewUri('additem'), true, null, true), $message);
		$message = str_ireplace('[[useritems_url]]', JRoute::link('site', DJClassifiedsSEO::getViewUri('useritems'), true, null, true), $message);
		$message = str_ireplace('[[profileedit_url]]', JRoute::link('site', DJClassifiedsSEO::getViewUri('profileedit'), true, null, true), $message);

		JPluginHelper::importPlugin('djclassifiedsmessage');
		$app->triggerEvent('onAdminAfterParseEmailBody', array (&$message,$message_id,$item,$buyer));						
		
		return $message;
	}

	static function emailSend($email_id, $mailfrom, $fromname, $mailto, $subject, $message, $mode = true, $cc = null, $bcc = null, $attachment = null, $replyto = null, $replytoname = null, $return_mailer = false)
	{
		$app = JFactory::getApplication();

        if(!$app->get('mailonline','1')){
			$app->enqueueMessage(JText::_('JLIB_MAIL_FUNCTION_OFFLINE'), 'warning');
			return null;
        }

		$app->triggerEvent('onDJClassifiedsEmailSend', array(&$email_id, &$mailfrom, &$fromname, &$mailto, &$subject, &$message, &$mode, &$cc, &$bcc, &$attachment, &$replyto, &$replytoname));

		if(empty($message) || empty($mailto)){
			return null;
		}
		if(DJClassifiedsAccess::isUserEmailDisabled($email_id, $mailto)){
			return null;
		}

		$mailer = JFactory::getMailer();
		$mailer->setSender(array($mailfrom, $fromname));
		$mailer->setSubject($subject);
		$mailer->setBody($message);
		$mailer->IsHTML($mode);
		$mailer->addRecipient($mailto);
		if($cc){
			$mailer->addCc($cc);
		}
		if($bcc){
			$mailer->addBcc($bcc);
		}
		if($attachment){
			if(is_array($attachment['name'])){
				foreach($attachment['name'] as $key => $val){
					$mailer->addAttachment($attachment['tmp_name'][$key], $attachment['name'][$key]);
				}
			}else{
				$mailer->addAttachment($attachment['tmp_name'], $attachment['name']);
			}
		}
		if($replyto && $replytoname){
			$mailer->addReplyTo($replyto, $replytoname);
		}

		return $return_mailer ? $mailer : $mailer->Send();
	}

}

Anon7 - 2022
AnonSec Team