Current File : /home/pacjaorg/public_html/kmm/components/com_djclassifieds/controllers/item.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;

class DJClassifiedsControllerItem extends JControllerLegacy
{
	public function display($cachable = false, $urlparams = Array())
	{
		$app = JFactory::getApplication();
		$db	= JFactory::getDBO();
		$user = JFactory::getUser();
		$date_now = JFactory::getDate();
		$par = $app->getParams('com_djclassifieds');
		$id = $app->input->getInt('id', 0);
		$token = $app->input->get('token', '');
		
		$app->input->set('view','item');
	
		if($id){
			$query = "SELECT * FROM #__djcf_items WHERE id=".$id;
			$db->setQuery($query);
			$item = $db->loadObject();
			if(!$item){
				DJClassifiedsSEO::handleItemNotFound();
			}
		}else{ // if ad not chosen, use first user's ad
			if(!$user->id){
				DJClassifiedsSEO::redirectLogIn();
			}
			$query = "SELECT * FROM #__djcf_items WHERE user_id=".$user->id." LIMIT 1";
			$db->setQuery($query);
			$item = $db->loadObject();
			if($item){
				$app->input->set('id', $item->id);		
			}else{
				DJCLassifiedsSEO::redirectWrongItem(DJClassifiedsSEO::getViewUri('additem'), 'COM_DJCLASSIFIEDS_ITEM_NOT_FOUND', 'warning');
			}
		}

		$app->triggerEvent('onDJClassifiedsPrepareItem', array(&$item, &$par, 'item.display'));
		
		$advert_available = true;
		$cat_available = true;
	
		if(!empty($item->cat_id)){
			$query = "SELECT * FROM #__djcf_categories WHERE id=".$item->cat_id." LIMIT 1";
			$db->setQuery($query);
			$cat = $db->loadObject();
			if(!$cat->published){
				$cat_available = false;
			}
		}
		
		if(empty($item->id) || $item->published==0 || $item->blocked==1){			
			$advert_available = false;
		}elseif($item->published==2){
			if($par->get('show_archived','1')){
				$advert_available = true;
			}else{
				$advert_available = false;
			}
		}elseif($date_now >= $item->date_exp){
			if($par->get('access_expired','0') && JFactory::getDate('now - '.(int)$par->get('access_expired').' day') < $item->date_exp){
				$advert_available = true;
			}else{
				$advert_available = false;
			}
		}
	
		$own_item = false;
		if(($user->id && $user->id == $item->user_id) || (!$user->id && $token && $token == $item->token)){
			$own_item = true;
			$advert_available = true;
			if($item->blocked){
				$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_BLOCKED_ADVERT'), 'notice');
			}
		}
	
		if($par->get('buynow','0') && $user->id){
			$query = "SELECT id FROM #__djcf_orders WHERE item_id=".$item->id." AND user_id=".$user->id;
			$db->setQuery($query);
			$is_buyer = $db->loadResult();
			if($is_buyer){
				$advert_available = true;
			}
		}
		if($par->get('auctions') && $user->id){
			$query = "SELECT win FROM #__djcf_auctions WHERE item_id=".$item->id." AND user_id=".$user->id;
			$db->setQuery($query);
			$is_winner = $db->loadResult();
			if($is_winner){
				$advert_available = true;
			}
		}
		
		if($par->get('admin_can_edit_delete','0') && $user->authorise('core.admin', 'com_djclassifieds')){
			$advert_available = true;
		}
		
		if(!$advert_available || !$cat_available){
			if($app->input->get('exp_notif', '')){ // expire notification email
				$uri = JUri::getInstance();
				$uri->delVar('exp_notif');
				$login_url = new JUri(JRoute::_('index.php?option=com_users&view=login', false));
				$login_url->setVar('return', base64_encode($uri));
				$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_PLEASE_LOGIN'), 'notice');
				$app->redirect($login_url);
			}
			DJClassifiedsSEO::handleItemNotFound();
		}
	
		if($app->input->get('prev')){
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_PREVIEW_OF_ADVERT'), 'notice');
		}
		if($item->published==2){
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ARCHIVE_ADVERT'), 'notice');
		}elseif($date_now >= $item->date_exp){
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ITEM_EXPIRED'), 'warning');
		}elseif($item->published==0){
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_UNPUBLISHED_ADVERT'), 'notice');
		}
	
		if(!$own_item){
			$query = "UPDATE #__djcf_items SET display=display+1 WHERE id=".$id;
			$db->setQuery($query);
			$db->execute();
		}

		$app->setUserState('djcf.pre_edit_page', array('view' => 'item', 'id' => $id, 'juri' => JUri::getInstance()));
		
		parent::display();
	}

	function ask()
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('item');
		$id	= $app->input->getInt('item_id', 0);
		$msg = strip_tags($app->input->getStr('ask_message'));
		$send_email = false;

		$app->setUserState('askform_name', $app->input->getStr('ask_name'));
		$app->setUserState('askform_email', $app->input->getStr('ask_email'));
		$app->setUserState('askform_message', $app->input->getStr('ask_message'));
		$app->setUserState('djcf.askform.data', $app->input->post->getArray());

		$item = $model->getItemById($id);

		if($par->get('ask_seller_type','0') == 0 && !$user->id){
			DJClassifiedsSEO::redirectLogIn($item->item_uri);
		}

		$date_last5 = JFactory::getDate('now - '.(int)$par->get('ask_limit_one', 5).' minute')->toSQL();
		$date_lasth = JFactory::getDate('now - 1 hour')->toSQL();
		$user_ip = $app->input->server->getStr('REMOTE_ADDR');
			
		if($user->id){
			$query = "SELECT COUNT(id) FROM #__djcf_itemsask WHERE user_id=".$user->id." AND item_id=".$id." AND date>".$db->q($date_last5);
			$db->setQuery($query);
			$check = $db->loadResult();
			if($check > 0){
				$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ASK_MESSAGE_LIMIT'), 'warning');
				$app->redirect(JRoute::_($item->item_uri, false));
			}
		
			if($par->get('ask_limit_hour', 15)){
				$query = "SELECT COUNT(id) FROM #__djcf_itemsask WHERE user_id=".$user->id." AND date>".$db->q($date_lasth);
				$db->setQuery($query);
				$check = $db->loadResult();
				if($check > $par->get('ask_limit_hour',15)){
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ASK_MESSAGE_LIMIT_HOUR'), 'warning');
					$app->redirect(JRoute::_($item->item_uri, false));
				}
			}

			if(!DJClassifiedsAccess::checkAskFormFiles()){
				$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_MESSAGE_NOT_SENT'), 'warning');
				$app->redirect(JRoute::_($item->item_uri.'&ae=1', false));
			}

			$custom_fields_msg = DJClassifiedsField::getAskFormFieldsForEmail();

			$query = "INSERT INTO #__djcf_itemsask(`item_id`, `user_id`, `ip_address`, `message`, `date`, `custom_fields`) "
					."VALUES(".$id.", ".$user->id.", ".$db->q($user_ip).", ".$db->q($db->escape($msg)).",".$db->q(JFactory::getDate()->toSQL()).", ".$db->q($db->escape($custom_fields_msg)).")"; 
			$db->setQuery($query);
			$db->execute();

			$send_email = true;
								
		}else if($par->get('ask_seller_type','0') == 1){
			if(DJClassifiedsAccess::isCaptchaValid()){
				$query = "SELECT COUNT(id) FROM #__djcf_itemsask WHERE ip_address=".$db->q($user_ip)." AND item_id=".$id." AND date>".$db->q($date_last5);
				$db->setQuery($query);
				$check = $db->loadResult();
				if($check > 0){
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ASK_MESSAGE_LIMIT'), 'warning');
					$app->redirect(JRoute::_($item->item_uri, false));
				}
			
				if($par->get('ask_limit_hour', 15)){
					$query = "SELECT COUNT(id) FROM #__djcf_itemsask WHERE ip_address=".$db->q($user_ip)." AND date>".$db->q($date_lasth);
					$db->setQuery($query);
					$check = $db->loadResult();
					if($check > $par->get('ask_limit_hour',15)){
						$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ASK_MESSAGE_LIMIT_HOUR'), 'warning');
						$app->redirect(JRoute::_($item->item_uri, false));
					}
				}

				if(!DJClassifiedsAccess::checkAskFormFiles()){
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_MESSAGE_NOT_SENT'), 'warning');
					$app->redirect(JRoute::_($item->item_uri.'&ae=1', false));
				}
				
				$custom_fields_msg = DJClassifiedsField::getAskFormFieldsForEmail();
		
				$query = "INSERT INTO #__djcf_itemsask(`item_id`, `user_id`, `ip_address`, `message`, `date`, `custom_fields`) "
						."VALUES(".$id.", 0, ".$db->q($user_ip).", ".$db->q($db->escape($msg)).",".$db->q(JFactory::getDate()->toSQL()).", ".$db->q($db->escape($custom_fields_msg)).")"; 
				$db->setQuery($query);
				$db->execute();
				
				$send_email = true;
		
			}else{
				// $app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_INVALID_CODE'), 'error');
				$app->redirect(JRoute::_($item->item_uri.'&ae=1', false));
			}
		}
		
		if($send_email){	
			$author = array();
			$author['name'] = $app->input->getStr('ask_name');
			$author['email'] = $app->input->getStr('ask_email');
			$author['user_id'] = '';
			$author['profile'] = '';
				
			if($user->id){
				$author['user_id'] = $user->id;
				$author['profile'] = JRoute::link('site', DJClassifiedsSEO::getViewUri('profile', array('group_id' => $model->getUserFieldGroup($user->id))).'&uid='.DJClassifiedsSEO::getUserSlug($user->id, $model->getAuthorName($user->id, $par)), true, null, true);
			}
			
			$replyto = $author['email'];
			$replytoname = $author['name'];

			$email_copy_arr = DJClassifiedsField::getAskFormFieldsEmailCopy($id, $par);
			
			$sent = DJClassifiedsNotify::messageAskFormContact($item,$author,$msg,$_FILES,$replyto,$replytoname,$custom_fields_msg,$email_copy_arr['cc'],$email_copy_arr['bcc']);
			if(!is_object($sent)){
				$app->setUserState('askform_name', null);
				$app->setUserState('askform_email', null);
				$app->setUserState('askform_message', null);
				$app->setUserState('djcf.askform.data', null);

				$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_MESSAGE_SEND'), 'success');
				$app->redirect(JRoute::_($item->item_uri, false));
			}else{
				$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_MESSAGE_NOT_SENT'), 'warning');
				$app->redirect(JRoute::_($item->item_uri, false));
			}
		}
	}

	function abuse()
	{
		$app = JFactory::getApplication();	
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$par = $app->getParams('com_djclassifieds');
		$id	= $app->input->getInt('item_id', 0);
		$msg = strip_tags($app->input->getStr('abuse_message'));
		
		$model = $this->getModel('item');
		$item = $model->getItemById($id);

		if($par->get('abuse_reporting_type','0') == 1 || $user->id){
			if($user->id){
				$query = "SELECT COUNT(id) FROM #__djcf_items_abuse WHERE item_id=".$id." AND user_id=".$user->id;
				$db->setQuery($query);
				$a_count = $db->loadResult();
				if($a_count>0){
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ALREADY_SEND_ABUSE'), 'warning');
					$app->redirect(JRoute::_($item->item_uri, false));
				}
			}elseif(!DJClassifiedsAccess::isCaptchaValid()){
				// $app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_INVALID_CODE'), 'error');
				$app->redirect(JRoute::_($item->item_uri, false));
			}
		
			$query = "INSERT INTO #__djcf_items_abuse(`item_id`,`user_id`,`message`) "
			."VALUES ('".$id."','".$user->id."','".addslashes($msg)."')";
			$db->setQuery($query);
			$db->execute();

			if($par->get('notify_user_email','')){
				$mailto = DJClassifiedsNotify::getAdminMailto();
			}else{
				$mailto = $app->getCfg('mailfrom');
			}
			
			DJClassifiedsNotify::messageAbuseFormContact($item,$user,$msg,$mailto);

			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_MESSAGE_SEND'), 'success');
			$app->redirect(JRoute::_($item->item_uri, false));
		}else{
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_PLEASE_LOGIN'), 'warning');
			$app->redirect(JRoute::_($item->item_uri, false));
		}
	}

	function deleteToken()
	{
		$app = JFactory::getApplication();
		$model = $this->getModel('item');
		$token = $app->input->get('token', '');
		
		$item = $model->getItemByToken($token);
		
		if(!$item){
			DJClassifiedsSEO::redirectWrongItem(DJClassifiedsSEO::getCategoryRoute('0:all'));
		}
	
		$this->delete($item->id);
			
		$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_AD_DELETED'), 'success');
		$app->redirect(JRoute::_(DJClassifiedsSEO::getCategoryRoute('0:all'), false));
	}

	function delete($_id = null)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('item');
		$id = $_id !== null ? $_id : $app->input->getInt('id', 0);
		
		if($par->get('user_ad_delete',0)==1){
			$this->archive($id);
		}else{
			$item = $model->getItemById($id);
			if(!DJClassifiedsAccess::canDeleteItem($item)){
				DJClassifiedsSEO::redirectWrongItem(DJClassifiedsSEO::getViewUri('useritems'));
			}
		
			if($par->get('user_ad_delete_cat_limit','1') == '0' && $item->date_exp > JFactory::getDate()->toSQL()){
				$query = "SELECT ads_limit FROM #__djcf_categories WHERE id=".$item->cat_id;
				$db->setQuery($query);
				$cat_ads_limit = $db->loadResult();
				if($cat_ads_limit){
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_CATEGORY_ADS_LIMIT_DELETE_NOT_ALLOWED'), 'error');
					$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('useritems'), false));
				}
			}

			$app->triggerEvent('onBeforeDJClassifiedsDeleteAdvert', array($item));
			$query = "SELECT * FROM #__djcf_images WHERE item_id=".$item->id." AND type='item'";
			$db->setQuery($query);
			$item_images = $db->loadObjectList('id');
			
			if($item_images){	
				foreach($item_images as $item_img){
					$path_to_delete = JPATH_ROOT.$item_img->path.$item_img->name;
	    			if (JFile::exists($path_to_delete.'.'.$item_img->ext)){
	    				JFile::delete($path_to_delete.'.'.$item_img->ext);
	    			}
	    			if($par->get('leave_small_th','0')==0){
		    			if (JFile::exists($path_to_delete.'_ths.'.$item_img->ext)){
		    				JFile::delete($path_to_delete.'_ths.'.$item_img->ext);
		    			}
	    			}
	    			if (JFile::exists($path_to_delete.'_thm.'.$item_img->ext)){
	    				JFile::delete($path_to_delete.'_thm.'.$item_img->ext);
	    			}
	    			if (JFile::exists($path_to_delete.'_thb.'.$item_img->ext)){
	    				JFile::delete($path_to_delete.'_thb.'.$item_img->ext);
	    			}
				}
			}
	 			 			
			$query = "DELETE FROM #__djcf_items WHERE id=".$item->id;
			$db->setQuery($query);
			$db->execute();
			
			$query = "DELETE FROM #__djcf_fields_values WHERE item_id=".$item->id;
			$db->setQuery($query);
			$db->execute();
			
			$query = "DELETE FROM #__djcf_payments WHERE item_id=".$item->id;
			$db->setQuery($query);
			$db->execute();
			
			$query = "DELETE FROM #__djcf_images WHERE item_id=".$item->id." AND type='item'";
			$db->setQuery($query);
			$db->execute();
			
			$app->triggerEvent('onAfterDJClassifiedsDeleteAdvert', array($item));
			
			$message = JText::_('COM_DJCLASSIFIEDS_AD_DELETED');
		}
		
		if($_id === null){
			$app->enqueueMessage($message, 'success');
			$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('useritems'), false));
		}
	}
	
	function renew() // moved to item.save since 3.8.1
	{
		die('3.8.1 legacy error');
	}

	function archive($_id = null)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$model = $this->getModel('item');
		$id = $_id !== null ? $_id : $app->input->getInt('id', 0);
		
		$item = $model->getItemById($id);
		if(!DJClassifiedsAccess::canEditItem($item)){
			DJClassifiedsSEO::redirectWrongItem(DJClassifiedsSEO::getViewUri('useritems'));
		}

		$app->triggerEvent('onBeforeDJClassifiedsItemArchive', array($item));
	
		$query = "UPDATE #__djcf_items SET published=2 WHERE id=".$id;
		$db->setQuery($query);
		$db->execute();

		if($_id === null){
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ADVERT_MOVED_TO_ARCHIVE'), 'success');
			$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('useritems'), false));
		}
	}	

	function block($_id = null)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$model = $this->getModel('item');
		$par = JComponentHelper::getParams('com_djclassifieds');
		$id = $_id !== null ? $_id : $app->input->getInt('id', 0);
	
		$item = $model->getItemById($id);
		if($par->get('allow_user_block_ad','0')=='0' || !DJClassifiedsAccess::canEditItem($item)){
			DJClassifiedsSEO::redirectWrongItem(DJClassifiedsSEO::getViewUri('useritems'));
		}

		$app->triggerEvent('onBeforeDJClassifiedsItemBlock', array($item));
	
		$query = "UPDATE #__djcf_items SET blocked=1 WHERE id='".$id."' LIMIT 1";
		$db->setQuery($query);
		$db->execute();

		if($_id === null){
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ADVERT_BLOCKED'), 'success');
			$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('useritems'), false));
		}
	}
	
	function activate($_id = null)
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$model = $this->getModel('item');
		$id = $_id !== null ? $_id : $app->input->getInt('id', 0);
	
		$item = $model->getItemById($id);
		if(!DJClassifiedsAccess::canEditItem($item)){
			DJClassifiedsSEO::redirectWrongItem(DJClassifiedsSEO::getViewUri('useritems'));
		}

		$app->triggerEvent('onBeforeDJClassifiedsItemUnblock', array($item));
	
		$query = "UPDATE #__djcf_items SET blocked=0 WHERE id='".$id."' LIMIT 1";
		$db->setQuery($query);
		$db->execute();

		if($_id === null){
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_ADVERT_ACTIVATED'), 'success');
			$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('useritems'), false));
		}
	}
	
	function getSearchFields()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();     		 
		$db = JFactory::getDBO();
		$par = $app->getParams('com_djclassifieds');
		$user = JFactory::getUser();
		$ug = implode(',', $user->getAuthorisedViewLevels());
		$cid = $app->input->getInt('cat_id', 0);
		$mod_id = $app->input->getInt('mod_id', 0);

		$resultsFields = $app->triggerEvent('onBeforeDJClassifiedsDisplaySearchFields', array(&$par));
		if($resultsFields){
			echo trim(implode("\n", $resultsFields));
		}

		if($cid){
			$cat_tree = DJClassifiedsCategory::getSEOParentPath($cid);
			$parent_cid = (int)end($cat_tree);
		}else{
			$parent_cid = '0';
		}
		
		$query = $db->getQuery(true);
		$query->select('f.*')
		->from('#__djcf_fields f')
		->where('f.published = 1')
		->where('f.access IN ('.$ug.')')
		->where('f.search_type != ""')
		->where('f.in_search = 1')
		->where('f.source = 0');
		if($cid){
			$query->select('fx.ordering cat_ordering, fx.cat_id')->join('LEFT', '#__djcf_fields_xref fx ON f.id = fx.field_id')->where('fx.cat_id = '.$cid);
		}else{
			$query->select('0 cat_ordering, 0 cat_id')->where('f.in_search_on_start = 1');
		}
		$query->order('search_ordering, cat_ordering, ordering');

		$app->triggerEvent('onDJClassifiedsGetFormFieldsQuery', array(&$query, 'search.category'));
		$db->setQuery($query);
		$fields_list = $db->loadObjectList();

		$query_contact = $db->getQuery(true);
		$query_contact->select(array('f.*', '0 cat_ordering', '0 cat_id'))
		->from('#__djcf_fields f')
		->where('f.published = 1')
		->where('f.access IN ('.$ug.')')
		->where('f.search_type != ""')
		->where('f.in_search = 1')
		->where('f.source = 1');
		$query->order('search_ordering, cat_ordering, ordering');

		$app->triggerEvent('onDJClassifiedsGetFormFieldsQuery', array(&$query_contact, 'search.contact'));
		$db->setQuery($query_contact);
		$fields_list_contact = $db->loadObjectList();

		$fields_list = array_merge($fields_list, $fields_list_contact);

		DJClassifiedsAccess::filterFieldsByGroupAccess($fields_list);

		foreach($fields_list as $f){
			if(isset($parent_cid) && ($parent_cid != $app->getUserState('last_parent_cid') || !$app->input->get('se'))){
				$app->setUserState('se_'.$f->id,'');
				$app->setUserState('se_'.$f->id.'_min','');
				$app->setUserState('se_'.$f->id.'_max','');
			}
			
			echo DJClassifiedsField::renderSearchFormField($f, $mod_id);
		}

		$app->close();
	}
	
	function addFavourite() // backward compatibility
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('item');
		$id = $app->input->getInt('id', 0);
		$itemid	= $app->input->getVar('Itemid');
	
		$item = $model->getItemById($id);
		
		if($par->get('favourite','1')){
			if($user->id){
				if($item->user_id==$user->id){
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_FAVOURITES_AUTHOR_ALERT'), 'warning');
					$app->redirect(JRoute::_($item->item_uri, false));
				}else{
					$query = "SELECT COUNT(id) FROM #__djcf_favourites WHERE item_id=".$id." AND user_id=".$user->id;
					$db->setQuery($query);
					$user_fav = $db->loadResult();				 
					if(!$user_fav){
						$query = "INSERT INTO #__djcf_favourites (`item_id`, `user_id`) VALUES (".$id.", ".$user->id.")";
						$db->setQuery($query);
						$db->execute();
					}
				}
			}else{
				DJClassifiedsSEO::redirectLogIn('index.php?option=com_djclassifieds&view=item&task=addFavourite&id='.$id.'&Itemid='.$itemid);
			}
		}else{
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_FUNCTION_NOT_AVAILABLE'), 'error');
			$app->redirect(JRoute::_($item->item_uri, false));
		}

		$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_AD_ADDED_TO_FAVOURITES'), 'success');
		$app->redirect(JRoute::_($item->item_uri, false));
	}

	function removeFavourite()
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('item');
		$id = $app->input->getInt('id', 0);
		$cid = $app->input->getInt('cid', 0);
		$itemid	= $app->input->getVar('Itemid');
	
		$item = $model->getItemById($id);
				
		if($par->get('favourite','1')){
			if($user->id){
				$query="DELETE FROM #__djcf_favourites WHERE item_id=".$id." AND user_id=".$user->id." ";
				$db->setQuery($query);
				$db->execute();
			}else{
				DJClassifiedsSEO::redirectLogIn('index.php?option=com_djclassifieds&view=item&task=removeFavourite&cid='.$cid.'&id='.$id.'&Itemid='.$itemid);
			}
		}else{
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_FUNCTION_NOT_AVAILABLE'), 'error');
			$app->redirect(JRoute::_($item->item_uri, false));
		}

		$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_AD_REMOVED_FROM_FAVOURITES'), 'success');
		$app->redirect(JRoute::_($item->item_uri, false));
	}

	function driveDirections()
	{
		$app = JFactory::getApplication();

		$saddr = $app->input->getVar('saddr');
		$daddr = $app->input->getVar('daddr');
		$lat = $app->input->getFloat('latitude');
		$lon = $app->input->getFloat('longitude');
		
		$daddr = $lat > 0 && $lon > 0 ? (float)$lat.','.(float)$lon : $daddr;

		$app->redirect('http://maps.google.com/maps?saddr='.$saddr.'&daddr='.$daddr);	
	}

	function saveBid($assist_retry = false)
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('item');

		if(!$user->id){
			echo '<div id="djbid_alert">'.JText::_('COM_DJCLASSIFIEDS_PLEASE_LOGIN').'</div>';
			$app->close();
		}

		$id	= $app->input->getInt('id', 0);
		$bid = $app->input->getFloat('bid',0);
		$date_now = JFactory::getDate()->toSQL();

		$query = "SELECT * FROM #__djcf_items WHERE id=".$id." AND published=1 AND date_exp >= ".$db->q($date_now);
		$db->setQuery($query);
		$item = $db->loadObject();
		if(!$item){
			echo '<div id="djbid_alert">'.JText::_('COM_DJCLASSIFIEDS_WRONG_AD').'</div>';
			$app->close();
		}

		$app->triggerEvent('onDJClassifiedsPrepareItem', array(&$item, &$par, 'item.saveBid'));

		$bids = $model->getBids($id, $par->get('bids_displayed',5));
		$min_bid = $model->getMinBid($item, $bids);
		$form_price = $min_bid;
		$bid_error = 0;
		$show_form = 1;
		$bid_message = JText::_('COM_DJCLASSIFIEDS_OFFER_PUBLISHED');

		if($bid > 0){
			if($par->get('buynow','0') && $item->buynow && $bid >= $item->price){
				$bid_error = 1;
				$bid_message = JText::_('COM_DJCLASSIFIEDS_YOUR_OFFER_NEEDS_TO_BE_LOWER_THAN_BUYNOW_PRICE');
			}

			$last_bid = $bids ? $bids[0] : null;
			
			if($last_bid && !$item->auction_assist){
				if($last_bid->user_id == $user->id && (!$item->price_reserve || $last_bid->price >= $item->price_reserve)){
					$bid_error = 1;
					$bid_message = JText::_('COM_DJCLASSIFIEDS_YOUR_OFFER_IS_LAST_YOU_CAN_BID_ONLY_OTHER_USERS');
				}
			}
			
			if($item->user_id == $user->id){
				$bid_error = 1;
				$bid_message = JText::_('COM_DJCLASSIFIEDS_YOU_CANT_BID_YOUR_ADVERT');
			}
			
			if(!$bid_error){
				if(!$item->auction_assist){
					if($bid < $min_bid){
						$bid_error = 1;
						$form_price = $min_bid;
						$bid_message = JText::_('COM_DJCLASSIFIEDS_OFFER_SMALLER_THAN_LIMIT').' '.DJClassifiedsTheme::priceFormat($form_price,$item->currency);
					}elseif($item->bid_max > 0){
						$max_bid = $min_bid + $item->bid_max;
						
						if($item->bid_max && $bid>$max_bid){
							$bid_error = 1;
							$form_price = $max_bid;
							$bid_message = JText::_('COM_DJCLASSIFIEDS_OFFER_BIGGER_THAN_LIMIT').' '.DJClassifiedsTheme::priceFormat($form_price,$item->currency);
						}
					}
				}
				
				if(!$bid_error){
					$user_ip = $_SERVER['REMOTE_ADDR'];

					if(!$item->auction_assist){
						$win = 0;
						if($bid >= $item->price_reserve && $item->bid_autoclose == 1){
							$win = 1;
						}
						
						$query = "INSERT INTO #__djcf_auctions(`item_id`, `user_id`, `ip_address`,`date`,`price`,`win`) "
								."VALUES(".$id.", ".$user->id.", ".$db->q($user_ip).", ".$db->q($date_now).", ".$bid.", ".$win.")";
						$db->setQuery($query);
						$db->execute();

						$bids = $model->getBids($id, $par->get('bids_displayed',5)); // get updated bids
						$form_price = $model->getMinBid($item, $bids); // new min bid
						
						if($win){
							$query = "UPDATE #__djcf_items SET notify=2 WHERE id=".$item->id;
							$db->setQuery($query);
							$db->execute();
						}
						
						DJClassifiedsNotify::notifyAuctionsBidAuthor($id,$user,$bid);
						DJClassifiedsNotify::notifyAuctionsBidBidder($id,$user,$bid);
						if($last_bid){
							DJClassifiedsNotify::notifyAuctionsBidOutbid($id,$user,$bid,$last_bid);
						}
						
						$app->triggerEvent('onAfterDJClassifiedsBidAuction', array($item,$user,$bid));
													
						if($win){
							DJClassifiedsNotify::notifyAuctionsWinAuthor($id,$user,$bid);
							DJClassifiedsNotify::notifyAuctionsWinBidder($id,$user,$bid);
							$app->triggerEvent('onAfterDJClassifiedsWinAuction', array($item,$user,$bid));
						}
					}else{ // assisted/automated bidding
						$form_price = $bid;
						$user_id_assist = $user->id;
						$user_max_bid = $model->getUserMaxBid($id, $user->id);

						if(!$assist_retry){
							if($user_max_bid && $bid <= $user_max_bid){
								$bid_error = 1;
								$bid_message = JText::_('COM_DJCLASSIFIEDS_YOUR_NEW_MAX_BID_NEEDS_TO_BE_HIGHER_THAN_YOUR_LAST_ONE');
							}elseif($bid < $min_bid){
								$bid_error = 1;
								$form_price = $min_bid;
								$bid_message = JText::_('COM_DJCLASSIFIEDS_OFFER_SMALLER_THAN_LIMIT').' '.DJClassifiedsTheme::priceFormat($form_price, $item->currency);
							}else{
								$query = "INSERT INTO #__djcf_auctions_assist(item_id, user_id, max_bid, date) VALUES(".$id.", ".$user->id.", ".$bid.", ".$db->q($date_now).")";
								$db->setQuery($query);
								$db->execute();
								if($user_max_bid){
									$bid_message = JText::_('COM_DJCLASSIFIEDS_YOUR_MAX_BID_HAS_BEEN_UPDATED');
								}
							}
						}

						if(!$bid_error){
							if($last_bid){
								if($last_bid->user_id != $user->id){
									$query = "SELECT * FROM #__djcf_auctions_assist WHERE item_id=".$id." AND user_id!=".$user->id." AND max_bid>".$last_bid->price." ORDER BY max_bid ASC";
									$db->setQuery($query);
									$auction_max_bids = $db->loadObjectList();
									if($auction_max_bids){
										foreach($auction_max_bids as $max){
											if($max->max_bid >= $bid){
												$bid_assist = $bid;
												$user_id_assist = $max->user_id;
												break;
											}
										}
										if(empty($winning_bid)){
											foreach($auction_max_bids as $max){
												if($max->max_bid >= $min_bid){
													if($max->max_bid < $bid){
														$bid_assist = $max->max_bid;
														$retry = true; // found other user's max bid higher than the min bid - save bid retry needed after auction insert
													}else{
														$bid_assist = $bid;
													}
													$user_id_assist = $max->user_id;
													break;
												}
											}
										}
									}

									if(!empty($bid_assist)){ // new auction insert for one of the previous bidders
										if($last_bid->user_id != $user_id_assist){
											DJClassifiedsNotify::notifyAuctionsBidOutbid($id,JFactory::getUser($user_id_assist),$bid_assist,$last_bid);
										}
										$bid_message = JText::_('COM_DJCLASSIFIEDS_YOUR_BID_IS_NOT_THE_HIGHEST_ONE');
										$bid_error = 1;
									}elseif($bid >= $min_bid){ // new auction insert for the bidding user
										$bid_assist = $min_bid;
										$bid_message = JText::_('COM_DJCLASSIFIEDS_YOUR_BID_IS_THE_HIGHEST_ONE');
									}else{
										$bid_message = JText::_('COM_DJCLASSIFIEDS_YOUR_BID_IS_NOT_THE_HIGHEST_ONE');
									}
								}
							}else{
								$bid_assist = $min_bid;
							}

							if(!empty($bid_assist)){
								$all_auction_bids = $model->getBids($id);
								$new_bidder = true;
								foreach($all_auction_bids as $auction_bids){
									if($auction_bids->user_id == $user_id_assist){
										$new_bidder = false;
										break;
									}
								}
								if($new_bidder){
									DJClassifiedsNotify::notifyAuctionsBidAuthor($id,$user,$bid);
									DJClassifiedsNotify::notifyAuctionsBidBidder($id,$user,$bid);
								}
								if($user_id_assist != $user->id){
									$user_ip = '';
								}

								$query = "INSERT INTO #__djcf_auctions(`item_id`, `user_id`, `ip_address`, `date`, `price`, `win`, `assist`) "
								."VALUES(".$id.", ".$user_id_assist.", ".$db->q($user_ip).", ".$db->q($date_now).", ".$bid_assist.", 0, 1)";
								$db->setQuery($query);
								$db->execute();

								$bids = $model->getBids($id, $par->get('bids_displayed',5)); // get updated bids

								if(!empty($retry)){
									$this->saveBid(true);
								}
							}
						}
					}
				}
			}										
		}else{
			$bid_error = 1;
			$bid_message = JText::_('COM_DJCLASSIFIEDS_PLEASE_ENTER_PRICE_VALUE');					
		}

		echo DJClassifiedsTheme::renderLayout('auctionform', array('bids' => $bids, 'item' => $item, 'show_form' => $show_form, 'bid_active' => true, 'min_bid' => $form_price, 'user' => $user, 'par' => $par));

		echo '<div id="'.($bid_error ? 'djbid_alert' : 'djbid_message').'" class="djbid-msg">'.$bid_message.'</div>';
		
		$app->close();
	}

	function loadBids()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$user = JFactory::getUser();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('item');

		DJClassifiedsAuction::updateAuctions();

		$item_id = $app->input->getInt('item_id', 0);
		$user_id = $app->input->getInt('user_id', 0);
		$item = $model->getItemById($item_id);
		$bids = $model->getBids($item_id, $par->get('bids_displayed',5));
		$item->date_exp = DJClassifiedsAuction::auctionAutoExtend($item, $bids, $par);
		$bid_active = DJClassifiedsAuction::isBidActive($item, $bids);
		$min_bid = null;
		if($user->id && !$user_id){ // just logged in - show bid input
			$min_bid = $item->auction_assist ? $model->getUserMaxBid($item->id, $user->id) : $model->getMinBid($item, $bids);
		}

		echo DJClassifiedsTheme::renderLayout('auctionform', array('bids' => $bids, 'item' => $item, 'show_form' => true, 'bid_active' => $bid_active, 'min_bid' => $min_bid, 'user' => $user, 'par' => $par));

		$app->close();
	}

	function loadPrice()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('item');

		$item_id = $app->input->getInt('item_id', 0);
		$item = $model->getItemById($item_id);
		$highest_bid = $model->getHighestBid($item_id);

		echo DJClassifiedsTheme::renderLayout('price', array('item' => $item, 'highest_bid' => $highest_bid, 'show_buynow_form' => true, 'context' => 'item', 'par' => $par));

		$app->close();
	}
	
	function delBid()
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$model = $this->getModel('item');

		$id	= $app->input->getInt('id', 0);
		$bid = $app->input->getInt('bid', 0);

		if(!$user->id){
			DJClassifiedsSEO::redirectLogIn();
		}
		
		$item = $model->getItemById($id);
		if(!$item){
			DJClassifiedsSEO::redirectWrongItem();
		}

		if(!$item->user_id || $item->user_id != $user->id){
			DJClassifiedsSEO::redirectWrongItem($item->item_uri);
		}

		$query = "SELECT * FROM #__djcf_auctions WHERE item_id=".$item->id." AND id=".$bid;
		$db->setQuery($query);
		$bid_to_delete = $db->loadObject();
		if($bid_to_delete){
			$query = "DELETE FROM #__djcf_auctions_assist WHERE item_id=".$bid_to_delete->item_id." AND user_id=".$bid_to_delete->user_id;
			$db->setQuery($query);
			$db->execute();
	
			$query = "DELETE FROM #__djcf_auctions WHERE id=".$bid_to_delete->id;
			$db->setQuery($query);
			$db->execute();
	
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_BID_DELETED'), 'success');
		}

		$app->redirect(JRoute::_($item->item_uri, false));
	}
	
	public function getRegionSelect()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$model = $this->getModel('item');
		$id = $app->input->getInt('reg_id', 0);
		$mod_id = $app->input->getInt('mod_id', 0);
		
		DJClassifiedsTheme::loadLanguage('mod_djclassifieds_search', '/modules/mod_djclassifieds_search');
	
		if($id>0){
			$module = JModuleHelper::getModuleById((string)$mod_id);
			$mod_params = new JRegistry($module->params);
			$ord = $mod_params->get('loc_ordering','ordering,name');

			$regions = $model->getRegions($ord, $id);
			if($regions){
				if($mod_params->get('loc_hide_empty','0')){
					$not_empty_reg_ids = array_map(function($i){
						return $i->id;
					}, DJClassifiedsRegion::getRegAllItemsCount(1,1));
					foreach($regions as $key => $reg){
						if(!in_array($reg->id, $not_empty_reg_ids)){
							unset($regions[$key]);
						}
					}
					if(!$regions){
						$app->close();
					}
				}

				$parent_reg = $model->getRegion($id);

				echo DJClassifiedsTheme::renderLayout('searchselectreg', array(
					'regions' => $regions,
					'reg_id' => $id,
					'mod_id' => $mod_id,
					'empty_opt_text' => JText::sprintf((!empty($parent_reg->header_text) ? $parent_reg->header_text : 'MOD_DJCLASSIFIEDS_SEARCH_LOCATION_SELECTOR_EMPTY_VALUE'), JText::_($parent_reg->name)),
					'params' => $mod_params
				));
			}
		}
	
		$app->close();
	}
		
	public function getCategorySelect()
	{		
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$model = $this->getModel('item');
		$id = $app->input->getInt('cat_id', 0);
		$pid = $app->input->getVar('cat_id');
		$mod_id = $app->input->getInt('mod_id', 0);
		
		DJClassifiedsTheme::loadLanguage('mod_djclassifieds_search', '/modules/mod_djclassifieds_search');
		
		if($id>0 && !strstr($pid, 'p')){
			$module = JModuleHelper::getModuleById((string)$mod_id);
			$mod_params = new JRegistry($module->params);
			$ord = $mod_params->get('cat_ordering','ord');
			$ord = $ord == 'ord' ? 'ordering' : $ord;

			$cats = $model->getCategories($ord, $id, false);
			if($cats){
				if($mod_params->get('cat_hide_empty','0')){
					$not_empty_cat_ids = array_map(function($i){
						return $i->id;
					}, DJClassifiedsCategory::getCatAllItemsCount(1,'ord',1));
					foreach($cats as $key => $cat){
						if(!in_array($cat->id, $not_empty_cat_ids)){
							unset($cats[$key]);
						}
					}
					if(!$cats){
						$app->close();
					}
				}

				$parent_cat = $model->getCategory($id);

				echo DJClassifiedsTheme::renderLayout('searchselectcat', array(
					'cats' => $cats, 
					'cat_id' => $id, 
					'mod_id' => $mod_id, 
					'empty_opt_text' => $mod_params->get('cat_select_type','0')==0 && $mod_params->get('cat_hide_1_level','0')==1 && $parent_cat->parent_id==0 ? JTEXT::_('MOD_DJCLASSIFIEDS_SEARCH_CATEGORY_LABEL') : JText::sprintf((!empty($parent_cat->header_text) ? $parent_cat->header_text : 'MOD_DJCLASSIFIEDS_SEARCH_CATEGORY_SELECTOR_EMPTY_VALUE'), JText::_($parent_cat->name)),
					'attr' => '',
					'params' => $mod_params
				));
			}
		}
	
		$app->close();
	}
		
	function getSearchTags(){ // backward compatibility	(for MooComplete)		
		$db 	= JFactory::getDBO();
		$app	= JFactory::getApplication();
		$source = $app->input->get('source','items,categories,regions');
		$res = array();
		
		if(strstr($source, 'categories')){
			$query  = "SELECT a.* FROM (SELECT c.name, cp.name as cp_name FROM #__djcf_categories c 
						LEFT JOIN #__djcf_categories cp ON cp.id=c.parent_id
						WHERE c.published!=0 			  		   
						) a GROUP BY a.name ORDER BY a.name";
			$db->setQuery($query);
			$cats =$db->loadObjectList();			
			
			$res = array();
			foreach($cats as $cat){
				//$res[] = $cat->name.' > '.JTExt::_('COM_DJCLASSIFIEDS_IN_CATEGORY').' '.$cat->cp_name;
				if($cat->cp_name){
					$res[] = $cat->name.' > '.$cat->cp_name;
				}else{
					$res[] = $cat->name;
				}
			}
		}		
					
		if(strstr($source, 'items')){
			$date_now = JFactory::getDate()->toSQL();
			$query  = "SELECT i.*, c.id as c_id, c.name AS c_name, c.alias AS c_alias, r.id as r_id, r.name as r_name, r.alias as r_alias "
					."FROM #__djcf_items i "
					."LEFT JOIN #__djcf_categories c ON i.cat_id = c.id "
					."LEFT JOIN #__djcf_regions r ON i.region_id = r.id "
					."WHERE i.date_exp > '".$date_now."' AND i.published=1 AND c.published!=0 ORDER BY i.name LIMIT 1000";
			$db->setQuery($query);
			$items =$db->loadObjectList();

			foreach($items as $item){
				//$res[] = $item->name.' > '.JTExt::_('COM_DJCLASSIFIEDS_IN_CATEGORY').' '.$item->c_name.' > '.$item->r_name;
				$res[] = $item->name.' > '.$item->c_name.' > '.$item->r_name;
			}
		}
		
		if(strstr($source, 'regions')){
			$query  = "SELECT a.* FROM (SELECT r.name, rp.name as rp_name FROM #__djcf_regions r
						LEFT JOIN #__djcf_regions rp ON rp.id=r.parent_id
						WHERE r.published=1
						) a GROUP BY a.name ORDER BY a.name";
			$db->setQuery($query);
			$regs =$db->loadObjectList();
				
			foreach($regs as $reg){
				if($reg->rp_name){
					$res[] = $reg->name.' > '.$reg->rp_name;
				}else{
					$res[] = $reg->name;
				}
			}
		}
		
		echo  json_encode($res);

		die('');
	}

	function getSearchAutocomplete()
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();

		$source = $app->input->get('source','items,categories,regions');
		$term = $app->input->getStr('term');
		$res = array();
		
		if(strstr($source, 'categories')){
			$query = "SELECT a.* "
					."FROM (SELECT c.id c_id, c.name, cp.id cp_id, cp.name as cp_name "
					."FROM #__djcf_categories c "
					."LEFT JOIN #__djcf_categories cp ON cp.id=c.parent_id "
					."WHERE c.published!=0 AND c.name LIKE ".$db->q('%'.$term.'%').") a "
					."GROUP BY a.name "
					."ORDER BY a.name";
			$db->setQuery($query);
			$cats = $db->loadObjectList();			
			
			foreach($cats as $cat){
				//$res[] = $cat->cp_name ? $cat->name.' > '.$cat->cp_name : $cat->name;
				$res[] = JText::_($cat->name);
			}
		}		

		if(strstr($source, 'items')){
			$date_now = JFactory::getDate()->toSQL();
			$query = "SELECT i.*, c.id as c_id, c.name AS c_name, c.alias AS c_alias, r.id as r_id, r.name as r_name, r.alias as r_alias "
					."FROM #__djcf_items i "
					."LEFT JOIN #__djcf_categories c ON i.cat_id = c.id "
					."LEFT JOIN #__djcf_regions r ON i.region_id = r.id "
					."WHERE i.date_exp > '".$date_now."' AND i.published=1 AND c.published!=0 AND i.name LIKE ".$db->q('%'.$term.'%')." "
					."ORDER BY i.name LIMIT 1000";
			$db->setQuery($query);
			$items = $db->loadObjectList();

			foreach($items as $item){
				//$res[] = $item->name.' ('.JTExt::_('COM_DJCLASSIFIEDS_IN_CATEGORY').' '.$item->c_name.')';
				$res[] = $item->name;
			}
		}
		
		if(strstr($source, 'regions')){
			$query = "SELECT a.* "
					."FROM (SELECT r.id r_id, r.name, rp.id rp_id, rp.name as rp_name "
					."FROM #__djcf_regions r "
					."LEFT JOIN #__djcf_regions rp ON rp.id=r.parent_id "
					."WHERE r.published=1 AND r.name LIKE ".$db->q('%'.$term.'%').") a "
					."GROUP BY a.name "
					."ORDER BY a.name";
			$db->setQuery($query);
			$regs = $db->loadObjectList();
				
			foreach($regs as $reg){
				//$res[] = $reg->rp_name ? $reg->name.' > '.$reg->rp_name : $reg->name;
				$res[] = JText::_($reg->name);
			}
		}
		
		echo json_encode($res);
		$app->close();
	}
		
	function changeItemFavourite()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$par = $app->getParams('com_djclassifieds');
		$item_id = $app->input->getInt('item_id', 0);
	
		if($user->id){
			$query = "SELECT COUNT(id) FROM #__djcf_favourites WHERE item_id=".$item_id." AND user_id=".$user->id;
			$db->setQuery($query);
			$user_fav = $db->loadResult();

			if($user_fav==0){
				$query = "INSERT INTO #__djcf_favourites (`item_id`, `user_id`) VALUES (".$item_id.", ".$user->id.")";
			}else{
				$query = "DELETE FROM #__djcf_favourites WHERE item_id=".$item_id." AND user_id=".$user->id;
			}
			$db->setQuery($query);
			$db->execute();

			echo DJClassifiedsTheme::renderLayout('favbox', array('item_id' => $item_id, 'fav' => !$user_fav, 'par' => $par));
		}
	
		$app->close();
	}

	public function getCountryISO()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$id = $app->input->getInt('reg_id', 0);
	
		if($id){
			$regs = DJClassifiedsRegion::getParentPath($id);
			foreach($regs as $reg){
				if($reg->country_iso){
					echo $reg->country_iso;
					break;
				}
			}
		}
	
		$app->close();
	}
		
	public function getAskFields()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();

		$query = $db->getQuery(true);
		$query->select(array('f.*'))
			->from('#__djcf_fields f')
			->where('f.source = 3')
			->where('f.published = 1')
			->where('f.edition_blocked = 0')
			->order('f.ordering');

		$app->triggerEvent('onDJClassifiedsGetFormFieldsQuery', array(&$query, 'item'));

		$db->setQuery($query);
		$fields_list = $db->loadObjectList();
		
		foreach($fields_list as $f){
			if(!DJClassifiedsAccess::hasAccessToFormField($f)){
				continue;
			}

			DJClassifiedsField::setFieldDefaultValue($f, $user->id);

			echo DJClassifiedsField::renderFormField($f, 0, $app->getUserState('djcf.askform.data'));
		}

		$app->close();
	}
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!