Current File : /home/pacjaorg/public_html/km/components/com_djclassifieds/models/profiles.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');

class DjclassifiedsModelProfiles extends DJClassifiedsModel
{	
	private static $_items_query = '';

	function getItems()
	{
		$app = JFactory::getApplication();
		$db	= JFactory::getDBO();
		$par = $app->getParams('com_djclassifieds');
		$user = JFactory::getUser();

		$ug_restriction = $par->get('ug_restriction');

		$limit = $app->input->getInt('limit', $par->get('profiles_limit','6'));
		$limitstart	= $app->input->getInt('limitstart', 0);
		
		$select = "";
		$join = "";
		$where = "";
		$having = "";

		if($app->input->get('se')){
			$p = $app->input->get('se') == 'p' ? '' : 'p_'; // backward compatibility

			if($app->input->getVar($p.'search')){
				$where .= "AND CONCAT_WS(' ',".($par->get('authorname','name')=='name' ? 'u.name' : 'u.username').",IFNULL(p.address,''),IFNULL(r.name,''),IFNULL(ws.vals,'')) LIKE ".$db->q('%'.$db->escape($app->input->getVar($p.'search'), true).'%')." ";
			}

			$reg_id = DJClassifiedsTheme::getIdFromTree($app->input->getVar($p.'se_regs'));
			if($reg_id){
				$regs = DJClassifiedsRegion::getSubReg($reg_id,1);
				
				$reglist = $reg_id;
				foreach($regs as $r){
					$reglist .= ','. $r->id;
				}
				$where .= 'AND p.region_id IN ('.$reglist.') ';
			}else{
				$reglist = DJClassifiedsRegion::getDefaultRegionsIds();
				if($reglist){
					$where .= 'AND p.region_id IN ('.$reglist.') ';
				}
			}

			$radius = $app->input->getFloat($p.'se_radius',0);
			$se_postcode = $app->input->getVar($p.'se_postcode','');
			$se_postcode_country = $app->input->getVar($p.'se_postcode_c','');
			$se_address = $app->input->getVar($p.'se_address','');
			$se_geoloc = $app->input->getVar($p.'se_geoloc','');
			
			if($radius > 0){
				$radius_unit = $app->input->getCmd($p.'se_radius_unit','km');
				$radius_unit_v = $radius_unit=='mile' ? 3959 : 6371;
				$coord_arr = array();

				if($se_geoloc){
					if(isset($_COOKIE["djcf_latlon"])){
						$user_latlog = explode('_', $_COOKIE["djcf_latlon"]);
						$coord_arr = array('lat' => $user_latlog[0], 'lng' => $user_latlog[1]);
					}
				}else if($se_postcode){
					$coord_arr = DJClassifiedsGeocode::getLocationPostCode($se_postcode, $se_postcode_country);																			
				}else if($se_address){
					$coord_arr = DJClassifiedsGeocode::getLocation($se_address);
				}

				if($coord_arr){
					$select .= ', ( '.$radius_unit_v.' * acos( cos( radians('.$coord_arr['lat'].') ) * cos( radians( p.latitude ) ) * cos( radians( p.longitude ) - radians('.$coord_arr['lng'].') ) + sin( radians('.$coord_arr['lat'].') ) * sin( radians( p.latitude ) ) ) ) AS distance ';
					$having .= "distance < ".$radius." ";
				}elseif($se_postcode || $se_address){
					$app->enqueueMessage(JText::_('COM_DJCLASSIFIEDS_SORRY_WE_CANT_FIND_COORDINATES_FROM_ADDRESS_WE_OMIITED_RANGE_RESTRICTION'), 'notice');
				}
			}
				
			$join .= $this->getSearchFieldsQuery('profile');

			if($app->input->getInt($p.'se_account_type', 0)){
				$where .= "AND p.group_id=".$app->input->getInt($p.'se_account_type', 0)." ";
			}
		}else{
			$reglist = DJClassifiedsRegion::getDefaultRegionsIds();
			if($reglist){
				$where .= 'AND p.region_id IN ('.$reglist.') ';
			}
		}

		if($par->get('profiles_with_items_only','0')){
			$join .= "INNER JOIN (SELECT user_id, count(*) FROM #__djcf_items WHERE user_id!=0 GROUP BY user_id) uc ON u.id=uc.user_id ";
		}

		if($par->get('fav_profiles','0') && $user->id){
			$select = ", f.id as f_id ";
			$join .= "LEFT JOIN #__djcf_profiles_fav f ON u.id=f.profile_id AND f.user_id=".$user->id." ";
			if($par->get('show_fav_profiles','0')){
				$where .= "AND f.id IS NOT NULL ";
			}
		}

		if($par->get('group_id')){
			$where .= "AND p.group_id=".$par->get('group_id')." ";
		}

		$order = $app->input->getCmd('order', $par->get('profiles_ordering','lastvisitDate'));
		$ord_t = $app->input->getCmd('ord_t', $par->get('profiles_ordering_dir','desc'));

		$sort_fields = DJClassifiedsField::getProfileSortFields();

		$ord = "u.lastvisitDate ";
		if($order=="name"){
			$ord = "u.name ";
		}else if($order=="username"){
			$ord = "u.username ";
		}else if($order=="loc"){
			$ord = "r.name ";
		}else if($order=="random"){
			$rand_val = $app->getUserState('djclassifieds.profiles.rand_val', '');
			if(!$limitstart || !$rand_val){
				$rand_val = mt_rand();
				$app->setUserState('djclassifieds.profiles.rand_val', $rand_val);
			}
			$ord = "RAND(".$rand_val.") ";
		}elseif(!empty($sort_fields[$order])){ // sortable custom fields
			$ord = "IFNULL(`".$order."`.value,'') ";
			$join .= "LEFT JOIN (SELECT IFNULL((CASE WHEN f.type='date' THEN fv.value_date WHEN f.type='date_from_to' THEN CONCAT(fv.value_date,' - ',fv.value_date_to) ELSE fv.value END),'') value, fv.user_id FROM #__djcf_fields f INNER JOIN #__djcf_fields_values_profile fv ON f.id=fv.field_id AND f.id='".$sort_fields[$order]->id."') `".$sort_fields[$order]->name."` ON u.id=`".$sort_fields[$order]->name."`.user_id ";
		}

		$ord .= $ord_t == 'asc' ? 'ASC' : 'DESC';

		$query = "SELECT u.id as u_id, u.name, u.username, u.email, u.".$par->get('authorname','name')." as authorname, p.*, img.path, img.path img_path, r.id r_id, r.name as r_name, r.alias as r_alias "
				.$select
				."FROM #__users u "
				."LEFT JOIN #__djcf_profiles p ON u.id=p.user_id "
				."LEFT JOIN (SELECT item_id, CONCAT(path,name,'_th','.',ext) path FROM #__djcf_images WHERE type='profile') img ON p.user_id=img.item_id "
				."LEFT JOIN #__djcf_regions r ON p.region_id=r.id "
				.$join
				.($ug_restriction ? "INNER JOIN (SELECT DISTINCT user_id FROM #__user_usergroup_map WHERE group_id IN (".implode(',',$ug_restriction).")) v ON v.user_id=u.id " : "")
				."WHERE u.block=0 AND (u.activation = '0' OR u.activation = '') "
				.$where
				.($having ? "HAVING ".$having." " : "")
				."ORDER BY ".$ord;

		$app->triggerEvent('onDJClassifiedsProfilesListingQuery', array(&$query, &$limitstart, &$limit, 'profiles', &$par));

		self::$_items_query = $query;
		$items = $this->_getList($query, $limitstart, $limit);

		$profile_fields = $this->getProfileFields(implode(',', array_map(function($v){return $v->u_id;}, $items)), $par);
		
		foreach($items as $key => $item){
			$item->profile_fields = array();
			foreach($profile_fields as $pf){		
				if($item->u_id==$pf->user_id){
					$item->profile_fields[$pf->id] = $pf;
				}
			}

			$items[$key]->profile_uri = DJClassifiedsSEO::getViewUri('profile', array('group_id' => $item->group_id)).'&uid='.DJClassifiedsSEO::getUserSlug($item->u_id, $item->authorname);
		}

		return $items;
	}

	function getCountItems()
	{
		$db = JFactory::getDBO();
		$query = "SELECT count(u_id) FROM (".self::$_items_query.") as q";
		$db->setQuery($query);
		$items_count = $db->loadResult();

		return $items_count;
	}

	function getProfileFields($uid_list, $par)
	{
		$db = JFactory::getDBO();
		$user = JFactory::getUser();
		$ug = implode(',', $user->getAuthorisedViewLevels());
		
		$query = $db->getQuery(true);
		$query->select(array('fv.*', 'f.*'))
			->from('#__djcf_fields f')
			->join('INNER', '#__djcf_fields_values_profile fv ON f.id = fv.field_id')
			->where('f.source = 2')
			->where('f.published = 1')
			->where('f.access IN ('.$ug.')')
			->where('f.in_blog = 1')
			->order('f.ordering, f.label');
		if($uid_list){
			$query->where('fv.user_id IN ('.$uid_list.')');
		}
		$db->setQuery($query);
		$fields = $db->loadObjectList();

		DJClassifiedsAccess::filterFieldsByGroupAccess($fields);
		DJClassifiedsField::convertFieldsValues($fields, $par);
		
		return $fields;
	}
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

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