Current File : /home/pacjaorg/www/km/components/com_djclassifieds/controllers/additem.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 DJClassifiedsControllerAddItem extends JControllerLegacy
{
	public function display($cachable = false, $urlparams = Array())
	{
		$app = JFactory::getApplication();

		$app->setUserState('djcf.pre_edit_page', null);
		
		parent::display();
	}

	function captcha()
	{
		$app = JFactory::getApplication();
		$token = $app->input->getCMD('token', '');
		$subscr_id = $app->input->getCMD('subscr_id', '');

		if(DJClassifiedsAccess::isCaptchaValid()){
			$app->setUserState('captcha_sta','1');
		}

		$app->redirect(JRoute::_(DJClassifiedsSEO::getViewUri('additem').($token ? '&token='.$token : '').($subscr_id ? '&subscr_id='.$subscr_id : ''), false));
	}
	
	function save()
	{
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('additem');

		JTable::addIncludePath(JPATH_ROOT.'/administrator/components/com_djclassifieds/tables');
    	$row = JTable::getInstance('Items', 'DJClassifiedsTable');
		
		$id = $app->input->getInt('id', 0);
		$copy = $app->input->getInt('copy', 0);
		$token = $app->input->get('token');
		$redirect = '';
		$new_ad_uri = DJClassifiedsSEO::getViewUri('additem').($id ? '&id='.$id : '').($copy ? '&copy='.$copy : '').($token ? '&token='.$token : '');

		if(!$id && !$copy && !$token){
			$app->setUserState('djcf.additem.data', $app->input->post->getArray());
		}

		if(!$id && !$token && ($par->get('captcha','0')==1 || ($par->get('captcha','0')==2 && !$user->id)) && $par->get('captcha_newad_placement','0')=='1' && !DJClassifiedsAccess::isCaptchaValid()){
			$app->redirect(JRoute::_($new_ad_uri, false));
		}

		if($par->get('user_type') == '1' && !$user->id){
			DJClassifiedsSEO::redirectLogIn($new_ad_uri);
		}

		if($id){
			$item = $model->getItemById($id);
		}elseif($token){
			$item = $model->getItemByToken($token);
		}

		if(!empty($item)){
			$can_edit = DJClassifiedsAccess::canEditItem($item, $par, true);
			if($can_edit !== true){
				DJClassifiedsSEO::redirectWrongItem(null, $can_edit);
			}

			$row->load($item->id);
		}

		$cat_id = DJClassifiedsTheme::getIdFromTree($app->input->getVar('cats'));

		$mcat_limit = $app->input->getInt('mcat_limit', 0);
		$mcat_ids = array();
		for($mi = 0; $mi < $mcat_limit; $mi++){
			$mc = DJClassifiedsTheme::getIdFromTree($app->input->getVar('mcats'.$mi));
			if($mc){
				$mcat_ids[] = $mc;
			}
		}

		if(!$id && !DJClassifiedsAccess::checkAdsLimits($par)){
			$app->redirect(JURI::base());
		}
		$cats_to_check = array_merge(array($cat_id), $mcat_ids);
		if(!DJClassifiedsAccess::checkCatAllowed($cats_to_check) || ($cat_id != $row->cat_id && !DJClassifiedsAccess::checkCatAdsLimits($cats_to_check))){
			$app->redirect(JRoute::_($new_ad_uri, false));
		}

		if($par->get('img_required','0') && $par->get('img_limit','3') > 0 && !$app->input->get('img_image')){
			$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_MISSING_IMAGES'), 'error');
			$app->redirect(JRoute::_($new_ad_uri, false));
		}
		
		DJClassifiedsField::clearOverwritableFields($row);

		$row->bind($app->input->post->getArray());
		
		if($token && !$user->id && !$id){
			$query = "SELECT id FROM #__djcf_items WHERE user_id=0 AND token=".$db->q($db->escape($token));
			$db->setQuery($query);
			$ad_id = $db->loadResult();
			if($ad_id){
				$row->id = $ad_id;
			}else{
				DJClassifiedsSEO::redirectLogIn(DJClassifiedsSEO::getViewUri('additem'));			
			}
		}

		$app->triggerEvent('onAfterInitialiseDJClassifiedsSaveAdvert', array(&$row, &$par));
		
		if($par->get('title_char_limit','0')>0){
			$row->name = mb_substr($row->name, 0,$par->get('title_char_limit','100'),"UTF-8");
		}
			
		if((int)$par->get('allow_htmltags','1') && $par->get('pay_desc_chars','0') == '0'){
			$row->description = $app->input->get('description', '', 'RAW');
			$allowed_tags = implode('', array_map(function($v){return '<'.$v.'>';}, explode(';',$par->get('allowed_htmltags','div;p;span;strong;i;b;em;ul;li;ol;br;hr'))));
			$row->description = strip_tags($row->description, $allowed_tags);
		}else{
			$row->description = nl2br($app->input->getStr('description', ''));
			$row->description = str_ireplace("\r\n", "", $row->description);
		}

		$row->intro_desc = $row->intro_desc ? mb_substr(strip_tags(nl2br($row->intro_desc)), 0, $par->get('introdesc_char_limit','120'), "UTF-8") : '';
		if(!$row->intro_desc || !$app->input->exists('intro_desc')){
			$row->intro_desc = $row->description ? mb_substr(strip_tags($row->description), 0, $par->get('introdesc_char_limit','120'), "UTF-8") : '';
		}
		
		$row->contact = nl2br($app->input->getStr('contact', ''));
		$row->price_negotiable = $app->input->getInt('price_negotiable', 0);
		$row->bid_min = floatval(str_ireplace(',', '.', $app->input->getStr('bid_min', '')));
		$row->bid_max = floatval(str_ireplace(',', '.', $app->input->getStr('bid_max', '')));
		$row->price_start = floatval(str_ireplace(',', '.', $app->input->getStr('price_start', '')));
		$row->price_reserve = floatval(str_ireplace(',', '.', $app->input->getStr('price_reserve', '')));
		if(!$row->id && !$app->input->exists('auction_assist') && $par->get('auctions_assist','0') == '1'){
			$row->auction_assist = 1;
		}
		
		if(!$id && !$token && !$user->id){		
			$characters = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
			$row->token = '';		
			for($p = 0; $p < 20; $p++){
				$row->token .= $characters[mt_rand(0, strlen($characters))];
			}
		}

		$row->cat_id = $cat_id;
		$row->region_id = DJClassifiedsTheme::getIdFromTree($app->input->getVar('regions'));
				
		if($app->input->get('latitude',0) > 0 && $app->input->get('longitude',0) > 0){
			$row->latitude = $app->input->getFloat('latitude');
			$row->longitude = $app->input->getFloat('longitude');
		}elseif($row->region_id || $row->address){
			if($row->post_code){
				$loc_coord = DJClassifiedsGeocode::getLocationPostCode($row->post_code, $row->address, $row->region_id);
			}else{
				$loc_coord = DJClassifiedsGeocode::getLocation($row->address, $row->region_id);
			}
			if(!empty($loc_coord)){
				$row->latitude = floatval($loc_coord['lat']);
				$row->longitude = floatval($loc_coord['lng']);
			}
		}
		$row->latitude = $row->latitude ? $row->latitude : '0';
		$row->longitude = $row->longitude ? $row->longitude : '0';
		
		if($row->id == 0){
			$row->user_id = $user->id;
			$row->ip_address = $_SERVER['REMOTE_ADDR'];
		}

		$duration_price = 0;
		$duration_points = 0;
		if($row->id == 0 || $row->new == 1){
			if($par->get('durations_list')){
				if($app->input->exists('exp_days')){
					$exp_days = $app->input->getInt('exp_days', 0);
				}elseif($row->id){
					$exp_days = $row->exp_days;
				}else{
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_WRONG_DURATION_LIMIT'), 'error');
					$app->redirect(JRoute::_($new_ad_uri, false));
				}
				$duration = $model->getDuration($exp_days, $row->cat_id);
				if($duration){
					$duration_price = $duration->price;
					$duration_points = $duration->points;
				}else{
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_WRONG_DURATION_LIMIT'), 'error');
					$app->redirect(JRoute::_($new_ad_uri, false));
				}
			}else{
				$exp_days = $par->get('exp_days','7');
			}
		}
		
		$cat = null;
		if($row->cat_id){			
			$query = "SELECT * FROM #__djcf_categories WHERE id=".$row->cat_id;	
			$db->setQuery($query);
			$cat = $db->loadObject();
			if(!$cat->alias){
				$cat->alias = DJClassifiedsSEO::getAliasName($cat->name);	
			}
		}
		
		$type = null;
		$type_price = 0;
		$type_points = 0;
		if($row->type_id){
			$type = DJClassifiedsPayment::getTypePrice($user->id, $row->type_id);
			if($type){
				$type_price = $type->price;
				$type_points = $type->points;
			}
		}else{
			$row->type_id = 0;
		}

		$row->promotions = '';
		$promotions = $par->get('promotion','1')=='1' ? $model->getPromotionsPrices() : array();
		
		$is_new = 1;
		$old_row = JTable::getInstance('Items', 'DJClassifiedsTable'); // empty row (for new items' price check)

		if($row->id){	
			$query = "SELECT * FROM #__djcf_items WHERE id=".$row->id;			
			$db->setQuery($query);
			$old_row = $db->loadObject();
			
			$row->date_start = $old_row->date_start;
			$row->alias = $old_row->alias;
			$row->metarobots = $old_row->metarobots;
			$is_new = 0;
		}else{
			$row->date_start = JFactory::getDate()->toSQL();
		}

		if($old_row->new){
			$row->new = $old_row->new;
		}elseif(!$row->id){
			$row->new = 1;
		}else{
			$row->new = 0;
		}

		$row->date_mod = JFactory::getDate()->toSQL();

		if(isset($exp_days) && $old_row->exp_days !== $exp_days){
			if($exp_days == 0){
				$row->date_exp = '2038-01-01 00:00:00'; 
			}elseif($exp_days > 0){
				$new_date_exp = JFactory::getDate($row->date_start)->modify('+'.$exp_days.' day')->toSQL();
				$row->date_exp = $new_date_exp;
			}
			if($row->date_exp == '1970-01-01 1:00:00' || $row->date_exp > '2038-01-01 00:00:00'){
				$row->date_exp = '2038-01-01 00:00:00';
			}
			$row->exp_days = $exp_days;
		}else{
			$row->exp_days = $old_row->exp_days;
		}

		if(!$row->alias){
			$row->alias = DJClassifiedsSEO::getAliasName($row->name);	
		}

		DJClassifiedsAccess::overrideUserAutopublish($par);
				
		if($cat->autopublish == '0'){
			if($par->get('autopublish','1') == '1'){
				$row->published = 1;				 
			}elseif($par->get('autopublish','1') == '2'){ // edit only
				$row->published = ($row->id && $row->published == 1) ? 1 : 0;
			}else{
				$row->published = 0;
			}
		}elseif($cat->autopublish == '1'){
			$row->published = 1;
		}elseif($cat->autopublish == '3'){ // edit only
			$row->published = ($row->id && $row->published == 1) ? 1 : 0;
		}elseif($cat->autopublish == '2'){
			$row->published = 0;
		}

		if($row->published){
			$message = JText::_($row->id ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY');
		}else{
			$message = JText::_($row->id ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY_WAITING_FOR_PUBLISH' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY_WAITING_FOR_PUBLISH');
		}

		if($par->get('ad_preview','0') && $app->input->getInt('prev_val',0)){
			$row->published = 0;
		}

		if($is_new){
			$row->date_sort = $row->date_start;
    	}

		$app->triggerEvent('onBeforeDJClassifiedsSaveAdvert', array(&$row, $is_new));

		if(!$row->store()){
			throw new Exception($row->getError());
		}

		$images_c = DJClassifiedsImage::saveItemImages($row, $is_new, $par);

		$imgfreelimit = $par->get('img_free_limit','-1');
		$images_to_pay = 0;
    	if($imgfreelimit > -1 && $images_c > $imgfreelimit){
			$images_to_pay = $images_c - $imgfreelimit;
    		if(!$is_new){
				$images_to_pay = $images_to_pay - $old_row->extra_images; // 'extra_images' holds the number of images already paid
				if($images_to_pay < 0){
					$images_to_pay = 0;
				}
    		}
    	}
    	
		$desc_chars_limit = $par->get('pay_desc_chars_free_limit',0);
		$chars_to_pay = 0;
		$desc_c = mb_strlen(str_ireplace(array('<br /> ','<br />','<br>','<br/>'), "\n", $row->description));
    	if($par->get('pay_desc_chars',0) && $desc_c > $desc_chars_limit){
    		$chars_to_pay = $desc_c - $desc_chars_limit;
    		if(!$is_new){
				$chars_to_pay = $chars_to_pay - $old_row->extra_chars; // 'extra_chars' holds the number of chars already paid
				if($chars_to_pay < 0){
					$chars_to_pay = 0;
				}
    		}
    	}

		$mcat_list = array();
		if($mcat_ids){
			if($is_new){
				$query = "SELECT * FROM #__djcf_items_categories WHERE item_id=0";
			}else{
				$query = "SELECT * FROM #__djcf_items_categories WHERE item_id=".$row->id;
			}
			$db->setQuery($query);
			$mcat_old_list = $db->loadObjectList('cat_id');

			$query = "SELECT * FROM #__djcf_categories WHERE published=1 AND id IN (".implode(',', $mcat_ids).")";
			$db->setQuery($query);
			$mcat_list = $db->loadObjectList('id');
		}

		$app->triggerEvent('onBeforePaymentsDJClassifiedsSaveAdvert', array(&$row, $is_new, &$cat, &$promotions, &$type_price, &$duration_price, &$images_to_pay, &$chars_to_pay, &$type_points, &$duration_points, &$mcat_list));
		
		$pay_redirect = false;
		$row->pay_type = '';
		$pay_types = array();
		$old_pay_types = explode(',', ($old_row->pay_type ? $old_row->pay_type : ''));

		if(!DJClassifiedsPayment::isFree($cat->price, $cat->points, $par) && (intval($old_row->cat_id) !== intval($row->cat_id) || (intval($old_row->cat_id) === intval($row->cat_id) && in_array('cat', $old_pay_types)))){
			$pay_types[] = 'cat';
		}
		if(!DJClassifiedsPayment::isFree($duration_price, $duration_points, $par) && (intval($old_row->exp_days) !== intval($row->exp_days) || (intval($old_row->exp_days) === intval($row->exp_days) && in_array('duration', $old_pay_types)))){
			$pay_types[] = 'duration';
		}
		if(!DJClassifiedsPayment::isFree($type_price, $type_points, $par) && (intval($old_row->type_id) !== intval($row->type_id) || (intval($old_row->type_id) === intval($row->type_id) && in_array('type', $old_pay_types)))){
			$pay_types[] = 'type';
		}
		if(in_array('duration_renew', $old_pay_types)){
			$pay_types[] = 'duration_renew';
		}
		$row->extra_images_to_pay = $images_to_pay;
		if($images_to_pay > 0){
			$pay_types[] = 'extra_img';
		}
		$row->extra_chars_to_pay = $chars_to_pay;
		if($chars_to_pay > 0){
			$pay_types[] = 'extra_chars';
		}
		foreach($mcat_list as $mc){
			if(!DJClassifiedsPayment::isFree($mc->price, $mc->points, $par) && (empty($mcat_old_list[$mc->id]) || in_array('mc'.$mc->id, $old_pay_types))){
				$pay_types[] = 'mc'.$mc->id;
			}
		}

		$row->pay_type = implode(',', $pay_types).($pay_types ? ',' : '');

		if($par->get('promotion','1') == '1'){
			DJClassifiedsPayment::checkApplyPromotions($row, $old_row, $promotions, $par);
		}

		$app->triggerEvent('onAfterPaymentsDJClassifiedsSaveAdvert', array(&$row, $is_new));

		if($row->pay_type){
			$pay_redirect = true;
			if(!DJClassifiedsPayment::isPayTypePromsOnly($row->pay_type)){ // if non-prom pay types
				$row->published = 0;
			}
		}

		if(!$row->store()){
			throw new Exception($row->getError());
		}

		if($mcat_ids){
			$mcat_ids[] = $row->cat_id;
    		$mcat_where = ' IN ('.implode(',', $mcat_ids).')';
    	}else{    	
    		$mcat_where = ' = '.$row->cat_id.' ';
    	}
    	
		$query = "SELECT f.* "
				."FROM #__djcf_fields f "
			  	."LEFT JOIN #__djcf_fields_xref fx ON f.id=fx.field_id "
		 		."WHERE fx.cat_id ".$mcat_where." AND f.source=0 AND f.edition_blocked=0 "
				."GROUP BY fx.field_id "
		 		."UNION "
		 		."SELECT f.* "
				."FROM #__djcf_fields f "
			  	."LEFT JOIN #__djcf_fields_xref fx ON f.id=fx.field_id "
				."WHERE f.source=1 AND f.edition_blocked=0";
		$db->setQuery($query);
		$fields_list = $db->loadObjectList();
		
		DJClassifiedsField::saveFieldsValues($fields_list, $row->id);
		
		if(!($par->get('ad_preview','0') && $app->input->getInt('prev_val',0))){
			$new_ad = ($id || (!$id && $token)) && empty($old_row->new_draft) ? 0 : 1;
		
			if($par->get('notify_admin','0')){
				if($par->get('notify_admin','0')==1){
					DJClassifiedsNotify::notifyAdmin($row, $new_ad);	
				}else if($par->get('notify_admin','0')==2 && $new_ad){
					DJClassifiedsNotify::notifyAdmin($row, $new_ad);
				}
			}
			if($new_ad && $par->get('user_new_ad_email','0') && ($user->id || ($par->get('email_for_guest','0') && $row->email))){						
				DJClassifiedsNotify::notifyNewAdvertUser($row);
			}
			if($row->new_draft){
				$row->date_start = JFactory::getDate()->toSQL();
				$row->date_sort = JFactory::getDate()->toSQL();
			}
			$row->new_draft = 0;
		}elseif($id == 0){
			$row->new_draft = 1;
		}

		if($old_row->published == 2){
			$row->published = 2;
		}

		if(!$pay_redirect){
			$row->new = 0;
		}

		if(!$row->store()){
			throw new Exception($row->getError());
		}
		
		$app->triggerEvent('onAfterDJClassifiedsSaveAdvert', array(&$row, $is_new));

		if($par->get('ad_preview','0') && $app->input->getInt('prev_val',0)){
			$pay_redirect = false;
			$message = null;
			$item = $model->getItemById($row->id);
			$redirect = DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias, $item->cat_id.':'.$item->c_alias, $item->region_id.':'.$item->r_alias).($row->token ? '&token='.$row->token : '').'&prev=1';
		}
		
		if($pay_redirect){
			if($row->pay_type != $old_row->pay_type){
				DJClassifiedsPayment::deletePrevStartPayment($row->id);
			}
			$redirect = DJClassifiedsSEO::getViewUri('payment').'&id='.$row->id;
			$message = JText::_($is_new ? 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY_CHOOSE_PAYMENT' : 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY_CHOOSE_PAYMENT');
		}
	
		if(!$redirect){
			if($par->get('item_save_redirect')){
				$redirect = 'index.php?Itemid='.$par->get('item_save_redirect');
			}else{
				$item = $model->getItemById($row->id);
				$redirect = DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias, $item->cat_id.':'.$item->c_alias, $item->region_id.':'.$item->r_alias).($item->token ? '&token='.$item->token : '');
			}
		}

		$app->triggerEvent('onBeforeDJClassifiedsSaveAdvertRedirect', array(&$row, $is_new, &$redirect, &$message, $pay_redirect));

		$app->setUserState('djcf.additem.data', null);

		$app->enqueueMessage($message, 'success');
		$app->redirect(JRoute::_($redirect, false));
	}
	
	public function publish()
	{				
		$app = JFactory::getApplication();
		$user = JFactory::getUser();
		$model = $this->getModel('additem');
		$par = $app->getParams('com_djclassifieds');

		$id = $app->input->getInt('id', 0);
		$token = $app->input->get('token');
		$row = JTable::getInstance('Items', 'DJClassifiedsTable');
		$redirect = '';
		
		if(!($id || $token) || $par->get('ad_preview','0') == '0'){
			DJClassifiedsSEO::redirectWrongItem();
		}

		if($id){
			$item = $model->getItemById($id);
		}elseif($token){
			$item = $model->getItemByToken($token);
		}

		if(empty($item) || !DJClassifiedsAccess::canEditItem($item)){
			DJClassifiedsSEO::redirectWrongItem();
		}

		$app->triggerEvent('onBeforeDJClassifiedsPublishAdvert', array(&$item, &$par));

		$row->load($item->id);

		DJClassifiedsAccess::overrideUserAutopublish($par);

		if($item->c_autopublish == '0'){
			if($par->get('autopublish','1') == '1'){
				$row->published = 1;				 
			}elseif($par->get('autopublish','1') == '2'){ // edit only
				$row->published = $row->new_draft ? $row->published : 1;
			}
		}elseif($item->c_autopublish == '1'){
			$row->published = 1;
		}elseif($item->c_autopublish == '3'){ // edit only
			$row->published = $row->new_draft ? $row->published : 1;
		}

		if($item->pay_type && !DJClassifiedsPayment::isPayTypePromsOnly($row->pay_type)){ // if non-prom pay types
			$row->published = 0;
		}

		if($item->pay_type){
			$redirect = DJClassifiedsSEO::getViewUri('payment').'&id='.$item->id;
			$message = JText::_(!$row->new_draft ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY_CHOOSE_PAYMENT' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY_CHOOSE_PAYMENT');
		}elseif($row->published){
			$message = JText::_(!$row->new_draft ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY');
		}else{
			$message = JText::_(!$row->new_draft ? 'COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY_WAITING_FOR_PUBLISH' : 'COM_DJCLASSIFIEDS_AD_ADDED_SUCCESSFULLY_WAITING_FOR_PUBLISH');
		}

		if($item->user_id != $user->id && $par->get('admin_can_edit_delete','0') && $user->authorise('core.admin', 'com_djclassifieds')){
			$row->published = 1;
			$redirect = null;
			$message = JText::_('COM_DJCLASSIFIEDS_AD_SAVED_SUCCESSFULLY');
		}

		if(!$row->store()){
			throw new Exception($row->getError());
		}

		if($item->new_draft){
			if($par->get('notify_admin','0')){
				$new_ad = 1;
				DJClassifiedsNotify::notifyAdmin($item, $new_ad);
			}
			if($par->get('user_new_ad_email','0') && ($user->id || ($par->get('email_for_guest','0') && $item->email))){						
				DJClassifiedsNotify::notifyNewAdvertUser($item);
			}
			$row->new_draft = 0;
			$row->date_start = JFactory::getDate()->toSQL();
			$row->date_sort = JFactory::getDate()->toSQL();
		}elseif($par->get('notify_admin','0')=='1'){
			$new_ad = 0;
			DJClassifiedsNotify::notifyAdmin($item, $new_ad);
		}

		if(!$row->store()){
			throw new Exception($row->getError());
		}

		$app->triggerEvent('onAfterDJClassifiedsPublishAdvert', array(&$row));
		
		if(!$redirect){
			if($par->get('item_save_redirect')){
				$redirect = 'index.php?Itemid='.$par->get('item_save_redirect');
			}else{
				$redirect = DJClassifiedsSEO::getItemRoute($item->id.':'.$item->alias, $item->cat_id.':'.$item->c_alias, $item->region_id.':'.$item->r_alias).($app->input->get('token') ? '&token='.$app->input->get('token') : '');
			}
		}
		
		$app->enqueueMessage($message, 'success');
		$app->redirect(JRoute::_($redirect, false));
	}

	public function getFields()
	{
		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('additem');
		
		$id = $app->input->post->getInt('id', 0);
		$id_copy = $app->input->post->getInt('id_copy', 0);
		$token  = $app->input->post->get('token', '');
		$cid = $app->input->getInt('cat_id', 0);
		$mcat_ids = $app->input->getStr('mcat_ids', '');

		$id = !$id ? $id_copy : $id;
		$id = !$user->id ? 0 : $id;
		
		if($id){
			$item = $model->getItemById($id);
			if($item->user_id != $user->id){
				if($par->get('admin_can_edit_delete','0')==0 || !$user->authorise('core.admin', 'com_djclassifieds')){
					$id = 0;
				}
			}
		}else if($token){
		 	$query = "SELECT * FROM #__djcf_items WHERE token='".addslashes($token)."' AND user_id=0 LIMIT 1";
		 	$db->setQuery($query);
		 	$item = $db->loadObject();	
			if($item){
				$id = $item->id;
			}
		}
		 
		$mcats_list = '';
		if($mcat_ids){
			$mcats = array_filter(explode(',', $mcat_ids));
			foreach($mcats as $mcat){
				$mc = intval(str_ireplace('p', '', $mcat));
				if($mc>0){
					$mcats_list .= $mc.',';
				}
			}
		}
		
		$cat_where = '';
		if($mcats_list){
			$mcats_list .= $cid;
			$cat_where = ' IN ('.$mcats_list.')';
		}elseif($cid){
			$cat_where = ' = '.$cid.' ';
		}
		 
		$query = $db->getQuery(true);
		$query->select(array('fv.*', 'f.*'))
			->from('#__djcf_fields f')
			->join('LEFT', '#__djcf_fields_values fv ON fv.field_id = f.id AND fv.item_id = '.$id)
			->where('f.source = 0')
			->where('f.published = 1')
			->where('f.edition_blocked = 0');
		if($cat_where){
			$query->join('INNER', '#__djcf_fields_xref fx ON f.id = fx.field_id AND fx.cat_id '.$cat_where);
			$query->order('fx.cat_id, fx.ordering, f.ordering');
		}else{
			$query->where('f.all_cats = 1');
			$query->order('f.ordering');
		}
		if($mcats_list){
			$query->group('fx.field_id');
		}

		$app->triggerEvent('onDJClassifiedsGetFormFieldsQuery', array(&$query, 'additem'));
		$db->setQuery($query);
		$fields_list = $db->loadObjectList();
		
		foreach($fields_list as $f){
			if(!DJClassifiedsAccess::hasAccessToFormField($f)){
				continue;
			}
			if($id && $f->value == '' && in_array($f->name, DJClassifiedsField::getOverwritableFieldNames())){
				$f->value = $item->{$f->name};
			}
			if($f->item_id === null){
				DJClassifiedsField::setFieldDefaultValue($f, $user->id);
			}

			echo DJClassifiedsField::renderFormField($f, $id, (!$id ? $app->getUserState('djcf.additem.data') : null));
		}

		$app->close();
	}

	public function getContactFields()
	{
		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('additem');
		
		$id = $app->input->post->getInt('id', 0);
		$id_copy = $app->input->post->getInt('id_copy', 0);
		$token = $app->input->post->get('token', '');

		$id = !$id ? $id_copy : $id;
		$id = !$user->id ? 0 : $id;

		if($id){
			$item = $model->getItemById($id);
			if($item->user_id != $user->id){
				if($par->get('admin_can_edit_delete','0')==0 || !$user->authorise('core.admin', 'com_djclassifieds')){
					$id = 0;
				}
			}
		}else if($token){
		 	$query = "SELECT * FROM #__djcf_items WHERE token='".addslashes($token)."' AND user_id=0 LIMIT 1";
		 	$db->setQuery($query);
		 	$item = $db->loadObject();	
			if($item){
				$id = $item->id;
			}
		}

		$query = $db->getQuery(true);
		$query->select(array('fv.*', 'f.*'))
			->from('#__djcf_fields f')
			->join('LEFT', '#__djcf_fields_values fv ON fv.field_id = f.id AND fv.item_id = '.$id)
			->where('f.source = 1')
			->where('f.published = 1')
			->where('f.edition_blocked = 0')
			->order('f.ordering');

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

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

			if($f->item_id === null){
				DJClassifiedsField::setFieldDefaultValue($f, $user->id);
			}

			echo DJClassifiedsField::renderFormField($f, $id, (!$id ? $app->getUserState('djcf.additem.data') : null));
		}

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

		if(strpos($app->input->get('cat_id', ''), 'p') !== false){
			$app->close();
		}

		$id = $app->input->getInt('cat_id', 0);
		$subscr_id = $app->input->getInt('subscr_id', 0);
	 
		$show_paid = 1;
		$show_price = 1;
		
		if($id){
			$app->triggerEvent('onBeforeDJClassifiedsItemEditGetCategorySelect', array($id, &$show_paid, &$show_price, &$par));
			
			$parent_cat = $model->getCategory($id);
			$cats = $model->getCategories($par->get('cat_ordering', 'ordering'), $id);

			$context = 'additem';
			$app->triggerEvent('onDJClassifiedsItemEditGetCategorySelect', array(&$cats, &$par, $subscr_id, $context));
			
			if($cats){
				$cl = $parent_cat->ads_disabled ? 'validate-djcat' : '';
				echo $parent_cat->ads_disabled ? '<label for="cat_'.$id.'" class="cat-req-helper" style="display:none">'.JText::_('COM_DJCLASSIFIEDS_CATEGORY').'</label>' : '';
				echo DJClassifiedsTheme::renderLayout('selectcategory', array('cats' => $cats, 'cat_id' => $id, 'cl' => $cl, 'show_paid' => $show_paid, 'show_price' => $show_price, 'parent_cat' => $parent_cat, 'par' => $par));
				echo "<div id=\"after_cat_$id\"></div>";
			}
		}
	
		$app->close();
	}

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

		$id = $app->input->getInt('reg_id', 0);
		
		if($id){
			$parent_reg = $model->getRegion($id);
			$regions = $model->getRegions($par->get('reg_ordering', 'ordering,name'), $id);
			if($regions){
				$cl = $parent_reg->ads_disabled ? 'validate-djreg' : '';
				echo $parent_reg->ads_disabled ? '<label for="reg_'.$id.'" class="reg-req-helper" style="display:none">'.JText::_('COM_DJCLASSIFIEDS_LOCALIZATION').'</label>' : '';
				echo DJClassifiedsTheme::renderLayout('selectregion', array('regions' => $regions, 'reg_id' => $id, 'cl' => $cl, 'parent_reg' => $parent_reg, 'par' => $par));
				echo '<div id="after_reg_'.$id.'"></div>';
			}
		}
		
		$app->close();
	}
	
	public function getDurationSelect()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('additem');

		$id = $app->input->getInt('cat_id', 0);
		$c_days = $app->input->getVar('c_days', $par->get('exp_days', '7'));

		$days = $model->getDays($id);
					
		echo DJClassifiedsTheme::renderLayout('selectduration', array('days' => $days, 'exp_days' => $c_days, 'par' => $par));

		$app->close();
	}

	public function getDescCharsPriceInit()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$par = $app->getParams('com_djclassifieds');
		$model = $this->getModel('additem');
		
		$cat_id = $app->input->post->getInt('cat_id', 0);
		$exp_days = $app->input->post->getInt('exp_days', 0);

		$days = $model->getDays($cat_id);
		$day = !empty($days[$exp_days]) ? $days[$exp_days] : null;

		$char_price = $par->get('durations_list','') && $day && $day->char_price_default == 0 ? $day->char_price : $par->get('desc_char_price','0');
		$char_points = $par->get('durations_list','') && $day && $day->char_price_default == 0 ? $day->char_points : $par->get('desc_char_price_points','0');

		echo DJClassifiedsPayment::getPriceText($char_price, $char_points, $par);

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

		$cat_id = $app->input->post->getInt('cat_id', 0);
		$chars_to_pay = $app->input->post->getInt('chars_to_pay', 0);
		$exp_days = $app->input->post->getInt('exp_days', 0);

		$days = $model->getDays($cat_id);
		$day = !empty($days[$exp_days]) ? $days[$exp_days] : null;

		$char_price = $par->get('durations_list','') && $day && $day->char_price_default == 0 ? $day->char_price : $par->get('desc_char_price','0');
		$char_points = $par->get('durations_list','') && $day && $day->char_price_default == 0 ? $day->char_points : $par->get('desc_char_price_points','0');
		
		$new_desc_price = 0;
		if($chars_to_pay > 0){
			$new_desc_price = DJClassifiedsPayment::getPriceText((round($char_price * $chars_to_pay * 100) / 100), (round($char_points * $chars_to_pay * 100) / 100), $par);
		}
		
		echo $new_desc_price;

		$app->close();
	}

	public function checkEmail()
	{
		header("Content-type: text/html; charset=utf-8");
		$app = JFactory::getApplication();
		$db = JFactory::getDBO();
		$par = $app->getParams('com_djclassifieds');

		$email = $app->input->getVar('email');
		
		$query = "SELECT count(id) FROM #__users WHERE email=".$db->q($email);
		$db->setQuery($query);
		$u_exist = $db->loadResult();

		if($u_exist){
			echo JText::_('COM_DJCLASSIFIEDS_EMAIL_EXIST_IN_OUR_DATABASE_PLEASE_LOGIN');
		}else if($par->get('adverts_limit','0')){
			$query = "SELECT count(id) FROM #__djcf_items WHERE email=".$db->q($email);
			$db->setQuery($query);
			$ads_l = $db->loadResult();
			if($ads_l >= $par->get('adverts_limit','0')){
				echo JText::_('COM_DJCLASSIFIEDS_ADVERTS_LIMIT_REACHED_FOR_THIS_EMAIL');
			}
		}else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
			echo JText::_('COM_DJCLASSIFIEDS_EMAIL_ADDRESS_NOT_VALID');
		}

		$app->close();
	}

	function rotateImage()
	{
		$app = JFactory::getApplication();
		$img_src = $app->input->getStr('img_src', '');
		$filename = JPATH_ROOT.'/'.$img_src;

		DJClassifiedsImage::rotate($filename, 1);

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

PACJA Events

Maintenance mode is on

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