Function Reference: get_markers

Summary

Retrive markers data to use in map

Global Values

$wpdb
(object) (required) WordPress Database object.

Default: None
$plugin_prefix
(string) (required) Geodirectory plugin table prefix.

Default: None
$geodir_cat_icons
(array) (required) Array of the category icon urls.

Default: None
$gd_marker_sizes
(array) (required) Array of the marker icons sizes.

Default: None

Return Values

(string)

    Change Log

    Since: 1.0.0

    1.5.7 Fixed non recurring events markers.

    1.6.1 Marker icons size added.

    Actions

    ‘geodir_before_marker_post_process_action’ [Line: 385]

    ‘geodir_after_marker_post_process’ [Line: 606]

    Filters

    ‘geodir_get_markers_cache’ [Line: 220]

    ‘geodir_marker_search’ [Line: 277]

    ‘geodir_marker_main_query_array’ [Line: 285]

    ‘geodir_home_map_listing_join’ [Line: 305]

    ‘geodir_home_map_listing_where’ [Line: 314]

    ‘geodir_home_map_listing_select’ [Line: 331]

    ‘geodir_home_map_listing_groupby’ [Line: 341]

    ‘geodir_home_map_listing_query’ [Line: 353]

    ‘geodir_before_marker_post_process’ [Line: 374]

    ‘geodir_markers_json’ [Line: 628]

    Source File

    get_markers() is located in geodirectory-functions/map-functions/get_markers.php [Line: 210]

    Source Code

    function get_markers() {
        
        global $wpdb, $plugin_prefix, $geodir_cat_icons, $gd_marker_sizes,$gd_session;
    
    
        /**
         * Filter to allow for any map caching to be output before queries.
         *
         * @since 1.6.22
         */
        $map_cache = apply_filters('geodir_get_markers_cache','');
        if($map_cache){
            return $map_cache;
            wp_die();
        }
    
    
    
        $search = '';
    
        $srcharr = array("'", "/", "-", '"', '\\', ''');
        $replarr = array("′", "⁄", "–", "“", '', "′");
    
        $post_type = isset($_REQUEST['gd_posttype']) ? $_REQUEST['gd_posttype'] : 'gd_place';
    
        $map_cat_ids_array = array('0');
        $cat_find_array = array(" FIND_IN_SET(%d, pd." . $post_type . "category)");
    
    
        $field_default_cat = '';
        if (isset($_REQUEST['cat_id']) && $_REQUEST['cat_id'] != '') {
            $map_cat_arr = trim($_REQUEST['cat_id'], ',');
    
            if (!empty($map_cat_arr)) {
                $field_default_cat .= "WHEN (default_category IN (" . $map_cat_arr . ")) THEN default_category ";
    
                $map_cat_ids_array = explode(',', $map_cat_arr);
                $cat_find_array = array();
                foreach ($map_cat_ids_array as $cat_id) {
                    $field_default_cat .= "WHEN (FIND_IN_SET($cat_id, `" . $post_type . "category`) > 0) THEN $cat_id ";
                    $cat_find_array[] = " FIND_IN_SET(%d, pd." . $post_type . "category)";
                    $main_query_array[] = $cat_id;
                }
    
            }
        }
    
        if (!empty($field_default_cat))
            $field_default_cat = '';
    
        if (!empty($cat_find_array))
            $search .= "AND (" . implode(' OR ', $cat_find_array) . ")";
    
        $main_query_array = $map_cat_ids_array;
      
        if (isset($_REQUEST['search']) && !empty($_REQUEST['search']) && $_REQUEST['search'] != __('Title', 'geodirectory')) {
            $search .= " AND p.post_title LIKE %s";
            $main_query_array[] = "%" . $_REQUEST['search'] . "%";
        }
    
        /**
         * Filter the marker query search SQL, values are replaces with %s or %d.
         *
         * @since 1.5.3
         *
         * @param string $search The SQL query for search/where.
         */
        $search = apply_filters('geodir_marker_search', $search);
        /**
         * Filter the marker query search SQL values %s and %d, this is an array of values.
         *
         * @since 1.5.3
         *
         * @param array $main_query_array The SQL query values for search/where.
         */
        $main_query_array = apply_filters('geodir_marker_main_query_array', $main_query_array);
    
        $gd_posttype = '';
        if (isset($_REQUEST['gd_posttype']) && $_REQUEST['gd_posttype'] != '') {
            $table = $plugin_prefix . $_REQUEST['gd_posttype'] . '_detail';
            $gd_posttype = " AND p.post_type = %s";
            $main_query_array[] = $_REQUEST['gd_posttype'];
    
        } else
            $table = $plugin_prefix . 'gd_place_detail';
    
        $join = ", " . $table . " AS pd ";
    
        /**
    	 * Filter the SQL JOIN clause for the markers data
    	 *
    	 * @since 1.0.0
    	 *
    	 * @param string $join Row of SQL JOIN clause to join table.
    	 */
    	$join = apply_filters('geodir_home_map_listing_join', $join);
        
    	/**
    	 * Filter the searched fields for the markers data
    	 *
    	 * @since 1.0.0
    	 *
    	 * @param string $search Row of searched fields to use in WHERE clause.
    	 */
    	$search = apply_filters('geodir_home_map_listing_where', $search);
        $search = str_replace(array("'%", "%'"), array("'%%", "%%'"), $search);
        $cat_type = $post_type . 'category';
        if ($post_type == 'gd_event') {
            $event_select = ", pd.recurring_dates, pd.is_recurring";
        } else {
            $event_select = "";
        }
    
        $sql_select = 'SELECT pd.default_category, pd.' . $cat_type . ', pd.post_title, pd.post_id, pd.post_latitude, pd.post_longitude' . $event_select;
        /**
    	 * Filter the SQL SELECT clause to retrive fields data
    	 *
    	 * @since 1.0.0
    	 *
    	 * @param string $sql_select Row of SQL SELECT clause.
    	 */
    	$select = apply_filters('geodir_home_map_listing_select', $sql_select);
    	
    	$groupby = " GROUP BY pd.post_id";
    	/**
    	 * Filter the SQL GROUP BY clause to retrive map markers data.
    	 *
    	 * @since 1.5.7
    	 *
    	 * @param string $groupby Row of SQL GROUP BY clause.
    	 */
    	$groupby = apply_filters('geodir_home_map_listing_groupby', $groupby);
    
        $catsql = $wpdb->prepare("$select $field_default_cat FROM " . $wpdb->posts . " as p" . $join . " WHERE p.ID = pd.post_id AND p.post_status = 'publish' " . $search . $gd_posttype . $groupby , $main_query_array);
        
    	/**
    	 * Filter the SQL query to retrive markers data
    	 *
    	 * @since 1.0.0
    	 *
    	 * @param string $catsql Row of SQL query.
    	 * @param string $search Row of searched fields to use in WHERE clause.
    	 */
    	$catsql = apply_filters('geodir_home_map_listing_query', $catsql, $search);
    
    //    global $gd_session;
    //    print_r($gd_session);
    //    print_r($_SESSION);
    
        $catinfo = $wpdb->get_results($catsql);
    	
        $cat_content_info = array();
        $content_data = array();
        $post_ids = array();
    
        /**
         * Called before marker data is processed into JSON.
         *
         * Called before marker data is processed into JSON, this action can be used to change the format or add/remove markers.
         *
         * @since 1.5.3
         * @param object $catinfo The posts object containing all marker data.
         * @see 'geodir_after_marker_post_process'
         */
        $catinfo = apply_filters('geodir_before_marker_post_process', $catinfo);
    
        /**
         * Called before marker data is processed into JSON.
         *
         * Called before marker data is processed into JSON, this action can be used to change the format or add/remove markers.
         *
         * @since 1.4.9
         * @param object $catinfo The posts object containing all marker data.
         * @see 'geodir_after_marker_post_process'
         */
        do_action('geodir_before_marker_post_process_action', $catinfo);
    
        // Sort any posts into a ajax array
        if (!empty($catinfo)) {
            $geodir_cat_icons = geodir_get_term_icon();
            global $geodir_date_time_format, $geodir_date_format, $geodir_time_format;
    
            $today = strtotime(date_i18n('Y-m-d'));
            $show_dates = $post_type == 'gd_event' ? (int)get_option('geodir_event_infowindow_dates_count', 1) : 0;
            
            foreach ($catinfo as $catinfo_obj) {
                $post_title = $catinfo_obj->post_title;
                
                if ($post_type == 'gd_event' && !empty($catinfo_obj->recurring_dates) && $show_dates > 0) {
                    $event_dates = '';
                    $recurring_data = isset($catinfo_obj->recurring_dates) ? maybe_unserialize($catinfo_obj->recurring_dates) : array();
    
                    $post_info = geodir_get_post_info($catinfo_obj->post_id);
                    
                    if (!empty($catinfo_obj->is_recurring) && !empty($recurring_data) && !empty($recurring_data['is_recurring']) && geodir_event_recurring_pkg($post_info)) {
                        $starttimes = '';
                        $endtimes = '';
                        $astarttimes = array();
                        $aendtimes = array();
                        if ( !isset( $recurring_data['repeat_type'] ) ) {
                            $recurring_data['repeat_type'] = 'custom';
                        }
                        $repeat_type = isset( $recurring_data['repeat_type'] ) && in_array( $recurring_data['repeat_type'], array( 'day', 'week', 'month', 'year', 'custom' ) ) ? $recurring_data['repeat_type'] : 'year'; // day, week, month, year, custom
                        $different_times = isset( $recurring_data['different_times'] ) && !empty( $recurring_data['different_times'] ) ? true : false;
            
                        $recurring_dates = explode(',', $recurring_data['event_recurring_dates']);
                        
                        if ( !empty( $recurring_dates ) ) {
                            if ( empty( $recurring_data['all_day'] ) ) {
                                if ( $repeat_type == 'custom' && $different_times ) {
                                    $astarttimes = isset( $recurring_data['starttimes'] ) ? $recurring_data['starttimes'] : array();
                                    $aendtimes = isset( $recurring_data['endtimes'] ) ? $recurring_data['endtimes'] : array();
                                } else {
                                    $starttimes = isset( $recurring_data['starttime'] ) ? $recurring_data['starttime'] : '';
                                    $endtimes = isset( $recurring_data['endtime'] ) ? $recurring_data['endtime'] : '';
                                }
                            }
                            
                            $e = 0;
                            foreach( $recurring_dates as $key => $date ) {
                                if ( $repeat_type == 'custom' && $different_times ) {
                                    if ( !empty( $astarttimes ) && isset( $astarttimes[$key] ) ) {
                                        $starttimes = $astarttimes[$key];
                                        $endtimes = $aendtimes[$key];
                                    } else {
                                        $starttimes = '';
                                        $endtimes = '';
                                    }
                                }
                                
                                $duration = isset( $recurring_data['duration_x'] ) && (int)$recurring_data['duration_x'] > 0 ? (int)$recurring_data['duration_x'] : 1;
                                $duration--;
                                $enddate = date_i18n( 'Y-m-d', strtotime( $date . ' + ' . $duration . ' day' ) );
                                
                                // Hide past dates
                                if ( strtotime( $enddate ) < $today ) {
                                    continue;
                                }
                                        
                                $sdate = strtotime( $date . ' ' . $starttimes );
                                $edate = strtotime( $enddate . ' ' . $endtimes );
                                            
                                $start_date = date_i18n( $geodir_date_time_format, $sdate );
                                $end_date = date_i18n( $geodir_date_time_format, $edate );
                                
                                $same_day = false;
                                $full_day = false;
                                $same_datetime = false;
                                
                                if ( $starttimes == $endtimes && ( $starttimes == '' || $starttimes == '00:00:00' || $starttimes == '00:00' ) ) {
                                    $full_day = true;
                                }
                                
                                if ( $start_date == $end_date && $full_day ) {
                                    $same_datetime = true;
                                }
    
                                $link_date = date_i18n( 'Y-m-d', $sdate );
                                $title_date = date_i18n( $geodir_date_format, $sdate );
                                if ( $full_day ) {
                                    $start_date = $title_date;
                                    $end_date = date_i18n( $geodir_date_format, $edate );
                                }
                                
                                if ( !$same_datetime && !$full_day && date_i18n( 'Y-m-d', $sdate ) == date_i18n( 'Y-m-d', $edate ) ) {
                                    $same_day = true;
                                    
                                    $start_date .= ' - ' . date_i18n( $geodir_time_format, $edate );
                                }
                                
                                $event_dates .= ' :: ' . $start_date;
                            
                                if ( !$same_day && !$same_datetime ) {
                                    $event_dates .= ' ' . __( 'to', 'geodirectory' ) . ' ' . $end_date;
                                }
                                
                                $e++;
                                
                                if ($show_dates > 0 && $e == $show_dates) { // only show 3 event dates
                                    break;
                                }
                            }
                        }
                    } else {
                        $start_date = isset( $recurring_data['event_start'] ) ? $recurring_data['event_start'] : '';
                        $end_date = isset( $recurring_data['event_end'] ) ? $recurring_data['event_end'] : $start_date;
                        $all_day = isset( $recurring_data['all_day'] ) && !empty( $recurring_data['all_day'] ) ? true : false;
                        $starttime = isset( $recurring_data['starttime'] ) ? $recurring_data['starttime'] : '';
                        $endtime = isset( $recurring_data['endtime'] ) ? $recurring_data['endtime'] : '';
                    
                        $event_recurring_dates = explode( ',', $recurring_data['event_recurring_dates'] );
                        $starttimes = isset( $recurring_data['starttimes'] ) && !empty( $recurring_data['starttimes'] ) ? $recurring_data['starttimes'] : array();
                        $endtimes = isset( $recurring_data['endtimes'] ) && !empty( $recurring_data['endtimes'] ) ? $recurring_data['endtimes'] : array();
                        
                        if ( !geodir_event_is_date( $start_date ) && !empty( $event_recurring_dates ) ) {
                            $start_date = $event_recurring_dates[0];
                        }
                                    
                        if ( strtotime( $end_date ) < strtotime( $start_date ) ) {
                            $end_date = $start_date;
                        }
                        
                        if ($end_date != '' && strtotime($end_date) >= $today) {
                            if ( $starttime == '' && !empty( $starttimes ) ) {
                                $starttime = $starttimes[0];
                                $endtime = $endtimes[0];
                            }
                            
                            $same_day = false;
                            $one_day = false;
                            if ( $start_date == $end_date && $all_day ) {
                                $one_day = true;
                            }
    
                            if ( $all_day ) {
                                $start_datetime = strtotime( $start_date );
                                $end_datetime = strtotime( $end_date );
                                
                                $start_date = date_i18n( $geodir_date_format, $start_datetime );
                                $end_date = date_i18n( $geodir_date_format, $end_datetime );
                                if ( $start_date == $end_date ) {
                                    $one_day = true;
                                }
                            } else {
                                if ( $start_date == $end_date && $starttime == $endtime ) {
                                    $end_date = date_i18n( 'Y-m-d', strtotime( $start_date . ' ' . $starttime . ' +1 day' ) );
                                    $one_day = false;
                                }
                                $start_datetime = strtotime( $start_date . ' ' . $starttime );
                                $end_datetime = strtotime( $end_date . ' ' . $endtime );
                                
                                $start_date = date_i18n( $geodir_date_time_format, $start_datetime );
                                $end_date = date_i18n( $geodir_date_time_format, $end_datetime );
                            }
    
                            if ( !$one_day && date_i18n( 'Y-m-d', $start_datetime ) == date_i18n( 'Y-m-d', $end_datetime ) ) {
                                $same_day = true;
                                
                                $start_date .= ' - ' . date_i18n( $geodir_time_format, $end_datetime );
                            }
                            
                            $event_dates .= ' :: ' . $start_date;
                            
                            if ( !$same_day && !$one_day ) {
                                $event_dates .= ' ' . __( 'to', 'geodirectory' ) . ' ' . $end_date;
                            }
                        }
                    }
    
                    if (empty($event_dates)) {
                        continue;
                    }
                    
                    $post_title .= $event_dates;
                }
    
                $map_cat_ids_array;
                $default_cat = isset($catinfo_obj->default_category) ? $catinfo_obj->default_category : '';
    
                // if single cat lets just show that icon
                if(is_array($map_cat_ids_array) && count($map_cat_ids_array)==1){
                    $default_cat = (int)$map_cat_ids_array[0];
                }
    
                $icon = !empty($geodir_cat_icons) && isset($geodir_cat_icons[$default_cat]) ? $geodir_cat_icons[$default_cat] : '';
                $mark_extra = (isset($catinfo_obj->marker_extra)) ? $catinfo_obj->marker_extra : '';
                $title = str_replace($srcharr, $replarr, $post_title);
                
                if ($icon != '') {
                    $gd_marker_sizes = empty($gd_marker_sizes) ? array() : $gd_marker_sizes;
                    
                    if (isset($gd_marker_sizes[$icon])) {
                        $icon_size = $gd_marker_sizes[$icon];
                    } else {
                        $icon_size = geodir_get_marker_size($icon);
                        $gd_marker_sizes[$icon] = $icon_size;
                    }               
                } else {
                    $icon_size = array('w' => 36, 'h' => 45);
                }
    
                $content_data[] = '{"id":"' . $catinfo_obj->post_id . '","t": "' . $title . '","lt": "' . $catinfo_obj->post_latitude . '","ln": "' . $catinfo_obj->post_longitude . '","mk_id":"' . $catinfo_obj->post_id . '_' . $default_cat . '","i":"' . $icon . '","w":"' . $icon_size['w'] . '","h":"' . $icon_size['h'] . '"'.$mark_extra.'}';
                $post_ids[] = $catinfo_obj->post_id;
            }
        }
    
        /**
         * Called after marker data is processed into JSON.
         *
         * Called after marker data is processed into JSON, this action can be used to change the format or add/remove markers.
         *
         * @since 1.4.9
         * @param array $content_data The array containing all markers in JSON format.
         * @param object $catinfo The posts object containing all marker data.
         * @see 'geodir_before_marker_post_process'
         */
        do_action('geodir_after_marker_post_process', $content_data, $catinfo);
    
        if (!empty($content_data)) {
            $cat_content_info[] = implode(',', $content_data);
        }
    
        $totalcount = count(array_unique($post_ids));
    
        if (!empty($cat_content_info)) {
            $map_json = '[{"totalcount":"' . $totalcount . '",' . substr(implode(',', $cat_content_info), 1) . ']';
        }
        else {
            $map_json =  '[{"totalcount":"0"}]';
        }
    
    
        /**
         * Filter the marker json return.
         *
         * @since 1.6.22
         * @param string $map_json The JSON string of the map markers results.
         */
        return apply_filters('geodir_markers_json',$map_json);
    }