From 725b3829af8558b2d007d0b7d52fb83d17921183 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Fri, 12 Oct 2018 08:42:23 -0400 Subject: [PATCH] Testing how to add city range search into member plugin. May need a better way to do the additions to select for the getList. May need to add a new parameter to getList for it. --- lib/GlmDataAbstract/DataAbstract.php | 5 +++++ models/front/members/list.php | 32 +++++++++++++++++++++++++++- views/front/members/list.html | 10 +++++---- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/lib/GlmDataAbstract/DataAbstract.php b/lib/GlmDataAbstract/DataAbstract.php index 31fda89c..44318729 100755 --- a/lib/GlmDataAbstract/DataAbstract.php +++ b/lib/GlmDataAbstract/DataAbstract.php @@ -3286,11 +3286,16 @@ $forEdit = true; } + + $this->select = apply_filters( 'glm-member-db-select-query', $this->select ); + $sql = "SELECT $this->select FROM $this->table T WHERE true "; + // echo '
$sql: ' . print_r( $sql, true ) . '
'; + if (trim($where != '')) { $sql .= "AND $where "; diff --git a/models/front/members/list.php b/models/front/members/list.php index facc3b0e..ed10a86b 100755 --- a/models/front/members/list.php +++ b/models/front/members/list.php @@ -881,8 +881,38 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo // Default is alpha-numeric list order default: case $this->config['sort_order_numb']['Alpha-Numeric']: - $sortOrder = apply_filters( 'glm-member-db-front-search-query-orderby', 'member_name' ); + + function getDistanceQuery( $lat, $lng ) + { + $subPart = "(POW(SIN(((T.lat * PI()/180.0) - ($lat * PI()/180.0)) / 2.0), 2) + COS(($lat * PI() / 180.0)) * COS((T.lat * PI() / 180.0)) * POW(SIN(((T.lon * PI() / 180.0) - ($lng * PI() / 180.0)) / 2.0), 2))"; + return "CEIL(3956 * 2 * ATAN2(SQRT($subPart), SQRT(1 - ($subPart))))"; + } + + $lat = 45.373343; + $lng = -84.9553; + $where .= ' AND ' . getDistanceQuery( $lat, $lng ); + + function glmFilterByLatLon( $content ) + { + $lat = 45.373343; + $lng = -84.9553; + $city_id = 1; + $distanceQuery = getDistanceQuery( $lat, $lng ); + $distanceQuery = ", + CASE + WHEN T.city = $city_id THEN 0 + ELSE " . $distanceQuery . " + END AS distance"; + return $content.$distanceQuery; + } + + add_filter('glm-member-db-select-query', 'glmFilterByLatLon'); + + $sortOrder = apply_filters( 'glm-member-db-front-search-query-orderby', 'distance,member_name' ); ${$resultParam} = $this->getList($where.$alphaWhere, $sortOrder, true, 'id', $start, $limit); + + remove_filter( 'glm-member-db-select-query', 'glmFilterByLatLon' ); + break; } diff --git a/views/front/members/list.html b/views/front/members/list.html index f3230f4d..0a7d5a2b 100755 --- a/views/front/members/list.html +++ b/views/front/members/list.html @@ -202,9 +202,9 @@ {/foreach} {if $haveFeaturedMembers} - +

Featured {$terms.term_member_plur_cap}

- + {/if} + {if $member.distance}Distance: {$member.distance} miles from Petoskey{/if} {apply_filters('glm-member-db-front-members-list-memberDetailBottom', '', $member.member_pointer)} + {apply_filters('glm-member-db-front-members-list-memberDataBelow', '', $member.member_pointer)} {apply_filters('glm-member-db-front-members-list-memberBottom', '', $member.member_pointer)} -- 2.17.1