Current File : /home/pacjaorg/public_html/km/modules/mod_djclassifieds_items/helper.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/djimage.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djseo.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djtheme.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djcategory.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djregion.php');
require_once(JPATH_ROOT.'/administrator/components/com_djclassifieds/lib/djfield.php');
require_once(JPATH_ROOT.'/components/com_djclassifieds/model.php');

class modDjClassifiedsItemsHelper
{
	public static function getItems($params, $cfpar = null)
	{			
		$app = JFactory::getApplication();
		$db	= JFactory::getDBO();
		$user = JFactory::getUser();
		$date_now = JFactory::getDate()->toSQL();
		$djmodel = new DJClassifiedsModel();

		if(!$cfpar){
			$cfpar = JComponentHelper::getParams('com_djclassifieds');
		}

		$select = "";
		$join = "";
		$where = "";

		$ord = "i.date_sort DESC";
		if($params->get('items_ord')==1){
			$ord = "i.display DESC"; 
		}else if($params->get('items_ord')==2){
			$ord = "rand()";
		}else if($params->get('items_ord')==3){
			$ord = "i.name";
		}else if($params->get('items_ord')==4){
			$join .= "LEFT JOIN (SELECT item_id, max(date_exp) date_exp FROM #__djcf_items_promotions WHERE prom_id=5 GROUP BY item_id) ip ON i.id=ip.item_id ";
		    $ord = "ip.date_exp DESC";
		}else if($params->get('items_ord')==5){
		    $ord = "i.last_view DESC, i.date_sort DESC";
		}else if($params->get('items_ord')==6 && $app->input->get('view') == 'item' && $app->input->get('id')){
			$item = $djmodel->getItemById($app->input->getInt('id'));
		    $ord = "(6371 * acos( cos( radians(".$item->latitude.") ) * cos( radians( i.latitude ) ) * cos( radians( i.longitude ) - radians(".$item->longitude.") ) + sin( radians(".$item->latitude.") ) * sin( radians( i.latitude ) ) ) ) ASC, i.date_sort DESC";
		}else if($params->get('items_ord')==7){
			$join .= "LEFT JOIN #__users u ON i.user_id=u.id ";
			$ord = "u.lastvisitDate DESC, i.date_sort DESC";
		}
		
		$prom_list = array();
		if($params->get('only_p_special','0')==1){
			$prom_list[] = "i.promotions LIKE '%p_special%'"; 
		}
		if($params->get('only_p_first','0')==1){
			$prom_list[] = "i.promotions LIKE '%p_first%'"; 
		}
		if($params->get('only_p_bold','0')==1){
			$prom_list[] = "i.promotions LIKE '%p_bold%'"; 
		}
		if($params->get('only_p_border','0')==1){
			$prom_list[] = "i.promotions LIKE '%p_border%'"; 
		}
		if($params->get('only_p_bg','0')==1){
			$prom_list[] = "i.promotions LIKE '%p_bg%'"; 
		}
		if($prom_list){
			$where .= 'AND ('.implode(' OR ', $prom_list).') ';
		}
		
		if($params->get('items_ids')){
			$where .= 'AND i.id IN ('.$params->get('items_ids').') ';
		}
		
		if($params->get('users_ids')){
			$where .= 'AND i.user_id IN ('.$params->get('users_ids').') ';
		}

		$user_groups = $params->get('user_groups','');
		if($user_groups){
			$users_in_groups = array();
			foreach($user_groups as $group){
				$users_in_group = JAccess::getUsersByGroup($group);
				foreach($users_in_group as $user_id) {
					if (!in_array($user_id, $users_in_groups)) {
						array_push($users_in_groups, $user_id);
					}
				}
			}
			$users_in_groups = !empty($users_in_groups) ? implode(", ", $users_in_groups) : 0;
			$where .= 'AND i.user_id IN ('.$users_in_groups.') ';
		}

		if($params->get('type_id')){		
			$where .= 'AND i.type_id IN ('.implode(',', $params->get('type_id')).') ';
		}
		
		$catlist = '';
		if($params->get('fallow_category')==1 && $app->input->getVar('option','')=='com_djclassifieds' && ($app->input->getInt('cid',0) || $app->input->getVar('view','') == 'item')){
			if($app->input->getVar('view','') == 'item'){
				$item = $djmodel->getItemById($app->input->getInt('id', 0));
				$cid = $item->cat_id;
			}else{
				$cid = $app->input->getInt('cid',0);
			}
			$cats = DJClassifiedsCategory::getSubCat($cid,1);
			$catlist = $cid;
			foreach($cats as $c){
				$catlist .= ','. $c->id;
			}
		}elseif($params->get('follow_search') && in_array('category', $params->get('follow_search')) && $app->input->get('se_cats',0)){
			$cid = DJClassifiedsTheme::getIdFromTree($app->input->getVar('se_cats'));
			$cats = DJClassifiedsCategory::getSubCat($cid,1);
			$catlist = $cid;			
			foreach($cats as $c){
				$catlist .= ','. $c->id;
			}
		}else if($params->get('cat_id','0')){
			$cat_ids = $params->get('cat_id','0');
			$catlist = implode(',', $cat_ids);
			foreach($cat_ids as $cat_i){
				$cats = DJClassifiedsCategory::getSubCat($cat_i,1);
				foreach($cats as $c){
					$catlist .= ','. $c->id;
				}
			}
		}
		if($catlist){
			if(JPluginHelper::isEnabled('djclassifieds', 'multicategories')){
				$where .= 'AND (i.cat_id IN ('.$catlist.') OR mc.mcat_c>0) ';
				$join .= "LEFT JOIN ( SELECT item_id, count(id) as  mcat_c FROM #__djcf_items_categories WHERE cat_id IN (".$catlist.") GROUP BY item_id ) mc ON i.id=mc.item_id ";
			}else{
				$where .= 'AND i.cat_id IN ('.$catlist.') ';
			}
		}

		$reglist = '';
		if($params->get('fallow_region')==1 && $app->input->getVar('option','')=='com_djclassifieds' && ($app->input->getInt('rid',0) || $app->input->getVar('view','') == 'item')){
			if($app->input->getInt('rid',0)){
				$rid = $app->input->getInt('rid',0);
			}else{
				$item = $djmodel->getItemById($app->input->getInt('id', 0));
				$rid = $item->region_id;
			}
			$regs = DJClassifiedsRegion::getSubReg($rid,1);
			$reglist = $rid;
			foreach($regs as $r){
				$reglist .= ','. $r->id;
			}
		}elseif($params->get('follow_search') && in_array('region', $params->get('follow_search')) && $app->input->get('se_regs',0)){
			$rid = DJClassifiedsTheme::getIdFromTree($app->input->getVar('se_regs'));
			$regs = DJClassifiedsRegion::getSubReg($rid,1);
			$reglist = $rid;			
			foreach($regs as $r){
				$reglist .= ','. $r->id;
			}
		}else if($params->get('region_id','0')){
			$reg_ids = $params->get('region_id','0');
			$reglist = implode(',', $reg_ids);
			foreach($reg_ids as $reg_i){
				$regs = DJClassifiedsRegion::getSubReg($reg_i,1);
				foreach($regs as $r){
					$reglist .= ','. $r->id;
				}
			}
		}else{	
			$reglist = DJClassifiedsRegion::getDefaultRegionsIds();
		}
		if($reglist){
			$where .= 'AND i.region_id IN ('.$reglist.') ';
		}
		
		if($params->get('follow_user')==1 && $app->input->getVar('option','')=='com_djclassifieds' && $app->input->getVar('view','')=='item' && $app->input->getInt('id',0)){
			$item = $djmodel->getItemById($app->input->getInt('id', 0));
			if($item->user_id){
				$where .= "AND i.user_id=".$item->user_id." ";
			}else if($item->email){
				$where .= "AND i.email='".$item->email."' ";
			}
		}

		if($params->get('follow_type','0')==1 && $app->input->get('option') == 'com_djclassifieds'){
			if($app->input->get('view') == 'items' && $app->input->get('Itemid')){
				$menus = $app->getMenu('site');
				$menu_item = $menus->getItem($app->input->get('Itemid'));
				$it_par = $menu_item->getParams();
				if($it_par->get('type_id')){
					$where .= "AND i.type_id IN (".implode(',',$it_par->get('type_id')).") ";
				}
			}elseif($app->input->getVar('view') == 'item' && $app->input->getInt('id')){
				$item = $djmodel->getItemById($app->input->getInt('id'));
				$where .= "AND i.type_id=".$item->type_id." ";
			}
		}
		
		if($params->get('only_with_img','0')==1){
			$where .= "AND img.img_c>0 ";
			$join .= "LEFT JOIN (SELECT COUNT(img.id) as img_c, img.item_id FROM #__djcf_images img WHERE img.type='item' GROUP BY item_id) img ON i.id=img.item_id ";
		}
		
		if($app->input->getVar('option','')=='com_djclassifieds' && $app->input->getVar('view','')=='item' && $app->input->getInt('id',0)){
			$join .= 'LEFT JOIN (SELECT id FROM #__djcf_items WHERE id='.$app->input->getInt('id',0).') ca ON i.id=ca.id '; // more efficient than standard where
			$where .= 'AND ca.id IS NULL ';
		}

		if($params->get('items_source','0')==1 && $user->id){
			$where .= 'AND i.user_id='.$user->id.' ';
		}else if($params->get('items_source','0')==2 && $user->id){
			$select .= ',f.id as f_id ';
			$join .= "LEFT JOIN #__djcf_favourites f ON i.id=f.item_id AND f.user_id=".$user->id." ";
			$where .=  "AND f.id IS NOT NULL ";				
		}elseif($params->get('items_source','0')==3){
			$latest_items = $app->input->cookie->get('djcf_lastitems', '');
			if($latest_items){
				$items_ids = '';
				$latest_items_ids = explode('_', $latest_items);
				foreach($latest_items_ids as $latest_id){
					if($items_ids){
						$items_ids .=',';
					}
					$items_ids .= intval($latest_id);
				}
			}else{
				$items_ids = 0;
			}
			$where .= 'AND i.id IN ('.$items_ids.') ';
		}else if($params->get('items_source','0')==4 && $app->input->get('option','')=='com_djclassifieds' && $app->input->getVar('view','')=='item' && $app->input->getInt('id',0)){
			$item = $djmodel->getItemById($app->input->getInt('id', 0));
			if($item->user_id){
				$where .= 'AND i.user_id = '.$item->user_id.' AND i.id != '.$app->input->getInt('id').' ';
			}else{
				return null;
			}
		}else if($params->get('items_source','0')!=0){
			return null;
		}

		if($cfpar->get('favourite','1') && $params->get('show_fav_icon','0')==1 && $user->id && $params->get('items_source','0')!=2){
			$select .= ',f.id as f_id ';
			$join .= "LEFT JOIN #__djcf_favourites f ON i.id=f.item_id AND f.user_id=".$user->id." ";
		}
		
		$groups_acl = '0,'.implode(',', $user->getAuthorisedViewLevels());
		$where .= "AND c.access_view IN (".$groups_acl.") ";
		
		if(!isset($_COOKIE["djcf_warning18"])){
			$where .= "AND c.restriction_18=0 ";
		}
		
		if($params->get('only_auctions','0')){
			$where .= "AND i.auction=1 ";
		}

		if($params->get('only_verified','0')){
			$where .= "AND IFNULL(p.verified,0)=1 ";
		}
		
		if($cfpar->get('show_archived',0)==2){
			$where .= "AND (( i.published=1 AND i.date_exp > '".$date_now."') OR i.published=2) ";
		}else{
			$where .= "AND i.published=1 AND i.date_exp > '".$date_now."' ";
		}
		
		$select = "SELECT i.*, c.id c_id, c.name c_name, c.alias c_alias, r.id r_id, r.name r_name, r.alias r_alias, p.verified p_verified ".$select;
		$from = "FROM #__djcf_items i "
				."JOIN #__djcf_categories c ON c.id=i.cat_id "
				."LEFT JOIN #__djcf_regions r ON r.id=i.region_id "
				."LEFT JOIN #__djcf_profiles p ON i.user_id=p.user_id "
				.$join;
		$where = "WHERE i.blocked=0 AND c.published!=0 ".$where;

		$app->triggerEvent('onPrepareDJClassifiedsItemsModuleListingQueryWhere', array(&$where, &$params));

		if($ord == 'rand()'){
			$query = $select.$from."JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM #__djcf_items)) AS num, @num:=@num+1 FROM (SELECT @num:=0) AS a, #__djcf_items LIMIT ".$params->get('items_nr').") AS tmp ON tmp.num = i.id ".$where;
		}else{
			$query = $select.$from.$where."ORDER BY ".$ord." LIMIT ".$params->get('items_nr');
		}

		// custom backward compatibility
		$limitstart = null;
		$limit = null;
		$app->triggerEvent('onDJClassifiedsListingQuery', array(&$query, &$limitstart, &$limit, 'module.items', $params));

		$app->triggerEvent('onDJClassifiedsItemsModuleListingQuery', array(&$query, $params));

		$db->setQuery($query);
		$items = $db->loadObjectList();
		
		if($ord == 'rand()'){
			if(count($items) != $params->get('items_nr')){
				$db->setQuery("SELECT count(*) FROM (".$select.$from.$where.") v");
				$items_c = $db->loadResult();
				if($items_c > $params->get('items_nr')){
					$db->setQuery($query); // retry query with random sort join
					$items = $db->loadObjectList();
				}
			}
			if(count($items) != $params->get('items_nr')){ // standard rand() order
				$query = $select.$from.$where."ORDER BY rand() LIMIT ".$params->get('items_nr');
				$app->triggerEvent('onDJClassifiedsItemsModuleListingQuery', array(&$query, $params));
				$db->setQuery($query);
				$items = $db->loadObjectList();
			}
		}

		if($items){
			$items_img = DJClassifiedsImage::getAdsImages(implode(',', array_map(function($v){return $v->id;}, $items)));
		
			for($i=0;$i<count($items);$i++){
				$img_found = 0;
				$items[$i]->images = array();
				foreach($items_img as $img){
					if($items[$i]->id == $img->item_id){
						$img_found = 1;
						if(count($items[$i]->images)==0){
							$items[$i]->img_path = $img->path;
							$items[$i]->img_name = $img->name;
							$items[$i]->img_ext = $img->ext;
							$items[$i]->img_caption = $img->caption;
						}
						$items[$i]->images[] = $img;
					}else if($img_found){
						break;
					}
				}

				if($items[$i]->auction){
					$items[$i]->highest_bid = $djmodel->getHighestBid($items[$i]->id);
				}

				DJClassifiedsField::convertOverwritableFieldsValues($items[$i], $cfpar);

				$items[$i]->item_uri = DJClassifiedsSEO::getItemRoute($items[$i]->id.':'.$items[$i]->alias,$items[$i]->cat_id.':'.$items[$i]->c_alias,$items[$i]->region_id.':'.$items[$i]->r_alias, true);
			}
		}
		
		return $items;
	}
	
	static function getFields($id_list, $params, $cfpar)
	{
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$ug = implode(',', $user->getAuthorisedViewLevels());
		$par = clone $cfpar; // clone in case of set
		
		$query = $db->getQuery(true);
		$query->select(array('fv.*', 'f.*'))
			->from('#__djcf_fields f')
			->join('INNER', '#__djcf_fields_values fv ON f.id = fv.field_id')
			->where('f.published = 1')
			->where('f.access IN ('.$ug.')')
			->where('f.in_module = 1')
			//->where('f.name NOT IN ('.implode(',', DJClassifiedsField::getOverwritableFieldNames(true)).')')
			->order('f.ordering, f.label');
		if($id_list){
			$query->where('fv.item_id IN ('.$id_list.')');
		}
		if($params->get('custom_fields','0') == '1'){
			$query->where('f.source = 0');
		}elseif($params->get('custom_fields','0') == '2'){
			$query->where('f.source = 1');
		}elseif($params->get('custom_fields','0') == '3'){
			$query->where('f.source IN (0, 1)');
		}
		$db->setQuery($query);
		$fields = $db->loadObjectList();

		if($params->get('show_empty_cf','') != ''){
			$par->set('show_empty_cf', $params->get('show_empty_cf'));
		}

		DJClassifiedsAccess::filterFieldsByGroupAccess($fields);
		DJClassifiedsField::convertFieldsValues($fields, $par);

		return $fields;
	}

	static function getTypes() // backward compatibility
	{
		return DJClassifiedsType::getTypes();
	}

	static function getModuleWithAjaxAjax()
	{
		$app = JFactory::getApplication();
		$mod_name = $app->input->get('mod_name');
		$mod_id = $app->input->get('mod_id');

		$app->setUserState($mod_name.$mod_id.'.ajaxload', true);

		$module = JModuleHelper::getModuleById((string)$mod_id);
		echo JModuleHelper::renderModule($module);
		$app->close();
	}
}

class modDjClassifiedsItems extends modDjClassifiedsItemsHelper // backward compatibility
{}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

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