Testing how to add city range search into member plugin.
authorSteve Sutton <steve@gaslightmedia.com>
Fri, 12 Oct 2018 12:42:23 +0000 (08:42 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Fri, 12 Oct 2018 12:42:23 +0000 (08:42 -0400)
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
models/front/members/list.php
views/front/members/list.html

index 31fda89..4431872 100755 (executable)
@@ -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 '<pre>$sql: ' . print_r( $sql, true ) . '</pre>';
+
         if (trim($where != '')) {
             $sql .= "AND $where
             ";
index facc3b0..ed10a86 100755 (executable)
@@ -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;
 
             }
index f3230f4..0a7d5a2 100755 (executable)
             </div> <!-- End of information displayed in map bubbles -->
         {/foreach}
         {if $haveFeaturedMembers}
-            
+
             <h3>Featured {$terms.term_member_plur_cap}</h3>
-            
+
             <ul id="featured-grid" class="">
                 {foreach $featuredMembers as $fm}
                     <li class="featured-grid-item-wrapper">
                             {/if}
                             <div class="featured-grid-item-info">
                                 <h4 class="featured-member-title">{$fm.member_name}</h4>
-                                
+
                                 {if $fm.short_descr && $settings.list_show_short_descr}
                                     <div class="featured-member-description">
                                         {$fm.short_descr|nl2br}
                     featured
                 </div>
                 {/if}
-                
+
                  <!-- Member Logo - Medium and up-->
 
                     <div class="glm-member-list-data small-12 columns">
                         </ul>
                     {/if}
                     </div>
+                 {if $member.distance}Distance: {$member.distance} miles from Petoskey{/if}
                 </div>
                     {apply_filters('glm-member-db-front-members-list-memberDetailBottom', '', $member.member_pointer)}
                  </div>
 
 
+
                         <!-- Laury - This is the one that should go underneath all the address and description area -->
             {apply_filters('glm-member-db-front-members-list-memberDataBelow', '', $member.member_pointer)}
             {apply_filters('glm-member-db-front-members-list-memberBottom', '', $member.member_pointer)}