Plugin Directory

Changeset 1591115


Ignore:
Timestamp:
02/07/2017 03:42:23 PM (9 years ago)
Author:
Cohhe
Message:

Improved search functionality; Featured listing shown at the top of the search list; Radio button issue while the value is shown at the search;

Location:
directory-builder
Files:
6 edited
8 copied

Legend:

Unmodified
Added
Removed
  • directory-builder/tags/1.3.2/README.txt

    r1590048 r1591115  
    44Requires at least: 4.5.3
    55Tested up to: 4.7.2
    6 Stable tag: 1.3.1
     6Stable tag: 1.3.2
    77License: GPLv2 or later
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    2626== Changelog ==
    2727
     28= 1.3.2 =
     29* Improved search functionality
     30* Featured listing shown at the top of the search list
     31* Radio button issue while the value is shown at the search
     32
    2833= 1.3.1 =
    2934* Fixed issues with custom fields
  • directory-builder/tags/1.3.2/admin/class-db-functionality-admin.php

    r1557657 r1591115  
    116116        wp_enqueue_media();
    117117        wp_enqueue_script( $this->db_func, plugin_dir_url( __FILE__ ) . 'js/db-functionality-admin.js', array( 'jquery' ), $this->version, false );
     118       
    118119
    119120    }
  • directory-builder/tags/1.3.2/directory-builder.php

    r1590048 r1591115  
    1717 * Plugin URI:        https://cohhe.com/
    1818 * Description:       Directory builder provides listing functionality for your theme.
    19  * Version:           1.3.1
     19 * Version:           1.3.2
    2020 * Author:            Cohhe
    2121 * Author URI:        https://cohhe.com/
     
    465465                        <h3 class="db-main-title">Custom field</h3>
    466466                    </div>
    467                     <div class="db-field-row <?php echo(isset($field_settings['field_name'])&&$field_settings['field_name']!=''?'active':''); ?> clearfix">
    468                         <label class="field-label">Field name <span class="db-required">*</span></label>
    469                         <div class="db-field-input">
    470                             <input type="text" class="db-create-field-name" data-required="true" value="<?php echo(isset($field_settings['field_name'])?$field_settings['field_name']:''); ?>">
    471                             <span class="field-description">Unique name only from letters a-z</span>
    472                             <span class="db-field-required">This field is required</span>
    473                         </div>
    474                     </div>
     467                    <?php if ( !in_array('delete', $disabled_settings) ) { ?>
     468                        <div class="db-field-row <?php echo(isset($field_settings['field_name'])&&$field_settings['field_name']!=''?'active':''); ?> clearfix">
     469                            <label class="field-label">Field name <span class="db-required">*</span></label>
     470                            <div class="db-field-input">
     471                                <input type="text" class="db-create-field-name" data-required="true" value="<?php echo(isset($field_settings['field_name'])?$field_settings['field_name']:''); ?>">
     472                                <span class="field-description">Unique name only from letters a-z</span>
     473                                <span class="db-field-required">This field is required</span>
     474                            </div>
     475                        </div>
     476                    <?php } ?>
    475477                    <div class="db-field-row <?php echo(isset($field_settings['admin_title'])&&$field_settings['admin_title']!=''?'active':''); ?> clearfix">
    476478                        <label class="field-label">Admin title</label>
     
    578580                        </div>
    579581                    </div>
     582                    <?php if ( isset( $field_settings['disabled'] ) ) { ?>
     583                        <input type="hidden" class="db-create-disabled" value="<?php echo $field_settings['disabled']; ?>">
     584                    <?php } ?>
     585                    <?php if ( in_array('delete', $disabled_settings) ) { ?>
     586                        <input type="hidden" class="db-create-field-name" data-required="true" value="<?php echo(isset($field_settings['field_name'])?$field_settings['field_name']:''); ?>">
     587                    <?php } ?>
    580588                    <?php if ( $field_type == 'text' ) { ?>
    581589                        <div class="db-field-row <?php echo(isset($field_settings['validation_pattern'])&&$field_settings['validation_pattern']!=''?'active':''); ?> clearfix">
     
    737745        } else {
    738746            $save_query = $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'", field_active="'.$field_active.'", field_settings="'.$field_settings.'" WHERE ID="'.$field_id.'"');
     747            if ( $field_decoded_settings['field_name'] == 'listing_address' ) {
     748                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_city\"%"');
     749                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_neighborhood\"%"');
     750                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_zip\"%"');
     751                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_state\"%"');
     752                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_country\"%"');
     753                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_address_lat\"%"');
     754                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_address_lng\"%"');
     755            }
    739756        }
    740757
     
    9901007                                jQuery('#listing_address_lat').val(this.getPosition().lat());
    9911008                                jQuery('#listing_address_lng').val(this.getPosition().lng());
     1009                                jQuery('.db-set-address').addClass('dragged').click();
    9921010                            });
    9931011                        }
     
    9981016                        <?php } ?>
    9991017                        jQuery(document).on('click', '.db-set-address', function() {
    1000                             if ( jQuery('#listing_address_lat').val() != '' && jQuery('#listing_address_lng').val() != '' ) {
    1001                                 var new_location = new google.maps.LatLng(jQuery('#listing_address_lat').val(), jQuery('#listing_address_lng').val());
    1002                                 $first_marker.setMap(null);
    1003                                 var marker = new google.maps.Marker({ position: new_location, map: $map, draggable: true });
    1004                                 $first_marker = marker;
    1005                                 db_add_dragend_event( $first_marker );
    1006 
    1007                                 $map.setCenter(new_location);
     1018                            var google_json_address;
     1019                            if ( !jQuery(this).hasClass('dragged') ) {
     1020                                google_json_address = encodeURIComponent( jQuery('#listing_address').val() );
    10081021                            } else {
    1009                                 $geocoder.geocode( { "address": jQuery('#listing_address').val() }, function(results, status) {
    1010                                     if (status == google.maps.GeocoderStatus.OK) {
    1011                                         $first_marker.setMap(null);
    1012                                         var marker = new google.maps.Marker({ position: results[0].geometry.location, map: $map, draggable: true });
    1013                                         $first_marker = marker;
    1014                                         db_add_dragend_event( $first_marker );
    1015 
    1016                                         jQuery('#listing_address_lat').val(results[0].geometry.location.lat());
    1017                                         jQuery('#listing_address_lng').val(results[0].geometry.location.lng());
    1018 
    1019                                         $map.setCenter(results[0].geometry.location);
    1020                                     } else {
    1021                                         alert('Your address couldn\'t be found');
    1022                                     }
    1023                                 });
     1022                                google_json_address = encodeURIComponent( jQuery('#listing_address_lat').val()+','+jQuery('#listing_address_lng').val() );
    10241023                            }
     1024                            jQuery.get('https://maps.googleapis.com/maps/api/geocode/json?address='+google_json_address+'&key=<?php echo $main_settings['google_key']; ?>&language=en', function( data ) {
     1025                                if ( data.status == 'OK' ) {
     1026                                    $first_marker.setMap(null);
     1027                                    var marker = new google.maps.Marker({ position: data.results['0'].geometry.location, map: $map, draggable: true });
     1028                                    $first_marker = marker;
     1029                                    db_add_dragend_event( $first_marker );
     1030
     1031                                    jQuery('#listing_city, #listing_zip, #listing_neighborhood, #listing_state').val('');
     1032                                    jQuery.each(data.results['0'].address_components, function( index, address_comp ) {
     1033                                        if( address_comp.types[0] == "locality" && address_comp.types[1] == "political" ) {
     1034                                            jQuery('#listing_city').val( address_comp.long_name );
     1035                                        }
     1036
     1037                                        if( address_comp.types[0] == "country" && address_comp.types[1] == "political" ) {
     1038                                            if ( jQuery('[name="listing_country"] option[value="'+address_comp.long_name+'"]').length ) {
     1039                                                jQuery('[name="listing_country"]').val( address_comp.long_name );
     1040                                            } else {
     1041                                                jQuery('[name="listing_country"]').append('<option value="'+address_comp.long_name+'">'+address_comp.long_name+'</option>').val( address_comp.long_name );
     1042                                            }
     1043                                        }
     1044
     1045                                        if( address_comp.types[0] == "postal_code" ) {
     1046                                            jQuery('#listing_zip').val( address_comp.long_name );
     1047                                        }
     1048
     1049                                        if ( address_comp.types[0] == "administrative_area_level_1" && address_comp.types[1] == "political" ) {
     1050                                            jQuery('#listing_neighborhood').val( address_comp.long_name );
     1051                                        }
     1052
     1053                                        if ( address_comp.types[0] == "administrative_area_level_2" && address_comp.types[1] == "political" ) {
     1054                                            jQuery('#listing_state').val( address_comp.long_name );
     1055                                        }
     1056                                    });
     1057
     1058                                    jQuery('#listing_address').val( data.results['0'].formatted_address );
     1059
     1060                                    jQuery('#listing_address_lat').val(data.results['0'].geometry.location.lat);
     1061                                    jQuery('#listing_address_lng').val(data.results['0'].geometry.location.lng);
     1062
     1063                                    $map.setCenter(data.results['0'].geometry.location);
     1064                                    jQuery('.db-set-address').removeClass('dragged');
     1065                                } else {
     1066                                    alert('Your address couldn\'t be found');
     1067                                }
     1068                            });
    10251069                        });
    1026 
    1027 
    10281070                    });
    10291071                </script>
     
    14111453                    if ( !empty($select_values) ) {
    14121454                        $output .= '<select class="'.$custom_class.'" name="'.$field_name.'">';
     1455                        if ( !in_array($field_default, $select_values) ) {
     1456                            $select_values[] = $field_default;
     1457                        }
    14131458                        foreach ($select_values as $select_value) {
    14141459                            $select_data = explode(':', $select_value);
     
    14341479                        $output .= '<label class="db-field-row-label">'.$field_title.'</label>';
    14351480                    }
     1481
     1482                    $active_values = (isset($_GET[$field_name])?explode(',', sanitize_text_field($_GET[$field_name])):array());
     1483                    $active_value_shown = $active_value_hidden = '';
     1484                    if ( !empty($active_values) ) {
     1485                        $active_value_shown = implode(', ', $active_values);
     1486                        $active_value_hidden = implode(',', $active_values);
     1487                    }
     1488
    14361489                    $output .= '
    1437                     <input type="text" class="dt-custom-select" placeholder="'.$field_title.'" readonly>
    1438                     <input type="hidden" class="'.$custom_class.'" name="'.$field_name.'" id="dt-search-search_category">
     1490                    <input type="text" class="dt-custom-select" placeholder="'.$field_title.'" value="'.$active_value_shown.'" readonly>
     1491                    <input type="hidden" class="'.$custom_class.'" name="'.$field_name.'" id="dt-search-search_category" value="'.$active_value_hidden.'">
    14391492                    <div class="dt-custom-select-container">';
    14401493                        $output .= '
     
    14441497                                if ( !empty($select_values) ) {
    14451498                                    foreach ($select_values as $select_value) {
    1446                                         $select_data = explode(':', $select_value);
    1447                                         $is_selected = ($select_data['0']==$field_default?' active':'');
     1499                                        $select_data = explode( ':', $select_value );
     1500                                        $selected_values = explode( ',', $field_default );
     1501                                        $is_selected = (in_array($select_data['0'], $selected_values)?' active':'');
    14481502                                        $output .= '<div class="dt-custom-select-item'.$is_selected.'" data-value="'.$select_data['0'].'">'.(isset($select_data['1'])?$select_data['1']:$select_data['0']).'</div>';
    14491503                                    }
     
    14761530            $select_values = preg_split("/\\r\\n|\\r|\\n/", $select_options);
    14771531
    1478             $output .= '
    1479             <div class="db-field-row'.$field_required.' default-label">';
     1532            if ( !defined('WHITELAB_CUSTOM_SELECT') || is_admin() ) {
     1533                $output .= '<div class="db-field-row'.$field_required.'">';
    14801534                if ( $field_title != '' ) {
    14811535                    $output .= '<label class="db-field-row-label">'.$field_title.'</label>';
    14821536                }
    14831537                if ( !empty($select_values) ) {
    1484                      if ( $field_settings['multiselect_type'] == 'select' ) {
    1485                         $output .= '<select class="'.$custom_class.'" name="'.$field_name.'[]" multiple>';
    1486                         if ( $field_default == '' ) {
    1487                             $field_default = array();
    1488                         }
    1489                         foreach ($select_values as $select_value) {
    1490                             $select_data = explode(':', $select_value);
    1491                             $is_selected = (in_array($select_data['0'], $field_default)?' selected':'');
    1492                             $output .= '<option value="'.$select_data['0'].'"'.$is_selected.'>'.$select_data['1'].'</option>';
    1493                         }
    1494                         $output .= '</select>';
    1495                     } else if ( $field_settings['multiselect_type'] == 'checkbox' ) {
    1496                         foreach ($select_values as $select_value) {
    1497                             $select_data = explode(':', $select_value);
    1498                             $is_selected = (in_array($select_value, $field_default)?' checked':'');
    1499                             $output .= '<label class="db-'.$field_settings['multiselect_type'].'-label"><input type="'.$field_settings['multiselect_type'].'" name="'.$field_name.'[]" value="'.$select_data['0'].'"'.$is_selected.'>'.$select_data['1'].'<label>';
    1500                         }
     1538                    $output .= '<select class="'.$custom_class.'" name="'.$field_name.'" multiple>';
     1539                    foreach ($select_values as $select_value) {
     1540                        $select_data = explode(':', $select_value);
     1541                        $selected_values = explode( ',', $field_default );
     1542
     1543                        $is_selected = (in_array($select_data['0'], $selected_values)?' selected':'');
     1544                        $output .= '<option value="'.$select_data['0'].'"'.$is_selected.'>'.(isset($select_data['1'])?$select_data['1']:$select_data['0']).'</option>';
    15011545                    }
     1546                    $output .= '</select>';
    15021547                }
    15031548                if ( $field_description != '' || ( $field_settings['required'] == 'yes' && $field_required_message != '' ) ) {
     
    15111556                    $output .= '</div>';
    15121557                }
     1558            } else {
     1559                $output .= '
     1560                <div class="db-field-row'.$field_required.' custom-select">';
     1561                $active_values = (isset($_GET[$field_name])?explode(',', sanitize_text_field($_GET[$field_name])):array());
     1562                $active_value_shown = $active_value_hidden = '';
     1563                if ( !empty($active_values) ) {
     1564                    $active_value_shown = implode(', ', $active_values);
     1565                    $active_value_hidden = implode(',', $active_values);
     1566                }
     1567
     1568                $output .= '
     1569                <input type="text" class="dt-custom-select" placeholder="'.$field_title.'" value="'.$active_value_shown.'" readonly>
     1570                <input type="hidden" class="'.$custom_class.'" name="'.$field_name.'" id="dt-search-search_category" value="'.$active_value_hidden.'">
     1571                <div class="dt-custom-select-container">';
     1572                    $output .= '
     1573                    <div class="dt-custom-select-inner">
     1574                        <div class="dt-custom-select-search"><input type="text" placeholder="'.__('Search', 'directory-builder').'"></div>
     1575                        <div class="dt-custom-select-items">';
     1576                            if ( !empty($select_values) ) {
     1577                                foreach ($select_values as $select_value) {
     1578                                    $select_data = explode( ':', $select_value );
     1579                                    $selected_values = explode( ',', $field_default );
     1580                                    $is_selected = (in_array($select_data['0'], $selected_values)?' active':'');
     1581                                    $output .= '<div class="dt-custom-select-item'.$is_selected.'" data-value="'.$select_data['0'].'">'.(isset($select_data['1'])?$select_data['1']:$select_data['0']).'</div>';
     1582                                }
     1583                            }
     1584                        $output .= '
     1585                        </div>
     1586                        <div class="dt-custom-select-scrollbar-wrapper">
     1587                            <span class="dt-custom-select-scrollbar"></span>
     1588                        </div>
     1589                    </div>';
     1590                $output .= '
     1591                </div>';
     1592                if ( $field_description != '' || ( $field_settings['required'] == 'yes' && $field_required_message != '' ) ) {
     1593                    $output .= '<div class="db-field-meta">';
     1594                        if ( $field_description != '' ) {
     1595                            $output .= '<span class="db-field-row-description">'.$field_description.'</span>';
     1596                        }
     1597                        if ( $field_settings['required'] == 'yes' && $field_required_message != '' ) {
     1598                            $output .= '<span class="db-field-row-required">'.$field_required_message.'</span>';
     1599                        }
     1600                    $output .= '</div>';
     1601                }
     1602            }
    15131603            $output .= '
    15141604            </div>';
     
    18561946                                                    $active_placeholder = '';
    18571947                                                    if ( empty($active_categories) ) {
    1858                                                         $active_placeholder = __('Category', 'directory-builder');
     1948                                                        $active_placeholder = '';
    18591949                                                    } else {
    18601950                                                        foreach ($terms as $cat_data) {
     
    18671957                                                    $output .= '
    18681958                                                    <div class="db-field-row db-search-categories custom-select">
    1869                                                         <input type="text" class="dt-custom-select" placeholder="'.$active_placeholder.'" readonly>
     1959                                                        <input type="text" class="dt-custom-select" placeholder="'.esc_html__( 'Category', 'directory-builder' ).'" value="'.$active_placeholder.'" readonly>
    18701960                                                        <input type="hidden" class="dt-custom-select-value" id="db-search-search_category" value="'.implode(',', $active_categories).'">
    18711961                                                        <div class="dt-custom-select-container">';
     
    20062096            $field_list = db_get_active_fields();
    20072097
     2098            if ( $main_settings['search_radius_status'] == 'yes' && isset($search_terms['listing_address']) && $search_terms['listing_address'] != '' ) {
     2099                $search_coordinates = db_get_coordinates( $search_terms['listing_address'] );
     2100                $search_coordinates = explode(',', $search_coordinates);
     2101            }
     2102
    20082103            foreach ($search_listings as $listing_value) {
    20092104                $custom_field_data = db_get_listing_custom_values($field_list, $listing_value->ID);
     
    20122107
    20132108                if ( $main_settings['search_radius_status'] == 'yes' && isset($search_terms['listing_address']) && $search_terms['listing_address'] != '' ) {
    2014                     $search_coordinates = db_get_coordinates( $search_terms['listing_address'] );
    2015                     $search_coordinates = explode(',', $search_coordinates);
    2016                     $db_search_distance = db_calculate_distance($listing_value['listing_address_lat'], $listing_value['listing_address_lng'], $search_coordinates['0'], $search_coordinates['1'], $main_settings['search_radius_value']);
    2017 
    2018                     if ( $db_search_distance > intval($search_distance) ) {
    2019                         $show_listing = false;
     2109                    $db_search_distance = db_calculateDistanceFromLatLong($listing_value['listing_address_lat'], $listing_value['listing_address_lng'], $search_coordinates['0'], $search_coordinates['1'], $main_settings['search_radius_value']);
     2110
     2111                    if ( intval($db_search_distance) > intval($search_distance) ) {
     2112                        $dist_show_listing = false;
     2113                    } else {
     2114                        $dist_show_listing = true;
    20202115                    }
    2021 
    20222116                }
    20232117
    20242118                if ( !empty($search_terms) ) {
    20252119                    $matched_settings = 0;
     2120
    20262121                    foreach ($search_terms as $search_key => $search_value) {
     2122
     2123                        if ( $main_settings['search_radius_status'] == 'yes' && isset($search_terms['listing_address']) && $search_terms['listing_address'] != '' && $search_key == 'listing_address' && $dist_show_listing ) {
     2124                            $matched_settings++;
     2125                            continue;
     2126                        }
     2127
    20272128                        if ( $search_key == 'search_category' ) {
    20282129                            $searched_categories = explode(',', $search_terms['search_category']);
     
    20432144                                $matched_settings++;
    20442145                            }
     2146                        } else if ( $search_key == 'listing_country' ) {
     2147                            $searched_countries = explode(',', $search_value);
     2148                            foreach ($searched_countries as $country_value) {
     2149                                if ( strtolower($country_value) == strtolower($listing_value[$search_key]) ) {
     2150                                    $show_listing = true;
     2151                                    $matched_settings++;
     2152                                    break;
     2153                                } else {
     2154                                    $show_listing = false;
     2155                                }
     2156                            }
    20452157                        } else {
    20462158                            if ( strtolower($listing_value[$search_key]) != strtolower($search_value) ) {
     
    20892201                }
    20902202            }
    2091             // $db_search_listing_data = array();
    20922203        }
    20932204    }
     
    21172228
    21182229    if ($unit == 'km') {
    2119         // return ($miles * 1.609344);
    2120         return 0;
     2230        return ($miles * 1.609344);
    21212231    } else if ($unit == 'N') {
    21222232        return ($miles * 0.8684);
     
    21242234        return $miles;
    21252235    }
     2236}
     2237
     2238function db_getDistanceRadius( $uom = 'km' ) {
     2239    //  Use Haversine formula to calculate the great circle distance between two points identified by longitude and latitude
     2240    switch ( strtolower( $uom ) ):
     2241        case 'km':
     2242            $earthMeanRadius = 6371.009; // km
     2243            break;
     2244        case 'm':
     2245        case 'meters':
     2246            $earthMeanRadius = 6371.009 * 1000; // km
     2247            break;
     2248        case 'miles':
     2249            $earthMeanRadius = 3958.761; // miles
     2250            break;
     2251        case 'yards':
     2252        case 'yds':
     2253            $earthMeanRadius = 3958.761 * 1760; // yards
     2254            break;
     2255        case 'feet':
     2256        case 'ft':
     2257            $earthMeanRadius = 3958.761 * 1760 * 3; // feet
     2258            break;
     2259        case 'nm':
     2260            $earthMeanRadius = 3440.069; //  miles
     2261            break;
     2262        default:
     2263            $earthMeanRadius = 3958.761; // miles
     2264            break;
     2265    endswitch;
     2266
     2267    return $earthMeanRadius;
     2268}
     2269
     2270function db_calculateDistanceFromLatLong( $loc1_lat, $loc1_lng, $loc2_lat, $loc2_lng, $uom = 'km' ) {
     2271    //  Use Haversine formula to calculate the great circle distance between two points identified by longitude and latitude
     2272
     2273    $earthMeanRadius = db_getDistanceRadius( $uom );
     2274
     2275    $deltaLatitude  = deg2rad( (float) $loc2_lat - (float) $loc1_lat );
     2276    $deltaLongitude = deg2rad( (float) $loc2_lng - (float) $loc1_lng );
     2277    $a              = sin( $deltaLatitude / 2 ) * sin( $deltaLatitude / 2 ) +
     2278                      cos( deg2rad( (float) $loc1_lat ) ) * cos( deg2rad( (float) $loc2_lat ) ) *
     2279                      sin( $deltaLongitude / 2 ) * sin( $deltaLongitude / 2 );
     2280    $c              = 2 * atan2( sqrt( $a ), sqrt( 1 - $a ) );
     2281    $distance       = $earthMeanRadius * $c;
     2282
     2283    return $distance;
     2284
    21262285}
    21272286
     
    21492308    if ( !empty($field_list) ) {
    21502309        foreach ($field_list as $field_name) {
    2151             $field_data[$field_name] = esc_attr( get_post_meta( $post_id, $field_name, true ) );
     2310            $custom_field_value = get_post_meta( $post_id, $field_name, true );
     2311            $field_data[$field_name] = ( !is_array( $custom_field_value ) ? sanitize_text_field( $custom_field_value ) : db_sanitize_array( $custom_field_value ) );
    21522312            if ( $field_name == 'listing_address' && $field_data[$field_name] == '' ) {
    21532313                $field_data[$field_name] = 'London';
     
    28332993        foreach ($active_fields as $field_name => $field_title) {
    28342994            if ( isset($listing_array[$field_name]) ) {
    2835                 echo '<div class="'.$custom_class.'">'.'<span class="db-field-title">'.$field_title.': </span><span class="db-field-value">'.$listing_array[$field_name].'</span></div>';
     2995                echo '<div class="'.$custom_class.'">'.'<span class="db-field-title">'.$field_title.': </span><span class="db-field-value">'.(is_array($listing_array[$field_name])?implode(', ', $listing_array[$field_name]):$listing_array[$field_name]).'</span></div>';
    28362996            }
    28372997        }
     
    47534913    if ( $featured_status == 'No' ) {
    47544914        if( ($key = array_search($listing_id, $featured_listings)) !== false ) {
    4755             unset($featured_listings[$key]);
    4756             $featured_changed = true;
     4915            unset($featured_listings[$key]);
     4916            $featured_changed = true;
    47574917        }
    47584918    } else if ( $featured_status == 'Yes' ) {
  • directory-builder/tags/1.3.2/public/js/db-functionality-public.js

    r1557657 r1591115  
    188188
    189189            db_clear_markers();
     190            var merker_count = 0;
    190191            jQuery.each(parsed_search_data.marker_data, function(index, marker) {
    191192                db_set_search_markers($search_map, marker);
     193                merker_count++;
    192194            });
    193195
     
    260262
    261263                $search_map.fitBounds(map_bounds);
    262                 // $search_map.setZoom(13);
     264                if ( merker_count == 1 ) {
     265                    $search_map.setZoom(13);
     266                }
    263267
    264268                db_set_isotope();
     
    319323                    date: '[data-date] parseInt',
    320324                    rating: '[data-rating] parseInt',
     325                    featured: '[data-featured] parseInt'
    321326                },
    322                 sortBy: 'name',
    323                 sortAscending: true,
     327                sortBy: [ 'featured', 'name' ],
     328                sortAscending: {
     329                    name: true,
     330                    date: false,
     331                    rating: false,
     332                    featured: true
     333                },
    324334                transitionDuration: '0.2s',
    325335                hiddenStyle: {
     
    339349        if ( sort_by_value == 'date' || sort_by_value == 'rating' ) {
    340350            $search_item_container.isotope({
    341                 sortBy: sort_by_value,
    342                 sortAscending: false
     351                sortBy: [ 'featured', sort_by_value ],
    343352            });
    344353        } else {
    345354            $search_item_container.isotope({
    346                 sortBy: sort_by_value,
    347                 sortAscending: true
     355                sortBy: [ 'featured', sort_by_value ],
    348356            });
    349357        }
  • directory-builder/trunk/README.txt

    r1590048 r1591115  
    44Requires at least: 4.5.3
    55Tested up to: 4.7.2
    6 Stable tag: 1.3.1
     6Stable tag: 1.3.2
    77License: GPLv2 or later
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    2626== Changelog ==
    2727
     28= 1.3.2 =
     29* Improved search functionality
     30* Featured listing shown at the top of the search list
     31* Radio button issue while the value is shown at the search
     32
    2833= 1.3.1 =
    2934* Fixed issues with custom fields
  • directory-builder/trunk/admin/class-db-functionality-admin.php

    r1557657 r1591115  
    116116        wp_enqueue_media();
    117117        wp_enqueue_script( $this->db_func, plugin_dir_url( __FILE__ ) . 'js/db-functionality-admin.js', array( 'jquery' ), $this->version, false );
     118       
    118119
    119120    }
  • directory-builder/trunk/directory-builder.php

    r1590048 r1591115  
    1717 * Plugin URI:        https://cohhe.com/
    1818 * Description:       Directory builder provides listing functionality for your theme.
    19  * Version:           1.3.1
     19 * Version:           1.3.2
    2020 * Author:            Cohhe
    2121 * Author URI:        https://cohhe.com/
     
    465465                        <h3 class="db-main-title">Custom field</h3>
    466466                    </div>
    467                     <div class="db-field-row <?php echo(isset($field_settings['field_name'])&&$field_settings['field_name']!=''?'active':''); ?> clearfix">
    468                         <label class="field-label">Field name <span class="db-required">*</span></label>
    469                         <div class="db-field-input">
    470                             <input type="text" class="db-create-field-name" data-required="true" value="<?php echo(isset($field_settings['field_name'])?$field_settings['field_name']:''); ?>">
    471                             <span class="field-description">Unique name only from letters a-z</span>
    472                             <span class="db-field-required">This field is required</span>
    473                         </div>
    474                     </div>
     467                    <?php if ( !in_array('delete', $disabled_settings) ) { ?>
     468                        <div class="db-field-row <?php echo(isset($field_settings['field_name'])&&$field_settings['field_name']!=''?'active':''); ?> clearfix">
     469                            <label class="field-label">Field name <span class="db-required">*</span></label>
     470                            <div class="db-field-input">
     471                                <input type="text" class="db-create-field-name" data-required="true" value="<?php echo(isset($field_settings['field_name'])?$field_settings['field_name']:''); ?>">
     472                                <span class="field-description">Unique name only from letters a-z</span>
     473                                <span class="db-field-required">This field is required</span>
     474                            </div>
     475                        </div>
     476                    <?php } ?>
    475477                    <div class="db-field-row <?php echo(isset($field_settings['admin_title'])&&$field_settings['admin_title']!=''?'active':''); ?> clearfix">
    476478                        <label class="field-label">Admin title</label>
     
    578580                        </div>
    579581                    </div>
     582                    <?php if ( isset( $field_settings['disabled'] ) ) { ?>
     583                        <input type="hidden" class="db-create-disabled" value="<?php echo $field_settings['disabled']; ?>">
     584                    <?php } ?>
     585                    <?php if ( in_array('delete', $disabled_settings) ) { ?>
     586                        <input type="hidden" class="db-create-field-name" data-required="true" value="<?php echo(isset($field_settings['field_name'])?$field_settings['field_name']:''); ?>">
     587                    <?php } ?>
    580588                    <?php if ( $field_type == 'text' ) { ?>
    581589                        <div class="db-field-row <?php echo(isset($field_settings['validation_pattern'])&&$field_settings['validation_pattern']!=''?'active':''); ?> clearfix">
     
    737745        } else {
    738746            $save_query = $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'", field_active="'.$field_active.'", field_settings="'.$field_settings.'" WHERE ID="'.$field_id.'"');
     747            if ( $field_decoded_settings['field_name'] == 'listing_address' ) {
     748                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_city\"%"');
     749                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_neighborhood\"%"');
     750                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_zip\"%"');
     751                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_state\"%"');
     752                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_country\"%"');
     753                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_address_lat\"%"');
     754                $wpdb->query('UPDATE '.$wpdb->prefix.'directory_fields SET field_order="'.$field_order.'" WHERE field_settings LIKE "%\"field_name\":\"listing_address_lng\"%"');
     755            }
    739756        }
    740757
     
    9901007                                jQuery('#listing_address_lat').val(this.getPosition().lat());
    9911008                                jQuery('#listing_address_lng').val(this.getPosition().lng());
     1009                                jQuery('.db-set-address').addClass('dragged').click();
    9921010                            });
    9931011                        }
     
    9981016                        <?php } ?>
    9991017                        jQuery(document).on('click', '.db-set-address', function() {
    1000                             if ( jQuery('#listing_address_lat').val() != '' && jQuery('#listing_address_lng').val() != '' ) {
    1001                                 var new_location = new google.maps.LatLng(jQuery('#listing_address_lat').val(), jQuery('#listing_address_lng').val());
    1002                                 $first_marker.setMap(null);
    1003                                 var marker = new google.maps.Marker({ position: new_location, map: $map, draggable: true });
    1004                                 $first_marker = marker;
    1005                                 db_add_dragend_event( $first_marker );
    1006 
    1007                                 $map.setCenter(new_location);
     1018                            var google_json_address;
     1019                            if ( !jQuery(this).hasClass('dragged') ) {
     1020                                google_json_address = encodeURIComponent( jQuery('#listing_address').val() );
    10081021                            } else {
    1009                                 $geocoder.geocode( { "address": jQuery('#listing_address').val() }, function(results, status) {
    1010                                     if (status == google.maps.GeocoderStatus.OK) {
    1011                                         $first_marker.setMap(null);
    1012                                         var marker = new google.maps.Marker({ position: results[0].geometry.location, map: $map, draggable: true });
    1013                                         $first_marker = marker;
    1014                                         db_add_dragend_event( $first_marker );
    1015 
    1016                                         jQuery('#listing_address_lat').val(results[0].geometry.location.lat());
    1017                                         jQuery('#listing_address_lng').val(results[0].geometry.location.lng());
    1018 
    1019                                         $map.setCenter(results[0].geometry.location);
    1020                                     } else {
    1021                                         alert('Your address couldn\'t be found');
    1022                                     }
    1023                                 });
     1022                                google_json_address = encodeURIComponent( jQuery('#listing_address_lat').val()+','+jQuery('#listing_address_lng').val() );
    10241023                            }
     1024                            jQuery.get('https://maps.googleapis.com/maps/api/geocode/json?address='+google_json_address+'&key=<?php echo $main_settings['google_key']; ?>&language=en', function( data ) {
     1025                                if ( data.status == 'OK' ) {
     1026                                    $first_marker.setMap(null);
     1027                                    var marker = new google.maps.Marker({ position: data.results['0'].geometry.location, map: $map, draggable: true });
     1028                                    $first_marker = marker;
     1029                                    db_add_dragend_event( $first_marker );
     1030
     1031                                    jQuery('#listing_city, #listing_zip, #listing_neighborhood, #listing_state').val('');
     1032                                    jQuery.each(data.results['0'].address_components, function( index, address_comp ) {
     1033                                        if( address_comp.types[0] == "locality" && address_comp.types[1] == "political" ) {
     1034                                            jQuery('#listing_city').val( address_comp.long_name );
     1035                                        }
     1036
     1037                                        if( address_comp.types[0] == "country" && address_comp.types[1] == "political" ) {
     1038                                            if ( jQuery('[name="listing_country"] option[value="'+address_comp.long_name+'"]').length ) {
     1039                                                jQuery('[name="listing_country"]').val( address_comp.long_name );
     1040                                            } else {
     1041                                                jQuery('[name="listing_country"]').append('<option value="'+address_comp.long_name+'">'+address_comp.long_name+'</option>').val( address_comp.long_name );
     1042                                            }
     1043                                        }
     1044
     1045                                        if( address_comp.types[0] == "postal_code" ) {
     1046                                            jQuery('#listing_zip').val( address_comp.long_name );
     1047                                        }
     1048
     1049                                        if ( address_comp.types[0] == "administrative_area_level_1" && address_comp.types[1] == "political" ) {
     1050                                            jQuery('#listing_neighborhood').val( address_comp.long_name );
     1051                                        }
     1052
     1053                                        if ( address_comp.types[0] == "administrative_area_level_2" && address_comp.types[1] == "political" ) {
     1054                                            jQuery('#listing_state').val( address_comp.long_name );
     1055                                        }
     1056                                    });
     1057
     1058                                    jQuery('#listing_address').val( data.results['0'].formatted_address );
     1059
     1060                                    jQuery('#listing_address_lat').val(data.results['0'].geometry.location.lat);
     1061                                    jQuery('#listing_address_lng').val(data.results['0'].geometry.location.lng);
     1062
     1063                                    $map.setCenter(data.results['0'].geometry.location);
     1064                                    jQuery('.db-set-address').removeClass('dragged');
     1065                                } else {
     1066                                    alert('Your address couldn\'t be found');
     1067                                }
     1068                            });
    10251069                        });
    1026 
    1027 
    10281070                    });
    10291071                </script>
     
    14111453                    if ( !empty($select_values) ) {
    14121454                        $output .= '<select class="'.$custom_class.'" name="'.$field_name.'">';
     1455                        if ( !in_array($field_default, $select_values) ) {
     1456                            $select_values[] = $field_default;
     1457                        }
    14131458                        foreach ($select_values as $select_value) {
    14141459                            $select_data = explode(':', $select_value);
     
    14341479                        $output .= '<label class="db-field-row-label">'.$field_title.'</label>';
    14351480                    }
     1481
     1482                    $active_values = (isset($_GET[$field_name])?explode(',', sanitize_text_field($_GET[$field_name])):array());
     1483                    $active_value_shown = $active_value_hidden = '';
     1484                    if ( !empty($active_values) ) {
     1485                        $active_value_shown = implode(', ', $active_values);
     1486                        $active_value_hidden = implode(',', $active_values);
     1487                    }
     1488
    14361489                    $output .= '
    1437                     <input type="text" class="dt-custom-select" placeholder="'.$field_title.'" readonly>
    1438                     <input type="hidden" class="'.$custom_class.'" name="'.$field_name.'" id="dt-search-search_category">
     1490                    <input type="text" class="dt-custom-select" placeholder="'.$field_title.'" value="'.$active_value_shown.'" readonly>
     1491                    <input type="hidden" class="'.$custom_class.'" name="'.$field_name.'" id="dt-search-search_category" value="'.$active_value_hidden.'">
    14391492                    <div class="dt-custom-select-container">';
    14401493                        $output .= '
     
    14441497                                if ( !empty($select_values) ) {
    14451498                                    foreach ($select_values as $select_value) {
    1446                                         $select_data = explode(':', $select_value);
    1447                                         $is_selected = ($select_data['0']==$field_default?' active':'');
     1499                                        $select_data = explode( ':', $select_value );
     1500                                        $selected_values = explode( ',', $field_default );
     1501                                        $is_selected = (in_array($select_data['0'], $selected_values)?' active':'');
    14481502                                        $output .= '<div class="dt-custom-select-item'.$is_selected.'" data-value="'.$select_data['0'].'">'.(isset($select_data['1'])?$select_data['1']:$select_data['0']).'</div>';
    14491503                                    }
     
    14761530            $select_values = preg_split("/\\r\\n|\\r|\\n/", $select_options);
    14771531
    1478             $output .= '
    1479             <div class="db-field-row'.$field_required.' default-label">';
     1532            if ( !defined('WHITELAB_CUSTOM_SELECT') || is_admin() ) {
     1533                $output .= '<div class="db-field-row'.$field_required.'">';
    14801534                if ( $field_title != '' ) {
    14811535                    $output .= '<label class="db-field-row-label">'.$field_title.'</label>';
    14821536                }
    14831537                if ( !empty($select_values) ) {
    1484                      if ( $field_settings['multiselect_type'] == 'select' ) {
    1485                         $output .= '<select class="'.$custom_class.'" name="'.$field_name.'[]" multiple>';
    1486                         if ( $field_default == '' ) {
    1487                             $field_default = array();
    1488                         }
    1489                         foreach ($select_values as $select_value) {
    1490                             $select_data = explode(':', $select_value);
    1491                             $is_selected = (in_array($select_data['0'], $field_default)?' selected':'');
    1492                             $output .= '<option value="'.$select_data['0'].'"'.$is_selected.'>'.$select_data['1'].'</option>';
    1493                         }
    1494                         $output .= '</select>';
    1495                     } else if ( $field_settings['multiselect_type'] == 'checkbox' ) {
    1496                         foreach ($select_values as $select_value) {
    1497                             $select_data = explode(':', $select_value);
    1498                             $is_selected = (in_array($select_value, $field_default)?' checked':'');
    1499                             $output .= '<label class="db-'.$field_settings['multiselect_type'].'-label"><input type="'.$field_settings['multiselect_type'].'" name="'.$field_name.'[]" value="'.$select_data['0'].'"'.$is_selected.'>'.$select_data['1'].'<label>';
    1500                         }
     1538                    $output .= '<select class="'.$custom_class.'" name="'.$field_name.'" multiple>';
     1539                    foreach ($select_values as $select_value) {
     1540                        $select_data = explode(':', $select_value);
     1541                        $selected_values = explode( ',', $field_default );
     1542
     1543                        $is_selected = (in_array($select_data['0'], $selected_values)?' selected':'');
     1544                        $output .= '<option value="'.$select_data['0'].'"'.$is_selected.'>'.(isset($select_data['1'])?$select_data['1']:$select_data['0']).'</option>';
    15011545                    }
     1546                    $output .= '</select>';
    15021547                }
    15031548                if ( $field_description != '' || ( $field_settings['required'] == 'yes' && $field_required_message != '' ) ) {
     
    15111556                    $output .= '</div>';
    15121557                }
     1558            } else {
     1559                $output .= '
     1560                <div class="db-field-row'.$field_required.' custom-select">';
     1561                $active_values = (isset($_GET[$field_name])?explode(',', sanitize_text_field($_GET[$field_name])):array());
     1562                $active_value_shown = $active_value_hidden = '';
     1563                if ( !empty($active_values) ) {
     1564                    $active_value_shown = implode(', ', $active_values);
     1565                    $active_value_hidden = implode(',', $active_values);
     1566                }
     1567
     1568                $output .= '
     1569                <input type="text" class="dt-custom-select" placeholder="'.$field_title.'" value="'.$active_value_shown.'" readonly>
     1570                <input type="hidden" class="'.$custom_class.'" name="'.$field_name.'" id="dt-search-search_category" value="'.$active_value_hidden.'">
     1571                <div class="dt-custom-select-container">';
     1572                    $output .= '
     1573                    <div class="dt-custom-select-inner">
     1574                        <div class="dt-custom-select-search"><input type="text" placeholder="'.__('Search', 'directory-builder').'"></div>
     1575                        <div class="dt-custom-select-items">';
     1576                            if ( !empty($select_values) ) {
     1577                                foreach ($select_values as $select_value) {
     1578                                    $select_data = explode( ':', $select_value );
     1579                                    $selected_values = explode( ',', $field_default );
     1580                                    $is_selected = (in_array($select_data['0'], $selected_values)?' active':'');
     1581                                    $output .= '<div class="dt-custom-select-item'.$is_selected.'" data-value="'.$select_data['0'].'">'.(isset($select_data['1'])?$select_data['1']:$select_data['0']).'</div>';
     1582                                }
     1583                            }
     1584                        $output .= '
     1585                        </div>
     1586                        <div class="dt-custom-select-scrollbar-wrapper">
     1587                            <span class="dt-custom-select-scrollbar"></span>
     1588                        </div>
     1589                    </div>';
     1590                $output .= '
     1591                </div>';
     1592                if ( $field_description != '' || ( $field_settings['required'] == 'yes' && $field_required_message != '' ) ) {
     1593                    $output .= '<div class="db-field-meta">';
     1594                        if ( $field_description != '' ) {
     1595                            $output .= '<span class="db-field-row-description">'.$field_description.'</span>';
     1596                        }
     1597                        if ( $field_settings['required'] == 'yes' && $field_required_message != '' ) {
     1598                            $output .= '<span class="db-field-row-required">'.$field_required_message.'</span>';
     1599                        }
     1600                    $output .= '</div>';
     1601                }
     1602            }
    15131603            $output .= '
    15141604            </div>';
     
    18561946                                                    $active_placeholder = '';
    18571947                                                    if ( empty($active_categories) ) {
    1858                                                         $active_placeholder = __('Category', 'directory-builder');
     1948                                                        $active_placeholder = '';
    18591949                                                    } else {
    18601950                                                        foreach ($terms as $cat_data) {
     
    18671957                                                    $output .= '
    18681958                                                    <div class="db-field-row db-search-categories custom-select">
    1869                                                         <input type="text" class="dt-custom-select" placeholder="'.$active_placeholder.'" readonly>
     1959                                                        <input type="text" class="dt-custom-select" placeholder="'.esc_html__( 'Category', 'directory-builder' ).'" value="'.$active_placeholder.'" readonly>
    18701960                                                        <input type="hidden" class="dt-custom-select-value" id="db-search-search_category" value="'.implode(',', $active_categories).'">
    18711961                                                        <div class="dt-custom-select-container">';
     
    20062096            $field_list = db_get_active_fields();
    20072097
     2098            if ( $main_settings['search_radius_status'] == 'yes' && isset($search_terms['listing_address']) && $search_terms['listing_address'] != '' ) {
     2099                $search_coordinates = db_get_coordinates( $search_terms['listing_address'] );
     2100                $search_coordinates = explode(',', $search_coordinates);
     2101            }
     2102
    20082103            foreach ($search_listings as $listing_value) {
    20092104                $custom_field_data = db_get_listing_custom_values($field_list, $listing_value->ID);
     
    20122107
    20132108                if ( $main_settings['search_radius_status'] == 'yes' && isset($search_terms['listing_address']) && $search_terms['listing_address'] != '' ) {
    2014                     $search_coordinates = db_get_coordinates( $search_terms['listing_address'] );
    2015                     $search_coordinates = explode(',', $search_coordinates);
    2016                     $db_search_distance = db_calculate_distance($listing_value['listing_address_lat'], $listing_value['listing_address_lng'], $search_coordinates['0'], $search_coordinates['1'], $main_settings['search_radius_value']);
    2017 
    2018                     if ( $db_search_distance > intval($search_distance) ) {
    2019                         $show_listing = false;
     2109                    $db_search_distance = db_calculateDistanceFromLatLong($listing_value['listing_address_lat'], $listing_value['listing_address_lng'], $search_coordinates['0'], $search_coordinates['1'], $main_settings['search_radius_value']);
     2110
     2111                    if ( intval($db_search_distance) > intval($search_distance) ) {
     2112                        $dist_show_listing = false;
     2113                    } else {
     2114                        $dist_show_listing = true;
    20202115                    }
    2021 
    20222116                }
    20232117
    20242118                if ( !empty($search_terms) ) {
    20252119                    $matched_settings = 0;
     2120
    20262121                    foreach ($search_terms as $search_key => $search_value) {
     2122
     2123                        if ( $main_settings['search_radius_status'] == 'yes' && isset($search_terms['listing_address']) && $search_terms['listing_address'] != '' && $search_key == 'listing_address' && $dist_show_listing ) {
     2124                            $matched_settings++;
     2125                            continue;
     2126                        }
     2127
    20272128                        if ( $search_key == 'search_category' ) {
    20282129                            $searched_categories = explode(',', $search_terms['search_category']);
     
    20432144                                $matched_settings++;
    20442145                            }
     2146                        } else if ( $search_key == 'listing_country' ) {
     2147                            $searched_countries = explode(',', $search_value);
     2148                            foreach ($searched_countries as $country_value) {
     2149                                if ( strtolower($country_value) == strtolower($listing_value[$search_key]) ) {
     2150                                    $show_listing = true;
     2151                                    $matched_settings++;
     2152                                    break;
     2153                                } else {
     2154                                    $show_listing = false;
     2155                                }
     2156                            }
    20452157                        } else {
    20462158                            if ( strtolower($listing_value[$search_key]) != strtolower($search_value) ) {
     
    20892201                }
    20902202            }
    2091             // $db_search_listing_data = array();
    20922203        }
    20932204    }
     
    21172228
    21182229    if ($unit == 'km') {
    2119         // return ($miles * 1.609344);
    2120         return 0;
     2230        return ($miles * 1.609344);
    21212231    } else if ($unit == 'N') {
    21222232        return ($miles * 0.8684);
     
    21242234        return $miles;
    21252235    }
     2236}
     2237
     2238function db_getDistanceRadius( $uom = 'km' ) {
     2239    //  Use Haversine formula to calculate the great circle distance between two points identified by longitude and latitude
     2240    switch ( strtolower( $uom ) ):
     2241        case 'km':
     2242            $earthMeanRadius = 6371.009; // km
     2243            break;
     2244        case 'm':
     2245        case 'meters':
     2246            $earthMeanRadius = 6371.009 * 1000; // km
     2247            break;
     2248        case 'miles':
     2249            $earthMeanRadius = 3958.761; // miles
     2250            break;
     2251        case 'yards':
     2252        case 'yds':
     2253            $earthMeanRadius = 3958.761 * 1760; // yards
     2254            break;
     2255        case 'feet':
     2256        case 'ft':
     2257            $earthMeanRadius = 3958.761 * 1760 * 3; // feet
     2258            break;
     2259        case 'nm':
     2260            $earthMeanRadius = 3440.069; //  miles
     2261            break;
     2262        default:
     2263            $earthMeanRadius = 3958.761; // miles
     2264            break;
     2265    endswitch;
     2266
     2267    return $earthMeanRadius;
     2268}
     2269
     2270function db_calculateDistanceFromLatLong( $loc1_lat, $loc1_lng, $loc2_lat, $loc2_lng, $uom = 'km' ) {
     2271    //  Use Haversine formula to calculate the great circle distance between two points identified by longitude and latitude
     2272
     2273    $earthMeanRadius = db_getDistanceRadius( $uom );
     2274
     2275    $deltaLatitude  = deg2rad( (float) $loc2_lat - (float) $loc1_lat );
     2276    $deltaLongitude = deg2rad( (float) $loc2_lng - (float) $loc1_lng );
     2277    $a              = sin( $deltaLatitude / 2 ) * sin( $deltaLatitude / 2 ) +
     2278                      cos( deg2rad( (float) $loc1_lat ) ) * cos( deg2rad( (float) $loc2_lat ) ) *
     2279                      sin( $deltaLongitude / 2 ) * sin( $deltaLongitude / 2 );
     2280    $c              = 2 * atan2( sqrt( $a ), sqrt( 1 - $a ) );
     2281    $distance       = $earthMeanRadius * $c;
     2282
     2283    return $distance;
     2284
    21262285}
    21272286
     
    21492308    if ( !empty($field_list) ) {
    21502309        foreach ($field_list as $field_name) {
    2151             $field_data[$field_name] = esc_attr( get_post_meta( $post_id, $field_name, true ) );
     2310            $custom_field_value = get_post_meta( $post_id, $field_name, true );
     2311            $field_data[$field_name] = ( !is_array( $custom_field_value ) ? sanitize_text_field( $custom_field_value ) : db_sanitize_array( $custom_field_value ) );
    21522312            if ( $field_name == 'listing_address' && $field_data[$field_name] == '' ) {
    21532313                $field_data[$field_name] = 'London';
     
    28332993        foreach ($active_fields as $field_name => $field_title) {
    28342994            if ( isset($listing_array[$field_name]) ) {
    2835                 echo '<div class="'.$custom_class.'">'.'<span class="db-field-title">'.$field_title.': </span><span class="db-field-value">'.$listing_array[$field_name].'</span></div>';
     2995                echo '<div class="'.$custom_class.'">'.'<span class="db-field-title">'.$field_title.': </span><span class="db-field-value">'.(is_array($listing_array[$field_name])?implode(', ', $listing_array[$field_name]):$listing_array[$field_name]).'</span></div>';
    28362996            }
    28372997        }
     
    47534913    if ( $featured_status == 'No' ) {
    47544914        if( ($key = array_search($listing_id, $featured_listings)) !== false ) {
    4755             unset($featured_listings[$key]);
    4756             $featured_changed = true;
     4915            unset($featured_listings[$key]);
     4916            $featured_changed = true;
    47574917        }
    47584918    } else if ( $featured_status == 'Yes' ) {
  • directory-builder/trunk/public/js/db-functionality-public.js

    r1557657 r1591115  
    188188
    189189            db_clear_markers();
     190            var merker_count = 0;
    190191            jQuery.each(parsed_search_data.marker_data, function(index, marker) {
    191192                db_set_search_markers($search_map, marker);
     193                merker_count++;
    192194            });
    193195
     
    260262
    261263                $search_map.fitBounds(map_bounds);
    262                 // $search_map.setZoom(13);
     264                if ( merker_count == 1 ) {
     265                    $search_map.setZoom(13);
     266                }
    263267
    264268                db_set_isotope();
     
    319323                    date: '[data-date] parseInt',
    320324                    rating: '[data-rating] parseInt',
     325                    featured: '[data-featured] parseInt'
    321326                },
    322                 sortBy: 'name',
    323                 sortAscending: true,
     327                sortBy: [ 'featured', 'name' ],
     328                sortAscending: {
     329                    name: true,
     330                    date: false,
     331                    rating: false,
     332                    featured: true
     333                },
    324334                transitionDuration: '0.2s',
    325335                hiddenStyle: {
     
    339349        if ( sort_by_value == 'date' || sort_by_value == 'rating' ) {
    340350            $search_item_container.isotope({
    341                 sortBy: sort_by_value,
    342                 sortAscending: false
     351                sortBy: [ 'featured', sort_by_value ],
    343352            });
    344353        } else {
    345354            $search_item_container.isotope({
    346                 sortBy: sort_by_value,
    347                 sortAscending: true
     355                sortBy: [ 'featured', sort_by_value ],
    348356            });
    349357        }
Note: See TracChangeset for help on using the changeset viewer.