DB Updates - alternate view files for list,grid,detail pages.
authorSteve Sutton <steve@gaslightmedia.com>
Tue, 26 Feb 2019 21:04:07 +0000 (16:04 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Tue, 26 Feb 2019 21:05:25 +0000 (16:05 -0500)
Setting up initial set of default view files for list grid and detail
pages. These will be for the different themes we have. Trying to pull
the theme view files over into the main plugin.

16 files changed:
classes/data/settings/dataSettingsGeneral.php
config/plugin.ini
index.php
models/admin/management/index.php
models/front/members/list.php
setup/databaseScripts/create_database_V1.1.50.sql [deleted file]
setup/databaseScripts/create_database_V1.1.51.sql [new file with mode: 0755]
setup/databaseScripts/dbVersions.php
setup/databaseScripts/drop_database_V1.1.49.sql [deleted file]
setup/databaseScripts/drop_database_V1.1.51.sql [new file with mode: 0755]
setup/databaseScripts/update_database_V1.1.51.sql [new file with mode: 0755]
views/admin/management/index.html
views/front/members/detailA.html [new file with mode: 0644]
views/front/members/list.html
views/front/members/listTypeGridA.html [new file with mode: 0644]
views/front/members/listTypeListA.html [new file with mode: 0644]

index e2aa053..d652855 100755 (executable)
@@ -409,6 +409,33 @@ class GlmDataSettingsGeneral extends GlmDataAbstract
                 'use' => 'a'
             ),
 
+            // List View File
+            'list_view_file' => array(
+                'field'      => 'list_view_file',
+                'type'       => 'list',
+                'list'       => $this->config['member_view_list'],
+                'force_list' => true,
+                'use'        => 'a',
+            ),
+
+            // Grid View File
+            'grid_view_file' => array(
+                'field'      => 'grid_view_file',
+                'type'       => 'list',
+                'list'       => $this->config['member_view_grid'],
+                'force_list' => true,
+                'use'        => 'a',
+            ),
+
+            // Detail View File
+            'detail_view_file' => array(
+                'field'      => 'detail_view_file',
+                'type'       => 'list',
+                'list'       => $this->config['member_view_detail'],
+                'force_list' => true,
+                'use'        => 'a',
+            ),
+
             // Front-end Listings - Show Featured Members
             'list_show_featured' => array(
                 'field' => 'list_show_featured',
index cbecf5c..504280b 100755 (executable)
@@ -1,14 +1,14 @@
 ;
 ; Main Configuration File
-; Gaslight Media Members Database Plugin 
+; Gaslight Media Members Database Plugin
 ;
 
 ; Image sizes array is outsize of the sections below and is added to $config after the section is selected.
 ; Any sizes added to this section will used by the Data Abstract to generate that size when images are uploaded.
-;    Crop value: 
+;    Crop value:
 ;       1. If false (default), images will not be cropped.
-;       2. If true, images will be cropped to the specified width/height aspect ratio. 
-    
+;       2. If true, images will be cropped to the specified width/height aspect ratio.
+
 [imageSizes]
 
 large['width'] = 800
@@ -361,3 +361,12 @@ map_interface[2]                = 'Google Maps JAVAScript API'
 map_interface_numb['None']      = 0
 map_interface_numb['Leaflet']   = 1
 map_interface_numb['Google']    = 2
+
+member_view_list['listTypeList']  = 'Default'
+member_view_list['listTypeListA'] = 'Style 2'
+
+member_view_grid['listTypeGrid']  = 'Default'
+member_view_grid['listTypeGridA'] = 'WMTA Style'
+
+member_view_detail['detail']  = 'Default'
+member_view_detail['detailA'] = 'WMTA Style'
index 7686ffb..cc5c0dc 100755 (executable)
--- a/index.php
+++ b/index.php
@@ -48,7 +48,7 @@ if (!defined('ABSPATH')) {
  */
 
 define('GLM_MEMBERS_PLUGIN_VERSION', '2.11.2');
-define('GLM_MEMBERS_PLUGIN_DB_VERSION', '1.1.50');
+define('GLM_MEMBERS_PLUGIN_DB_VERSION', '1.1.51');
 
 // Check if plugin version is not current in WordPress option and if needed updated it
 if (GLM_MEMBERS_PLUGIN_VERSION != get_option('glmMembersDatabasePluginVersion')) {
index 45b50d0..a7df4cf 100755 (executable)
@@ -201,6 +201,7 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
 
                // Update all general setttings
                 $generalSettings = $this->updateEntry( 1 );
+                // echo '<pre>$generalSettings: ' . print_r( $generalSettings, true ) . '</pre>';
                 if ( $generalSettings[ 'status' ] ) {
                     $settings_updated = true;
                 } else {
@@ -214,6 +215,7 @@ class GlmMembersAdmin_management_index extends GlmDataSettingsGeneral
 
                 // Try to get the first (should be only) entry for general settings.
                 $generalSettings = $this->editEntry( $id );
+                // echo '<pre>$generalSettings: ' . print_r( $generalSettings, true ) . '</pre>';
 
                 break;
         }
index 3d46aa7..bd6b8c4 100755 (executable)
@@ -1274,9 +1274,9 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo
 
         if ( defined( 'GLM_MEMBER_LIST_AJAX_LOADER' ) && GLM_MEMBER_LIST_AJAX_LOADER ) {
             if ( $view == 'grid' ) {
-                $viewFile = 'front/members/listTypeGrid.html';
+                $viewFile = 'front/members/' . $this->config['settings']['grid_view_file'] . '.html';
             } else {
-                $viewFile = 'front/members/listTypeList.html';
+                $viewFile = 'front/members/' . $this->config['settings']['list_view_file'] . '.html';
             }
         }
 
diff --git a/setup/databaseScripts/create_database_V1.1.50.sql b/setup/databaseScripts/create_database_V1.1.50.sql
deleted file mode 100755 (executable)
index d5ac9a6..0000000
+++ /dev/null
@@ -1,718 +0,0 @@
--- Gaslight Media Members Database
--- File Created: 12/29/16 12:06:00
--- Database Version: 1.1.50
--- Database Creation Script
---
--- To permit each query below to be executed separately,
--- all queries must be separated by a line with four dashes
---
--- **** BE SURE TO ALSO UPDATE drop_database_Vxxx.sql FILE WHEN CHANGING TABLES ****
---
-
--- Amenities
-CREATE TABLE {prefix}amenities (
-  id INT NOT NULL AUTO_INCREMENT,
-  active TINYINT(1) NULL,                   -- Amenity is active flag
-  name TINYTEXT NULL,                       -- Name of amenity
-  descr TEXT NULL,                          -- Description of amenity
-  short_descr TINYTEXT NULL,                -- Short description of amenity
-  ref_type INT NULL,                        -- Type of entity these amenities are associated with - see plugin.ini ref_type tables
-  uses_value BOOLEAN NULL,                  -- Flag indicating whether the amenity requires a quantity number
-  PRIMARY KEY (id),
-  INDEX(name(20))
-);
-
-----
-
--- Amenity Reference - Links a specific amenity to a specific entity of type ref_type
-CREATE TABLE {prefix}amenity_ref (
-  id INT NOT NULL AUTO_INCREMENT,
-  amenity INT NULL,                         -- Pointer to amenity in amenities table
-  ref_type INT NULL,                        -- Copy of ref_type from matching amenities table entry - to simplify searches
-  ref_dest INT NULL,                        -- Pointer to the specific entity of type ref_type
-  amenity_value TINYTEXT NULL,              -- Quantity if amenity uses values
-  PRIMARY KEY (id),
-  INDEX(ref_type),
-  INDEX(ref_dest)
-);
-
-----
-
--- groups
-CREATE TABLE {prefix}amenity_groups (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TINYTEXT NULL,                     -- Name of the Group
-    PRIMARY KEY (id),
-    INDEX(name(20))
-);
-
-----
-
--- Amenity Group - Links a specific amenity to groups
-CREATE TABLE {prefix}grouped_amenities (
-    id INT NOT NULL AUTO_INCREMENT,
-    group_id INT,                              -- Pointer to the group
-    amenity_id INT,                            -- Pointer to the Amenity
-    searchable BOOLEAN DEFAULT '0',         -- Flag indicating whether the amenity group will show in the search form
-    PRIMARY KEY (id)
-);
-
-----
-
--- Member Cateogries - used with member information records
-CREATE TABLE {prefix}categories (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Name of this category
-  descr TEXT NULL,                          -- Description of this category
-  short_descr TINYTEXT NULL,                -- Short description of this category
-  parent INT NULL,                          -- Pointer to parent category in this table - if there is one
-  PRIMARY KEY (id)
-);
-
-----
-
--- Mapping of categories to specific member information records
-CREATE TABLE {prefix}category_member_info (
-  id INT NOT NULL AUTO_INCREMENT,
-  category INT NULL,                        -- Pointer to category in categories table
-  member_info INT NULL,                     -- Pointer to member information record
-  PRIMARY KEY (id),
-  CONSTRAINT {prefix}categories_fk_1
-    FOREIGN KEY (category)
-    REFERENCES {prefix}categories (id)
-    ON DELETE CASCADE,
-  INDEX(category),
-  INDEX(member_info)
-);
-
-----
-
--- Cities
-CREATE TABLE {prefix}cities (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Name of city
-  state TINYTEXT NULL,                      -- State
-  enable_weather BOOLEAN DEFAULT '0',       -- Enable Weather for this city
-  lat FLOAT NULL,                           -- Latitude of city's location
-  lon FLOAT NULL,                           -- Longitude of city's location
-  county INT NULL,                          -- County reference to county table
-  temp_max TINYTEXT NULL,                   -- Max temp
-  temp_min TINYTEXT NULL,                   -- Min temp
-  icon TINYTEXT NULL,                       -- Icon url
-  weather TINYTEXT NULL,                    -- weather
-  moreinfo TEXT NULL,                       -- moreinfo
-  wx_time DATETIME NULL,                    -- last update time for weather
-  PRIMARY KEY (id)
-);
-
-----
-
--- Member Click Through Stats Data - Totals of URL click-throughs - Preserved for 2 years
-CREATE TABLE {prefix}clickthrough_stats (
-  member INT NOT NULL,                          -- ID of member
-  stat_type INT NOT NULL,                       -- Type of stat 1 = day, 2 = week, 3 = month
-  stat_date DATE NOT NULL,                      -- Date for which these stats are accumulated (date or first date of week or month)
-  clicks INT NULL,                          -- Number of Clicks
-  PRIMARY KEY (member, stat_type, stat_date),
-  INDEX (member),
-  INDEX (stat_type),
-  INDEX (stat_date)
-);
-
-----
-
--- Files - Files are stored under /wp-content/uploads/glm-member-db/files/
-CREATE TABLE {prefix}files (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Original name of the file - might be URL if copied via HTTP
-  status TINYINT(1) NULL,                   -- Display/Use status - See plugin.ini status table
-  file_name TINYTEXT NULL,                  -- Stored file name for the file
-  descr TEXT NULL,                          -- Description
-  caption TINYTEXT NULL,                    -- Caption for the image
-  position INT NULL,                        -- Numeric position for sequence of display
-  ref_type INT NULL,                        -- Type of entity this image is associated with
-  ref_dest INT NULL,                        -- Pointer to the specific entity of ref_type this image is associated with
-  PRIMARY KEY (id),
-  INDEX(name(20)),
-  INDEX(file_name(20)),
-  INDEX(ref_type),
-  INDEX(ref_dest)
-);
-
-----
-
--- Images - Images are stored under /wp-content/uploads/glm-member-db/images/{size}/
-CREATE TABLE {prefix}images (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Original name of the image - might be URL if copied via HTTP
-  status TINYINT(1) NULL,                   -- Display/Use status - See plugin.ini status table
-  selected BOOLEAN NULL,                    -- A single special image in the current gallery for this entity
-  featured BOOLEAN null,                    -- Image is a member of a group of featured images
-  file_name TINYTEXT NULL,                  -- Stored file name for the image
-  descr TEXT NULL,                          -- Description
-  caption TINYTEXT NULL,                    -- Caption for the image
-  position INT NULL,                        -- Numeric position for sequence of display
-  ref_type INT NULL,                        -- Type of entity this image is associated with
-  ref_dest INT NULL,                        -- Pointer to the specific entity of ref_type this image is associated with
-  PRIMARY KEY (id),
-  INDEX(name(20)),
-  INDEX(file_name(20)),
-  INDEX(ref_type),
-  INDEX(ref_dest)
-);
-
-----
-
--- Primary member records - One for each member
-CREATE TABLE {prefix}members (
-  id INT NOT NULL AUTO_INCREMENT,
-  access INT NULL,                          -- Access type - See access table in plugin.ini
-  member_type INT NULL,                     -- Pointer to member type in member_type table
-  created DATE NULL,                        -- Date member record was created
-  name TINYTEXT NULL,                       -- Member name
-  member_slug TINYTEXT NULL,                -- Member name slug for canonical URLs (lowercase, "-" for spaces, no punctuation)
-  notes TEXT NULL,                          -- General notes - Not displayed in front-end
-  old_member_id TINYTEXT NULL,              -- Old member ID if imported from old database
-  featured BOOLEAN DEFAULT '0',             -- Whether the member is featured
-  PRIMARY KEY (id),
-  INDEX(name(20)),
-  INDEX(member_slug(20)),
-  INDEX(created),
-  INDEX(old_member_id(20))
-);
-
-----
-
--- Member Detail Display Stats Data - Totals of times detail page is displayed - Preserved for 2 years
-CREATE TABLE {prefix}member_detail_stats (
-  member INT NOT NULL,                          -- ID of member
-  stat_type INT NOT NULL,                       -- Type of stat 1 = day, 2 = week, 3 = month
-  stat_date DATE NOT NULL,                      -- Date for which these stats are accumulated (date or first date of week or month)
-  clicks INT NULL,                          -- Number of Clicks
-  PRIMARY KEY (member, stat_type, stat_date),
-  INDEX (member),
-  INDEX (stat_type),
-  INDEX (stat_date)
-);
-
-----
-
--- Member information version record - May be multiples per member - Only one with status "Active" for a distinct date range
-CREATE TABLE {prefix}member_info (
-  id INT NOT NULL AUTO_INCREMENT,
-  member INT NULL,                          -- Pointer to member record in table members
-  member_name TINYTEXT NULL,                -- Copy of member name from members table entry for fast reference
-  status INT NULL,                          -- Status of this member information record - See plugin.ini status table
-  reference_name TINYTEXT NULL,             -- Reference name for this member information record - Not displayed on front-end
-  has_no_map_data BOOLEAN DEFAULT '0',      -- True if member info record has no map data
-  has_no_profile BOOLEAN DEFAULT '0',       -- True if member has no profile record
-  descr TEXT NULL,                          -- Description
-  short_descr TEXT NULL,                    -- Short description
-  addr1 TINYTEXT NULL,                      -- Main member location address line 1
-  addr2 TINYTEXT NULL,                      -- Address line 2
-  city INT NULL,                            -- Pointer to City in cities table
-  state TINYTEXT NULL,                      -- Two character state code - matches states.ini entries
-  country TINYTEXT NULL,                    -- Two character country code - matches countries.ini entries
-  zip TINYTEXT NULL,                        -- ZIP/Postal code
-  lat FLOAT NULL,                           -- Latitude of member's location
-  lon FLOAT NULL,                           -- Longitude of member's location
-  region INT NULL,                          -- Pointer to entry in regions table
-  county INT NULL,                          -- Pointer to entry in regions table
-  phone TINYTEXT NULL,                      -- Primary phone number
-  toll_free TINYTEXT NULL,                  -- Toll Free phone number
-  url TINYTEXT NULL,                        -- URL with information about this member
-  reservation_url TEXT NULL,                -- Reservation URL
-  email TINYTEXT NULL,                      -- Main E-Mail address for this member
-  logo TINYTEXT NULL,                       -- Member logo
-  cc_type INT NULL,                         -- Bitmap of credit card types accepted - See credit_card array in plugin.ini
-  video_url TINYTEXT NULL,                  -- Video URL
-  video_file TINYTEXT NULL,                 -- Video File Name
-  video_title TINYTEXT NULL,                -- Video Title
-  video_descr TEXT NULL,                    -- Video Description
-  video_type INT NULL,                      -- Video Type - See plugin.ini video type table.
-  live_cam_url TINYTEXT NULL,               -- Live Cam URL
-  live_cam_title TINYTEXT NULL,             -- Live Cam Title
-  live_cam_descr TEXT NULL,                 -- Live Cam Description
-  live_cam_type INT NULL,                   -- Live Cam Type - See plugin.ini video type table.
-  mailing_addr1 TINYTEXT NULL,              -- Mailing Address 1
-  mailing_addr2 TINYTEXT NULL,              -- Mailing Address 2
-  mailing_city INT NULL,                    -- Mailing City  (Pointer to City in cities table)
-  mailing_state TINYTEXT NULL,              -- Mailing State (Two character state code - matches states.ini entries)
-  mailing_zip TINYTEXT NULL,                -- Mailing ZIP/Postal code
-  notes TEXT NULL,                          -- General notes - Not displayed in front-end
-  create_time TIMESTAMP NULL,               -- Create date/time
-  modify_time TIMESTAMP NULL,               -- Last update date/time
-  PRIMARY KEY (id),
-  INDEX(status),
-  INDEX(city),
-  INDEX(zip(10)),
-  INDEX(lat),
-  INDEX(lon),
-  INDEX(region),
-  INDEX(county),
-  FULLTEXT KEY member_name (member_name)
-);
-
-----
-
--- Member type - Can be used to assign members to different "classes" of membership (i.e. Full, Associate, Premium)
--- Mostly for internal use by the member organization, but could be displayed - Consider a short_description if they are.
-CREATE TABLE {prefix}member_type (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Name of member type
-  descr TINYTEXT NULL,                      -- Description of member type
-  PRIMARY KEY (id)
-);
-
-----
-
--- Regions - Used to segment members into various geographical regions - can be cities, counties, or other logical regions
-CREATE TABLE {prefix}regions (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Name of region
-  descr TEXT NULL,                          -- Description of region
-  short_descr TINYTEXT NULL,                -- Short description of region
-  PRIMARY KEY (id)
-);
-
-----
-
--- Counties
-CREATE TABLE {prefix}counties (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Name of county
-  descr TEXT NULL,                          -- Description of county
-  short_descr TINYTEXT NULL,                -- Short description of county
-  PRIMARY KEY (id)
-);
-
-----
-
--- File Library Cateogries - used with "Files Library" - Created due to PDF failures in WordPress Media Library
-CREATE TABLE {prefix}file_library_categories (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Name of this category
-  descr TEXT NULL,                          -- Description of this category
-  short_descr TINYTEXT NULL,                -- Short description of this category
-  parent INT NULL,                          -- Pointer to parent category in this table - if there is one
-  PRIMARY KEY (id)
-);
-
-----
-
--- Files Library - Files are stored under /wp-content/uploads/glm-member-db/filesLibrary/
-CREATE TABLE {prefix}file_library (
-  id INT NOT NULL AUTO_INCREMENT,
-  name TINYTEXT NULL,                       -- Original name of the file - might be URL if copied via HTTP
-  file_name TINYTEXT NULL,                  -- Stored file name for the file
-  descr TEXT NULL,                          -- Description
-  title TINYTEXT NULL,                      -- File title
-  last_access_time DATETIME NULL,           -- Upload time or last access time
-  PRIMARY KEY (id),
-  INDEX(name(20)),
-  INDEX(file_name(20))
-);
-
-----
-
--- General settings available on Management page in admin - Only 1 entry in this table
--- Items in this table should be all self-explanatory
-CREATE TABLE {prefix}settings_general (
-  id INT NOT NULL AUTO_INCREMENT,
-  admin_debug BOOLEAN DEFAULT '0',
-  admin_debug_verbose BOOLEAN DEFAULT '0',
-  front_debug BOOLEAN DEFAULT '0',
-  front_debug_verbose BOOLEAN DEFAULT '0',
-  enable_members BOOLEAN DEFAULT '1',
-  selected_map_interface SMALLINT DEFAULT '1',
-  leaflet_tile_server TINYTEXT DEFAULT '',
-  leaflet_tile_server_key TINYTEXT DEFAULT '',
-  google_maps_api_key TINYTEXT DEFAULT '',
-  maps_default_lat FLOAT DEFAULT '45.3749',
-  maps_default_lon FLOAT DEFAULT '-84.9592',
-  maps_default_zoom INTEGER DEFAULT '10',
-  time_zone TINYTEXT DEFAULT NULL,
-  canonical_member_page TINYTEXT DEFAULT NULL,
-  phone_infix TINYTEXT DEFAULT NULL,
-  phone_format TINYTEXT DEFAULT NULL,
-  default_state TINYTEXT DEFAULT NULL,
-  enable_counties BOOLEAN DEFAULT '0',
-  enable_multiple_profiles BOOLEAN DEFAULT '0',
-  enable_single_profile BOOLEAN DEFAULT '0',            -- Hide the add profile and clone profile links/buttons
-  enable_member_reports BOOLEAN DEFAULT '1',
-  enable_caching BOOLEAN DEFAULT '1',
-  enable_contact_edit_only BOOLEAN DEFAULT '0',
-  memb_info_location BOOLEAN DEFAULT '1',
-  memb_info_contact BOOLEAN DEFAULT '1',
-  memb_info_categories BOOLEAN DEFAULT '1',
-  memb_info_images BOOLEAN DEFAULT '1',
-  memb_info_files BOOLEAN DEFAULT '1',
-  memb_info_video BOOLEAN DEFAULT '1',
-  memb_info_cam BOOLEAN DEFAULT '1',
-  file_library BOOLEAN DEFAULT '0',
-  list_show_map BOOLEAN DEFAULT '1',
-  list_show_featured BOOLEAN DEFAULT '0',
-  list_show_featured_count SMALLINT DEFAULT '3',
-  list_show_list BOOLEAN DEFAULT '1',
-  list_order_list SMALLINT DEFAULT '10',
-  list_pagination BOOLEAN DEFAULT '1',
-  list_ajax_pagination BOOLEAN DEFAULT '0',
-  list_pagination_count SMALLINT DEFAULT '20',
-  list_show_sidebar_area BOOLEAN DEFAULT '0',
-  list_show_header_text BOOLEAN DEFAULT '1',
-  list_show_entities_found BOOLEAN DEFAULT '1',
-  list_show_entities_shown BOOLEAN DEFAULT '1',
-  list_show_search_filters_opened BOOLEAN DEFAULT '0',
-  list_show_search BOOLEAN DEFAULT '1',
-  list_show_search_text BOOLEAN DEFAULT '1',
-  list_show_search_category BOOLEAN DEFAULT '1',
-  list_show_search_amenities BOOLEAN DEFAULT '1',
-  list_show_search_region BOOLEAN DEFAULT '1',
-  list_show_search_alpha BOOLEAN DEFAULT '1',
-  list_show_search_city BOOLEAN DEFAULT '0',
-  list_floating_search BOOLEAN DEFAULT '0',
-  list_floating_search_distance_top INTEGER DEFAULT '0',    -- How far from the top the sticky Search/Filters box should hover
-  list_show_detail_link BOOLEAN DEFAULT '1',
-  list_show_logo BOOLEAN DEFAULT '1',
-  list_logo_size TINYTEXT NULL,
-  list_logo_for_mobile BOOLEAN DEFAULT '1',
-  list_show_address BOOLEAN DEFAULT '1',
-  list_show_street BOOLEAN DEFAULT '1',
-  list_show_citystatezip BOOLEAN DEFAULT '1',
-  list_show_country BOOLEAN DEFAULT '1',
-  list_show_region BOOLEAN DEFAULT '1',
-  list_show_descr BOOLEAN DEFAULT '0',
-  list_show_short_descr BOOLEAN DEFAULT '1',
-  list_show_phone BOOLEAN DEFAULT '1',
-  list_show_tollfree BOOLEAN DEFAULT '1',
-  list_show_url BOOLEAN DEFAULT '1',
-  list_show_url_newtarget BOOLEAN DEFAULT '1',
-  list_show_email BOOLEAN DEFAULT '1',
-  list_show_categories BOOLEAN DEFAULT '0',
-  list_show_creditcards BOOLEAN DEFAULT '0',
-  list_show_amenities BOOLEAN DEFAULT '0',
-  list_show_logo_filler BOOLEAN DEFAULT '1',
-  list_show_live_cam BOOLEAN DEFAULT '1',
-  list_map_show_opened BOOLEAN DEFAULT '0',
-  list_map_show_detaillink BOOLEAN DEFAULT '1',
-  list_map_show_logo BOOLEAN DEFAULT '0',
-  list_map_logo_size TINYTEXT NULL,
-  list_map_show_descr BOOLEAN DEFAULT '0',
-  list_map_show_short_descr BOOLEAN DEFAULT '1',
-  list_map_show_address BOOLEAN DEFAULT '1',
-  list_map_show_street BOOLEAN DEFAULT '1',
-  list_map_show_citystatezip BOOLEAN DEFAULT '1',
-  list_map_show_country BOOLEAN DEFAULT '1',
-  list_map_show_region BOOLEAN DEFAULT '1',
-  list_map_show_phone BOOLEAN DEFAULT '1',
-  list_map_show_tollfree BOOLEAN DEFAULT '1',
-  list_map_show_url BOOLEAN DEFAULT '1',
-  list_map_show_url_newtarget BOOLEAN DEFAULT '1',
-  list_map_show_email BOOLEAN DEFAULT '1',
-  list_map_show_categories BOOLEAN DEFAULT '0',
-  list_map_show_creditcards BOOLEAN DEFAULT '0',
-  list_map_show_amenities BOOLEAN DEFAULT '0',
-  list_show_packages BOOLEAN DEFAULT '0',
-  list_show_packages_link BOOLEAN DEFAULT '0',
-  list_header_text TINYTEXT DEFAULT NULL,
-  detail_auto_expand_sections BOOLEAN DEFAULT '0',
-  detail_show_map BOOLEAN DEFAULT '1',
-  detail_show_directions BOOLEAN DEFAULT '1',
-  detail_show_logo BOOLEAN DEFAULT '1',
-  detail_logo_size TINYTEXT NULL,
-  detail_show_descr BOOLEAN DEFAULT '1',
-  detail_show_short_descr BOOLEAN DEFAULT '0',
-  detail_show_address BOOLEAN DEFAULT '1',
-  detail_show_street BOOLEAN DEFAULT '1',
-  detail_show_citystatezip BOOLEAN DEFAULT '1',
-  detail_show_country BOOLEAN DEFAULT '1',
-  detail_show_region BOOLEAN DEFAULT '1',
-  detail_show_phone BOOLEAN DEFAULT '1',
-  detail_show_tollfree BOOLEAN DEFAULT '1',
-  detail_show_url BOOLEAN DEFAULT '1',
-  detail_show_url_newtarget BOOLEAN DEFAULT '1',
-  detail_show_email BOOLEAN DEFAULT '1',
-  detail_show_categories BOOLEAN DEFAULT '0',
-  detail_show_creditcards BOOLEAN DEFAULT '0',
-  detail_show_amenities BOOLEAN DEFAULT '1',
-  detail_show_imagegallery BOOLEAN DEFAULT '1',
-  detail_show_coupons BOOLEAN DEFAULT '0',
-  detail_show_packages BOOLEAN DEFAULT '0',
-  detail_show_events BOOLEAN DEFAULT '0',
-  detail_show_video BOOLEAN DEFAULT '0',
-  detail_show_live_cam BOOLEAN DEFAULT '0',
-  detail_top_offset_autoscroll INTEGER DEFAULT '0', -- Determines the distance from the top when autoscrolling to a section on member detail pages
-  detail_map_show_logo BOOLEAN DEFAULT '0',
-  detail_map_logo_size TINYTEXT NULL,
-  detail_map_show_descr BOOLEAN DEFAULT '0',
-  detail_map_show_short_descr BOOLEAN DEFAULT '1',
-  detail_map_show_address BOOLEAN DEFAULT '1',
-  detail_map_show_street BOOLEAN DEFAULT '1',
-  detail_map_show_citystatezip BOOLEAN DEFAULT '1',
-  detail_map_show_country BOOLEAN DEFAULT '1',
-  detail_map_show_region BOOLEAN DEFAULT '1',
-  detail_map_show_phone BOOLEAN DEFAULT '1',
-  detail_map_show_tollfree BOOLEAN DEFAULT '1',
-  detail_map_show_url BOOLEAN DEFAULT '1',
-  detail_map_show_url_newtarget BOOLEAN DEFAULT '1',
-  detail_map_show_email BOOLEAN DEFAULT '1',
-  detail_map_show_categories BOOLEAN DEFAULT '0',
-  detail_map_show_creditcards BOOLEAN DEFAULT '0',
-  detail_map_show_amenities BOOLEAN DEFAULT '0',
-  members_only_support_email TINYTEXT DEFAULT '',
-  members_only_support_phone TINYTEXT DEFAULT '',
-  updates_notification_to TINYTEXT DEFAULT '',      -- To email address for the notification email
-  updates_notification_from TINYTEXT DEFAULT '',    -- From header for the notification email
-  updates_notification TEXT DEFAULT '',             -- Notification message
-  short_desc_char_limit INTEGER DEFAULT '120',      -- How many characters the short description is limited to - also used for importing
-  use_cluster_markers BOOLEAN DEFAULT '0',          -- Flag to say if cluster markers should be use in maps
-  recaptcha_site_key TINYTEXT DEFAULT '',           -- reCAPTCHA site key
-  recaptcha_secret_key TINYTEXT DEFAULT '',         -- reCAPTCHA secret key
-  recaptcha_header_code TEXT DEFAULT '',            -- reCAPTCHA code for page header
-  recaptcha_form_code TEXT DEFAULT '',              -- reCAPTCHA code for captcha form field
-  new_member_intro TEXT NULL,                       -- New Member intro
-  new_member_thankyou TEXT NULL,                    -- New Member thank you
-  new_member_type_default INTEGER DEFAULT '0',      -- New Member member type default
-  new_member_notice_to TINYTEXT NULL,               -- New Member notice To:
-  new_member_notice_from TINYTEXT NULL,             -- weather
-  new_member_notice_message TEXT NULL,              -- New Member notice Message
-  PRIMARY KEY (id)
-);
-
-----
-
--- Set default entry
-INSERT INTO {prefix}settings_general
-    ( id, time_zone, canonical_member_page, list_logo_size, list_map_logo_size, detail_logo_size, detail_map_logo_size,
-        list_pagination, list_pagination_count, enable_counties, enable_multiple_profiles, enable_member_reports, enable_caching, updates_notification, enable_single_profile )
-   VALUES
-    ( 1, 'America/Detroit', 'member-detail', 'large', 'thumb', 'large', 'thumb', '1', 20, 0, 0, 1, 1,
-        'A member has updated their record and is now in a pending state.', 0)
-;
-
-----
-
--- Terms used in site modifiable on Management page in admin - Only 1 entry in this table
--- Terms in this table should be all self-explanatory
-CREATE TABLE {prefix}settings_terms (
-  id INT NOT NULL AUTO_INCREMENT,
-  term_admin_menu_members TINYTEXT NULL,
-  term_admin_menu_member_list TINYTEXT NULL,
-  term_admin_menu_member TINYTEXT NULL,
-  term_admin_menu_configure TINYTEXT NULL,
-  term_admin_menu_settings TINYTEXT NULL,
-  term_admin_menu_shortcodes TINYTEXT NULL,
-  term_admin_menu_members_dashboard TINYTEXT NULL,
-  term_admin_menu_members_list TINYTEXT NULL,
-  term_admin_menu_members_reports TINYTEXT NULL,
-  term_admin_menu_member_dashboard TINYTEXT NULL,
-  term_admin_menu_member_info TINYTEXT NULL,
-  term_admin_menu_member_locations TINYTEXT NULL,
-  term_admin_menu_member_facilities TINYTEXT NULL,
-  term_admin_menu_member_attractions TINYTEXT NULL,
-  term_admin_menu_member_contacts TINYTEXT NULL,
-  term_admin_menu_configure_member_types TINYTEXT NULL,
-  term_admin_menu_configure_member_cats TINYTEXT NULL,
-  term_admin_menu_configure_accom_types TINYTEXT NULL,
-  term_admin_menu_configure_amenities TINYTEXT NULL,
-  term_admin_menu_configure_cities TINYTEXT NULL,
-  term_admin_menu_configure_counties TINYTEXT NULL,
-  term_admin_menu_configure_regions TINYTEXT NULL,
-  term_admin_menu_settings_general TINYTEXT NULL,
-  term_admin_menu_settings_terms TINYTEXT NULL,
-  term_admin_menu_settings_development TINYTEXT NULL,
-  term_member TINYTEXT NULL,
-  term_member_cap TINYTEXT NULL,
-  term_member_plur TINYTEXT NULL,
-  term_member_plur_cap TINYTEXT NULL,
-  term_location TINYTEXT NULL,
-  term_location_cap TINYTEXT NULL,
-  term_location_plur TINYTEXT NULL,
-  term_location_plur_cap TINYTEXT NULL,
-  term_county TINYTEXT NULL,
-  term_county_cap TINYTEXT NULL,
-  term_county_plur TINYTEXT NULL,
-  term_county_plur_cap TINYTEXT NULL,
-  term_facility TINYTEXT NULL,
-  term_facility_cap TINYTEXT NULL,
-  term_facility_plur TINYTEXT NULL,
-  term_facility_plur_cap TINYTEXT NULL,
-  term_attraction TINYTEXT NULL,
-  term_attraction_cap TINYTEXT NULL,
-  term_attraction_plur TINYTEXT NULL,
-  term_attraction_plur_cap TINYTEXT NULL,
-  term_contact TINYTEXT NULL,
-  term_contact_cap TINYTEXT NULL,
-  term_contact_plur TINYTEXT NULL,
-  term_contact_plur_cap TINYTEXT NULL,
-  term_webcam_cap TINYTEXT NULL,
-  PRIMARY KEY (id)
-);
-
-----
-
--- Default terms entry
-INSERT INTO {prefix}settings_terms
-    (
-    id,
-    term_admin_menu_members,
-    term_admin_menu_member_list,
-    term_admin_menu_member,
-    term_admin_menu_configure,
-    term_admin_menu_settings,
-    term_admin_menu_shortcodes,
-    term_admin_menu_members_dashboard,
-    term_admin_menu_members_list,
-    term_admin_menu_members_reports,
-    term_admin_menu_member_dashboard,
-    term_admin_menu_member_info,
-    term_admin_menu_member_locations,
-    term_admin_menu_member_facilities,
-    term_admin_menu_member_attractions,
-    term_admin_menu_member_contacts,
-    term_admin_menu_configure_member_types,
-    term_admin_menu_configure_member_cats,
-    term_admin_menu_configure_accom_types,
-    term_admin_menu_configure_amenities,
-    term_admin_menu_configure_cities,
-    term_admin_menu_configure_counties,
-    term_admin_menu_configure_regions,
-    term_admin_menu_settings_general,
-    term_admin_menu_settings_terms,
-    term_admin_menu_settings_development,
-    term_member,
-    term_member_cap,
-    term_member_plur,
-    term_member_plur_cap,
-    term_location,
-    term_location_cap,
-    term_location_plur,
-    term_location_plur_cap,
-    term_county,
-    term_county_cap,
-    term_county_plur,
-    term_county_plur_cap,
-    term_facility,
-    term_facility_cap,
-    term_facility_plur,
-    term_facility_plur_cap,
-    term_attraction,
-    term_attraction_cap,
-    term_attraction_plur,
-    term_attraction_plur_cap,
-    term_contact,
-    term_contact_cap,
-    term_contact_plur,
-    term_contact_plur_cap,
-    term_webcam_cap
-    )
-   VALUES
-    (
-    1,
-    'Members',
-    'Member',
-    'Member',
-    'Configure',
-    'Management',
-    'Shortcodes',
-    'Dashboard',
-    'Member List',
-    'Reports',
-    'Member Dashboard',
-    'Member Info',
-    'Locations',
-    'Facilities',
-    'Attractions',
-    'Contacts',
-    'Member Types',
-    'Member Categories',
-    'Accommodation Types',
-    'Amenities',
-    'Cities',
-    'Counties',
-    'Regions',
-    'General Settings',
-    'Terms & Phrases',
-    'Development',
-    'member',
-    'Member',
-    'members',
-    'Members',
-    'location',
-    'Location',
-    'locations',
-    'Locations',
-    'county',
-    'County',
-    'counties',
-    'Counties',
-    'facility',
-    'Facility',
-    'facilities',
-    'Facilities',
-    'attraction',
-    'Attraction',
-    'attractions',
-    'Attractions',
-    'contact',
-    'Contact',
-    'contacts',
-    'Contacts',
-    'Webcam'
-    )
-;
-
-----
-
--- Shortcode Output Cache
-CREATE TABLE {prefix}cache (
-    shortcode TINYTEXT NULL,
-    cache_code TINYTEXT NOT NULL,
-    created DATETIME NULL,
-    html MEDIUMTEXT NULL,
-    PRIMARY KEY (cache_code(20)),
-    INDEX (created)
-);
-
-----
-
--- Theme Settings - Only 1 entry in this table
-CREATE TABLE {prefix}settings_theme (
-    id INT NOT NULL AUTO_INCREMENT,
-    PRIMARY KEY (id)
-);
-
-----
-
--- Default Theme Settings entry
-INSERT INTO {prefix}settings_theme
-    (
-    id
-    )
-   VALUES
-    (
-    1
-    )
-;
-
-----
-
--- Member Email Notifications
-CREATE TABLE {prefix}email_notifications (
-    id INT NOT NULL AUTO_INCREMENT,
-    notification_message TEXT NULL,
-    declined_message TEXT NULL,
-    approved_message TEXT NULL,
-    to_email TINYTEXT NULL,
-    from_email TINYTEXT NULL,
-    PRIMARY KEY (id)
-);
-
-----
-
--- Set default email notifications
-INSERT INTO {prefix}email_notifications
-    ( id, notification_message, declined_message, approved_message )
-VALUES
-    ( 1, 'A member has requested a profile update.', 'Your profile update has been declined.', 'Your profile has been approved!' );
-
diff --git a/setup/databaseScripts/create_database_V1.1.51.sql b/setup/databaseScripts/create_database_V1.1.51.sql
new file mode 100755 (executable)
index 0000000..3a2bcf3
--- /dev/null
@@ -0,0 +1,723 @@
+-- Gaslight Media Members Database
+-- File Created: 12/29/16 12:06:00
+-- Database Version: 1.1.51
+-- Database Creation Script
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+--
+-- **** BE SURE TO ALSO UPDATE drop_database_Vxxx.sql FILE WHEN CHANGING TABLES ****
+--
+
+-- Amenities
+CREATE TABLE {prefix}amenities (
+  id INT NOT NULL AUTO_INCREMENT,
+  active TINYINT(1) NULL,                   -- Amenity is active flag
+  name TINYTEXT NULL,                       -- Name of amenity
+  descr TEXT NULL,                          -- Description of amenity
+  short_descr TINYTEXT NULL,                -- Short description of amenity
+  ref_type INT NULL,                        -- Type of entity these amenities are associated with - see plugin.ini ref_type tables
+  uses_value BOOLEAN NULL,                  -- Flag indicating whether the amenity requires a quantity number
+  PRIMARY KEY (id),
+  INDEX(name(20))
+);
+
+----
+
+-- Amenity Reference - Links a specific amenity to a specific entity of type ref_type
+CREATE TABLE {prefix}amenity_ref (
+  id INT NOT NULL AUTO_INCREMENT,
+  amenity INT NULL,                         -- Pointer to amenity in amenities table
+  ref_type INT NULL,                        -- Copy of ref_type from matching amenities table entry - to simplify searches
+  ref_dest INT NULL,                        -- Pointer to the specific entity of type ref_type
+  amenity_value TINYTEXT NULL,              -- Quantity if amenity uses values
+  PRIMARY KEY (id),
+  INDEX(ref_type),
+  INDEX(ref_dest)
+);
+
+----
+
+-- groups
+CREATE TABLE {prefix}amenity_groups (
+    id INT NOT NULL AUTO_INCREMENT,
+    name TINYTEXT NULL,                     -- Name of the Group
+    PRIMARY KEY (id),
+    INDEX(name(20))
+);
+
+----
+
+-- Amenity Group - Links a specific amenity to groups
+CREATE TABLE {prefix}grouped_amenities (
+    id INT NOT NULL AUTO_INCREMENT,
+    group_id INT,                              -- Pointer to the group
+    amenity_id INT,                            -- Pointer to the Amenity
+    searchable BOOLEAN DEFAULT '0',         -- Flag indicating whether the amenity group will show in the search form
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Member Cateogries - used with member information records
+CREATE TABLE {prefix}categories (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Name of this category
+  descr TEXT NULL,                          -- Description of this category
+  short_descr TINYTEXT NULL,                -- Short description of this category
+  parent INT NULL,                          -- Pointer to parent category in this table - if there is one
+  PRIMARY KEY (id)
+);
+
+----
+
+-- Mapping of categories to specific member information records
+CREATE TABLE {prefix}category_member_info (
+  id INT NOT NULL AUTO_INCREMENT,
+  category INT NULL,                        -- Pointer to category in categories table
+  member_info INT NULL,                     -- Pointer to member information record
+  PRIMARY KEY (id),
+  CONSTRAINT {prefix}categories_fk_1
+    FOREIGN KEY (category)
+    REFERENCES {prefix}categories (id)
+    ON DELETE CASCADE,
+  INDEX(category),
+  INDEX(member_info)
+);
+
+----
+
+-- Cities
+CREATE TABLE {prefix}cities (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Name of city
+  state TINYTEXT NULL,                      -- State
+  enable_weather BOOLEAN DEFAULT '0',       -- Enable Weather for this city
+  lat FLOAT NULL,                           -- Latitude of city's location
+  lon FLOAT NULL,                           -- Longitude of city's location
+  county INT NULL,                          -- County reference to county table
+  temp_max TINYTEXT NULL,                   -- Max temp
+  temp_min TINYTEXT NULL,                   -- Min temp
+  icon TINYTEXT NULL,                       -- Icon url
+  weather TINYTEXT NULL,                    -- weather
+  moreinfo TEXT NULL,                       -- moreinfo
+  wx_time DATETIME NULL,                    -- last update time for weather
+  PRIMARY KEY (id)
+);
+
+----
+
+-- Member Click Through Stats Data - Totals of URL click-throughs - Preserved for 2 years
+CREATE TABLE {prefix}clickthrough_stats (
+  member INT NOT NULL,                          -- ID of member
+  stat_type INT NOT NULL,                       -- Type of stat 1 = day, 2 = week, 3 = month
+  stat_date DATE NOT NULL,                      -- Date for which these stats are accumulated (date or first date of week or month)
+  clicks INT NULL,                          -- Number of Clicks
+  PRIMARY KEY (member, stat_type, stat_date),
+  INDEX (member),
+  INDEX (stat_type),
+  INDEX (stat_date)
+);
+
+----
+
+-- Files - Files are stored under /wp-content/uploads/glm-member-db/files/
+CREATE TABLE {prefix}files (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Original name of the file - might be URL if copied via HTTP
+  status TINYINT(1) NULL,                   -- Display/Use status - See plugin.ini status table
+  file_name TINYTEXT NULL,                  -- Stored file name for the file
+  descr TEXT NULL,                          -- Description
+  caption TINYTEXT NULL,                    -- Caption for the image
+  position INT NULL,                        -- Numeric position for sequence of display
+  ref_type INT NULL,                        -- Type of entity this image is associated with
+  ref_dest INT NULL,                        -- Pointer to the specific entity of ref_type this image is associated with
+  PRIMARY KEY (id),
+  INDEX(name(20)),
+  INDEX(file_name(20)),
+  INDEX(ref_type),
+  INDEX(ref_dest)
+);
+
+----
+
+-- Images - Images are stored under /wp-content/uploads/glm-member-db/images/{size}/
+CREATE TABLE {prefix}images (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Original name of the image - might be URL if copied via HTTP
+  status TINYINT(1) NULL,                   -- Display/Use status - See plugin.ini status table
+  selected BOOLEAN NULL,                    -- A single special image in the current gallery for this entity
+  featured BOOLEAN null,                    -- Image is a member of a group of featured images
+  file_name TINYTEXT NULL,                  -- Stored file name for the image
+  descr TEXT NULL,                          -- Description
+  caption TINYTEXT NULL,                    -- Caption for the image
+  position INT NULL,                        -- Numeric position for sequence of display
+  ref_type INT NULL,                        -- Type of entity this image is associated with
+  ref_dest INT NULL,                        -- Pointer to the specific entity of ref_type this image is associated with
+  PRIMARY KEY (id),
+  INDEX(name(20)),
+  INDEX(file_name(20)),
+  INDEX(ref_type),
+  INDEX(ref_dest)
+);
+
+----
+
+-- Primary member records - One for each member
+CREATE TABLE {prefix}members (
+  id INT NOT NULL AUTO_INCREMENT,
+  access INT NULL,                          -- Access type - See access table in plugin.ini
+  member_type INT NULL,                     -- Pointer to member type in member_type table
+  created DATE NULL,                        -- Date member record was created
+  name TINYTEXT NULL,                       -- Member name
+  member_slug TINYTEXT NULL,                -- Member name slug for canonical URLs (lowercase, "-" for spaces, no punctuation)
+  notes TEXT NULL,                          -- General notes - Not displayed in front-end
+  old_member_id TINYTEXT NULL,              -- Old member ID if imported from old database
+  featured BOOLEAN DEFAULT '0',             -- Whether the member is featured
+  PRIMARY KEY (id),
+  INDEX(name(20)),
+  INDEX(member_slug(20)),
+  INDEX(created),
+  INDEX(old_member_id(20))
+);
+
+----
+
+-- Member Detail Display Stats Data - Totals of times detail page is displayed - Preserved for 2 years
+CREATE TABLE {prefix}member_detail_stats (
+  member INT NOT NULL,                          -- ID of member
+  stat_type INT NOT NULL,                       -- Type of stat 1 = day, 2 = week, 3 = month
+  stat_date DATE NOT NULL,                      -- Date for which these stats are accumulated (date or first date of week or month)
+  clicks INT NULL,                          -- Number of Clicks
+  PRIMARY KEY (member, stat_type, stat_date),
+  INDEX (member),
+  INDEX (stat_type),
+  INDEX (stat_date)
+);
+
+----
+
+-- Member information version record - May be multiples per member - Only one with status "Active" for a distinct date range
+CREATE TABLE {prefix}member_info (
+  id INT NOT NULL AUTO_INCREMENT,
+  member INT NULL,                          -- Pointer to member record in table members
+  member_name TINYTEXT NULL,                -- Copy of member name from members table entry for fast reference
+  status INT NULL,                          -- Status of this member information record - See plugin.ini status table
+  reference_name TINYTEXT NULL,             -- Reference name for this member information record - Not displayed on front-end
+  has_no_map_data BOOLEAN DEFAULT '0',      -- True if member info record has no map data
+  has_no_profile BOOLEAN DEFAULT '0',       -- True if member has no profile record
+  descr TEXT NULL,                          -- Description
+  short_descr TEXT NULL,                    -- Short description
+  addr1 TINYTEXT NULL,                      -- Main member location address line 1
+  addr2 TINYTEXT NULL,                      -- Address line 2
+  city INT NULL,                            -- Pointer to City in cities table
+  state TINYTEXT NULL,                      -- Two character state code - matches states.ini entries
+  country TINYTEXT NULL,                    -- Two character country code - matches countries.ini entries
+  zip TINYTEXT NULL,                        -- ZIP/Postal code
+  lat FLOAT NULL,                           -- Latitude of member's location
+  lon FLOAT NULL,                           -- Longitude of member's location
+  region INT NULL,                          -- Pointer to entry in regions table
+  county INT NULL,                          -- Pointer to entry in regions table
+  phone TINYTEXT NULL,                      -- Primary phone number
+  toll_free TINYTEXT NULL,                  -- Toll Free phone number
+  url TINYTEXT NULL,                        -- URL with information about this member
+  reservation_url TEXT NULL,                -- Reservation URL
+  email TINYTEXT NULL,                      -- Main E-Mail address for this member
+  logo TINYTEXT NULL,                       -- Member logo
+  cc_type INT NULL,                         -- Bitmap of credit card types accepted - See credit_card array in plugin.ini
+  video_url TINYTEXT NULL,                  -- Video URL
+  video_file TINYTEXT NULL,                 -- Video File Name
+  video_title TINYTEXT NULL,                -- Video Title
+  video_descr TEXT NULL,                    -- Video Description
+  video_type INT NULL,                      -- Video Type - See plugin.ini video type table.
+  live_cam_url TINYTEXT NULL,               -- Live Cam URL
+  live_cam_title TINYTEXT NULL,             -- Live Cam Title
+  live_cam_descr TEXT NULL,                 -- Live Cam Description
+  live_cam_type INT NULL,                   -- Live Cam Type - See plugin.ini video type table.
+  mailing_addr1 TINYTEXT NULL,              -- Mailing Address 1
+  mailing_addr2 TINYTEXT NULL,              -- Mailing Address 2
+  mailing_city INT NULL,                    -- Mailing City  (Pointer to City in cities table)
+  mailing_state TINYTEXT NULL,              -- Mailing State (Two character state code - matches states.ini entries)
+  mailing_zip TINYTEXT NULL,                -- Mailing ZIP/Postal code
+  notes TEXT NULL,                          -- General notes - Not displayed in front-end
+  create_time TIMESTAMP NULL,               -- Create date/time
+  modify_time TIMESTAMP NULL,               -- Last update date/time
+  PRIMARY KEY (id),
+  INDEX(status),
+  INDEX(city),
+  INDEX(zip(10)),
+  INDEX(lat),
+  INDEX(lon),
+  INDEX(region),
+  INDEX(county),
+  FULLTEXT KEY member_name (member_name)
+);
+
+----
+
+-- Member type - Can be used to assign members to different "classes" of membership (i.e. Full, Associate, Premium)
+-- Mostly for internal use by the member organization, but could be displayed - Consider a short_description if they are.
+CREATE TABLE {prefix}member_type (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Name of member type
+  descr TINYTEXT NULL,                      -- Description of member type
+  PRIMARY KEY (id)
+);
+
+----
+
+-- Regions - Used to segment members into various geographical regions - can be cities, counties, or other logical regions
+CREATE TABLE {prefix}regions (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Name of region
+  descr TEXT NULL,                          -- Description of region
+  short_descr TINYTEXT NULL,                -- Short description of region
+  PRIMARY KEY (id)
+);
+
+----
+
+-- Counties
+CREATE TABLE {prefix}counties (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Name of county
+  descr TEXT NULL,                          -- Description of county
+  short_descr TINYTEXT NULL,                -- Short description of county
+  PRIMARY KEY (id)
+);
+
+----
+
+-- File Library Cateogries - used with "Files Library" - Created due to PDF failures in WordPress Media Library
+CREATE TABLE {prefix}file_library_categories (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Name of this category
+  descr TEXT NULL,                          -- Description of this category
+  short_descr TINYTEXT NULL,                -- Short description of this category
+  parent INT NULL,                          -- Pointer to parent category in this table - if there is one
+  PRIMARY KEY (id)
+);
+
+----
+
+-- Files Library - Files are stored under /wp-content/uploads/glm-member-db/filesLibrary/
+CREATE TABLE {prefix}file_library (
+  id INT NOT NULL AUTO_INCREMENT,
+  name TINYTEXT NULL,                       -- Original name of the file - might be URL if copied via HTTP
+  file_name TINYTEXT NULL,                  -- Stored file name for the file
+  descr TEXT NULL,                          -- Description
+  title TINYTEXT NULL,                      -- File title
+  last_access_time DATETIME NULL,           -- Upload time or last access time
+  PRIMARY KEY (id),
+  INDEX(name(20)),
+  INDEX(file_name(20))
+);
+
+----
+
+-- General settings available on Management page in admin - Only 1 entry in this table
+-- Items in this table should be all self-explanatory
+CREATE TABLE {prefix}settings_general (
+  id INT NOT NULL AUTO_INCREMENT,
+  admin_debug BOOLEAN DEFAULT '0',
+  admin_debug_verbose BOOLEAN DEFAULT '0',
+  front_debug BOOLEAN DEFAULT '0',
+  front_debug_verbose BOOLEAN DEFAULT '0',
+  enable_members BOOLEAN DEFAULT '1',
+  selected_map_interface SMALLINT DEFAULT '1',
+  leaflet_tile_server TINYTEXT DEFAULT '',
+  leaflet_tile_server_key TINYTEXT DEFAULT '',
+  google_maps_api_key TINYTEXT DEFAULT '',
+  maps_default_lat FLOAT DEFAULT '45.3749',
+  maps_default_lon FLOAT DEFAULT '-84.9592',
+  maps_default_zoom INTEGER DEFAULT '10',
+  time_zone TINYTEXT DEFAULT NULL,
+  canonical_member_page TINYTEXT DEFAULT NULL,
+  phone_infix TINYTEXT DEFAULT NULL,
+  phone_format TINYTEXT DEFAULT NULL,
+  default_state TINYTEXT DEFAULT NULL,
+  enable_counties BOOLEAN DEFAULT '0',
+  enable_multiple_profiles BOOLEAN DEFAULT '0',
+  enable_single_profile BOOLEAN DEFAULT '0',            -- Hide the add profile and clone profile links/buttons
+  enable_member_reports BOOLEAN DEFAULT '1',
+  enable_caching BOOLEAN DEFAULT '1',
+  enable_contact_edit_only BOOLEAN DEFAULT '0',
+  memb_info_location BOOLEAN DEFAULT '1',
+  memb_info_contact BOOLEAN DEFAULT '1',
+  memb_info_categories BOOLEAN DEFAULT '1',
+  memb_info_images BOOLEAN DEFAULT '1',
+  memb_info_files BOOLEAN DEFAULT '1',
+  memb_info_video BOOLEAN DEFAULT '1',
+  memb_info_cam BOOLEAN DEFAULT '1',
+  file_library BOOLEAN DEFAULT '0',
+  list_show_map BOOLEAN DEFAULT '1',
+  list_show_featured BOOLEAN DEFAULT '0',
+  list_show_featured_count SMALLINT DEFAULT '3',
+  list_show_list BOOLEAN DEFAULT '1',
+  list_order_list SMALLINT DEFAULT '10',
+  list_pagination BOOLEAN DEFAULT '1',
+  list_ajax_pagination BOOLEAN DEFAULT '0',
+  list_pagination_count SMALLINT DEFAULT '20',
+  list_show_sidebar_area BOOLEAN DEFAULT '0',
+  list_show_header_text BOOLEAN DEFAULT '1',
+  list_show_entities_found BOOLEAN DEFAULT '1',
+  list_show_entities_shown BOOLEAN DEFAULT '1',
+  list_show_search_filters_opened BOOLEAN DEFAULT '0',
+  list_show_search BOOLEAN DEFAULT '1',
+  list_show_search_text BOOLEAN DEFAULT '1',
+  list_show_search_category BOOLEAN DEFAULT '1',
+  list_show_search_amenities BOOLEAN DEFAULT '1',
+  list_show_search_region BOOLEAN DEFAULT '1',
+  list_show_search_alpha BOOLEAN DEFAULT '1',
+  list_show_search_city BOOLEAN DEFAULT '0',
+  list_floating_search BOOLEAN DEFAULT '0',
+  list_floating_search_distance_top INTEGER DEFAULT '0',    -- How far from the top the sticky Search/Filters box should hover
+  list_show_detail_link BOOLEAN DEFAULT '1',
+  list_show_logo BOOLEAN DEFAULT '1',
+  list_logo_size TINYTEXT NULL,
+  list_logo_for_mobile BOOLEAN DEFAULT '1',
+  list_show_address BOOLEAN DEFAULT '1',
+  list_show_street BOOLEAN DEFAULT '1',
+  list_show_citystatezip BOOLEAN DEFAULT '1',
+  list_show_country BOOLEAN DEFAULT '1',
+  list_show_region BOOLEAN DEFAULT '1',
+  list_show_descr BOOLEAN DEFAULT '0',
+  list_show_short_descr BOOLEAN DEFAULT '1',
+  list_show_phone BOOLEAN DEFAULT '1',
+  list_show_tollfree BOOLEAN DEFAULT '1',
+  list_show_url BOOLEAN DEFAULT '1',
+  list_show_url_newtarget BOOLEAN DEFAULT '1',
+  list_show_email BOOLEAN DEFAULT '1',
+  list_show_categories BOOLEAN DEFAULT '0',
+  list_show_creditcards BOOLEAN DEFAULT '0',
+  list_show_amenities BOOLEAN DEFAULT '0',
+  list_show_logo_filler BOOLEAN DEFAULT '1',
+  list_show_live_cam BOOLEAN DEFAULT '1',
+  list_map_show_opened BOOLEAN DEFAULT '0',
+  list_map_show_detaillink BOOLEAN DEFAULT '1',
+  list_map_show_logo BOOLEAN DEFAULT '0',
+  list_map_logo_size TINYTEXT NULL,
+  list_map_show_descr BOOLEAN DEFAULT '0',
+  list_map_show_short_descr BOOLEAN DEFAULT '1',
+  list_map_show_address BOOLEAN DEFAULT '1',
+  list_map_show_street BOOLEAN DEFAULT '1',
+  list_map_show_citystatezip BOOLEAN DEFAULT '1',
+  list_map_show_country BOOLEAN DEFAULT '1',
+  list_map_show_region BOOLEAN DEFAULT '1',
+  list_map_show_phone BOOLEAN DEFAULT '1',
+  list_map_show_tollfree BOOLEAN DEFAULT '1',
+  list_map_show_url BOOLEAN DEFAULT '1',
+  list_map_show_url_newtarget BOOLEAN DEFAULT '1',
+  list_map_show_email BOOLEAN DEFAULT '1',
+  list_map_show_categories BOOLEAN DEFAULT '0',
+  list_map_show_creditcards BOOLEAN DEFAULT '0',
+  list_map_show_amenities BOOLEAN DEFAULT '0',
+  list_show_packages BOOLEAN DEFAULT '0',
+  list_show_packages_link BOOLEAN DEFAULT '0',
+  list_header_text TINYTEXT DEFAULT NULL,
+  list_view_file TINYTEXT NULL,
+  grid_view_file TINYTEXT NULL,
+  detail_view_file TINYTEXT NULL,
+  detail_auto_expand_sections BOOLEAN DEFAULT '0',
+  detail_show_map BOOLEAN DEFAULT '1',
+  detail_show_directions BOOLEAN DEFAULT '1',
+  detail_show_logo BOOLEAN DEFAULT '1',
+  detail_logo_size TINYTEXT NULL,
+  detail_show_descr BOOLEAN DEFAULT '1',
+  detail_show_short_descr BOOLEAN DEFAULT '0',
+  detail_show_address BOOLEAN DEFAULT '1',
+  detail_show_street BOOLEAN DEFAULT '1',
+  detail_show_citystatezip BOOLEAN DEFAULT '1',
+  detail_show_country BOOLEAN DEFAULT '1',
+  detail_show_region BOOLEAN DEFAULT '1',
+  detail_show_phone BOOLEAN DEFAULT '1',
+  detail_show_tollfree BOOLEAN DEFAULT '1',
+  detail_show_url BOOLEAN DEFAULT '1',
+  detail_show_url_newtarget BOOLEAN DEFAULT '1',
+  detail_show_email BOOLEAN DEFAULT '1',
+  detail_show_categories BOOLEAN DEFAULT '0',
+  detail_show_creditcards BOOLEAN DEFAULT '0',
+  detail_show_amenities BOOLEAN DEFAULT '1',
+  detail_show_imagegallery BOOLEAN DEFAULT '1',
+  detail_show_coupons BOOLEAN DEFAULT '0',
+  detail_show_packages BOOLEAN DEFAULT '0',
+  detail_show_events BOOLEAN DEFAULT '0',
+  detail_show_video BOOLEAN DEFAULT '0',
+  detail_show_live_cam BOOLEAN DEFAULT '0',
+  detail_top_offset_autoscroll INTEGER DEFAULT '0', -- Determines the distance from the top when autoscrolling to a section on member detail pages
+  detail_map_show_logo BOOLEAN DEFAULT '0',
+  detail_map_logo_size TINYTEXT NULL,
+  detail_map_show_descr BOOLEAN DEFAULT '0',
+  detail_map_show_short_descr BOOLEAN DEFAULT '1',
+  detail_map_show_address BOOLEAN DEFAULT '1',
+  detail_map_show_street BOOLEAN DEFAULT '1',
+  detail_map_show_citystatezip BOOLEAN DEFAULT '1',
+  detail_map_show_country BOOLEAN DEFAULT '1',
+  detail_map_show_region BOOLEAN DEFAULT '1',
+  detail_map_show_phone BOOLEAN DEFAULT '1',
+  detail_map_show_tollfree BOOLEAN DEFAULT '1',
+  detail_map_show_url BOOLEAN DEFAULT '1',
+  detail_map_show_url_newtarget BOOLEAN DEFAULT '1',
+  detail_map_show_email BOOLEAN DEFAULT '1',
+  detail_map_show_categories BOOLEAN DEFAULT '0',
+  detail_map_show_creditcards BOOLEAN DEFAULT '0',
+  detail_map_show_amenities BOOLEAN DEFAULT '0',
+  members_only_support_email TINYTEXT DEFAULT '',
+  members_only_support_phone TINYTEXT DEFAULT '',
+  updates_notification_to TINYTEXT DEFAULT '',      -- To email address for the notification email
+  updates_notification_from TINYTEXT DEFAULT '',    -- From header for the notification email
+  updates_notification TEXT DEFAULT '',             -- Notification message
+  short_desc_char_limit INTEGER DEFAULT '120',      -- How many characters the short description is limited to - also used for importing
+  use_cluster_markers BOOLEAN DEFAULT '0',          -- Flag to say if cluster markers should be use in maps
+  recaptcha_site_key TINYTEXT DEFAULT '',           -- reCAPTCHA site key
+  recaptcha_secret_key TINYTEXT DEFAULT '',         -- reCAPTCHA secret key
+  recaptcha_header_code TEXT DEFAULT '',            -- reCAPTCHA code for page header
+  recaptcha_form_code TEXT DEFAULT '',              -- reCAPTCHA code for captcha form field
+  new_member_intro TEXT NULL,                       -- New Member intro
+  new_member_thankyou TEXT NULL,                    -- New Member thank you
+  new_member_type_default INTEGER DEFAULT '0',      -- New Member member type default
+  new_member_notice_to TINYTEXT NULL,               -- New Member notice To:
+  new_member_notice_from TINYTEXT NULL,             -- weather
+  new_member_notice_message TEXT NULL,              -- New Member notice Message
+  PRIMARY KEY (id)
+);
+
+----
+
+-- Set default entry
+INSERT INTO {prefix}settings_general
+    ( id, time_zone, canonical_member_page, list_logo_size, list_map_logo_size, detail_logo_size, detail_map_logo_size,
+        list_pagination, list_pagination_count, enable_counties, enable_multiple_profiles, enable_member_reports, enable_caching, updates_notification, enable_single_profile,
+       list_view_file, grid_view_file, detail_view_file )
+   VALUES
+    ( 1, 'America/Detroit', 'member-detail', 'large', 'thumb', 'large', 'thumb', '1', 20, 0, 0, 1, 1,
+        'A member has updated their record and is now in a pending state.', 0,
+        'listTypeList', 'listTypeGrid', 'detail')
+;
+
+----
+
+-- Terms used in site modifiable on Management page in admin - Only 1 entry in this table
+-- Terms in this table should be all self-explanatory
+CREATE TABLE {prefix}settings_terms (
+  id INT NOT NULL AUTO_INCREMENT,
+  term_admin_menu_members TINYTEXT NULL,
+  term_admin_menu_member_list TINYTEXT NULL,
+  term_admin_menu_member TINYTEXT NULL,
+  term_admin_menu_configure TINYTEXT NULL,
+  term_admin_menu_settings TINYTEXT NULL,
+  term_admin_menu_shortcodes TINYTEXT NULL,
+  term_admin_menu_members_dashboard TINYTEXT NULL,
+  term_admin_menu_members_list TINYTEXT NULL,
+  term_admin_menu_members_reports TINYTEXT NULL,
+  term_admin_menu_member_dashboard TINYTEXT NULL,
+  term_admin_menu_member_info TINYTEXT NULL,
+  term_admin_menu_member_locations TINYTEXT NULL,
+  term_admin_menu_member_facilities TINYTEXT NULL,
+  term_admin_menu_member_attractions TINYTEXT NULL,
+  term_admin_menu_member_contacts TINYTEXT NULL,
+  term_admin_menu_configure_member_types TINYTEXT NULL,
+  term_admin_menu_configure_member_cats TINYTEXT NULL,
+  term_admin_menu_configure_accom_types TINYTEXT NULL,
+  term_admin_menu_configure_amenities TINYTEXT NULL,
+  term_admin_menu_configure_cities TINYTEXT NULL,
+  term_admin_menu_configure_counties TINYTEXT NULL,
+  term_admin_menu_configure_regions TINYTEXT NULL,
+  term_admin_menu_settings_general TINYTEXT NULL,
+  term_admin_menu_settings_terms TINYTEXT NULL,
+  term_admin_menu_settings_development TINYTEXT NULL,
+  term_member TINYTEXT NULL,
+  term_member_cap TINYTEXT NULL,
+  term_member_plur TINYTEXT NULL,
+  term_member_plur_cap TINYTEXT NULL,
+  term_location TINYTEXT NULL,
+  term_location_cap TINYTEXT NULL,
+  term_location_plur TINYTEXT NULL,
+  term_location_plur_cap TINYTEXT NULL,
+  term_county TINYTEXT NULL,
+  term_county_cap TINYTEXT NULL,
+  term_county_plur TINYTEXT NULL,
+  term_county_plur_cap TINYTEXT NULL,
+  term_facility TINYTEXT NULL,
+  term_facility_cap TINYTEXT NULL,
+  term_facility_plur TINYTEXT NULL,
+  term_facility_plur_cap TINYTEXT NULL,
+  term_attraction TINYTEXT NULL,
+  term_attraction_cap TINYTEXT NULL,
+  term_attraction_plur TINYTEXT NULL,
+  term_attraction_plur_cap TINYTEXT NULL,
+  term_contact TINYTEXT NULL,
+  term_contact_cap TINYTEXT NULL,
+  term_contact_plur TINYTEXT NULL,
+  term_contact_plur_cap TINYTEXT NULL,
+  term_webcam_cap TINYTEXT NULL,
+  PRIMARY KEY (id)
+);
+
+----
+
+-- Default terms entry
+INSERT INTO {prefix}settings_terms
+    (
+    id,
+    term_admin_menu_members,
+    term_admin_menu_member_list,
+    term_admin_menu_member,
+    term_admin_menu_configure,
+    term_admin_menu_settings,
+    term_admin_menu_shortcodes,
+    term_admin_menu_members_dashboard,
+    term_admin_menu_members_list,
+    term_admin_menu_members_reports,
+    term_admin_menu_member_dashboard,
+    term_admin_menu_member_info,
+    term_admin_menu_member_locations,
+    term_admin_menu_member_facilities,
+    term_admin_menu_member_attractions,
+    term_admin_menu_member_contacts,
+    term_admin_menu_configure_member_types,
+    term_admin_menu_configure_member_cats,
+    term_admin_menu_configure_accom_types,
+    term_admin_menu_configure_amenities,
+    term_admin_menu_configure_cities,
+    term_admin_menu_configure_counties,
+    term_admin_menu_configure_regions,
+    term_admin_menu_settings_general,
+    term_admin_menu_settings_terms,
+    term_admin_menu_settings_development,
+    term_member,
+    term_member_cap,
+    term_member_plur,
+    term_member_plur_cap,
+    term_location,
+    term_location_cap,
+    term_location_plur,
+    term_location_plur_cap,
+    term_county,
+    term_county_cap,
+    term_county_plur,
+    term_county_plur_cap,
+    term_facility,
+    term_facility_cap,
+    term_facility_plur,
+    term_facility_plur_cap,
+    term_attraction,
+    term_attraction_cap,
+    term_attraction_plur,
+    term_attraction_plur_cap,
+    term_contact,
+    term_contact_cap,
+    term_contact_plur,
+    term_contact_plur_cap,
+    term_webcam_cap
+    )
+   VALUES
+    (
+    1,
+    'Members',
+    'Member',
+    'Member',
+    'Configure',
+    'Management',
+    'Shortcodes',
+    'Dashboard',
+    'Member List',
+    'Reports',
+    'Member Dashboard',
+    'Member Info',
+    'Locations',
+    'Facilities',
+    'Attractions',
+    'Contacts',
+    'Member Types',
+    'Member Categories',
+    'Accommodation Types',
+    'Amenities',
+    'Cities',
+    'Counties',
+    'Regions',
+    'General Settings',
+    'Terms & Phrases',
+    'Development',
+    'member',
+    'Member',
+    'members',
+    'Members',
+    'location',
+    'Location',
+    'locations',
+    'Locations',
+    'county',
+    'County',
+    'counties',
+    'Counties',
+    'facility',
+    'Facility',
+    'facilities',
+    'Facilities',
+    'attraction',
+    'Attraction',
+    'attractions',
+    'Attractions',
+    'contact',
+    'Contact',
+    'contacts',
+    'Contacts',
+    'Webcam'
+    )
+;
+
+----
+
+-- Shortcode Output Cache
+CREATE TABLE {prefix}cache (
+    shortcode TINYTEXT NULL,
+    cache_code TINYTEXT NOT NULL,
+    created DATETIME NULL,
+    html MEDIUMTEXT NULL,
+    PRIMARY KEY (cache_code(20)),
+    INDEX (created)
+);
+
+----
+
+-- Theme Settings - Only 1 entry in this table
+CREATE TABLE {prefix}settings_theme (
+    id INT NOT NULL AUTO_INCREMENT,
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Default Theme Settings entry
+INSERT INTO {prefix}settings_theme
+    (
+    id
+    )
+   VALUES
+    (
+    1
+    )
+;
+
+----
+
+-- Member Email Notifications
+CREATE TABLE {prefix}email_notifications (
+    id INT NOT NULL AUTO_INCREMENT,
+    notification_message TEXT NULL,
+    declined_message TEXT NULL,
+    approved_message TEXT NULL,
+    to_email TINYTEXT NULL,
+    from_email TINYTEXT NULL,
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Set default email notifications
+INSERT INTO {prefix}email_notifications
+    ( id, notification_message, declined_message, approved_message )
+VALUES
+    ( 1, 'A member has requested a profile update.', 'Your profile update has been declined.', 'Your profile has been approved!' );
+
index 7091362..1941104 100755 (executable)
@@ -82,6 +82,7 @@ $glmMembersDbVersions = array(
     '1.1.48' => array('version' => '1.1.48', 'tables' => 23, 'date' => '02/14/19'),
     '1.1.49' => array('version' => '1.1.49', 'tables' => 23, 'date' => '02/15/19'),
     '1.1.50' => array('version' => '1.1.50', 'tables' => 23, 'date' => '02/20/19'),
+    '1.1.51' => array('version' => '1.1.51', 'tables' => 23, 'date' => '02/26/19'),
 );
 
 
diff --git a/setup/databaseScripts/drop_database_V1.1.49.sql b/setup/databaseScripts/drop_database_V1.1.49.sql
deleted file mode 100755 (executable)
index 2bd86d2..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
--- Gaslight Media Members Database
--- File Created: 12/09/14 15:27:15
--- Database Version: 1.1.46
--- Database Deletion Script
--- Note: Tables with DELETE CASCADE must appear before referenced table
-
-DROP TABLE IF EXISTS
-    {prefix}amenities,
-    {prefix}amenity_ref,
-    {prefix}category_member_info,
-    {prefix}cities,
-    {prefix}clickthrough_stats,
-    {prefix}images,
-    {prefix}files,
-    {prefix}members,
-    {prefix}member_detail_stats,
-    {prefix}member_info,
-    {prefix}member_type,
-    {prefix}regions,
-    {prefix}counties,
-    {prefix}settings_general,
-    {prefix}settings_terms,
-    {prefix}settings_theme,
-    {prefix}categories,
-    {prefix}amenity_groups,
-    {prefix}grouped_amenities,
-    {prefix}cache,
-    {prefix}file_library_categories,
-    {prefix}file_library,
-    {prefix}email_notifications
-;
-
diff --git a/setup/databaseScripts/drop_database_V1.1.51.sql b/setup/databaseScripts/drop_database_V1.1.51.sql
new file mode 100755 (executable)
index 0000000..2bd86d2
--- /dev/null
@@ -0,0 +1,32 @@
+-- Gaslight Media Members Database
+-- File Created: 12/09/14 15:27:15
+-- Database Version: 1.1.46
+-- Database Deletion Script
+-- Note: Tables with DELETE CASCADE must appear before referenced table
+
+DROP TABLE IF EXISTS
+    {prefix}amenities,
+    {prefix}amenity_ref,
+    {prefix}category_member_info,
+    {prefix}cities,
+    {prefix}clickthrough_stats,
+    {prefix}images,
+    {prefix}files,
+    {prefix}members,
+    {prefix}member_detail_stats,
+    {prefix}member_info,
+    {prefix}member_type,
+    {prefix}regions,
+    {prefix}counties,
+    {prefix}settings_general,
+    {prefix}settings_terms,
+    {prefix}settings_theme,
+    {prefix}categories,
+    {prefix}amenity_groups,
+    {prefix}grouped_amenities,
+    {prefix}cache,
+    {prefix}file_library_categories,
+    {prefix}file_library,
+    {prefix}email_notifications
+;
+
diff --git a/setup/databaseScripts/update_database_V1.1.51.sql b/setup/databaseScripts/update_database_V1.1.51.sql
new file mode 100755 (executable)
index 0000000..c99e3ab
--- /dev/null
@@ -0,0 +1,25 @@
+-- Gaslight Media Members Database
+-- File Created: 2019-02-15
+-- Database Version: 1.1.49
+-- Database Update From Previous Version Script
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+
+-- Add setting
+ALTER TABLE {prefix}settings_general ADD COLUMN list_view_file TINYTEXT NULL;
+
+----
+
+-- Add setting
+ALTER TABLE {prefix}settings_general ADD COLUMN grid_view_file TINYTEXT NULL;
+
+----
+
+-- Add setting
+ALTER TABLE {prefix}settings_general ADD COLUMN detail_view_file TINYTEXT NULL;
+
+----
+
+-- Update current settings
+UPDATE {prefix}settings_general set list_view_file = 'listTypeList', grid_view_file = 'listTypeGrid', detail_view_file = 'detail';
index ca62556..5830d94 100755 (executable)
                     <select id="default-state" data-id="default_state" class="location-address" name="default_state">
                         <option value=""></option>
                         {foreach from=$genSettings.fieldData.default_state.list item=v}
-                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
-                            {$v.name}
-                        </option>
+                            <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                {$v.name}
+                            </option>
                         {/foreach}
                     </select>
                 </td>
             </tr>
         </table>
 
-            <!-- Member List Page Options -->
+        {* Member List Page Options *}
 
         <table id="glm-table-list" class="glm-admin-table glm-settings-table glm-hidden">
             <tr>
                 <td>
                     <table class="glm-admin-table glm-admin-table-inner">
                         <tr><td colspan="2"><h2>Member List Display Options</h2></td></tr>
+                        <tr>
+                            <th>List View File</th>
+                            <td>
+                                <select name="list_view_file">
+                                    {foreach from=$genSettings.fieldData.list_view_file.list item=v}
+                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                            {$v.name}
+                                        </option>
+                                    {/foreach}
+                                </select>
+                            </td>
+                        </tr>
+                        <tr>
+                            <th>Grid View File</th>
+                            <td>
+                                <select name="grid_view_file">
+                                    {foreach from=$genSettings.fieldData.grid_view_file.list item=v}
+                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                            {$v.name}
+                                        </option>
+                                    {/foreach}
+                                </select>
+                            </td>
+                        </tr>
+                        <tr>
+                            <th>Detail View File</th>
+                            <td>
+                                <select name="detail_view_file">
+                                    {foreach from=$genSettings.fieldData.detail_view_file.list item=v}
+                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                            {$v.name}
+                                        </option>
+                                    {/foreach}
+                                </select>
+                            </td>
+                        </tr>
                         <tr><th>Show Featured Member List:</th><td><input type="checkbox" name="list_show_featured"{if $genSettings.fieldData.list_show_featured.value} checked="checked"{/if}></td></tr>
                         <tr><th>Max Featured Members to List:</th><td><input type="text" name="list_show_featured_count" value="{$genSettings.fieldData.list_show_featured_count}" placeholder="0" maxlength="2"></td></tr>
                         <tr><th>Show Member List:</th><td><input type="checkbox" name="list_show_list"{if $genSettings.fieldData.list_show_list.value} checked="checked"{/if}></td></tr>
                             <th>Member List Order</th>
                             <td>
                                 <select name="list_order_list">
-                    {foreach from=$genSettings.fieldData.list_order_list.list item=v}
-                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
-                    {/foreach}
+                                    {foreach from=$genSettings.fieldData.list_order_list.list item=v}
+                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                                    {/foreach}
                                 </select>
                             </td>
                         </tr>
diff --git a/views/front/members/detailA.html b/views/front/members/detailA.html
new file mode 100644 (file)
index 0000000..3b56d9d
--- /dev/null
@@ -0,0 +1,777 @@
+{include file='front/members/header.html'}
+
+{apply_filters('glm-member-db-front-members-detail-pageTop', '', $member.id)}
+
+{if $haveMember}
+
+    {if $settings.detail_show_map}
+<!--        <div id="glm-locationMap-container" class="row">
+            <div id="glm-locationMap" class="glm-map small-12 columns">(map loads here)</div>
+        </div>-->
+    {/if}
+    {if $settings.detail_show_directions}
+<!--        <div id="glm-directionsMap-container" class="glm-hidden">
+            <div id="glm-directionsMap" class="glm-map">(directions load here)</div>
+            <div id="directions-panel"></div>
+        </div>
+
+        <div class="row">
+            <div id="glm-directions" class="small-12 columns glm-member-entry-container">
+                <div class="row">
+                    <div class="small-12 medium-4 columns">
+                        Directions type:
+                        <select id="directionsType" name="directionsType">
+                            <option value="DRIVING">Driving</option>
+                            <option value="WALKING">Walking</option>
+                            <option value="BICYCLING">Bicycling</option>
+                             <option value="TRANSIT">Transit Services</option> - Doesn't seem to work
+                        </select>
+                    </div>
+                    <div class="small-12 medium-8 columns">
+                        Enter address to show directions ...
+                        <input id="glm-startLocation" type="text" name="startLocation" class="glm-form-text-input" placeholder=""><br>
+                    </div>
+                </div>
+                <div class="row">
+                    <div style="text-align: center;">
+                        <input type="submit" id="glm-showDirectionsButton" class="button button-secondary glm-button glm-member-button" value="Show Directions">
+                        <input type="submit" id="glm-showLocationButton" class="button button-secondary glm-button glm-hidden glm-member-button" value="Show {$terms.term_member_cap} Location">
+                    </div>
+                </div>
+            </div>
+        </div>-->
+    {/if}
+<a id="topAnchor"></a>
+
+<!--    <h3>{$terms.term_member_cap} Detail</h3>-->
+    <div class="">
+        <script>//document.write('<a id="glm-member-detail-takeback-mini" class="button glm-member-button" href="' + document.referrer + '"><span>Back to listing</span></a>');</script>
+        <a id="glm-member-detail-takeback-mini" class="glm-member-db-takeback-mini button glm-member-button" href="javascript:history.go(-1)"><span>Back to listing</span></a>
+        <div id="glm-member-detail-container" class="columns glm-member-container">
+            <div id="glm-member-detail-top-box" class="">
+                {if $member.logo && $settings.detail_show_logo}
+<!--                    <div class="glm-member-detail-logo-wrapper">
+                        <img class="glm-member-list-image-left" src="{$glmPluginMediaUrl}/images/{$settings.detail_logo_size}/{$member.logo}">
+                    </div>-->
+                {/if}
+                {if $member.url && $settings.detail_show_url}
+                    <input type="hidden" id="glm-member-detail-click-logged" value="0">
+                {/if}
+
+                <div id="glm-member-detail-contact-info" class="">
+                    <h4 class="glm-member-title">  {$member.member}</h4>
+    <!-- Member name, address, and basic information -->
+
+                    {if $settings.detail_show_address}
+                        <div class="glm-member-detail-address-wrapper">
+                            {apply_filters('glm-member-db-front-members-detail-addressTop', '', $member.id)}
+                            {if $settings.detail_show_street}
+                                {if $member.addr1}<div>{$member.addr1}</div>{/if}
+                                {if $member.addr2}<div>{$member.addr2}</div>{/if}
+                            {/if}
+                            {if $settings.memb_info_location && $settings.detail_show_citystatezip}
+                                <div>
+                                    {if $member.city}
+                                        <span>{$member.city}{if $member.state.value}, {/if}</span>
+                                    {/if}
+                                    {if $member.state.value}
+                                        <span>{$member.state.value}</span>
+                                    {/if}
+                                    {if $member.zip}
+                                        {$member.zip}
+                                    {/if}
+                                </div>
+                            {/if}
+                            {if $member.country.name && $settings.detail_show_country}
+                                <div>{$member.country.name}</div>
+                            {/if}
+                            {apply_filters('glm-member-db-front-members-detail-addressBottom', '', $member.id)}
+                        </div>
+                    {/if}
+                    {apply_filters('glm-member-db-front-members-detail-otherDetailTop', '', $member.id)}
+                    {if $settings.memb_info_location && $member.region && $settings.detail_show_region}
+                        <div class="glm-member-detail-region-wrapper">
+                            {$terms.term_admin_menu_configure_regions}: {$member.region}
+                        </div>
+                    {/if}
+                    {if $settings.memb_info_location}
+                    <div class="glm-member-detail-phone-wrapper">
+                        {if $member.phone && $settings.detail_show_phone}
+                            <div class="glm-member-detail-contact-phone">
+                                <div class="glm-field-value">Phone: {apply_filters('glm_associate_phone_filter', $member.phone)}</div>
+                            </div>
+                        {/if}
+                        {if $member.toll_free && $settings.detail_show_tollfree}
+                            <div>
+                                <div class="glm-field-value">Toll Free: {apply_filters('glm_associate_phone_filter', $member.toll_free)}</div>
+                            </div>
+                        {/if}
+                    </div>
+                    {/if}
+                    {apply_filters('glm-member-db-front-members-detail-otherDetailBottom', '', $member.id)}
+                    <div id="glm-member-detail-links">
+                        {apply_filters('glm-member-db-front-members-detail-linksTop', '', $member.id)}
+                        {if $settings.detail_show_url}<a id="glm-member-detail-website-link" class="small-12" data-member-id="{$member.member_pointer}" data-member-slug="{$member.member_slug}" href="{$member.url}"{if $settings.detail_show_url_newtarget} target="_blank"{/if}>Visit Website</a>{/if}
+                        {if $member.email && $settings.detail_show_email}<a href="mailto:{$member.email}">Email</a>{/if}
+                        {if $member.reservation_url}<a target="_blank" href="{$member.reservation_url}">Reserve Now</a>{/if}
+                        {if $settings.detail_show_coupons && $coupons}<a href="#glm-member-detail-coupons">Coupons</a>{/if}
+                        {if $member.live_cam_type.value==1 && $member.live_cam_url != "" && $settings.detail_show_live_cam}
+                            <a target="_blank" href="{$member.live_cam_url}">
+                                {$terms.term_webcam_cap}
+                            </a>
+                        {/if}
+                        {apply_filters('glm-member-db-front-members-detail-linksBottom', '', $member.id)}
+                    </div>
+
+                    <div class="glm-member-db-socials">
+                        {apply_filters('glm-member-db-front-members-list-memberDetailBottom', '', $member.id)}
+                        {apply_filters('glm-member-db-front-members-social-list', '', $member.id)}
+                    </div>
+                </div>
+
+                {if $settings.detail_show_map}
+                <div id="glm-member-detail-map-wrapper" class="">
+                    <div id="glm-locationMap-container" style="height: 140px;">
+      {if $settings.selected_map_interface == 1}
+                    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.3/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin=""/>
+                    <script src="https://unpkg.com/leaflet@1.3.3/dist/leaflet.js" integrity="sha512-tAGcCfR4Sc5ZP5ZoVz0quoZDYX5aCtEm/eu1KhSLj2c9eFrylXZknQYmxUssFaVJKvvc0dJQixhGjG2yXWiV9Q==" crossorigin=""></script>
+                    <link rel="stylesheet" href="{$jsUrl}/Leaflet.loading/src/Control.Loading.css" />
+                    <script src="{$jsUrl}/Leaflet.loading/src/Control.Loading.js"></script>
+                    <div id="LeafletMapContainer" style="height: 250px; width: 100%;">(map loads here)</div>
+      {/if}
+      {if $settings.selected_map_interface == 2}
+                    <script src="//maps.googleapis.com/maps/api/js?sensor=true&key={$settings.google_maps_api_key}"></script>
+                    <script type="text/javascript">var enableDraggable = true;</script>
+                    <div id="glm-locationMap" class="glm-map glmgrid-small-12 glmgrid-columns">(map loads here)</div>
+      {/if}
+                </div>
+                <div id="glm-member-detail-map-button" class="button map-button">view map</div>
+
+                    <div id="member-lat" rel="{$member.lat}"></div>
+                    <div id="member-lon" rel="{$member.lon}"></div>
+                    <form id="MemberDrivingDirectionsForm" name="MemberDrivingDirectionsForm" method="post" action="">
+                        <input type="hidden" id="MemberLocation" name="MemberLocation" value="{$member.member_name|escape}">
+                        <input type="hidden" id="MemberLat" name="MemberLat" value="{$member.lat}">
+                        <input type="hidden" id="MemberLon" name="MemberLon" value="{$member.lon}">
+                        <input type="submit" class="button map-button text-center" id="MemberDrivingDirectionSubmit" name="MemberDrivingDirectionSubmit" value="Directions">
+                        <input type="submit" class="button map-button text-center" id="MemberDrivingDirectionSubmitMobile" name="MemberDrivingDirectionSubmit" value="Driving Directions">
+                    </form>
+                </div>
+     {/if}
+            </div>
+
+
+<!-- Attributes: amenitities, credit cards, etc -->
+            <div id="glm-member-detail-descr-row" class="small-12 columns">
+                {apply_filters('glm-member-db-front-members-detail-attributesTop', '', $member.id)}
+<!--                {if $featuredImage}
+                <div class="glm-member-detail-featured-image-wrapper small-12 columns">
+                    <img src="{$glmPluginMediaUrl}/images/large/{$featuredImage}">
+                    {if $featuredImageCaption}
+                    <div class="glm-member-detail-featured-image-caption">
+                        {$featuredImageCaption}
+                    </div>
+                    {/if}
+                </div>
+                {/if}-->
+                <div id="glm-member-detail-intro-desc">
+                    {if $member.short_descr && $settings.detail_show_short_descr}{$member.short_descr|nl2br}{/if}
+                </div>
+                <div id="glm-member-detail-fullprofile-toggle">Expand All</div>
+                <div id="glm-member-detail-data-container">
+                    {apply_filters('glm-member-db-front-members-detail-packages', '', $member.id)}
+                    <div id="glm-member-detail-description-toggle" class="glm-member-detail-content-toggle">Description</div>
+                    <div id="glm-member-detail-description-container" class="glm-member-detail-content-data">
+                        <div id="glm-member-detail-description" >
+                            {if $member.descr && $settings.detail_show_descr}
+                                {apply_filters('glm-member-db-front-members-detail-descriptionTop', '', $member.id)}
+                                {$member.descr|nl2br}
+                                {apply_filters('glm-member-db-front-members-detail-descriptionBottom', '', $member.id)}
+                            {/if}
+                        </div>
+                        <div class="glm-member-detail-sub-data-links row">
+                            <a class="glm-member-detail-content-toggle">Collapse</a>
+                            <a class="glm-member-detail-link-to-top">Back to top</a>
+                        </div>
+                    </div>
+
+                    {apply_filters('glm-member-db-front-members-detail-events', '', $member.id)}
+
+                    {apply_filters('glm-member-db-front-members-detail-couponsBefore', '', $member.id)}
+                    {if $settings.detail_show_coupons && $coupons}
+                    <div id="glm-member-detail-coupons-toggle" class="glm-member-detail-content-toggle">Coupons</div>
+                    <div id="glm-member-detail-coupons-container" class="glm-member-detail-content-data small-12">
+                        <a name="glm-member-detail-coupons"></a>
+                        <div class="glm-member-detail-sub-data-links row">
+                            <a class="glm-member-detail-content-toggle">Collapse</a>
+                            <a class="glm-member-detail-link-to-top">Back to top</a>
+                        </div>
+                    </div>
+                    {/if}
+                    {apply_filters('glm-member-db-front-members-detail-couponsAfter', '', $member.id)}
+
+                    {apply_filters('glm-member-db-front-members-detail-amenitiesBefore', '', $member.id)}
+                    {if $member.amenities && $settings.detail_show_amenities}
+                    <div id="glm-member-detail-amenities-toggle" class="glm-member-detail-content-toggle">Amenities & Services</div>
+                    <div id="glm-member-detail-amenities-container" class="glm-member-detail-content-data small-12">
+                        <table class="glm-member-detail-table">
+                            {foreach $member.amenities as $a}
+                            <tr>
+                                <td>
+                                    {$a.name}
+                                </td>
+                            </tr>
+                            {/foreach}
+                        </table>
+                        <div class="glm-member-detail-sub-data-links row">
+                            <a class="glm-member-detail-content-toggle">Collapse</a>
+                            <a class="glm-member-detail-link-to-top">Back to top</a>
+                        </div>
+                    </div>
+                    {/if}
+                    {apply_filters('glm-member-db-front-members-detail-amenitiesAfter', '', $member.id)}
+<!-- Not using credit cards for now
+                    {apply_filters('glm-member-db-front-members-detail-creditcardsBefore', '', $member.id)}
+                    {if $member.cc_type && $settings.detail_show_creditcards}
+                    <div id="glm-member-detail-creditcards-toggle" class="glm-member-detail-content-toggle">Credit Cards</div>
+                    <div id="glm-member-detail-creditcards-container" class="glm-member-detail-content-data small-12">
+                        <table class="glm-member-detail-table">
+                            <tr><th>Credit Cards Accepted:</th></tr>
+                        {foreach $member.cc_type.names as $c}
+                            <tr><td>{$c}</td></tr>
+                {/foreach}
+                        </table>
+                        <div class="glm-member-detail-sub-data-links row">
+                            <a class="glm-member-detail-content-toggle">Collapse</a>
+                            <a class="glm-member-detail-link-to-top">Back to top</a>
+                        </div>
+                    </div>
+                    {/if}
+                    {apply_filters('glm-member-db-front-members-detail-creditcardsAfter', '', $member.id)}
+-->
+                    {apply_filters('glm-member-db-front-members-detail-categoriesBefore', '', $member.id)}
+                    {if $member.categories && $settings.detail_show_categories}
+                    <div id="glm-member-detail-categories-toggle" class="glm-member-detail-content-toggle">Categories</div>
+                    <div id="glm-member-detail-categories-container" class="glm-member-detail-content-data small-12">
+                        <table class="glm-member-detail-table">
+<!--                            <tr><th>{$terms.term_member_cap} Categories</th></tr>-->
+                            {foreach $member.categories as $c}
+                            <tr>
+                                <td>
+                                    {if $c.parent_name}{$c.parent_name}: {/if}{$c.name}
+                                </td>
+                            </tr>
+                            {/foreach}
+                        </table>
+                        <div class="glm-member-detail-sub-data-links row">
+                            <a class="glm-member-detail-content-toggle">Collapse</a>
+                            <a class="glm-member-detail-link-to-top">Back to top</a>
+                        </div>
+                    </div>
+                    {/if}
+                    {apply_filters('glm-member-db-front-members-detail-categoriesAfter', '', $member.id)}
+                    {apply_filters('glm-member-db-front-members-detail-videoBefore', '', $member.id)}
+                    {if $member.video_url && $settings.detail_show_video}
+                    <div id="glm-member-detail-video-toggle" class="glm-member-detail-content-toggle">Video</div>
+                    <div id="glm-member-detail-video-container" class="glm-member-detail-content-data small-12">
+                        <table class="glm-member-detail-table">
+                            <div><h3 class="glm-member-detail-video-title">{$member.video_title}</h3></div>
+                            <div class="glm-member-detail-video-embed">{$member.video_embed}</div>
+                            <div class="glm-member-detail-video-descr"><p>{$member.video_descr}</p></div>
+                        </table>
+                        <div class="glm-member-detail-sub-data-links row">
+                            <a class="glm-member-detail-content-toggle">Collapse</a>
+                            <a class="glm-member-detail-link-to-top">Back to top</a>
+                        </div>
+                    </div>
+                    {/if}
+
+                    {apply_filters('glm-member-db-front-members-detail-videoAfter', '', $member.id)}
+
+                    {apply_filters('glm-member-db-front-members-detail-liveCamBefore', '', $member.id)}
+                    {if $member.live_cam_type.value!=1 && $member.live_cam_url && $settings.detail_show_live_cam}
+                    <div id="glm-member-detail-live-cam-toggle" class="glm-member-detail-content-toggle">{$terms.term_webcam_cap}</div>
+                    <div id="glm-member-detail-live-cam-container" class="glm-member-detail-content-data small-12">
+                        <table class="glm-member-detail-table">
+                            <div><h3 class="glm-member-detail-live-cam-title">{$member.live_cam_title}</h3></div>
+                        {if $member.live_cam_type.value == 2}
+                            <img width="auto" max-height="315" src="{$member.live_cam_url}">
+                        {/if}
+                            <div class="glm-member-detail-live-cam-descr"><p>{$member.live_cam_descr}</p></div>
+                        </table>
+                        <div class="glm-member-detail-sub-data-links row">
+                            <a class="glm-member-detail-content-toggle">Collapse</a>
+                            <a class="glm-member-detail-link-to-top">Back to top</a>
+                        </div>
+                    </div>
+                    {/if}
+
+                   {if $haveFiles}
+                    <div id='glm-member-detail-files-toggle' class='glm-member-detail-content-toggle'>Files</div>
+                    <div id='glm-member-detail-files-container' class='glm-member-detail-content-data small-12'>
+                        {foreach $files as $file}
+                            <a class="glm-file-detail" href="{$glmPluginMediaUrl}/files/{$file.file_name}" target="_blank">{if $file.caption}{$file.caption}{else}{$file.name}{/if}</a>
+                        {/foreach}
+                        <div class='glm-member-detail-sub-data-links row'>
+                            <a class='glm-member-detail-content-toggle'>Collapse</a>
+                            <a class='glm-member-detail-link-to-top'>Back to top</a>
+                        </div>
+                    </div>
+                    {/if}
+
+                    {apply_filters('glm-member-db-front-members-detail-liveCamAfter', '', $member.id)}
+
+                    {$customFields = apply_filters('get_glm_custom_fields','glm-member-db',$member.memberInfoId)}
+                    {if !empty($customFields[0].field_data)}
+                        <div id="glm-member-detail-hours-toggle" class="glm-member-detail-content-toggle">Hours</div>
+                        <div id="glm-member-detail-hours-container" class="glm-member-detail-content-data">
+                            <div id="glm-member-detail-hours" >
+
+                                {foreach $customFields as $field}
+                                    {if $field.field_data}
+                                        <div class="glm-member-detail-custom-field">
+                                            <div class="row">
+                                                <span class="glm-member-detail-custom-field-name small-12 medium-5 columns" >{$field.field_name}</span>
+                                                <span class="glm-member-detail-custom-field-data small-12 medium-7 columns">{$field.field_data}</span>
+                                            </div>
+
+                                        </div>
+                                    {/if}
+                                {/foreach}
+                            </div>
+
+                            <div class="glm-member-detail-sub-data-links row">
+                                <a class="glm-member-detail-content-toggle">Collapse</a>
+                                <a class="glm-member-detail-link-to-top">Back to top</a>
+                            </div>
+                        </div>
+                    {/if}
+
+                    {apply_filters('glm-member-db-front-members-detail-imageGalleryBefore', '', $member.id)}
+                    {if $settings.detail_show_imagegallery && $haveImageGallery}
+                    <div id="glm-member-detail-images-toggle" class="glm-member-detail-content-toggle">Photos</div>
+                    <div id="glm-member-detail-images-container" class="glm-member-detail-content-data small-12">
+                        {apply_filters('glm-member-db-front-members-detail-galleryTop', '', $member.id)}
+<!--                        <h2>Photo Gallery</h2>-->
+
+                            <ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">
+                        {foreach $imageGallery as $i}
+                                <li>
+                                    <a class="glm-member-detail-images-thumb fancybox" data-fancybox="images" rel="gallery1" href="{$glmPluginMediaUrl}/images/large/{$i.file_name}" style="background-image: url('{$glmPluginMediaUrl}/images/small/{$i.file_name}')">
+                                        <img class="glm-member-filler-image" src="{$assetsUrl}/filler_s.gif" alt="{$i.caption}">
+                                    </a>
+                                </li>
+                        {/foreach}
+                            </ul>
+                        {apply_filters('glm-member-db-front-members-detail-galleryBottom', '', $member.id)}
+                        <div class="glm-member-detail-sub-data-links row">
+                            <a class="glm-member-detail-content-toggle">Collapse</a>
+                            <a class="glm-member-detail-link-to-top">Back to top</a>
+                        </div>
+                    </div>
+                    {/if}
+                    {apply_filters('glm-member-db-front-members-detail-imageGalleryAfter', '', $member.id)}
+
+                    {apply_filters('glm-member-db-front-members-detail-dataBottom','',$member.id)}
+                </div>
+            </div>
+            {apply_filters('glm-member-db-front-members-detail-attributesBottom', '', $member.id)}
+<!-- Image Gallery -->
+
+        </div>
+    </div>
+    {apply_filters('glm-member-db-front-members-detail-pageBottom', '', $member.id)}
+
+    <div id="findingYourLocationDialog" title="Your present location">
+        <p>
+            We would like to lookup your present location so we can provide accurate directions.
+        </p><p>
+            Your browser may ask for your permission to determine your location
+            (possibly at the top of this page).
+        </p><p>
+            If you agree, we will use your current location as the starting point for
+            directions. If you don't agree, you may enter a starting location when the map is displayed.
+        </p>
+    </div>
+
+    <script type="text/javascript">
+        {apply_filters('glm-member-db-front-members-detail-jqueryScriptTop', '', $member.id)}
+
+        jQuery(document).ready(function($) {
+
+            // Dialog box to show when submitting checkout page
+            $( "#findingYourLocationDialog" ).dialog({
+                autoOpen: false,
+                width: 600
+            });
+            $( "#lookingUpYourLocationDialog" ).dialog({
+                autoOpen: false,
+                width: 600
+            });
+
+            var trackToConsole = true;         // Send debug/progress messages to developers console (Firefox)
+            var trackPositionInterval = 60000;  // Time interval for getting user's current geolocation - 1 Min
+            var highAccuracyPoisition = true;   // Request high-accuracy user geolocation from user's device
+            var postionTimeout = 15000;         // Maximum amount of time we'll wait for geolocation result - 15 Sec
+
+            // Process form for sending user to Google Maps for driving directions
+            $("#MemberDrivingDirectionsForm").submit(function(){
+
+                var stopGeolocation = false;
+                var myCurrentLocation = false;
+
+                // If we already have a location
+                if (myCurrentLocation) {
+                    sendToGoogleMaps(myCurrentLocation);
+                } else {
+
+                    // We don't yet have a location, so try to get it
+                    if (navigator.geolocation) {
+
+                        $( "#findingYourLocationDialog" ).dialog("open");
+
+                        // Get the user's location
+                        navigator.geolocation.getCurrentPosition(function(position) {
+
+                            // Save their current location
+                            myCurrentLocation = {
+                                  lat: position.coords.latitude,
+                                  lon: position.coords.longitude
+                            };
+
+                            $( "#findingYourLocationDialog" ).dialog("close");
+                            sendToGoogleMaps(myCurrentLocation);
+
+                        // If we can't get the location, then go without it
+                        },
+                        function(err) {
+                            $( "#findingYourLocationDialog" ).dialog("close");
+                            sendToGoogleMaps(false);
+                        },
+                        {
+                            enableHighAccuracy: highAccuracyPoisition,
+                            timeout:            postionTimeout,
+                            maximumAge:         trackPositionInterval - 100     // Allows cached position resulting from other requests during interval
+                        });
+
+                    }
+
+                }
+
+                return false;
+
+            });
+
+            function sendToGoogleMaps(myLocation) {
+                var lat = plusifyMyValue(jQuery("#MemberLat").val());
+                var lon = plusifyMyValue(jQuery("#MemberLon").val());
+                var dest = '&destination=' + lat + '%2C+' + lon;
+
+                var origin = '';
+                if (myLocation) {
+                    var myLat = plusifyMyValue(myLocation.lat);
+                    var myLon = plusifyMyValue(myLocation.lon);
+                    origin = '&origin=' + myLat + '%2C+' + myLon;
+                }
+
+                var url = "https://www.google.com/maps/dir/?api=1" + origin + dest;
+                window.open(url, '_blank');
+            }
+
+            function plusifyMyValue(v) {
+                if (v > 0) {
+                    v = '+' + v;
+                }
+                return v;
+            }
+
+            // change the member detail photos grid structure depending
+            var images_container = $("#glm-member-detail-images-container");
+            // Check if Foundation exists first
+            if ( typeof window.Foundation != 'undefined' ) {
+                var foundation_version = window.Foundation.version;
+
+                if( foundation_version.charAt(0) === "6" ){
+                    images_container.children('ul').removeClass('small-block-grid-1 medium-block-grid-2 large-block-grid-3');
+                    images_container.children('ul').addClass('row small-up-1 medium-up-2 large-up-3');
+                    images_container.children('ul').find('li').addClass('column');
+                }
+            }
+
+            // Replace all non-number special characters in a phone number with the designated infix
+            {if $settings.phone_infix}
+                //var processedPhone = $('.glm-member-detail-contact-phone .glm-field-value').text().trim().replace(/[^a-zA-Z0-9 ]/g, '{$settings.phone_infix}');
+                //$('.glm-member-detail-contact-phone .glm-field-value').text(processedPhone);
+            {/if}
+
+            // Check a hidden field to see if this is a page refresh (doesn't detect forced reload)
+            var isRefresh = $("#glm-member-detail-click-logged").val();
+
+            // Also check the HTML 5 performance.navigation.type value (1 = reload, 2 = via history)
+            if(window.performance && (performance.navigation.type  == 1 || performance.navigation.type  == 2)) {
+                isRefresh = 1;
+            }
+
+            // If this is not a refresh or reload, send AJAX action to record click.
+            if (isRefresh == 0) {
+                $.ajax({
+                   url: "{$ajaxUrl}?action=glm_members_admin_ajax&glm_action=memberDetailClick&memberId={$member.member_pointer}&memberSlug={$member.member_slug}"
+                });
+                $("#glm-member-detail-click-logged").val(1);
+            }
+
+            // Processes click-through counts for website links
+            $('#glm-member-detail-website-link').on('click', function() {
+
+                // Get member ID
+                var memberId = $(this).attr('data-member-id');
+                var memberSlug = $(this).attr('data-member-slug');
+
+                // Send AJAX action to record click.
+                $.ajax({
+                   url: "{$ajaxUrl}?action=glm_members_admin_ajax&glm_action=memberClickThrough&memberId=" + memberId + "&memberSlug=" + memberSlug
+                });
+
+            });
+
+            // Automatically zoom and expand the relevant
+            $('html').addClass('glmassociatememberdetail glmassociatetop');
+            if ("{$expanded}" != "") {
+                var expandTarget = "glm-member-detail-{$expanded}";
+                if ($("#"+expandTarget+"-container").length) {
+                    $("#"+expandTarget+"-container").show("fast", "swing",  function() {});
+                    $("#"+expandTarget+"-toggle").addClass("selected");
+                    fullProfileCheck(expandTarget);
+                    $('html, body').animate({
+                        scrollTop: $("#"+expandTarget+"-toggle").offset().top-10
+                    }, 500);
+                }
+            }
+
+            $("a.glm-member-detail-images-thumb").fancybox({
+
+                 helpers: {
+                    overlay: { locked: false },
+                     title: { type: 'inside'},
+                },
+                afterLoad: function(){
+                    this.title = $(this.element).find('img').attr('alt');
+                }
+            });
+
+            $("a.glm-member-detail-images-thumb").click(function(e) {
+                e.preventDefault();
+            });
+
+            $('.glm-member-detail-link-to-top').click(function () {
+                $('body,html').animate({
+                    scrollTop: $("#glm-member-detail-takeback-mini").offset().top-10
+                }, 75);
+            });
+
+            // Open the appropriate section if a link is clicked
+            $('.link-open-detail-content-data').click(function(e) {
+                var target = $(this).attr("id").slice(0, -5);
+                // e.g.: #glm-member-detail-packages-link
+                $("#"+target+"-container").show("fast", "swing",  function() {});
+                $("#"+target+"-toggle").addClass("selected");
+                fullProfileCheck(target);
+                $('html, body').animate({
+                    scrollTop: $("#"+target+"-toggle").offset().top-{$settings.detail_top_offset_autoscroll}
+                }, 500);
+            });
+
+            // Open the following sections by default
+            if ($(window).width() >= 1024) {
+
+                if( $("#glm-member-detail-packages-container").length > 0 && $("#glm-member-detail-packages-toggle").length > 0){
+                    $("#glm-member-detail-packages-container").slideToggle("fast", "swing",  function() {});
+                    $("#glm-member-detail-packages-toggle").toggleClass("selected");
+                }
+
+                if( $("#glm-member-detail-images-container").length > 0 && $("#glm-member-detail-description-toggle").length > 0){
+                    $("#glm-member-detail-images-container").slideToggle("fast", "swing",  function() {});
+                    $("#glm-member-detail-images-toggle").toggleClass("selected");
+                }
+
+            }
+
+            // Open or close the appropriate section if a toggle is clicked
+            $(".glm-member-detail-content-toggle").not("#glm-member-detail-fullprofile-toggle").click(function() {
+                if($(this).parents('.glm-member-detail-sub-data-links').length) {
+                    var target = $(this).parent().parent().attr("id").slice(0, -10);
+                } else {
+                    var target = $(this).attr("id").slice(0, -7);
+                }
+                $("#"+target+"-container").slideToggle("fast", "swing",  function() {});
+                $("#"+target+"-toggle").toggleClass("selected");
+                fullProfileCheck(target);
+            });
+
+            // Change the toggle button based on whether all the content sections are expanded
+            function fullProfileCheck(target) {
+                if ($("#glm-member-detail-data-container > .glm-member-detail-content-toggle.selected").length == $("#glm-member-detail-data-container > .glm-member-detail-content-toggle").length) {
+                    $("#glm-member-detail-fullprofile-toggle").addClass("selected");
+                } else {
+                    $("#glm-member-detail-fullprofile-toggle").removeClass("selected");
+                }
+            }
+
+            // Open or close every data container if the fullprofile toggle is clicked
+            $("#glm-member-detail-fullprofile-toggle").click(function() {
+                if ($(this).hasClass("selected")) {
+                    $(".glm-member-detail-content-data").slideUp(175, "swing",  function() {});
+                    $(".glm-member-detail-content-toggle").removeClass("selected");
+                    $(this).toggleClass("selected");
+                } else {
+                    $(".glm-member-detail-content-data").not($(this)).slideDown(350, "swing",  function() {});
+                    $(".glm-member-detail-content-toggle").addClass("selected");
+                    $(this).toggleClass("selected");
+                }
+            });
+
+            // Expand the takeback button on hover. Progressively add ellipses when clicked and loading
+            $("#glm-member-detail-takeback-mini").click(function() {
+                $("#glm-member-detail-takeback-mini span").html("Loading");
+                $("#glm-member-detail-takeback-mini").css('min-width','170px');
+                var count = 0;
+                setInterval(function(){
+                    count++;
+                    var dots = new Array(count % 5).join(' .');
+                    $('#glm-member-detail-takeback-mini span').html("Loading ." + dots);
+                  }, 500);
+            });
+
+
+    {if $settings.detail_show_map}
+
+            // Expand/contract map container and change the toggle button
+            $("#glm-member-detail-map-button").click(function() {
+                var mapC = "#glm-locationMap-container";
+                var map = "#glm-locationMap";
+                var mapNewH = 0;
+                var mapOverflow = 'hidden';
+                var mapBtnTxt = 'view map';
+                if ($(mapC).height() == 0) {
+                    mapNewH = 140;
+                    mapV = 'visible';
+                    mapBtnTxt = 'hide map'
+                }
+                $(mapC).animate({
+                    overflow: mapOverflow,
+                    height: mapNewH
+                }, 140, "swing", function() {
+
+                });
+                $(this).html(mapBtnTxt);
+            });
+
+      {if $settings.selected_map_interface == 1}
+
+            /*
+             *  Leaflet Map
+             *  API reference: https://leafletjs.com/reference-1.3.2.html
+             */
+
+            // Get member location if available, otherwise use this site's default locatgion
+            var myLocation = false;
+        {if $member.lat != 0 && $member.lon != 0}
+            var memberLat = {$member.lat};
+            var memberLon = {$member.lon};
+        {else}
+            var memberLat = {$settings.maps_default_lat}};
+            var memberLon = {$settings.maps_default_lon}};
+        {/if}
+
+            function initMap() {
+
+                var leafletMap = L.map('LeafletMapContainer').setView([memberLat, memberLon], {$settings.maps_default_zoom});
+                var leafletTileServer = '{$settings.leaflet_tile_server}/{$settings.leaflet_tile_server_key}/' + {literal}'{z}/{x}/{y}.png'{/literal};
+                var leafletMinZoom = 5;
+                var leafletMaxZoom = 18;
+                var geocoder;
+
+
+                // Tile server
+                L.tileLayer(leafletTileServer, {
+                    attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery Â© <a href="https://www.gaslightmedia.com/">Gaslight Media</a>',
+                    minZoom: leafletMinZoom,
+                    maxZoom: leafletMaxZoom,
+                    id: 'nothot'
+                }).addTo(leafletMap);
+
+                var loadingControl = L.Control.loading({
+                    separate: true,
+                    delayIndicator: 500
+                });
+                leafletMap.addControl(loadingControl);
+
+                // Marker
+                var leafletMarker = L.marker([memberLat, memberLon]).addTo(leafletMap);
+
+            }
+
+      {/if}
+
+      {if $settings.selected_map_interface == 2}
+
+            /*
+             * Google Maps
+             *  API reference: https://developers.google.com/maps/documentation/javascript/reference
+             */
+
+            var myLocation = false;
+         {if $member.lat != 0 && $member.lon != 0}
+            var memberlocation = new google.maps.LatLng({$member.lat}, {$member.lon});
+         {else}
+            var memberlocation = new google.maps.LatLng({$settings.maps_default_lat}, {$settings.maps_default_lon});
+         {/if}
+
+            function initMap() {
+
+                // Set default - Need to make this configurable
+                var map = new google.maps.Map(document.getElementById('glm-locationMap'), {
+                       zoom: {$settings.maps_default_zoom},
+                       center: memberlocation,
+                    disableDefaultUI: false,
+                    mapTypeId: google.maps.MapTypeId.MAP,
+                });
+
+                // Create a marker for this member
+         {if $member.lat != 0 && $member.lon != 0}
+                var marker = new google.maps.Marker({
+                    map: map,
+                    position: new google.maps.LatLng({$member.lat}, {$member.lon}),
+                    draggable: false,
+                    animation: google.maps.Animation.DROP,
+                    title: '{$member.member|escape}'
+                });
+         {/if}
+
+            }
+
+            // Load map
+            google.maps.event.addDomListener(window, 'load', initMap);
+
+      {/if}
+
+    {/if} {*detail_show_map*}
+
+            $(window).load(function(){
+                initMap();
+            });
+
+        }); // jquery
+
+        {apply_filters('glm-member-db-front-members-detail-jqueryScriptBottom', '', $member.id)}
+
+
+
+    </script>
+
+{else}
+        <p>For some reason the specified {$terms.term_member} was not found. Please try again.</p>
+{/if}
+
+
+{include file='front/footer.html'}
index 0340103..e6662d6 100755 (executable)
@@ -65,7 +65,7 @@
                     <div id="glm-member-list-filters-close" class="button glm-button glm-member-list-filters-toggle">Close</div>
                 {/if}
                 <form action="{$thisUrl}?glm_action=list#glm-member-list-filters-button" method="post" enctype="multipart/form-data">
-                    {if isset($smarty.request.s)}<input type="hidden" name="s" value="{$smarty.request.s|escape}">{/if}
+                    {if isset($wpSearch)}<input type="hidden" name="s" value="{$wpSearch|escape:quotes}">{/if}
                     <div class="glma-small-12 glma-columns glm-member-search glm-member-entry-container glm-member-container">
                         {apply_filters('glm-member-db-front-members-list-searchFormTop', '')}
                         <div>
 
                 {if $showSettings.list_show_search_alpha && !$isSearchPage}
                     <div class="glm-alpha-links">
-                        <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if isset($smarty.request.s) && $smarty.request.s}&s={$smarty.request.s|escape}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}#glm-member-list-filters-button" class="glm-alpha-link{if !$alphaSelected} glm-alpha-link-selected{/if}">All</a>
+                        <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if $wpSearch}&s={$wpSearch|escape:'html'}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}#glm-member-list-filters-button" class="glm-alpha-link{if !$alphaSelected} glm-alpha-link-selected{/if}">All</a>
                         {foreach $alphaList as $a}
-                            <a href="{$thisUrl}?glm_action=list&alpha={$a.alpha}&textSearch={$textSearch}{if isset($smarty.request.s) && $smarty.request.s}&s={$smarty.request.s|escape}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}#glm-member-list-filters-button" class="glm-alpha-link{if $a.default} glm-alpha-link-selected{/if}">{$a.alpha}</a>
+                            <a href="{$thisUrl}?glm_action=list&alpha={$a.alpha}&textSearch={$textSearch}{if isset($wpSearch) && $wpSearch}&s={$wpSearch|escape:'html'}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}#glm-member-list-filters-button" class="glm-alpha-link{if $a.default} glm-alpha-link-selected{/if}">{$a.alpha}</a>
                         {/foreach}
                     </div>
                 {/if}
                     {if ( $prevStart || $nextStart ) && !$settings.list_ajax_pagination}
                         <br>
                         <div class="paging-container">
-                            <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if isset($smarty.request.s)}&s={$smarty.request.s|escape}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&citySearch={$citySearchSelected}&pageSelect=Previous&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}#glm-member-list-filters-button" class="glm-alpha-link" {if !$prevStart} style="pointer-events: none; opacity: 0.5;"{/if}>< Previous page</a>
-                            <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if isset($smarty.request.s)}&s={$smarty.request.s|escape}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&citySearch={$citySearchSelected}&pageSelect=Next&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}#glm-member-list-filters-button" class="glm-alpha-link" {if !$nextStart} style="pointer-events: none; opacity: 0.5;"{/if}>Next page ></a>
+                            <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if $wpSearch}&s={$wpSearch|escape:'html'}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&citySearch={$citySearchSelected}&pageSelect=Previous&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}#glm-member-list-filters-button" class="glm-alpha-link" {if !$prevStart} style="pointer-events: none; opacity: 0.5;"{/if}>< Previous page</a>
+                            <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if $wpSearch}&s={$wpSearch|escape:'html'}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&citySearch={$citySearchSelected}&pageSelect=Next&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}#glm-member-list-filters-button" class="glm-alpha-link" {if !$nextStart} style="pointer-events: none; opacity: 0.5;"{/if}>Next page ></a>
                         </div>
                         <br>
                     {/if}
                         loading...
                     </div>
                 {else}
-                    {if $view == list || $view == map}
-                        {include file='front/members/listTypeList.html'}
+                    {if $view == 'list' || $view == 'map'}
+                        {include file="front/members/{$settings.list_view_file}.html"}
                     {/if}
-                    {if $view == grid}
-                        {include file='front/members/listTypeGrid.html'}
+                    {if $view == 'grid'}
+                        {include file="front/members/{$settings.grid_view_file}.html"}
                     {/if}
-                    {if $view == uptravel}
+                    {if $view == 'uptravel'}
                         {include file='front/members/listTypeUptravel.html'}
                     {/if}
                 {/if}
                         {if ( $prevStart || $nextStart ) && !$settings.list_ajax_pagination}
                             <br>
                             <div class="paging-container">
-                                <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if isset($smarty.request.s)}&s={$smarty.request.s|escape}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&citySearch={$citySearchSelected}&pageSelect=Previous&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}#glm-member-list-filters-button" class="glm-alpha-link" {if !$prevStart} style="pointer-events: none; opacity: 0.5;"{/if}>< Previous page</a>
-                                <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if isset($smarty.request.s)}&s={$smarty.request.s|escape}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&citySearch={$citySearchSelected}&pageSelect=Next&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}#glm-member-list-filters-button" class="glm-alpha-link" {if !$nextStart} style="pointer-events: none; opacity: 0.5;"{/if}>Next page ></a>
+                                <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if $wpSearch}&s={$wpSearch|escape:'html'}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&citySearch={$citySearchSelected}&pageSelect=Previous&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}#glm-member-list-filters-button" class="glm-alpha-link" {if !$prevStart} style="pointer-events: none; opacity: 0.5;"{/if}>< Previous page</a>
+                                <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}{if $wpSearch}&s={$wpSearch|escape:'html'}{/if}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&citySearch={$citySearchSelected}&pageSelect=Next&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}#glm-member-list-filters-button" class="glm-alpha-link" {if !$nextStart} style="pointer-events: none; opacity: 0.5;"{/if}>Next page ></a>
                             </div>
                             <br>
                         {/if}
diff --git a/views/front/members/listTypeGridA.html b/views/front/members/listTypeGridA.html
new file mode 100644 (file)
index 0000000..14188aa
--- /dev/null
@@ -0,0 +1,82 @@
+{* List Type Grid *}
+<ul class="row">
+    {foreach $members as $member}
+        <li class="glm-member-list-record columns small-12 medium-6 large-4">
+            <a class="anchorWrapper"{if $showSettings.list_show_detail_link && !$member.has_no_profile.value} href="{$siteBaseUrl}{$settings.canonical_member_page}/{$member.member_slug}/"{else} style="cursor: default;"{/if}>
+                {apply_filters('glm-member-db-front-members-list-memberAbove', '', $member.member_pointer)}
+                <div class="glm-member-db-border-wrap">
+                    {apply_filters('glm-member-db-front-members-list-memberTop', '', $member.member_pointer)}
+
+                    <div class="glm-member-list-image-wrapper"{if $settings.list_show_detail_link && !$member.has_no_profile.value} href="{$siteBaseUrl}{$settings.canonical_member_page}/{$member.member_slug}/"{/if}>
+
+                        {if $member.featured}
+                            <div class="glm-member-list-featured-tag">
+                                featured
+                            </div>
+                        {/if}
+
+                        {if $member.logo && $showSettings.list_show_logo}
+                            <div class="glm-member-list-has-image">
+                                {apply_filters('glm-member-db-front-members-list-memberImageTop', '', $member.member_pointer)}
+                                <img class="glm-member-list-image" src="{$glmPluginMediaUrl}/images/grid/{$member.logo}">
+                            </div>
+                        {elseif $showSettings.list_show_logo_filler}
+                            <div class="glm-member-list-has-image">
+                                {apply_filters('glm-member-db-front-members-list-memberImageTop', '', $member.member_pointer)}
+                                <img class="glm-member-list-image-filler" src="{$assetsUrl}/filler_s.gif">
+                            </div>
+                        {else}
+                            <div class="glm-member-list-missing-image"></div>
+                        {/if}
+                    </div>
+                    <div class="glm-member-list-info-wrapper">
+                        <h4 class="glm-member-title"> {$member.member} </h4>
+                        <div class="glm-member-list-description small-12 columns">
+                            <div>
+                            {apply_filters('glm-member-db-front-members-list-memberDescriptionTop', '', $member.member_pointer)}
+                            {if $member.short_descr && $showSettings.list_show_short_descr}
+                                {$member.short_descr|nl2br}
+                            {/if}
+                            {apply_filters('glm-member-db-front-members-list-memberDescriptionBottom', '', $member.member_pointer)}
+                            </div>
+                        </div>
+                        {if $member.city}
+                            <div class="glm-member-list-address-container">
+                                <span class="member-city">{$member.city}{if $member.state.value}{/if}</span><br>
+                            </div>
+                        {/if}
+                        {if $settings.memb_info_location && $member.region && $showSettings.list_show_region}
+                            <div class="glm-member-list-region-container">
+                                Region: {$member.region}
+                            </div>
+                        {/if}
+                        {if ($settings.memb_info_contact && $member.phone && $showSettings.list_show_phone) || ($settings.memb_info_contact && $member.toll_free && $showSettings.list_show_tollfree)}
+                            <div class="glm-member-list-phone-container">
+                                {if $member.phone && $showSettings.list_show_phone}<span class="glm-member-db-phone">{apply_filters('glm_associate_phone_filter', $member.phone)} </span>{/if}
+                            </div>
+                        {/if}
+                    </div>
+                </div> {* End of glm-member-db-border *}
+            </a>
+            <div class="glm-member-list-sub-links">
+                <ul>
+                    {if $member.url && $showSettings.list_show_url}<li><a href="{$member.url}"{if $showSettings.list_show_url_newtarget} target="_blank"{/if}>Website</a></li>{/if}
+                    {* {if $member.phone && $showSettings.list_map_show_phone}<a href="tel:+{$member.phone}">Phone</a>{/if} *}
+                    {$packageLink = apply_filters('glm-member-db-front-members-list-linksBottom', '', $member.member_pointer)}
+                    {if $packageLink}<li>{$packageLink}</li>{/if}
+                    {if $member.reservation_url}<li><a target="_blank" href="{$member.reservation_url}">Reserve Now</a></li>{/if}
+
+                    {if $showSettings.list_show_live_cam}
+                        {if $member.live_cam_type.name == "Web Page" && $member.live_cam_url && $showSettings.list_show_live_cam}
+                            <li><a target="_blank" href="{$member.live_cam_url}">{$terms.term_webcam_cap}</a></li>
+                        {else if $member.live_cam_type.name == "Camera Image"}
+                            <li><a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$member.member_slug}/{if $settings.enable_multiple_profiles}{$member.id}/{/if}?expanded=live-cam">{$terms.term_webcam_cap}</a></li>
+                        {/if}
+                    {/if}
+
+                    {apply_filters('glm-member-db-front-members-list-memberBelow', '', $member.member_pointer)}
+                </ul>
+            </div>
+        </li> {* end of li.glm-member-list-record *}
+    {/foreach} {*$members*}
+</ul>
diff --git a/views/front/members/listTypeListA.html b/views/front/members/listTypeListA.html
new file mode 100644 (file)
index 0000000..bd1efe5
--- /dev/null
@@ -0,0 +1,167 @@
+{* List Type View *}
+
+{foreach $members as $member}
+
+    {apply_filters('glm-member-db-front-members-list-memberAbove', '', $member.member_pointer)}
+    <div class="glm-member-list-container glm-member-container glma-small-12 glma-columns {if $member.featured}featured{/if}">
+
+        {apply_filters('glm-member-db-front-members-list-memberTop', '', $member.member_pointer)}
+        {if $member.featured}
+            <div class="glm-member-list-featured-tag">
+                featured
+            </div>
+        {/if}
+
+        {* Member Logo - Medium and up *}
+
+        <div class="glm-member-list-data glma-small-12 glma-columns">
+            {if $member.logo && $showSettings.list_show_logo}
+                <div class="glm-member-list-image-wrapper glma-right glma-small-12 glma-medium-4 glma-columns {if !$settings.list_logo_for_mobile}mobile-hide{/if}">
+                    {apply_filters('glm-member-db-front-members-list-memberImageTop', '', $member.member_pointer)}
+                    <div class="glm-member-list-image-border clearfix">
+                        <img src="{$glmPluginMediaUrl}/images/{$settings.list_logo_size}/{$member.logo}">
+                    </div>
+               </div>
+            {elseif $showSettings.list_show_logo_filler}
+                <div class="glm-member-list-image-wrapper glma-right glma-small-12 glma-medium-4 glma-columns {if !$settings.list_logo_for_mobile}mobile-hide{/if}">
+                    {apply_filters('glm-member-db-front-members-list-memberImageTop', '', $member.member_pointer)}
+               </div>
+            {/if}
+            <div class="glm-member-list-active-info glma-small-12 glma-medium-8 glma-columns glma-small-right glma-medium-left ">
+
+                {apply_filters('glm-member-db-front-members-list-memberInfoTop', '', $member.member_pointer)}
+
+                <h4 class="glm-member-title">
+                    {if $showSettings.list_show_detail_link && !$member.has_no_profile.value}
+                        <a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$member.member_slug}/{if $settings.enable_multiple_profiles}{$member.id}/{/if}">{$member.member}</a>
+                    {else}
+                        {$member.member}
+                    {/if}
+                </h4>
+                {if $showSettings.list_show_address}
+                    <div class="glm-member-list-address-wrapper">
+
+                        {apply_filters('glm-member-db-front-members-list-memberAddressTop', '', $member.member_pointer)}
+
+                        {if $showSettings.list_show_street}
+                            {if $member.addr1 && $showSettings.list_show_address}<div>{$member.addr1}</div>{/if}
+                            {if $member.addr2 && $showSettings.list_show_address}<div>{$member.addr2}</div>{/if}
+                        {/if}
+                        {if $settings.memb_info_location && $showSettings.list_show_citystatezip}
+                            <div>
+                                {if $member.city}
+                                    <span>{$member.city}{if $member.state.value}, {/if}</span>
+                                {/if}
+                                {if $member.state.value}
+                                    <span>{$member.state.value}</span>
+                                {/if}
+                                {if $member.zip}
+                                    {$member.zip}
+                                {/if}
+                            </div>
+                        {/if}
+                        {if $member.country.name && $showSettings.list_show_country}
+                            <div>{$member.country.name}</div>
+                        {/if}
+
+                        {apply_filters('glm-member-db-front-members-list-memberAddressBottom', '', $member.member_pointer)}
+
+                    </div>
+                {/if}
+
+                {apply_filters('glm-member-db-front-members-list-memberDetailTop', '', $member.member_pointer)}
+
+                {if ($settings.memb_info_contact && $member.phone && $showSettings.list_show_phone) || ($settings.memb_info_contact && $member.toll_free && $showSettings.list_show_tollfree)}
+                    <div>
+                        {if $member.phone && $showSettings.list_show_phone}<span class="glm-member-db-phone">Phone: {apply_filters('glm_associate_phone_filter', $member.phone)} </span>{/if}
+                        {if $member.toll_free && $showSettings.list_show_tollfree}<span class="glm-member-db-phone-tollfree">{apply_filters('glm_associate_phone_filter', $member.toll_free)}</span>{/if}
+                    </div>
+                {/if}
+                {if $settings.memb_info_location && $member.region && $showSettings.list_show_region}<div><b>Region:</b> {$member.region}</div>{/if}
+
+                <div class="glm-member-list-links">
+
+                    {apply_filters('glm-member-db-front-members-list-memberLinksTop', '', $member.member_pointer)}
+
+                    {if $member.url && $showSettings.list_show_url}<a class='glm-member-list-website-link' data-member-id="{$member.member_pointer}" data-member-slug="{$member.member_slug}" href="{$member.url}"{if $showSettings.list_show_url_newtarget} target="_blank"{/if} >Visit Website</a>{/if}
+                    {if $member.email && $showSettings.list_show_email}<a href="mailto:{$member.email}">Email</a>{/if}
+                    {if $member.reservation_url}<a target="_blank" href="{$member.reservation_url}">Reserve Now</a>{/if}
+                    {if $settings.list_show_live_cam}
+                        {if $member.live_cam_type.name == "Web Page" && $member.live_cam_url && $settings.list_show_live_cam}
+                            <a target="_blank" href="{$member.live_cam_url}">{$terms.term_webcam_cap}</a>
+                        {else if $member.live_cam_type.name == "Camera Image"}
+                            <a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$member.member_slug}/{if $settings.enable_multiple_profiles}{$member.id}/{/if}?expanded=live-cam">{$terms.term_webcam_cap}</a>
+                        {/if}
+                    {/if}
+
+                    {apply_filters('glm-member-db-front-members-list-linksBottom', '', $member.member_pointer)}
+
+                </div>
+                <div class="glm-member-db-socials">
+
+                   {apply_filters('glm-member-db-front-members-social-list', '', $member.member_pointer)}
+
+                </div>
+
+                <div class="glm-member-list-description glma-small-12 glma-columns">
+                    <div>
+
+                    {apply_filters('glm-member-db-front-members-list-memberDescriptionTop', '', $member.member_pointer)}
+
+                    {if $member.short_descr && $showSettings.list_show_short_descr}
+                        {$member.short_descr|nl2br}
+                        {if $showSettings.list_show_detail_link && !$member.has_no_profile.value}
+                            <a href="{$siteBaseUrl}{$settings.canonical_member_page}/{$member.member_slug}/{if $settings.enable_multiple_profiles}{$member.id}/{/if}">More</a>
+                        {/if}
+                    {/if}
+
+                    {apply_filters('glm-member-db-front-members-list-memberDescriptionBottom', '', $member.member_pointer)}
+
+                    </div>
+                    <div class="glm-member-list-items">
+                        {if isset($member.categories) && $member.categories && $showSettings.list_show_categories}
+                            <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>
+                        {/if}
+                        {if $member.cc_type && $showSettings.list_show_creditcards}
+                            <b>Credit Cards Accepted:</b>
+                            <ul>
+                                {foreach $member.cc_type.names as $c}
+                                    <li>{$c}</li>
+                                {/foreach}
+                            </ul>
+                        {/if}
+                        {if isset($member.categories) && $member.amenities && $showSettings.list_show_amenities}
+                            <b>{$terms.term_member_cap} Amenities</b>
+                            <ul>
+                                {foreach $member.amenities as $A}
+                                    <li>
+                                        {$A.name}
+                                    </li>
+                                {/foreach}
+                            </ul>
+                        {/if}
+                    </div>
+                </div>
+
+                {apply_filters('glm-member-db-front-members-list-memberDetailBottom', '', $member.member_pointer)}
+
+            </div>
+
+            {apply_filters('glm-member-db-front-members-list-memberDataBelow', '', $member.member_pointer)}
+
+        </div>
+
+        {apply_filters('glm-member-db-front-members-list-memberBelow', '', $member.member_pointer)}
+
+    </div>
+
+{/foreach} {* members *}
+
+{apply_filters('glm-member-db-front-members-list-memberBottom', '', $member.member_pointer)}