Function Reference: geodir_set_location_var_in_session
Summary
Set location data in session.
Global Values
- $wpdb
- (object) (required) WordPress Database object.
- Default: None
Package
GeoDirectory_Location_Manager
Parameters
- $wp
- (object) (required) WordPress object.
- Default: None
Change Log
Since: 1.0.0
Source File
geodir_set_location_var_in_session() is located in geodir_location_manager/geodir_location_hooks_actions.php [Line: 803]
Source Code
function geodir_set_location_var_in_session($wp)
{
//unset($_SESSION['gd_location_shared']);
/*$point1=array('latitude'=>'-22.5260060699' ,'longitude'=> '-43.7334400235' ) ;
$point1=array('latitude'=>'28.635308' ,'longitude'=> '77.22496' ) ;
$point2=array('latitude'=>'-22.7024218' ,'longitude'=> '-43.33662349999997' ) ;
$point2=array('latitude'=>'-22.7356363' ,'longitude'=> '-43.44001100000003' ) ;
echo geodir_calculateDistanceFromLatLong($point1, $point2);
*/
// Avoide all the changes made by core, restore original queryvars ;
// $wp->query_vars=$wp->geodir_query_vars ;
// this code will determine when a user wants to switch location
// A location can be switched using 3 ways
//1. usign location switcher, in this case the url will always have location prefix
// Query Vars will have page_id parameter
// check if query var has page_id and that page id is location page
//print_r($_SESSION);
// my location set start
//Fix for WPML removing page_id query var:
if(isset($wp->query_vars['page']) && !isset($wp->query_vars['page_id']) && isset($wp->query_vars['pagename']) && !is_home()){
global $wpdb;
$page_for_posts = get_option('page_for_posts');
$real_page_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_name=%s",$wp->query_vars['pagename']));
if(function_exists('icl_object_id')){
$real_page_id = icl_object_id($real_page_id, 'page', true, ICL_LANGUAGE_CODE);
}
if($real_page_id && $real_page_id!=$page_for_posts){
$wp->query_vars['page_id'] = $real_page_id;
}
}
if((isset($wp->query_vars['gd_country']) && $wp->query_vars['gd_country'] == 'me' && isset($_SESSION['user_lat']) && $_SESSION['user_lat'] && isset($_SESSION['user_lon']) && $_SESSION['user_lon']) || (isset($_SESSION['all_near_me']) && is_admin()) ){
if(isset($_REQUEST['user_lat']) && $_REQUEST['user_lat']){$_SESSION['user_lat']=$_REQUEST['user_lat'];}
if(isset($_REQUEST['user_lon']) && $_REQUEST['user_lon']){$_SESSION['user_lon']=$_REQUEST['user_lon'];}
if(isset($_SESSION['near_me_range']) && $_SESSION['near_me_range']){$_REQUEST['sdist']=$_SESSION['near_me_range'];}
$_SESSION['all_near_me']=1;
$_REQUEST['sgeo_lat'] = $_SESSION['user_lat'];
$_REQUEST['sgeo_lon'] = $_SESSION['user_lon'];
$_REQUEST['snear'] = 1;
$_SESSION['gd_multi_location'] = 0;
//unset any locations
unset($_SESSION['gd_city'],$_SESSION['gd_region'],$_SESSION['gd_country'] );
return;
}
elseif(isset($wp->query_vars['gd_country']) && $wp->query_vars['gd_country'] == 'me'){
// at the near me page but with no location
add_action('wp_head','geodir_set_user_location_near_me');
return;
}else{
if(isset($_SESSION['all_near_me'])){unset($_SESSION['all_near_me']);}
}
// my location set end
geodir_set_is_geodir_page($wp) ;
if(!get_option('geodir_set_as_home'))
{
if ( empty($wp->query_vars) || !array_diff( array_keys($wp->query_vars), array('preview', 'page', 'paged', 'cpage') ) )
{
if( 'page' == get_option('show_on_front'))
$wp->query_vars['page_id'] = get_option('page_on_front');
}
}
if(isset($wp->query_vars['page_id']) && $wp->query_vars['page_id'] == geodir_location_page_id() || (isset($_REQUEST['set_location_type']) && $_REQUEST['set_location_type'] && isset($_REQUEST['set_location_val']) && $_REQUEST['set_location_val']))
{
$gd_country = '' ;
$gd_region = '' ;
$gd_city = '' ;
if(isset($wp->query_vars['gd_country']) && $wp->query_vars['gd_country'] != '')
$gd_country =urldecode($wp->query_vars['gd_country']) ;
if(isset($wp->query_vars['gd_region']) && $wp->query_vars['gd_region'] != '')
$gd_region =urldecode($wp->query_vars['gd_region']) ;
if(isset($wp->query_vars['gd_city']) && $wp->query_vars['gd_city'] != '')
$gd_city =urldecode($wp->query_vars['gd_city']) ;
if(!($gd_country=='' && $gd_region == '' && $gd_city == '' ))
{
$default_location = geodir_get_default_location();
if( get_option('geodir_add_location_url'))
{
if(get_option('geodir_show_location_url')!='all')
{
/*
* @todo i don't see the point in this code so i am removing it. (stiofan)
*/
/*
if($gd_region=='' )
{
if(isset($_SESSION['gd_region']))
$gd_region = $_SESSION['gd_region'];
else
$gd_region =$default_location->region_slug;
}
if($gd_city=='' )
{
if(isset($_SESSION['gd_city']))
$gd_city = $_SESSION['gd_city'];
else
$gd_city =$default_location->city_slug;
$base_location_link = geodir_get_location_link('base') ;
wp_redirect($base_location_link . '/' .$gd_country . '/' . $gd_region . '/' . $gd_city ) ;
exit();
}*/
}
}
$args = array(
'what'=> 'city' ,
'city_val' => $gd_city,
'region_val' => $gd_region,
'country_val' => $gd_country,
'country_column_name' => 'country_slug' ,
'region_column_name' => 'region_slug' ,
'city_column_name' => 'city_slug' ,
'location_link_part' => false,
'compare_operator' =>''
);
$location_array= geodir_get_location_array($args) ;
if(!empty($location_array))
{
$_SESSION['gd_multi_location']=1 ;
$_SESSION['gd_country'] = $gd_country ;
$_SESSION['gd_region'] = $gd_region ;
$_SESSION['gd_city'] = $gd_city ;
$wp->query_vars['gd_country'] = $gd_country ;
$wp->query_vars['gd_region'] = $gd_region;
$wp->query_vars['gd_city'] = $gd_city ;
}
else
{
unset( $_SESSION['gd_multi_location'],
$_SESSION['gd_city'],
$_SESSION['gd_region'],
$_SESSION['gd_country'] );
}
}
else
{
unset( $_SESSION['gd_multi_location'],
$_SESSION['gd_city'],
$_SESSION['gd_region'],
$_SESSION['gd_country'] );
}
}
else if(isset($wp->query_vars['post_type']) && $wp->query_vars['post_type']!= '')
{
if(!is_admin())
{
$requested_post_type = $wp->query_vars['post_type'] ;
// check if this post type is geodirectory post types
$post_type_array = geodir_get_posttypes() ;
if(in_array($requested_post_type , $post_type_array))
{
// now u can apply geodirectory related manipulation.
//echo "good: it is geodirectory post type
" ;
//print_r($wp->query_vars) ;
}
}
}
else
{
// check if a geodirectory taxonomy is set
$gd_country = '' ;
$gd_region = '' ;
$gd_city = '' ;
$is_geodir_taxonomy = false;
$is_geodir_taxonomy_term = false ; // the last term is real geodirectory taxonomy term or not
$is_geodir_location_found = false ;
$geodir_taxonomy = '' ;
$geodir_post_type = '' ;
$geodir_term = '';
$geodir_set_location_session = true;
$geodir_taxonomis = geodir_get_taxonomies('',true );
foreach($geodir_taxonomis as $taxonomy)
{
if(array_key_exists($taxonomy ,$wp->query_vars ))
{
$is_geodir_taxonomy = true ;
$geodir_taxonomy =$taxonomy ;
$geodir_post_type = str_replace('category' , '' , $taxonomy);
$geodir_post_type = str_replace('_tags' , '' , $geodir_post_type);
$geodir_term = $wp->query_vars[$geodir_taxonomy] ;
break ;
}
}
// now get an array of all terms seperated by '/'
$geodir_terms = explode('/' , $geodir_term);
$geodir_last_term = end($geodir_terms);
if($is_geodir_taxonomy) // do all these only when it is a geodirectory taxonomy
{
$wp->query_vars['post_type'] = $geodir_post_type ;
// now check if last term is a post of geodirectory post types
$geodir_post = get_posts(array(
'name' => $geodir_last_term ,
'posts_per_page' => 1,
'post_type' => $geodir_post_type,
));
if(empty($geodir_post))
{
$geodir_post = get_posts(array(
'name' => $geodir_last_term ,
'posts_per_page' => 1,
'post_type' => $geodir_post_type,
'post_status'=>'draft',
'suppress_filters'=>false,
));
}
if(!empty($geodir_post) )
{
if($geodir_post[0]->post_status != 'publish')
{
foreach($wp->query_vars as $key => $vars)
{
unset($wp->query_vars[$key]);
}
$wp->query_vars['error'] = '404' ;
// set it as 404 if post exists but its status is not published yet
}
else
{
//$wp->query_vars[$geodir_taxonomy] = str_replace( '/'.$geodir_last_term , '' , $geodir_term);
$wp->query_vars[$geodir_post_type] = $geodir_last_term;
$wp->query_vars['name'] = $geodir_last_term;
}
$geodir_term = str_replace('/' . $geodir_last_term , '' , $geodir_term,$post_title_replace_count);
if(!$post_title_replace_count)
$geodir_term = str_replace( $geodir_last_term , '' , $geodir_term,$post_title_replace_count);
$geodir_terms = explode('/' , $geodir_term);
$geodir_last_term = end($geodir_terms);
$geodir_set_location_session =false;
//return ;
}
$geodir_location_terms = '';
// if last term is not a post then check if last term is a term of the specific texonomy or not
if(geodir_term_exists($geodir_last_term, $geodir_taxonomy ))
{
$is_geodir_taxonomy_term = true ;
$geodir_set_location_session =false;
}
// now check if there is location parts in the url or not
if( get_option('geodir_add_location_url'))
{
if(get_option('geodir_show_location_url')=='all')
{
if(count($geodir_terms) >=3)
{
$gd_country= urldecode($geodir_terms[0]);
$gd_region = urldecode($geodir_terms[1]) ;
$gd_city = urldecode($geodir_terms[2]) ;
}
else if(count($geodir_terms) >=2)
{
$gd_country= urldecode($geodir_terms[0]);
$gd_region = urldecode($geodir_terms[1]) ;
}
else if(count($geodir_terms) >=1)
{
$gd_country= urldecode($geodir_terms[0]);
}
$args = array(
'what'=> 'city' ,
'city_val' => $gd_city,
'region_val' => $gd_region,
'country_val' => $gd_country,
'country_column_name' => 'country_slug' ,
'region_column_name' => 'region_slug' ,
'city_column_name' => 'city_slug' ,
'location_link_part' => false,
'compare_operator' =>'',
'format'=> array('type'=>'array')
);
$location_array= geodir_get_location_array($args) ;
if(!empty($location_array) )
$is_geodir_location_found = true ;
// if location has not been found for country , region and city then search for country and region only
if(!$is_geodir_location_found )
{
$gd_city='';
$args = array(
'what'=> 'city' ,
'city_val' => $gd_city,
'region_val' => $gd_region,
'country_val' => $gd_country,
'country_column_name' => 'country_slug' ,
'region_column_name' => 'region_slug' ,
'city_column_name' => 'city_slug' ,
'location_link_part' => false,
'compare_operator' =>'',
'format'=> array('type'=>'array')
);
$location_array= geodir_get_location_array($args) ;
if(!empty($location_array))
$is_geodir_location_found = true ;
}
// if location has not been found for country , region then search for country only
if(!$is_geodir_location_found )
{
$gd_city='';
$gd_region='';
$args = array(
'what'=> 'city' ,
'city_val' => $gd_city,
'region_val' => $gd_region,
'country_val' => $gd_country,
'country_column_name' => 'country_slug' ,
'region_column_name' => 'region_slug' ,
'city_column_name' => 'city_slug' ,
'location_link_part' => false,
'compare_operator' =>'',
'format'=> array('type'=>'array')
);
$location_array= geodir_get_location_array($args) ;
if(!empty($location_array) )
$is_geodir_location_found = true ;
}
}
else
{
$gd_city= urldecode($geodir_terms[0]);
$args = array(
'what'=> 'city' ,
'city_val' => $gd_city,
'region_val' => $gd_region,
'country_val' => $gd_country,
'country_column_name' => 'country_slug' ,
'region_column_name' => 'region_slug' ,
'city_column_name' => 'city_slug' ,
'location_link_part' => false,
'compare_operator' =>'',
'format'=> array('type'=>'array')
);
$location_array= geodir_get_location_array($args) ;
if(!empty($location_array) )
$is_geodir_location_found = true ;
$args = array(
'what'=> 'region_slug' ,
'city_val' => $gd_city,
'region_val' => '',
'country_val' => '',
'country_column_name' => 'country_slug' ,
'region_column_name' => 'region_slug' ,
'city_column_name' => 'city_slug' ,
'location_link_part' => false,
'compare_operator' =>'',
'format'=> array('type'=>'array')
);
$location_array= geodir_get_location_array($args) ;
if(!empty($location_array) )
{
$gd_region=$location_array[0]->region_slug;
}
$args = array(
'what'=> 'country_slug' ,
'city_val' => $gd_city,
'region_val' => '',
'country_val' => '',
'country_column_name' => 'country_slug' ,
'region_column_name' => 'region_slug' ,
'city_column_name' => 'city_slug' ,
'location_link_part' => false,
'compare_operator' =>'',
'format'=> array('type'=>'array')
);
$location_array= geodir_get_location_array($args) ;
if(!empty($location_array) )
{
$gd_country=$location_array[0]->country_slug;
}
}
// if locaton still not found then clear location related session variables
if($is_geodir_location_found && $geodir_set_location_session )
{
$_SESSION['gd_multi_location']=1 ;
$_SESSION['gd_country'] = $gd_country ;
$_SESSION['gd_region'] = $gd_region ;
$_SESSION['gd_city'] = $gd_city ;
}
if(get_option('geodir_show_location_url')!='all')
{
$gd_country='' ;
$gd_region='';
}
if($is_geodir_location_found)
{
$wp->query_vars['gd_country'] = $gd_country ;
$wp->query_vars['gd_region'] = $gd_region;
$wp->query_vars['gd_city'] = $gd_city;
}
else
{
$gd_country='' ;
$gd_region='';
$gd_city='';
}
}
$wp->query_vars[$geodir_taxonomy] = $geodir_term ;
// eliminate location related terms from taxonomy term
if($gd_country !='')
$wp->query_vars[$geodir_taxonomy] = preg_replace( '/' .urlencode($gd_country) .'/', '' , $wp->query_vars[$geodir_taxonomy],1) ;
if($gd_region !='')
$wp->query_vars[$geodir_taxonomy] = preg_replace('/' . urlencode($gd_region).'/' , '' , $wp->query_vars[$geodir_taxonomy],1) ;
if($gd_city !='')
$wp->query_vars[$geodir_taxonomy] = preg_replace( '/' .urlencode($gd_city) .'/' , '' , $wp->query_vars[$geodir_taxonomy],1) ;
$wp->query_vars[$geodir_taxonomy] = str_replace( '///' , '' , $wp->query_vars[$geodir_taxonomy]) ;
$wp->query_vars[$geodir_taxonomy] = str_replace( '//' , '' , $wp->query_vars[$geodir_taxonomy]) ;
$wp->query_vars[$geodir_taxonomy] = trim($wp->query_vars[$geodir_taxonomy], '/');
if($wp->query_vars[$geodir_taxonomy] == '' )
{
unset($wp->query_vars[$geodir_taxonomy]) ;
}
else
{
if(!$is_geodir_taxonomy_term)
{
foreach($wp->query_vars as $key => $vars)
{
unset($wp->query_vars[$key]);
}
$wp->query_vars['error'] = '404' ;
}
}
}
}
if(isset($wp->query_vars['gd_is_geodir_page']) && is_array($wp->query_vars) && count($wp->query_vars)=='1' )
{
if(!isset($_SESSION['gd_location_filter_on_site_load']))
{
$_SESSION['gd_location_filter_on_site_load']=1 ;
if(get_option('geodir_result_by_location')=='default')
{
$location_default = geodir_get_default_location();
$_SESSION['gd_multi_location'] = 1 ;
$_SESSION['gd_country'] = isset($location_default->country_slug) ? $location_default->country_slug : '';
$_SESSION['gd_region'] = isset($location_default->region_slug) ? $location_default->region_slug : '';
$_SESSION['gd_city'] = isset($location_default->city_slug) ? $location_default->city_slug : '';
$wp->query_vars['gd_country'] = isset($location_default->country_slug) ? $location_default->country_slug : '' ;
$wp->query_vars['gd_region'] = isset($location_default->region_slug) ? $location_default->region_slug : '';
$wp->query_vars['gd_city'] = isset($location_default->city_slug) ? $location_default->city_slug : '';
}
}
}
else
{
$_SESSION['gd_location_filter_on_site_load']=1 ;
}
if(isset($_SESSION['gd_multi_location']) && $_SESSION['gd_multi_location']==1)
{
$wp->query_vars['gd_country'] = $_SESSION['gd_country'] ;
$wp->query_vars['gd_region'] = $_SESSION['gd_region'] ;
$wp->query_vars['gd_city'] = $_SESSION['gd_city'] ;
}/**/
// now check if there is location parts in the url or not
if( get_option('geodir_add_location_url'))
{
if(get_option('geodir_show_location_url')!='all')
{
if(isset($wp->query_vars['gd_country']))
$wp->query_vars['gd_country']='' ;
if(isset($wp->query_vars['gd_region']))
$wp->query_vars['gd_region']='' ;
}
}
else
{
if(isset($wp->query_vars['gd_country']))
$wp->query_vars['gd_country']='' ;
if(isset($wp->query_vars['gd_region']))
$wp->query_vars['gd_region']='' ;
if(isset($wp->query_vars['gd_city']))
$wp->query_vars['gd_city']='' ;
}
/**/
//print_r($_SESSION);
/*
echo "" ;
print_r($wp) ;
echo "
" ;
exit();
*/
}