From dcc6b9a78e8a390098c34168475a98183a583f9d Mon Sep 17 00:00:00 2001 From: Chuck Scott Date: Thu, 16 Mar 2017 16:21:40 -0400 Subject: [PATCH] Fixed problem with map not including all selected members on members list page. 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 | 27 +- classes/glmMemberInfoClone.php | 3 + .../memberDataByLatLon.php | 22 +- index.php | 6 +- lib/GlmDataAbstract/DataAbstract.php | 67 ++--- models/front/members/list.php | 8 +- setup/adminHooks.php | 4 +- views/front/members/list.html | 232 +++++++----------- 8 files changed, 167 insertions(+), 202 deletions(-) rename {models/front/members => classes}/memberDataByLatLon.php (87%) mode change 100755 => 100644 lib/GlmDataAbstract/DataAbstract.php diff --git a/classes/data/dataMemberInfo.php b/classes/data/dataMemberInfo.php index 5ad9c6c6..5ac7306e 100644 --- a/classes/data/dataMemberInfo.php +++ b/classes/data/dataMemberInfo.php @@ -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); diff --git a/classes/glmMemberInfoClone.php b/classes/glmMemberInfoClone.php index c2c1ebd2..32d223d9 100644 --- a/classes/glmMemberInfoClone.php +++ b/classes/glmMemberInfoClone.php @@ -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/models/front/members/memberDataByLatLon.php b/classes/memberDataByLatLon.php similarity index 87% rename from models/front/members/memberDataByLatLon.php rename to classes/memberDataByLatLon.php index dcd4cf1e..f85b1896 100644 --- a/models/front/members/memberDataByLatLon.php +++ b/classes/memberDataByLatLon.php @@ -64,7 +64,7 @@ class GlmMembersFront_members_memberDataByLatLon extends GlmDataMemberInfo } /* - * Perform Model Action + * 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 @@ -127,13 +127,15 @@ class GlmMembersFront_members_memberDataByLatLon extends GlmDataMemberInfo * 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 + * @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 modelAction ($request = 'onMap', $search = false, $searchText = '') + public function getMembers($request = 'onMap', $search = false, $searchText = '', $suppliedWhere = '') { $items = array(); @@ -177,14 +179,14 @@ class GlmMembersFront_members_memberDataByLatLon extends GlmDataMemberInfo // Get the filtered list of members and return data fields for map items. $this->postProcessCategory = true; - $members = $this->getSimpleMemberInfoList($where, 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 resulst and build the required simplfied array + // 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) { @@ -198,6 +200,8 @@ class GlmMembersFront_members_memberDataByLatLon extends GlmDataMemberInfo $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'], @@ -207,11 +211,17 @@ class GlmMembersFront_members_memberDataByLatLon extends GlmDataMemberInfo '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'].'/', diff --git a/index.php b/index.php index 9d811417..170d88ae 100644 --- 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 * @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 diff --git a/lib/GlmDataAbstract/DataAbstract.php b/lib/GlmDataAbstract/DataAbstract.php old mode 100755 new mode 100644 index 05fd32b1..debc98e3 --- a/lib/GlmDataAbstract/DataAbstract.php +++ b/lib/GlmDataAbstract/DataAbstract.php @@ -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( diff --git a/models/front/members/list.php b/models/front/members/list.php index 56c2ecd3..be4a6322 100644 --- a/models/front/members/list.php +++ b/models/front/members/list.php @@ -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/setup/adminHooks.php b/setup/adminHooks.php index c8d1bb6c..67e2bd50 100644 --- a/setup/adminHooks.php +++ b/setup/adminHooks.php @@ -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( diff --git a/views/front/members/list.html b/views/front/members/list.html index 864d6ff4..7a5a6bea 100644 --- a/views/front/members/list.html +++ b/views/front/members/list.html @@ -98,10 +98,88 @@

List of {$terms.term_member_plur_cap}

{/if} {if $haveMembers} + + + {foreach $mapItems as $m} +
+ {apply_filters('glm-member-db-front-members-list-mapBubbleTop', '', $m.member)} + {if $m.logo && $settings.list_map_show_logo} +
+ +
+ {/if} +
+ {if $settings.list_map_show_detaillink} + {$m.name} + {else} + {$m.name} + {/if} +
+ {if $settings.list_map_show_address} +

+ {if $settings.list_map_show_street} + {if $m.addr1}{$m.addr1}
{/if} + {if $m.addr2}{$m.addr2}
{/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} +
{$m.country} + {/if} +

+ {/if} {*list_map_show_address*} +
+

+ {if $m.phone && $settings.list_map_show_phone}Phone: {apply_filters('glm_associate_phone_filter', $m.phone)}
{/if} + {if $m.toll_free && $settings.list_map_show_tollfree}{apply_filters('glm_associate_phone_filter', $m.toll_free)}
{/if} + {if $m.url && $settings.list_map_show_url}Web site: {$m.url}
{/if} + {if $m.email && $settings.list_map_show_email}E-Mail Address: {$m.email}
{/if} + {if $m.region && $settings.list_map_show_region}Region: {$m.region}{/if} +

+ {if $m.descr && $settings.list_map_show_descr}{$m.descr|nl2br}
{/if} + {if $m.short_descr && $settings.list_map_show_short_descr}{$m.short_descr}
{/if} + {if $m.categories && $settings.list_map_show_categories} +
+ {$terms.term_member_cap} Categories +
    + {foreach $m.categories as $c} +
  • + {if $c.parent_name}{$c.parent_name}: {/if}{$c.name} +
  • + {/foreach} +
+
+ {/if} + + {if $settings.list_map_show_amenities} +
+ Amenities: +
    + {foreach $m.amenities as $a} +
  • {$a.name}
  • + {/foreach} +
+
+ {/if} +
+ {apply_filters('glm-member-db-front-members-list-mapBubbleBottom', '', $m.member)} +
+ {/foreach}
{$terms.term_member_plur_cap} found: {$membersFound}
- {apply_filters('glm-member-db-front-members-list-listHeaderBottom', '')} @@ -190,83 +268,6 @@ - - -
- {apply_filters('glm-member-db-front-members-list-mapBubbleTop', '', $member.member_pointer)} - {if $member.logo && $settings.list_map_show_logo} -
- -
- {/if} -
- {if $settings.list_map_show_detaillink} - {$member.member} - {else} - {$member.member} - {/if} -
- {if $settings.list_map_show_address} -

- {if $settings.list_map_show_street} - {if $member.addr1}{$member.addr1}
{/if} - {if $member.addr2}{$member.addr2}
{/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} -
{$member.country.name} - {/if} -

- {/if} {*list_map_show_address*} -
-

- {if $member.phone && $settings.list_map_show_phone}Phone: {apply_filters('glm_associate_phone_filter', $member.phone)}
{/if} - {if $member.toll_free && $settings.list_map_show_tollfree}{apply_filters('glm_associate_phone_filter', $member.toll_free)}
{/if} - {if $member.url && $settings.list_map_show_url}Web site: {$member.url}
{/if} - {if $member.email && $settings.list_map_show_email}E-Mail Address: {$member.email}
{/if} - {if $member.region && $settings.list_map_show_region}Region: {$member.region}{/if} -

- {if $member.descr && $settings.list_map_show_descr}{$member.descr|nl2br}
{/if} - {if $member.short_descr && $settings.list_map_show_short_descr}{$member.short_descr}
{/if} - {if $member.categories && $settings.list_map_show_categories} -
- {$terms.term_member_cap} Categories -
    - {foreach $member.categories as $c} -
  • - {if $c.parent_name}{$c.parent_name}: {/if}{$c.name} -
  • - {/foreach} -
-
- {/if} - - {if $settings.list_map_show_amenities} -
- Amenities: -
    - {foreach $member.amenities as $a} -
  • {$a.name}
  • - {/foreach} -
-
- {/if} -
- {apply_filters('glm-member-db-front-members-list-mapBubbleBottom', '', $member.member_pointer)} -
{/foreach} {*$members*} @@ -412,75 +413,6 @@ {apply_filters('glm-member-db-front-members-list-memberBelow', '', $member.member_pointer)} - -
- {apply_filters('glm-member-db-front-members-list-mapBubbleTop', '', $member.member_pointer)} - {if $member.logo && $settings.list_map_show_logo}
{/if} -
- {if $settings.list_map_show_detaillink} - {$member.member} - {else} - {$member.member} - {/if} -
- {if $settings.list_map_show_address} -

- {if $settings.list_map_show_street} - {if $member.addr1}{$member.addr1}
{/if} - {if $member.addr2}{$member.addr2}
{/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}
{$member.country.name}{/if} -

- {/if} {*list_map_show_address*} -
-

- {if $member.phone && $settings.list_map_show_phone}Phone: {apply_filters('glm_associate_phone_filter', $member.phone)}
{/if} - {if $member.toll_free && $settings.list_map_show_tollfree}{apply_filters('glm_associate_phone_filter', $member.toll_free)}
{/if} - {if $member.url && $settings.list_map_show_url}Web site: {$member.url}
{/if} - {if $member.email && $settings.list_map_show_email}E-Mail Address: {$member.email}
{/if} - {if $member.region && $settings.list_map_show_region}Region: {$member.region}{/if} -

- {if $member.descr && $settings.list_map_show_descr}{$member.descr|nl2br}
{/if} - {if $member.short_descr && $settings.list_map_show_short_descr}{$member.short_descr}
{/if} - {if $member.categories && $settings.list_map_show_categories} -
- {$terms.term_member_cap} Categories -
    - {foreach $member.categories as $c} -
  • - {if $c.parent_name}{$c.parent_name}: {/if}{$c.name} -
  • - {/foreach} -
-
- {/if} - {if $member.cc_type && $settings.list_map_show_creditcards} -
- Credit Cards Accepted: -
    - {foreach $member.cc_type.names as $c} -
  • {$c}
  • - {/foreach} -
-
- {/if} - {if $settings.list_map_show_amenities} -
- Amenities: -
    - {foreach $member.amenities as $a} -
  • {$a.name}
  • - {/foreach} -
-
- {/if} -
- {apply_filters('glm-member-db-front-members-list-mapBubbleBottom', '', $member.member_pointer)} -
- {/foreach} {*$members*} @@ -604,7 +536,7 @@ //} {if $haveMembers} - {foreach $members as $m} + {foreach $mapItems as $m} {if $m.lat != 0 && $m.lon != 0} // Create a marker for this member @@ -614,8 +546,8 @@ 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 -- 2.17.1