Fixed problem with map not including all selected members on members list page. hotfix/2.9.11
authorChuck Scott <cscott@gaslightmedia.com>
Thu, 16 Mar 2017 20:21:40 +0000 (16:21 -0400)
committerChuck Scott <cscott@gaslightmedia.com>
Thu, 16 Mar 2017 20:21:40 +0000 (16:21 -0400)
Added additional items to be returned for getSimpleMemberInfoList() when $forMapInfo is true in dataMemberInfo.php
Fixed member info clonw to properly copy over the member name to the info record in glmMemberInfoCLone.php
Moved memberDataByLatLon.php class to the classes directory from models.
Updated the plugin update client code in index.php.
Updated members/list.php to build an array of all members for the map even when paging is on.
Updated adminHooks.php to properly point to the memberDataByLatLon.php file now in classes directory
Updated member list template to use new member info data for maps.

classes/data/dataMemberInfo.php
classes/glmMemberInfoClone.php
classes/memberDataByLatLon.php [new file with mode: 0644]
index.php
lib/GlmDataAbstract/DataAbstract.php [changed mode: 0755->0644]
models/front/members/list.php
models/front/members/memberDataByLatLon.php [deleted file]
setup/adminHooks.php
views/front/members/list.html

index 5ad9c6c..5ac7306 100644 (file)
@@ -759,21 +759,24 @@ class GlmDataMemberInfo extends GlmDataAbstract
 
         if ($forMapItems) {
             $this->fields = array_merge($this->fields, array(
-                'addr1' => $f['addr1'],
-                'addr2' => $f['addr2'],
-                'city'  => $f['city'],
-                'state' => $f['state'],
-                'zip'   => $f['zip'],
-                'phone' => $f['phone'],
-                'email' => $f['email'],
-                'url'   => $f['url'],
-                'region'=> $f['region'],
-                'descr' => $f['descr'],
-                'short_descr' => $f['short_descr']
+                'addr1'         => $f['addr1'],
+                'addr2'         => $f['addr2'],
+                'city'          => $f['city'],
+                'state'         => $f['state'],
+                'country'       => $f['country'],
+                'zip'           => $f['zip'],
+                'phone'         => $f['phone'],
+                'toll_free'     => $f['toll_free'],
+                'email'         => $f['email'],
+                'url'           => $f['url'],
+                'region'        => $f['region'],
+                'cc_type'       => $f['cc_type'],
+                'logo'          => $f['logo'],
+                'descr'         => $f['descr'],
+                'short_descr'   => $f['short_descr']
             ));
         }
 
-
         // Get the simplified list
         $list = $this->getList($where);
 
index c2c1ebd..32d223d 100644 (file)
@@ -78,6 +78,9 @@ class GlmMemberInfoClone
         $MemberInfo = new GlmDataMemberInfo($this->wpdb, $this->config);
         $memberInfo = $MemberInfo->getEntry($id);
 
+        // Also set member_name field to be copied by clone action of Data Abstract
+        $MemberInfo->fields['member_name']['use'] = 'a';
+
         // Create a new base info record and get its ID - this also copies images to a new name
         $newID = $MemberInfo->cloneEntry($id);
 
diff --git a/classes/memberDataByLatLon.php b/classes/memberDataByLatLon.php
new file mode 100644 (file)
index 0000000..f85b189
--- /dev/null
@@ -0,0 +1,241 @@
+<?php
+
+/**
+ * Gaslight Media Members Database
+ * Front - Get list by Lat/Lon
+ *
+ * PHP version 5.5
+ *
+ * @category glmWordPressPlugin
+ * @package  glmMembersDatabase
+ * @author   Chuck Scott <cscott@gaslightmedia.com>
+ * @license  http://www.gaslightmedia.com Gaslightmedia
+ * @version  0.1
+ */
+
+// Load Members data abstract
+require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMemberInfo.php';
+
+/*
+ * This class performs the work for the default action of the "Members" menu
+ * option, which is to display the members dashboard.
+ *
+ */
+
+class GlmMembersFront_members_memberDataByLatLon extends GlmDataMemberInfo
+{
+
+    /**
+     * WordPress Database Object
+     *
+     * @var $wpdb
+     * @access public
+     */
+    public $wpdb;
+    /**
+     * Plugin Configuration Data
+     *
+     * @var $config
+     * @access public
+     */
+    public $config;
+
+    /*
+     * Constructor
+     *
+     * This contructor sets up this model. At this time that only includes
+     * storing away the WordPress data object.
+     *
+     * @return object Class object
+     *
+     */
+    public function __construct ($wpdb, $config)
+    {
+
+        // Save WordPress Database object
+        $this->wpdb = $wpdb;
+
+        // Save plugin configuration object
+        $this->config = $config;
+
+        // Run constructor for members data class
+        parent::__construct(false, false);
+
+    }
+
+    /*
+     * getMembers() - Get the list of members by lat/lot areas (if requested)
+     *
+     * NOTE: This model is intended to be called directly by an add_filter() to
+     * supply data only. It is not intended to be called by the controller and
+     * therefore should not be added to the validActions data.
+     *
+     * This model receives an array that includes a list of lat/lon boxes to use
+     * for listing members whose locations are within those boxes. The supplied
+     * array also may include other listing results passed by other filter hooks
+     * that should not be removed. The returned member data is expected to be used
+     * as data for map items along with similar data from other add-ons.
+     *
+     * The format of the requet array is as follows...
+     *
+     *      array(
+     *          // First area to search
+     *          array(
+     *              'latMax' => {lat at North end of area},
+     *              'latMin' => {lat at South end of area},
+     *              'lonMax' => {lon at East end of area},
+     *              'lonMin' => {lon at West end of area}
+     *          ),
+     *          // Second area to search
+     *          array(
+     *              'latMax' => {lat at North end of area},
+     *              'latMin' => {lat at South end of area},
+     *              'lonMax' => {lon at East end of area},
+     *              'lonMin' => {lon at West end of area}
+     *          ),
+     *          // Additional areas
+     *      )
+     *
+     * The format of the reply array is as follows...
+     *
+     *      array(
+     *          array(
+     *              'type'        => {type of item, i.e. 'member', 'event', ...},
+     *              'id'          => {ID of item for reference},
+     *              'lat'         => {Latitude},
+     *              'lon'         => {Longitude},
+     *              'name'        => {Name of item},
+     *              'addr1'       => {Address line 1 of location},
+     *              'addr2'       => {Address line 2 of location},
+     *              'city'        => {City of location},
+     *              'state'       => {State code of location},
+     *              'zip'         => {Postal Code of location},
+     *              'phone'       => {Contact phone number},
+     *              'email'       => {Contact E-Mail address},
+     *              'url'         => {URL of item},
+     *              'region'      => {Region name, if available},
+     *              'categories'  => {array of categories - i.e. array( 0 = array( id => {id}, name => {name}), ... )
+     *              'descr'       => {Description},
+     *              'short_descr' => {Short Description},
+     *              'detail_page' => {URL of detail page, if available}
+     *              'dates'       => {Text stating date, dates, or date range},
+     *              'times'       => {Text stating time, times, or time range}
+     *          ),
+     *          {additional results}
+     *      )
+     *
+     * Note that there may be more than one search area supplied. This model must
+     * return a list that includes any members in any of those search areas.
+     *
+     * @param string $request       Request type: 'onMap' = only return targets in the search areas, 'all' = get all
+     * @param array  $search        Array of lat/lon boxes to search
+     * @param string $searchText    String to search for in certain member data fields
+     * @param string $suppliedWhere Additional WHERE clause for selecting results
+     *
+     * @return array Items (see above) - Returns false if total failure.
+     *
+     */
+    public function getMembers($request = 'onMap', $search = false, $searchText = '', $suppliedWhere = '')
+    {
+
+        $items = array();
+
+        // Do sanity check on supplied data
+        if ($request == 'onMap' && (!is_array($search) || count($search) <= 0)) {
+            return false;
+        }
+
+        // If this is an "onMap" request build query where clause for each search area - otherwise it's anywhere
+        $where = '';
+        $and = '';
+        if ($request == 'onMap') {
+
+            $where = '( ';
+            $or = '';
+            foreach ($search as $area) {
+                $where .= "
+                    $or (
+                        lat BETWEEN ".$area['latMin']." AND ".$area['latMax']."
+                        AND lon BETWEEN ".$area['lonMin']." AND ".$area['lonMax']."
+                    )
+                ";
+                $or = ' OR ';
+            }
+            $where .= ')';
+
+            $and = ' AND ';
+
+        }
+
+        // If searchText is supplied
+        if ($searchText != '') {
+            $where .= "
+               $and (
+                    member_name like '%".addslashes($searchText)."%'
+                    OR short_descr like '%".addslashes($searchText)."%'
+                    )
+            ";
+        }
+
+        // Get the filtered list of members and return data fields for map items.
+        $this->postProcessCategory = true;
+        $members = $this->getSimpleMemberInfoList($where.$suppliedWhere, true);
+        $this->postProcessCategory = false;
+
+        // Rebuild data with correct array format for map items
+        if (is_array($members) && count($members) > 0) {
+            foreach ($members as $k=>$v) {
+
+                // Pull categories from the results and build the required simplfied array
+                $cats = array();
+                if (is_array($v['categories']) && count($v['categories']) > 0) {
+                    foreach ($v['categories'] as $c) {
+                        $cats[] = array(
+                            'id' => $c['id'],
+                            'name' => $c['name']
+                        );
+                    }
+                }
+
+                $members[$this->config['terms']['term_member_cap']+$v['id']] = array(
+                    'type'        => $this->config['terms']['term_member_cap'],
+                    'id'          => $v['id'],
+                    'member'      => $v['member_pointer'],
+                    'member_slug' => $v['member_slug'],
+                    'lat'         => $v['lat'],
+                    'lon'         => $v['lon'],
+                    'name'        => $v['member_name'],
+                    'loc_name'    => '',
+                    'addr1'       => $v['addr1'],
+                    'addr2'       => $v['addr2'],
+                    'city'        => $v['city'],
+                    'state'       => $v['state']['value'],
+                    'zip'         => $v['zip'],
+                    'country'     => $v['country']['name'],
+                    'lat'         => $v['lat'],
+                    'lon'         => $v['lon'],
+                    'phone'       => $v['phone'],
+                    'toll_free'   => $v['toll_free'],
+                    'email'       => $v['email'],
+                    'url'         => $v['url'],
+                    'region'      => $v['region'],
+                    'categories'  => $cats,
+                    'cc_type'     => $v['cc_type'],
+                    'logo'        => $v['logo'],
+                    'descr'       => $v['descr'],
+                    'short_descr' => $v['short_descr'],
+                    'detail_page' => GLM_MEMBERS_SITE_BASE_URL.$this->config['settings']['canonical_member_page'].'/'.$v['member_slug'].'/',
+                    'dates'       => '',
+                    'times'       => ''
+                );
+
+            }
+        }
+
+        return $members;
+    }
+
+
+}
+
+?>
index 9d81141..170d88a 100644 (file)
--- a/index.php
+++ b/index.php
@@ -3,7 +3,7 @@
  * Plugin Name: GLM Members Database
  * Plugin URI: http://www.gaslightmedia.com/
  * Description: Gaslight Media Members Database.
- * Version: 2.9.10
+ * Version: 2.9.11
  * Author: Gaslight Media
  * Author URI: http://www.gaslightmedia.com/
  * License: GPL2
@@ -19,7 +19,7 @@
  * @package glmMembersDatabase
  * @author Chuck Scott <cscott@gaslightmedia.com>
  * @license http://www.gaslightmedia.com Gaslightmedia
- * @version 2.9.10
+ * @version 2.9.11
  */
 
 /*
@@ -38,7 +38,7 @@
  *
  */
 
-define('GLM_MEMBERS_PLUGIN_VERSION', '2.9.10');
+define('GLM_MEMBERS_PLUGIN_VERSION', '2.9.11');
 define('GLM_MEMBERS_PLUGIN_DB_VERSION', '1.1.26');
 
 // Check if plugin version is not current in WordPress option and if needed updated it
old mode 100755 (executable)
new mode 100644 (file)
index 05fd32b..debc98e
@@ -1092,7 +1092,7 @@ abstract class GlmDataAbstract
     {
        return false;
     }
-    private function bitmapOutput($f, $d)
+    private function bitmapOutput($f, $d, $forEdit)
     {
        // Check for a bitmap data
        if (!isset($f['bitmap']) || !is_array($f['bitmap'])) {
@@ -1104,26 +1104,31 @@ abstract class GlmDataAbstract
                 );
             }
             return false;
-       }
+        }
 
-       // Build bitmap array
-       $bitmap = array();
-       $bitmapNames = array();
-       while (list($k, $v) = each($f['bitmap'])) {
+        // Build bitmap array
+        $bitmap = array();
+        $bitmapNames = array();
+        while (list($k, $v) = each($f['bitmap'])) {
 
-               $bitmap[$k] = array(
-                               'name'    => $v,
-                               'nameEsc' => addslashes($v),
-                       'value'   => $k,
-                               'default' => false
-               );
+            // If appropriate or requested, build picklists
+            if ($this->optionIncludeSelectListData || $forEdit ) {
+                $bitmap[$k] = array(
+                    'name'    => $v,
+                    'nameEsc' => addslashes($v),
+                    'value'   => $k,
+                    'default' => false
+                );
+            }
 
-               // Check if this option has been selected
-               $powVal = pow(2, $k);
-               if (($powVal & $d) > 0) {
-                       $bitmap[$k]['default'] = true;
-                       $bitmapNames[$k] = $v;
-               }
+            // Check if this option has been selected
+            $powVal = pow(2, $k);
+            if (($powVal & $d) > 0) {
+                if ($this->optionIncludeSelectListData || $forEdit ) {
+                    $bitmap[$k]['default'] = true;
+                }
+                $bitmapNames[$k] = $v;
+            }
 
        }
 
@@ -1888,16 +1893,13 @@ abstract class GlmDataAbstract
     {
         return false;
     }
-    private function timeOutput($f, $d)
+    private function timeOutput($f, $d, $forEdit)
     {
         // Default values if no time returned
         $hour = 12;
         $min = 00;
         $ampm = 'AM';
 
-        // Build picklists for time input
-       $time_list = $this->buildTimeFieldLists();
-
         // Get current time value
         $t = explode(':', $d);
         if (count($t) != 3) {
@@ -1916,10 +1918,19 @@ abstract class GlmDataAbstract
 
         }
 
-        // Set time picklist active values
-        $time_list['hour'][$hour]['default'] = true;
-        $time_list['min'][$min]['default'] = true;
-        $time_list['ampm'][$ampm[0]]['default'] = true;
+        // If appropriate or requested, build picklists
+        $time_list = false;
+        if ($this->optionIncludeSelectListData || $forEdit ) {
+
+            // Build picklists for time input
+               $time_list = $this->buildTimeFieldLists();
+
+            // Set time picklist active values
+            $time_list['hour'][$hour]['default'] = true;
+            $time_list['min'][$min]['default'] = true;
+            $time_list['ampm'][$ampm[0]]['default'] = true;
+
+        }
 
         // Create text time
         $time = sprintf('%2d:%02d %s', $hour, $min, $ampm);
@@ -3334,7 +3345,7 @@ abstract class GlmDataAbstract
         }
 
         $list = $this->wpdb->get_results($sql, ARRAY_A);
-        
+
         if (count($list) == 0) {
             return false;
         }
@@ -3356,7 +3367,7 @@ abstract class GlmDataAbstract
             $this->addDataAbstractNotice($newList, 'DataBlock', "getList() data");
         }
 
-        // If we're doing paging, return that data along with the list        
+        // If we're doing paging, return that data along with the list
         if ($paging) {
             $c = count($list);
             return array(
index 56c2ecd..be4a632 100644 (file)
@@ -161,6 +161,7 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo
         $membersFound         = false;
         $catSearchSelected    = false;
         $regionSearchSelected = false;
+        $mapItems             = false;
 
         // Paging Parameters
         $paging        = $this->config['settings']['list_pagination']; // Now this is in management
@@ -643,6 +644,11 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo
             // Get stats for number of members found matching current selection criteria (includes alpha selection)
             $filteredMembersFound = $this->getStats(str_replace('T.', '', $where.$alphaWhere));
 
+            // Get a simplified full list of member data for the map. Limit by selected Alpha is used.
+            require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/memberDataByLatLon.php';
+            $MapItems = new GlmMembersFront_members_memberDataByLatLon($this->wpdb, $this->config);
+            $mapItems = $MapItems->getMembers('all', false, '', $where.$alphaWhere);
+
             // Get member list sorted as specified
             switch ($this->config['settings']['list_order_list']) {
 
@@ -713,6 +719,7 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo
             'haveMembers'       => $haveMembers,
             'members'           => $list,
             'membersFound'      => $membersFound,
+            'mapItems'          => $mapItems,
             'haveFilter'        => $haveFilter,
             'filterArchived'    => $filterArchived,
             'filterFeatured'    => $filterFeatured,
@@ -759,4 +766,3 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo
 
 }
 
-?>
diff --git a/models/front/members/memberDataByLatLon.php b/models/front/members/memberDataByLatLon.php
deleted file mode 100644 (file)
index dcd4cf1..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-<?php
-
-/**
- * Gaslight Media Members Database
- * Front - Get list by Lat/Lon
- *
- * PHP version 5.5
- *
- * @category glmWordPressPlugin
- * @package  glmMembersDatabase
- * @author   Chuck Scott <cscott@gaslightmedia.com>
- * @license  http://www.gaslightmedia.com Gaslightmedia
- * @version  0.1
- */
-
-// Load Members data abstract
-require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMemberInfo.php';
-
-/*
- * This class performs the work for the default action of the "Members" menu
- * option, which is to display the members dashboard.
- *
- */
-
-class GlmMembersFront_members_memberDataByLatLon extends GlmDataMemberInfo
-{
-
-    /**
-     * WordPress Database Object
-     *
-     * @var $wpdb
-     * @access public
-     */
-    public $wpdb;
-    /**
-     * Plugin Configuration Data
-     *
-     * @var $config
-     * @access public
-     */
-    public $config;
-
-    /*
-     * Constructor
-     *
-     * This contructor sets up this model. At this time that only includes
-     * storing away the WordPress data object.
-     *
-     * @return object Class object
-     *
-     */
-    public function __construct ($wpdb, $config)
-    {
-
-        // Save WordPress Database object
-        $this->wpdb = $wpdb;
-
-        // Save plugin configuration object
-        $this->config = $config;
-
-        // Run constructor for members data class
-        parent::__construct(false, false);
-
-    }
-
-    /*
-     * Perform Model Action
-     *
-     * NOTE: This model is intended to be called directly by an add_filter() to
-     * supply data only. It is not intended to be called by the controller and
-     * therefore should not be added to the validActions data.
-     *
-     * This model receives an array that includes a list of lat/lon boxes to use
-     * for listing members whose locations are within those boxes. The supplied
-     * array also may include other listing results passed by other filter hooks
-     * that should not be removed. The returned member data is expected to be used
-     * as data for map items along with similar data from other add-ons.
-     *
-     * The format of the requet array is as follows...
-     *
-     *      array(
-     *          // First area to search
-     *          array(
-     *              'latMax' => {lat at North end of area},
-     *              'latMin' => {lat at South end of area},
-     *              'lonMax' => {lon at East end of area},
-     *              'lonMin' => {lon at West end of area}
-     *          ),
-     *          // Second area to search
-     *          array(
-     *              'latMax' => {lat at North end of area},
-     *              'latMin' => {lat at South end of area},
-     *              'lonMax' => {lon at East end of area},
-     *              'lonMin' => {lon at West end of area}
-     *          ),
-     *          // Additional areas
-     *      )
-     *
-     * The format of the reply array is as follows...
-     *
-     *      array(
-     *          array(
-     *              'type'        => {type of item, i.e. 'member', 'event', ...},
-     *              'id'          => {ID of item for reference},
-     *              'lat'         => {Latitude},
-     *              'lon'         => {Longitude},
-     *              'name'        => {Name of item},
-     *              'addr1'       => {Address line 1 of location},
-     *              'addr2'       => {Address line 2 of location},
-     *              'city'        => {City of location},
-     *              'state'       => {State code of location},
-     *              'zip'         => {Postal Code of location},
-     *              'phone'       => {Contact phone number},
-     *              'email'       => {Contact E-Mail address},
-     *              'url'         => {URL of item},
-     *              'region'      => {Region name, if available},
-     *              'categories'  => {array of categories - i.e. array( 0 = array( id => {id}, name => {name}), ... )
-     *              'descr'       => {Description},
-     *              'short_descr' => {Short Description},
-     *              'detail_page' => {URL of detail page, if available}
-     *              'dates'       => {Text stating date, dates, or date range},
-     *              'times'       => {Text stating time, times, or time range}
-     *          ),
-     *          {additional results}
-     *      )
-     *
-     * Note that there may be more than one search area supplied. This model must
-     * return a list that includes any members in any of those search areas.
-     *
-     * @param array $search      Array of lat/lon boxes to search
-     * @param string $searchText String to search for in certain member data fields
-     *
-     * @return array Items (see above) - Returns false if total failure.
-     *
-     */
-    public function modelAction ($request = 'onMap', $search = false, $searchText = '')
-    {
-
-        $items = array();
-
-        // Do sanity check on supplied data
-        if ($request == 'onMap' && (!is_array($search) || count($search) <= 0)) {
-            return false;
-        }
-
-        // If this is an "onMap" request build query where clause for each search area - otherwise it's anywhere
-        $where = '';
-        $and = '';
-        if ($request == 'onMap') {
-
-            $where = '( ';
-            $or = '';
-            foreach ($search as $area) {
-                $where .= "
-                    $or (
-                        lat BETWEEN ".$area['latMin']." AND ".$area['latMax']."
-                        AND lon BETWEEN ".$area['lonMin']." AND ".$area['lonMax']."
-                    )
-                ";
-                $or = ' OR ';
-            }
-            $where .= ')';
-
-            $and = ' AND ';
-
-        }
-
-        // If searchText is supplied
-        if ($searchText != '') {
-            $where .= "
-               $and (
-                    member_name like '%".addslashes($searchText)."%'
-                    OR short_descr like '%".addslashes($searchText)."%'
-                    )
-            ";
-        }
-
-        // Get the filtered list of members and return data fields for map items.
-        $this->postProcessCategory = true;
-        $members = $this->getSimpleMemberInfoList($where, true);
-        $this->postProcessCategory = false;
-
-        // Rebuild data with correct array format for map items
-        if (is_array($members) && count($members) > 0) {
-            foreach ($members as $k=>$v) {
-
-                // Pull categories from the resulst and build the required simplfied array
-                $cats = array();
-                if (is_array($v['categories']) && count($v['categories']) > 0) {
-                    foreach ($v['categories'] as $c) {
-                        $cats[] = array(
-                            'id' => $c['id'],
-                            'name' => $c['name']
-                        );
-                    }
-                }
-
-                $members[$this->config['terms']['term_member_cap']+$v['id']] = array(
-                    'type'        => $this->config['terms']['term_member_cap'],
-                    'id'          => $v['id'],
-                    'lat'         => $v['lat'],
-                    'lon'         => $v['lon'],
-                    'name'        => $v['member_name'],
-                    'loc_name'    => '',
-                    'addr1'       => $v['addr1'],
-                    'addr2'       => $v['addr2'],
-                    'city'        => $v['city'],
-                    'state'       => $v['state']['value'],
-                    'zip'         => $v['zip'],
-                    'phone'       => $v['phone'],
-                    'email'       => $v['email'],
-                    'url'         => $v['url'],
-                    'region'      => $v['region'],
-                    'categories'  => $cats,
-                    'descr'       => $v['descr'],
-                    'short_descr' => $v['short_descr'],
-                    'detail_page' => GLM_MEMBERS_SITE_BASE_URL.$this->config['settings']['canonical_member_page'].'/'.$v['member_slug'].'/',
-                    'dates'       => '',
-                    'times'       => ''
-                );
-
-            }
-        }
-
-        return $members;
-    }
-
-
-}
-
-?>
index c8d1bb6..67e2bd5 100644 (file)
@@ -242,9 +242,9 @@ if ( isset( $config ) && isset( $config['settings'] ) && $config['settings']['en
 add_filter( 'glm-hook-list-map-items-by-latlon', function($data) {
 
     // Call dedicated model to perform search
-    include_once GLM_MEMBERS_PLUGIN_PATH . '/models/front/members/memberDataByLatLon.php';
+    include_once GLM_MEMBERS_PLUGIN_PATH . '/classes/memberDataByLatLon.php';
     $MapItems = new GlmMembersFront_members_memberDataByLatLon($this->wpdb, $this->config);
-    $mapItems = $MapItems->modelAction($data['request'], $data['area'], $data['filter']);
+    $mapItems = $MapItems->getMembers($data['request'], $data['area'], $data['filter']);
 
     // Add the info on this source
     $data['sources'][GLM_MEMBERS_PLUGIN_SLUG] = array(
index 864d6ff..7a5a6be 100644 (file)
         <h3 class="glm-member-db-list-header-title">List of {$terms.term_member_plur_cap}</h3>
     {/if}
     {if $haveMembers}
+    
+     <!-- Member information displayed in map bubbles -->
+        {foreach $mapItems as $m}
+            <div id="map_info_{$m.id}" class="glm-hidden">
+                {apply_filters('glm-member-db-front-members-list-mapBubbleTop', '', $m.member)}
+                {if $m.logo && $settings.list_map_show_logo}
+                    <div class="glm-member-list-image">
+                        <img src="{$glmPluginMediaUrl}/images/{$settings.list_map_logo_size}/{$m.logo}">
+                    </div>
+                {/if}
+                <div class="glm-map-member-name">
+                    {if $settings.list_map_show_detaillink}
+                        <a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$m.member_slug}/">{$m.name}</a>
+                    {else}
+                        {$m.name}
+                    {/if}
+                </div>
+                {if $settings.list_map_show_address}
+                    <p class="glm-map-member-address">
+                        {if $settings.list_map_show_street}
+                            {if $m.addr1}{$m.addr1}<br>{/if}
+                            {if $m.addr2}{$m.addr2}<br>{/if}
+                        {/if}
+                        {if $settings.list_map_show_citystatezip}
+                            {if $m.city}{$m.city}{if $m.state}, {/if}{/if}{if $m.state}{$m.state}{/if}{if $m.zip} {$m.zip}{/if}
+                        {/if}
+                        {if $m.country && $settings.list_map_show_country}
+                            <br>{$m.country}
+                        {/if}
+                    </p>
+                {/if} {*list_map_show_address*}
+                <div class="glm-member-list-info">
+                    <p>
+                        {if $m.phone && $settings.list_map_show_phone}<b>Phone:</b> {apply_filters('glm_associate_phone_filter', $m.phone)}<br>{/if}
+                        {if $m.toll_free && $settings.list_map_show_tollfree}{apply_filters('glm_associate_phone_filter', $m.toll_free)}<br>{/if}
+                        {if $m.url && $settings.list_map_show_url}<b>Web site:</b> <a href="{$m.url}"{if $settings.list_map_show_url_newtarget} target="_blank"{/if}>{$m.url}</a><br>{/if}
+                        {if $m.email && $settings.list_map_show_email}<b>E-Mail Address:</b> <a href="mailto:{$m.email}">{$m.email}</a><br>{/if}
+                        {if $m.region && $settings.list_map_show_region}<b>Region:</b> {$m.region}{/if}
+                    </p>
+                    {if $m.descr && $settings.list_map_show_descr}{$m.descr|nl2br}<br>{/if}
+                    {if $m.short_descr && $settings.list_map_show_short_descr}{$m.short_descr}<br>{/if}
+                    {if $m.categories && $settings.list_map_show_categories}
+                        <div class="glm-member-list-items">
+                            <b>{$terms.term_member_cap} Categories</b>
+                            <ul>
+                            {foreach $m.categories as $c}
+                                <li>
+                                    {if $c.parent_name}{$c.parent_name}: {/if}{$c.name}
+                                </li>
+                            {/foreach}
+                            </ul>
+                        </div>
+                    {/if}
+    <!-- Not using credit cards for now
+                    {if $m.cc_type && $settings.list_map_show_creditcards}
+                        <div class="glm-member-list-items">
+                            <b>Credit Cards Accepted:</b>
+                            <ul>
+                            {foreach $m.cc_type.names as $c}
+                                <li>{$c}</li>
+                            {/foreach}
+                            </ul>
+                        </div>
+                    {/if}
+    -->
+                    {if $settings.list_map_show_amenities}
+                        <div class="glm-member-list-items">
+                            <b>Amenities:</b>
+                            <ul>
+                            {foreach $m.amenities as $a}
+                                <li>{$a.name}</li>
+                            {/foreach}
+                            </ul>
+                        </div>
+                    {/if}
+                </div>
+                {apply_filters('glm-member-db-front-members-list-mapBubbleBottom', '', $m.member)}
+            </div> <!-- End of information displayed in map bubbles -->
+        {/foreach}
 
         <div id="glm-member-list-terms">{$terms.term_member_plur_cap} found: {$membersFound}<br></div>
 
-
         {apply_filters('glm-member-db-front-members-list-listHeaderBottom', '')}
 
      <!-- Member information displayed in list -->
                             </ul>
                         </div>
                     </div>
-
-                    <!-- Member information displayed in map bubbles -->
-                    <div id="map_info_{$member.member_pointer}" class="glm-hidden">
-                        {apply_filters('glm-member-db-front-members-list-mapBubbleTop', '', $member.member_pointer)}
-                        {if $member.logo && $settings.list_map_show_logo}
-                            <div class="glm-member-list-image">
-                                <img src="{$glmPluginMediaUrl}/images/{$settings.list_map_logo_size}/{$member.logo}">
-                            </div>
-                        {/if}
-                        <div class="glm-map-member-name">
-                            {if $settings.list_map_show_detaillink}
-                                <a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$member.member_slug}/">{$member.member}</a>
-                            {else}
-                                {$member.member}
-                            {/if}
-                        </div>
-                        {if $settings.list_map_show_address}
-                            <p class="glm-map-member-address">
-                                {if $settings.list_map_show_street}
-                                    {if $member.addr1}{$member.addr1}<br>{/if}
-                                    {if $member.addr2}{$member.addr2}<br>{/if}
-                                {/if}
-                                {if $settings.list_map_show_citystatezip}
-                                    {if $member.city}{$member.city}{if $member.state.value}, {/if}{/if}{if $member.state.value}{$member.state.value}{/if}{if $member.zip} {$member.zip}{/if}
-                                {/if}
-                                {if $member.country.name && $settings.list_map_show_country}
-                                    <br>{$member.country.name}
-                                {/if}
-                            </p>
-                        {/if} {*list_map_show_address*}
-                        <div class="glm-member-list-info">
-                            <p>
-                                {if $member.phone && $settings.list_map_show_phone}<b>Phone:</b> {apply_filters('glm_associate_phone_filter', $member.phone)}<br>{/if}
-                                {if $member.toll_free && $settings.list_map_show_tollfree}{apply_filters('glm_associate_phone_filter', $member.toll_free)}<br>{/if}
-                                {if $member.url && $settings.list_map_show_url}<b>Web site:</b> <a href="{$member.url}"{if $settings.list_map_show_url_newtarget} target="_blank"{/if}>{$member.url}</a><br>{/if}
-                                {if $member.email && $settings.list_map_show_email}<b>E-Mail Address:</b> <a href="mailto:{$member.email}">{$member.email}</a><br>{/if}
-                                {if $member.region && $settings.list_map_show_region}<b>Region:</b> {$member.region}{/if}
-                            </p>
-                            {if $member.descr && $settings.list_map_show_descr}{$member.descr|nl2br}<br>{/if}
-                            {if $member.short_descr && $settings.list_map_show_short_descr}{$member.short_descr}<br>{/if}
-                            {if $member.categories && $settings.list_map_show_categories}
-                                <div class="glm-member-list-items">
-                                    <b>{$terms.term_member_cap} Categories</b>
-                                    <ul>
-                                    {foreach $member.categories as $c}
-                                        <li>
-                                            {if $c.parent_name}{$c.parent_name}: {/if}{$c.name}
-                                        </li>
-                                    {/foreach}
-                                    </ul>
-                                </div>
-                            {/if}
-<!-- Not using credit cards for now
-                            {if $member.cc_type && $settings.list_map_show_creditcards}
-                                <div class="glm-member-list-items">
-                                    <b>Credit Cards Accepted:</b>
-                                    <ul>
-                                    {foreach $member.cc_type.names as $c}
-                                        <li>{$c}</li>
-                                    {/foreach}
-                                    </ul>
-                                </div>
-                            {/if}
--->
-                            {if $settings.list_map_show_amenities}
-                                <div class="glm-member-list-items">
-                                    <b>Amenities:</b>
-                                    <ul>
-                                    {foreach $member.amenities as $a}
-                                        <li>{$a.name}</li>
-                                    {/foreach}
-                                    </ul>
-                                </div>
-                            {/if}
-                        </div>
-                        {apply_filters('glm-member-db-front-members-list-mapBubbleBottom', '', $member.member_pointer)}
-                    </div> <!-- End of information displayed in map bubbles -->
                 </div> <!-- End of glm-member-db-border-wrap -->
             </li> <!-- end of li.glm-member-list-record -->
         {/foreach} {*$members*}
                  {apply_filters('glm-member-db-front-members-list-memberBelow', '', $member.member_pointer)}
 <!-- Member Description -->
 
-        <!-- Member information displayed in map bubbles -->
-        <div id="map_info_{$member.member_pointer}" class="glm-hidden">
-            {apply_filters('glm-member-db-front-members-list-mapBubbleTop', '', $member.member_pointer)}
-            {if $member.logo && $settings.list_map_show_logo}<div class="glm-member-list-image"><img src="{$glmPluginMediaUrl}/images/{$settings.list_map_logo_size}/{$member.logo}"></div>{/if}
-            <div class="glm-map-member-name">
-              {if $settings.list_map_show_detaillink}
-                <a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$member.member_slug}/">{$member.member}</a>
-              {else}
-                {$member.member}
-              {/if}
-            </div>
-          {if $settings.list_map_show_address}
-            <p class="glm-map-member-address">
-              {if $settings.list_map_show_street}
-                {if $member.addr1}{$member.addr1}<br>{/if}
-                {if $member.addr2}{$member.addr2}<br>{/if}
-              {/if}
-              {if $settings.list_map_show_citystatezip}
-                {if $member.city}{$member.city}{if $member.state.value}, {/if}{/if}{if $member.state.value}{$member.state.value}{/if}{if $member.zip} {$member.zip}{/if}
-              {/if}
-                {if $member.country.name && $settings.list_map_show_country}<br>{$member.country.name}{/if}
-            </p>
-          {/if} {*list_map_show_address*}
-            <div class="glm-member-list-info">
-                <p>
-                    {if $member.phone && $settings.list_map_show_phone}<b>Phone:</b> {apply_filters('glm_associate_phone_filter', $member.phone)}<br>{/if}
-                    {if $member.toll_free && $settings.list_map_show_tollfree}{apply_filters('glm_associate_phone_filter', $member.toll_free)}<br>{/if}
-                    {if $member.url && $settings.list_map_show_url}<b>Web site:</b> <a href="{$member.url}"{if $settings.list_map_show_url_newtarget} target="_blank"{/if}>{$member.url}</a><br>{/if}
-                    {if $member.email && $settings.list_map_show_email}<b>E-Mail Address:</b> <a href="mailto:{$member.email}">{$member.email}</a><br>{/if}
-                    {if $member.region && $settings.list_map_show_region}<b>Region:</b> {$member.region}{/if}
-                </p>
-                {if $member.descr && $settings.list_map_show_descr}{$member.descr|nl2br}<br>{/if}
-                {if $member.short_descr && $settings.list_map_show_short_descr}{$member.short_descr}<br>{/if}
-        {if $member.categories && $settings.list_map_show_categories}
-                <div class="glm-member-list-items">
-                    <b>{$terms.term_member_cap} Categories</b>
-                    <ul>
-            {foreach $member.categories as $c}
-                        <li>
-                            {if $c.parent_name}{$c.parent_name}: {/if}{$c.name}
-                        </li>
-            {/foreach}
-                    </ul>
-                </div>
-        {/if}
-        {if $member.cc_type && $settings.list_map_show_creditcards}
-                <div class="glm-member-list-items">
-                    <b>Credit Cards Accepted:</b>
-                    <ul>
-            {foreach $member.cc_type.names as $c}
-                        <li>{$c}</li>
-            {/foreach}
-                    </ul>
-                </div>
-        {/if}
-        {if $settings.list_map_show_amenities}
-                <div class="glm-member-list-items">
-                    <b>Amenities:</b>
-                    <ul>
-            {foreach $member.amenities as $a}
-                        <li>{$a.name}</li>
-            {/foreach}
-                    </ul>
-                 </div>
-        {/if}
-            </div>
-            {apply_filters('glm-member-db-front-members-list-mapBubbleBottom', '', $member.member_pointer)}
-        </div> <!-- End of information displayed in map bubbles -->
-
      {/foreach} {*$members*}
          </div>
 
                         //}
 
                 {if $haveMembers}
-                    {foreach $members as $m}
+                    {foreach $mapItems as $m}
                       {if $m.lat != 0 && $m.lon != 0}
 
                         // Create a marker for this member
                             draggable: false,
                             animation: google.maps.Animation.DROP,
                             title: '{$m.member|escape}',
-                            descr: $('#map_info_' + {$m.member_pointer}).html(),
-                            memberID: {$m.member_pointer}
+                            descr: $('#map_info_' + {$m.member}).html(),
+                            memberID: {$m.member}
                         });
 
                         // Add a click listener for this marker