Add County to even locations.
authorSteve Sutton <steve@gaslightmedia.com>
Thu, 14 Feb 2019 11:05:53 +0000 (06:05 -0500)
committerSteve Sutton <steve@gaslightmedia.com>
Thu, 14 Feb 2019 11:05:53 +0000 (06:05 -0500)
Add new db fields for county.
Add new db fields for search options.
WIP for event form.

12 files changed:
classes/data/dataLocations.php
classes/data/dataManagement.php
index.php
models/admin/events/list.php
models/front/events/list.php
setup/databaseScripts/create_database_V0.1.13.sql [deleted file]
setup/databaseScripts/create_database_V0.1.14.sql [new file with mode: 0644]
setup/databaseScripts/dbVersions.php
setup/databaseScripts/update_database_V0.1.14.sql [new file with mode: 0644]
views/admin/events/editLocation.html
views/admin/management/events.html
views/front/events/searchForm.html

index 4f3066e..34908ed 100644 (file)
@@ -174,6 +174,18 @@ class GlmDataEventsLocations extends GlmDataAbstract
                 'use' => 'a'
             ),
 
+            // County - References main plugin county table
+            'county' => array (
+                'field' => 'county',
+                'type' => 'pointer',
+                    'p_table' => GLM_MEMBERS_PLUGIN_DB_PREFIX . 'counties',
+                    'p_field' => 'name',
+                    'p_orderby' => 'name',
+                    'p_blank' => false,
+                    'force_list' => true,
+                'use' => 'a'
+            ),
+
             // Country
             'country' => array (
                 'field' => 'country',
index 6fd7e2f..9ea1580 100644 (file)
@@ -297,6 +297,14 @@ class GlmDataEventsManagement extends GlmDataAbstract
                 'use'     => 'a'
             ),
 
+            // Show category in search form
+            'show_search_category' => array(
+                'field'   => 'show_search_category',
+                'type'    => 'checkbox',
+                'default' => false,
+                'use'     => 'a'
+            ),
+
             // Show region in search form
             'show_search_region' => array(
                 'field'   => 'show_search_region',
@@ -305,6 +313,13 @@ class GlmDataEventsManagement extends GlmDataAbstract
                 'use'     => 'a'
             ),
 
+            // Show county in search form
+            'show_search_county' => array(
+                'field'   => 'show_search_county',
+                'type'    => 'checkbox',
+                'default' => false,
+                'use'     => 'a'
+            ),
             // Turn on required fields for Michigan.org
             'michigan_org_requirements' => array(
                 'field'   => 'michigan_org_requirements',
index 5a028cb..4d13ea4 100755 (executable)
--- a/index.php
+++ b/index.php
@@ -44,7 +44,7 @@ if (!defined('ABSPATH')) {
  *  version from this plugin.
  */
 define('GLM_MEMBERS_EVENTS_PLUGIN_VERSION', '1.7.19');
-define('GLM_MEMBERS_EVENTS_PLUGIN_DB_VERSION', '0.1.13');
+define('GLM_MEMBERS_EVENTS_PLUGIN_DB_VERSION', '0.1.14');
 
 // This is the minimum version of the GLM Members DB plugin require for this plugin.
 define('GLM_MEMBERS_EVENTS_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.9.15');
index 8521691..f3510ee 100644 (file)
@@ -867,7 +867,7 @@ class GlmMembersAdmin_events_list extends GlmDataEvents
 
                 // since we're doing paging, we have to break out just the events data
                 $events = $eventsResult['list'];
-                if (count($events)>0) {
+                if ( is_array( $events ) && !empty( $events ) && count($events) > 0 ) {
                     $haveEvents = true;
                 }
                 unset($eventsResult);
index adaa457..f9b2d5e 100644 (file)
@@ -59,6 +59,7 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
         $eventsByDate    = null;
         $categoryId      = null;
         $categories      = array();
+        $counties        = array();
         $amenityId       = null;
         $amenities       = array();
         $memberId        = null;
@@ -87,12 +88,24 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
                LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "locations EL ON ( EL.city = C1.id )
                LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events E ON ( E.id = EL.event )
          WHERE E.use_member_location <> true
+           AND E.id IN (
+               SELECT event
+                 FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times ET
+                WHERE E.status = " . $this->config['status_numb']['Active'] . "
+                  AND " . $this->dateRange . "
+               )
         UNION
         SELECT C2.id,C2.name
           FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "cities C2
                LEFT OUTER JOIN " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "member_info MI ON ( MI.city = C2.id )
                LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events E ON ( E.ref_dest = MI.member )
          WHERE E.use_member_location = true
+           AND E.id IN (
+               SELECT event
+                 FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times ET
+                WHERE E.status = " . $this->config['status_numb']['Active'] . "
+                  AND " . $this->dateRange . "
+               )
         ORDER BY name";
         $cityData = $this->wpdb->get_results( $citySql, ARRAY_A );
 
@@ -103,12 +116,24 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
                LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "locations EL ON ( EL.region = C1.id )
                LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events E ON ( E.id = EL.event )
          WHERE E.use_member_location <> true
+           AND E.id IN (
+               SELECT event
+                 FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times ET
+                WHERE E.status = " . $this->config['status_numb']['Active'] . "
+                  AND " . $this->dateRange . "
+               )
         UNION
         SELECT C2.id,C2.name
           FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "regions C2
                LEFT OUTER JOIN " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "member_info MI ON ( MI.region = C2.id )
                LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events E ON ( E.ref_dest = MI.member )
          WHERE E.use_member_location = true
+           AND E.id IN (
+               SELECT event
+                 FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times ET
+                WHERE E.status = " . $this->config['status_numb']['Active'] . "
+                  AND " . $this->dateRange . "
+               )
         ORDER BY name";
         $regionData = $this->wpdb->get_results( $regionSql, ARRAY_A );
 
@@ -401,6 +426,36 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
         } else {
             $eventNameSearch = false;
         }
+        // Setup counties for search
+        if ( $this->config['settings']['enable_counties'] ) {
+            // Get list of counties to search by
+            $countySql = "
+            SELECT C1.id,C1.name
+              FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "counties C1
+                   LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "locations EL ON ( EL.county = C1.id )
+                   LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events E ON ( E.id = EL.event )
+             WHERE E.use_member_location <> true
+               AND E.id IN (
+                   SELECT event
+                     FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times ET
+                    WHERE E.status = " . $this->config['status_numb']['Active'] . "
+                      AND " . $this->dateRange . "
+                   )
+            UNION
+            SELECT C2.id,C2.name
+              FROM " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "counties C2
+                   LEFT OUTER JOIN " . GLM_MEMBERS_PLUGIN_DB_PREFIX . "member_info MI ON ( MI.county = C2.id )
+                   LEFT OUTER JOIN " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "events E ON ( E.ref_dest = MI.member )
+             WHERE E.use_member_location = true
+               AND E.id IN (
+                   SELECT event
+                     FROM " . GLM_MEMBERS_EVENTS_PLUGIN_DB_PREFIX . "times ET
+                    WHERE E.status = " . $this->config['status_numb']['Active'] . "
+                      AND " . $this->dateRange . "
+                   )
+            ORDER BY name";
+            $countyData = $this->wpdb->get_results( $countySql, ARRAY_A );
+        }
 
         $categories = $this->getCategories();
         if ( isset($categories) && is_array($categories)) {
@@ -750,6 +805,7 @@ class GlmMembersFront_events_list extends GlmMembersFront_events_baseAction
             'amenities'    => $amenities,
             'memberId'     => $memberId,
             'cities'       => $cityData,
+            'counties'     => $countyData,
             'regions'      => $regionData,
             'cityId'       => $cityId,
             'regionId'     => $regionId,
diff --git a/setup/databaseScripts/create_database_V0.1.13.sql b/setup/databaseScripts/create_database_V0.1.13.sql
deleted file mode 100644 (file)
index 46f5e3a..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
--- Gaslight Media Members Database - Events Add-On
--- File Created: 08/18/17
--- Database Version: 0.1.13
--- Database Creation Script
---
--- This file is called to create a new set of tables for this
--- add-on for the most recent database version for this add-on.
---
--- There should only be one such file in this directory
---
--- To permit each query below to be executed separately,
--- all queries must be separated by a line with four dashes
-
-
--- 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
-    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_event (
-    id INT NOT NULL AUTO_INCREMENT,
-    amenity INT NULL,
-    event INT NULL,
-    PRIMARY KEY (id),
-    INDEX(event)
-);
-
-----
-
--- 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)
-);
-
-----
-
--- Categories - Categories for events
-CREATE TABLE {prefix}categories (
-    id INT NOT NULL AUTO_INCREMENT,
-    name TINYTEXT NULL,                                   -- Name of event category
-    descr TINYTEXT NULL,                                  -- Description of this category
-    parent INT NULL,                                      -- Parent category, null or 0 if this is a top level category
-    PRIMARY KEY (id),
-    INDEX(parent)
-);
-
-----
-
--- Event-Category - Categories for specific event records
-CREATE TABLE {prefix}event_categories (
-    id INT NOT NULL AUTO_INCREMENT,
-    event INT NULL,                                       -- Pointer to the event
-    category INT NULL,                                    -- Pointer to the category
-    PRIMARY KEY (id),
-    INDEX(event),
-    INDEX(category)
-);
-
-----
-
--- Event Recurrence - Defines how an event recurs
-CREATE TABLE {prefix}recurrences (
-    id INT NOT NULL AUTO_INCREMENT,
-    event INTEGER NULL,                                   -- Pointer to event
-    name TINYTEXT NULL,                                   -- Name of this recurrence schedule - used on admin calendar
-    start_time TIME NULL,                                 -- Start time of day for event
-    start_time_only BOOLEAN NULL,                         -- Use end of first occurrence flag
-    end_time TIME NULL,                                   -- End time of day for event - If less than start time, assume a date boundry
-    all_day BOOLEAN NULL,                                 -- Flag indicating if this is an all-day event (informational only)
-    start_date DATE NULL,                                 -- Starting Date (if all_day is selected) Used instead of start_time
-    from_date DATE NULL,                                  -- From Date for recurrences
-    to_date DATE NULL,                                    -- To Date for recurrences
-    recurring BOOLEAN NULL,                               -- Flag indicating that event recurs on a schedule rather than all dates
-    month_of_year SMALLINT UNSIGNED NULL,                 -- Month of year (bitmap)
-    week_of_month TINYINT UNSIGNED NULL,                  -- Week of the month (bitmap)
-    day_of_week TINYINT UNSIGNED NULL,                    -- Day of the week (bitmap)
-    by_day_of_month BOOLEAN NULL,                         -- Flag indicating if selecting by days of the month
-    day_of_month INTEGER UNSIGNED NULL,                   -- Day of the month (bitmap)
-    last_day_of_month BOOLEAN NULL,                       -- Last day of the month
-    specific_dates TEXT NULL,                             -- Serialized array of specific dates added to the recurrence
-    holiday INT NULL,                                     -- Pointer to holidays list (for future development)
-    holiday_offset TINYINT,                               -- Offset from holiday (from -128 to +127 days)
-    PRIMARY KEY (id),
-    INDEX(event)
-);
-
-----
-
--- Times - List of actual event times for single and recurring events
-CREATE TABLE {prefix}times (
-    id INT NOT NULL AUTO_INCREMENT,
-    event INT NULL,                                       -- Pointer to the primary record for the event
-    custom_event INT NULL,                                -- Pointer to a customized copy of the event record (if set)
-    recur_id INT NULL,                                    -- Pointer to recurrence entry
-    active BOOLEAN NULL,                                  -- Active flag - normally set but used to temporarily disable a specific date
-    start_time DATETIME NULL,                             -- Date and time event starts
-    end_time DATETIME NULL,                               -- Date and time event ends
-    all_day BOOLEAN NULL,                                 -- All Day flag
-    PRIMARY KEY (id),
-    INDEX(event),
-    INDEX(start_time),
-    INDEX(end_time)
-);
-
-----
-
--- Locations - Locations for event - If there's no location pointing to an event try to use the referenced entity in events table
-CREATE TABLE {prefix}locations (
-    id INT NOT NULL AUTO_INCREMENT,
-    event INT NULL,                                       -- Pointer to the primary or custom event record
-    name TINYTEXT NULL,                                   -- Name of location
-    address TINYTEXT NULL,                                -- Street Address
-    city INT NULL,                                        -- Pointer to city - references main plugin city table
-    state TINYTEXT NULL,                                  -- Two character state abbreviation
-    zip TINYTEXT NULL,                                    -- ZIP/Postal code
-    country TINYTEXT NULL,                                -- Country Code
-    lat FLOAT NULL,                                       -- Latitude of location
-    lon FLOAT NULL,                                       -- Longitude of location
-    region INT NULL,                                      -- Pointer to Region - references main plugin region table
-    phone TINYTEXT NULL,                                  -- Location Phone #
-    url TINYTEXT NULL,                                    -- Location URL
-    email TINYTEXT NULL,                                  -- Location E-Mail Address
-    contact_addon_id INT NULL,                            -- ID of Contact from contact add-on (optional and if available)
-    contact_fname TINYTEXT NULL,                          -- Contact first name for this location (optional)
-    contact_lname TINYTEXT NULL,                          -- Contact last name for this location (optional)
-    contact_phone TINYTEXT NULL,                          -- Contact phone for this location (optional)
-    contact_email TINYTEXT NULL,                          -- Contact E-Mail address (optional)
-    PRIMARY KEY (id)
-);
-
-----
-
--- Events - Base event information - May also be entries here referenced by the "times" table for a custom date.
-CREATE TABLE {prefix}events (
-    id INT NOT NULL AUTO_INCREMENT,
-    status INT NULL,                                      -- Status for this event, see config['status']
-    custom_time INT NULL,                                 -- If this is a custom record for a specific instance (date) this points to that times table entry
-    root_event INT NULL,                                  -- Root event pointer if this is a custom record for a specific instance (date) (if custom_time is set)
-    created DATETIME NULL,                                -- Date/Time event was created or date custom event record was created if custom record
-    updated DATETIME NULL,                                -- Date/Time this event record was last updated
-    approved DATETIME NULL,                               -- Date/Ttime this event record was approved
-    ref_type INT NULL,                                    -- Type of entity this event is associated with - See config['ref_type']
-    ref_dest INT NULL,                                    -- Pointer to the specific entity of ref_type this event is associated with
-    hide_address BOOLEAN NULL,                            -- Option to hide address on front-end
-    featured BOOLEAN NULL,                                -- Option to mark as featured event
-    slideshow BOOLEAN NULL,                               -- Option to mark for use in slide show
-    major BOOLEAN NULL,                                   -- Option to mark as a major event
-    name TINYTEXT NULL,                                   -- Name of this event
-    name_slug TINYTEXT NULL,                              -- Slug for this event
-    header TINYTEXT NULL,                                 -- Header text for front-end display - NOT CURRENTLY USED
-    intro TINYTEXT NULL,                                  -- Intro text for front-end display
-    descr TEXT NULL,                                      -- Full description text
-    image TINYTEXT NULL,                                  -- Image file name
-    file1 TINYTEXT NULL,                                  -- File name for a single uploaded file #1
-    file1_descr TINYTEXT NULL,                            -- Description for file uploaded in field "file" #1
-    file2 TINYTEXT NULL,                                  -- File name for a single uploaded file #2
-    file2_descr TINYTEXT NULL,                            -- Description for file uploaded in field "file" #2
-    file3 TINYTEXT NULL,                                  -- File name for a single uploaded file #3
-    file3_descr TINYTEXT NULL,                            -- Description for file uploaded in field "file" #3
-    url TINYTEXT NULL,                                    -- Event URL
-    ticket_url TINYTEXT NULL,                             -- Ticket URL
-    registration_url TINYTEXT NULL,                       -- Registration URL
-    cost TINYTEXT NULL,                                   -- Description of event cost
-    admin_ref_type INT NULL,                              -- Type of admin contact if using a member contact
-    admin_ref_dest INT NULL,                              -- Pointer to admin contact record if using a member contact
-    admin_name TINYTEXT NULL,                             -- Admin Contact Name if not using a member contact
-    admin_org TINYTEXT NULL,                              -- Admin Contact Organization if not using a member contact
-    admin_email TINYTEXT NULL,                            -- Admin Contact E-Mail if not using a member contact
-    admin_phone TINYTEXT NULL,                            -- Admin Contact Phone if not using a member contact
-    free BOOLEAN NULL,                                    -- Event is Free
-    contact_email TINYTEXT NULL,                          -- Contact E-mail address
-    contact_name TINYTEXT NULL,                           -- Contact name
-    contact_phone TINYTEXT NULL,                          -- Event Phone
-    use_member_location BOOLEAN NULL,                     -- Use location of the member (if provided) rather than location table data
-    other_ref_dest INT NULL,                              -- Set location of the event to another member
-    old_event_id INT NULL,                                -- ID of event from old site for reference
-    ical_uid TINYTEXT NULL,                               -- The ical UID for this event.
-    notes TEXT NULL,                                      -- Internal notes for this event
-    PRIMARY KEY (id),
-    INDEX(custom_time),
-    INDEX(root_event),
-    INDEX(ref_type),
-    INDEX(ref_dest),
-    INDEX(featured),
-    INDEX(slideshow),
-    INDEX(major)
-);
-
-----
-
--- Event Management Settings
-CREATE TABLE {prefix}management (
-    id INT NOT NULL AUTO_INCREMENT,
-    canonical_event_page TINYTEXT NULL,                   -- Canonical page slug for event detail
-    pdf_logo TINYTEXT NULL,                               -- Image for the Top of the PDF
-    footer_text TINYTEXT NULL,                            -- Image for the Top of the PDF
-    to_email TINYTEXT NULL,                               -- Email address of the recipient
-    from_email TINYTEXT NULL,                             -- Email address of the sender
-    email_notification TEXT NULL,                         -- Email notification message
-    calendar_view TINYTEXT NULL,                          -- Default calendar view
-    event_default_state TINYTEXT NULL,                    -- Default calendar view
-    term_event_amenities_singular TINYTEXT NULL,          -- Singular term to use for event amenities
-    term_event_amenities_plural TINYTEXT NULL,            -- Plural term to use for event amenities
-    use_event_amenities BOOLEAN NULL,                     -- Whether amenities are used at all for events
-    use_venue_locations BOOLEAN NULL,                     -- To use Other members as the location of event
-    member_events_allowed BOOLEAN NULL,                   -- If members are allowed to add events.
-    member_events_moderated BOOLEAN DEFAULT '0',          -- If member edits are moderated.
-    non_moderated_status_default INTEGER DEFAULT 20,      -- Non Moderated Member Default Event Status
-    ical_feed_image_size TINYTEXT NULL,                   -- Image size to use in iCal Feed
-    event_display_member_message BOOLEAN DEFAULT '0',     -- Boolean to show member message or not
-    event_member_message TEXT NULL,                       -- Member Message
-    event_add_button_color TINYTEXT NULL,                 -- Color of the search button
-    event_add_button_hidden BOOLEAN NULL,                 -- Option to hide the add event button
-    event_back_to_search_color TINYTEXT NULL,             -- Background Color of the search
-    default_agenda_view TINYTEXT NULL,                    -- Default view file for agenda views
-    agenda_date_background_color TINYTEXT NULL,           -- Background Color of the date
-    agenda_date_text_color TINYTEXT NULL,                 -- Text Color of the date
-    agenda_title_color TINYTEXT NULL,                     -- Color of the Event Title
-    agenda_container_background_color TINYTEXT NULL,      -- Event Container Background Color
-    agenda_container_border_color TINYTEXT NULL,          -- Event Container Border Color
-    agenda_view_max_width TINYTEXT NULL,                  -- Max Width of agenda view
-    detail_ext_links_same_window BOOLEAN DEFAULT '0',     -- Turn on to keep from adding target blank to detail page url's
-    michigan_org_requirements BOOLEAN DEFAULT '0',        -- Turn on required fields for Michigan.org
-    sort_by_featured_in_agenda BOOLEAN DEFAULT '0',       -- Sort by the featured events in agenda view
-    show_search_city BOOLEAN DEFAULT '0',                 -- Show city in search form
-    show_search_region BOOLEAN DEFAULT '0',               -- Show region in search form
-    PRIMARY KEY (id)
-);
-
-----
-
--- Set default event management entry
-INSERT INTO {prefix}management
-    ( id, canonical_event_page, term_event_amenities_singular, term_event_amenities_plural, member_events_allowed, ical_feed_image_size, event_display_member_message, event_member_message, default_agenda_view )
-   VALUES
-    ( 1, 'event-detail', 'Amenity', 'Amenities', 1, 'large', 0, '', 'agenda')
-;
-
-----
-
--- Event iCal Feed imports
-CREATE TABLE {prefix}feed_import (
-    id INT NOT NULL AUTO_INCREMENT,
-    feed_url TEXT NOT NULL,            -- The ical feed url to import
-    created DATETIME NULL,             -- The date this feed was created
-    updated DATETIME NULL,             -- Last time this feed was updated
-    duration INT NULL,                 -- The time it took to fetch the feed
-    events INT NULL,                   -- The number of events last fetched
-    PRIMARY KEY (id)
-);
-
-----
-
--- Event Email Notifications
-CREATE TABLE {prefix}email_notifications (
-    id INT NOT NULL AUTO_INCREMENT,
-    declined_message TEXT NULL,    -- Event declined message
-    approved_message TEXT NULL,    -- Event approved message
-    to_email TINYTEXT NULL,        -- To Email Address
-    from_email TINYTEXT NULL,      -- From Email Address
-    email_notification TEXT NULL,  -- Email notification message
-    PRIMARY KEY (id)
-);
-
-----
-
--- Set default event email settings
-INSERT INTO {prefix}email_notifications
-    ( id, declined_message, approved_message )
-   VALUES
-    ( 1, 'The Event parameters do not comply with our event guidelines.', 'Your event has been approved.' )
-;
diff --git a/setup/databaseScripts/create_database_V0.1.14.sql b/setup/databaseScripts/create_database_V0.1.14.sql
new file mode 100644 (file)
index 0000000..c941c61
--- /dev/null
@@ -0,0 +1,303 @@
+-- Gaslight Media Members Database - Events Add-On
+-- File Created: 08/18/17
+-- Database Version: 0.1.13
+-- Database Creation Script
+--
+-- This file is called to create a new set of tables for this
+-- add-on for the most recent database version for this add-on.
+--
+-- There should only be one such file in this directory
+--
+-- To permit each query below to be executed separately,
+-- all queries must be separated by a line with four dashes
+
+
+-- 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
+    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_event (
+    id INT NOT NULL AUTO_INCREMENT,
+    amenity INT NULL,
+    event INT NULL,
+    PRIMARY KEY (id),
+    INDEX(event)
+);
+
+----
+
+-- 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)
+);
+
+----
+
+-- Categories - Categories for events
+CREATE TABLE {prefix}categories (
+    id INT NOT NULL AUTO_INCREMENT,
+    name TINYTEXT NULL,                                   -- Name of event category
+    descr TINYTEXT NULL,                                  -- Description of this category
+    parent INT NULL,                                      -- Parent category, null or 0 if this is a top level category
+    PRIMARY KEY (id),
+    INDEX(parent)
+);
+
+----
+
+-- Event-Category - Categories for specific event records
+CREATE TABLE {prefix}event_categories (
+    id INT NOT NULL AUTO_INCREMENT,
+    event INT NULL,                                       -- Pointer to the event
+    category INT NULL,                                    -- Pointer to the category
+    PRIMARY KEY (id),
+    INDEX(event),
+    INDEX(category)
+);
+
+----
+
+-- Event Recurrence - Defines how an event recurs
+CREATE TABLE {prefix}recurrences (
+    id INT NOT NULL AUTO_INCREMENT,
+    event INTEGER NULL,                                   -- Pointer to event
+    name TINYTEXT NULL,                                   -- Name of this recurrence schedule - used on admin calendar
+    start_time TIME NULL,                                 -- Start time of day for event
+    start_time_only BOOLEAN NULL,                         -- Use end of first occurrence flag
+    end_time TIME NULL,                                   -- End time of day for event - If less than start time, assume a date boundry
+    all_day BOOLEAN NULL,                                 -- Flag indicating if this is an all-day event (informational only)
+    start_date DATE NULL,                                 -- Starting Date (if all_day is selected) Used instead of start_time
+    from_date DATE NULL,                                  -- From Date for recurrences
+    to_date DATE NULL,                                    -- To Date for recurrences
+    recurring BOOLEAN NULL,                               -- Flag indicating that event recurs on a schedule rather than all dates
+    month_of_year SMALLINT UNSIGNED NULL,                 -- Month of year (bitmap)
+    week_of_month TINYINT UNSIGNED NULL,                  -- Week of the month (bitmap)
+    day_of_week TINYINT UNSIGNED NULL,                    -- Day of the week (bitmap)
+    by_day_of_month BOOLEAN NULL,                         -- Flag indicating if selecting by days of the month
+    day_of_month INTEGER UNSIGNED NULL,                   -- Day of the month (bitmap)
+    last_day_of_month BOOLEAN NULL,                       -- Last day of the month
+    specific_dates TEXT NULL,                             -- Serialized array of specific dates added to the recurrence
+    holiday INT NULL,                                     -- Pointer to holidays list (for future development)
+    holiday_offset TINYINT,                               -- Offset from holiday (from -128 to +127 days)
+    PRIMARY KEY (id),
+    INDEX(event)
+);
+
+----
+
+-- Times - List of actual event times for single and recurring events
+CREATE TABLE {prefix}times (
+    id INT NOT NULL AUTO_INCREMENT,
+    event INT NULL,                                       -- Pointer to the primary record for the event
+    custom_event INT NULL,                                -- Pointer to a customized copy of the event record (if set)
+    recur_id INT NULL,                                    -- Pointer to recurrence entry
+    active BOOLEAN NULL,                                  -- Active flag - normally set but used to temporarily disable a specific date
+    start_time DATETIME NULL,                             -- Date and time event starts
+    end_time DATETIME NULL,                               -- Date and time event ends
+    all_day BOOLEAN NULL,                                 -- All Day flag
+    PRIMARY KEY (id),
+    INDEX(event),
+    INDEX(start_time),
+    INDEX(end_time)
+);
+
+----
+
+-- Locations - Locations for event - If there's no location pointing to an event try to use the referenced entity in events table
+CREATE TABLE {prefix}locations (
+    id INT NOT NULL AUTO_INCREMENT,
+    event INT NULL,                                       -- Pointer to the primary or custom event record
+    name TINYTEXT NULL,                                   -- Name of location
+    address TINYTEXT NULL,                                -- Street Address
+    city INT NULL,                                        -- Pointer to city - references main plugin city table
+    state TINYTEXT NULL,                                  -- Two character state abbreviation
+    zip TINYTEXT NULL,                                    -- ZIP/Postal code
+    country TINYTEXT NULL,                                -- Country Code
+    county INT NULL,                                      -- Reference to county table
+    lat FLOAT NULL,                                       -- Latitude of location
+    lon FLOAT NULL,                                       -- Longitude of location
+    region INT NULL,                                      -- Pointer to Region - references main plugin region table
+    phone TINYTEXT NULL,                                  -- Location Phone #
+    url TINYTEXT NULL,                                    -- Location URL
+    email TINYTEXT NULL,                                  -- Location E-Mail Address
+    contact_addon_id INT NULL,                            -- ID of Contact from contact add-on (optional and if available)
+    contact_fname TINYTEXT NULL,                          -- Contact first name for this location (optional)
+    contact_lname TINYTEXT NULL,                          -- Contact last name for this location (optional)
+    contact_phone TINYTEXT NULL,                          -- Contact phone for this location (optional)
+    contact_email TINYTEXT NULL,                          -- Contact E-Mail address (optional)
+    PRIMARY KEY (id),
+    INDEX(event),
+    INDEX(city),
+    INDEX(county),
+    INDEX(region)
+);
+
+----
+
+-- Events - Base event information - May also be entries here referenced by the "times" table for a custom date.
+CREATE TABLE {prefix}events (
+    id INT NOT NULL AUTO_INCREMENT,
+    status INT NULL,                                      -- Status for this event, see config['status']
+    custom_time INT NULL,                                 -- If this is a custom record for a specific instance (date) this points to that times table entry
+    root_event INT NULL,                                  -- Root event pointer if this is a custom record for a specific instance (date) (if custom_time is set)
+    created DATETIME NULL,                                -- Date/Time event was created or date custom event record was created if custom record
+    updated DATETIME NULL,                                -- Date/Time this event record was last updated
+    approved DATETIME NULL,                               -- Date/Ttime this event record was approved
+    ref_type INT NULL,                                    -- Type of entity this event is associated with - See config['ref_type']
+    ref_dest INT NULL,                                    -- Pointer to the specific entity of ref_type this event is associated with
+    hide_address BOOLEAN NULL,                            -- Option to hide address on front-end
+    featured BOOLEAN NULL,                                -- Option to mark as featured event
+    slideshow BOOLEAN NULL,                               -- Option to mark for use in slide show
+    major BOOLEAN NULL,                                   -- Option to mark as a major event
+    name TINYTEXT NULL,                                   -- Name of this event
+    name_slug TINYTEXT NULL,                              -- Slug for this event
+    header TINYTEXT NULL,                                 -- Header text for front-end display - NOT CURRENTLY USED
+    intro TINYTEXT NULL,                                  -- Intro text for front-end display
+    descr TEXT NULL,                                      -- Full description text
+    image TINYTEXT NULL,                                  -- Image file name
+    file1 TINYTEXT NULL,                                  -- File name for a single uploaded file #1
+    file1_descr TINYTEXT NULL,                            -- Description for file uploaded in field "file" #1
+    file2 TINYTEXT NULL,                                  -- File name for a single uploaded file #2
+    file2_descr TINYTEXT NULL,                            -- Description for file uploaded in field "file" #2
+    file3 TINYTEXT NULL,                                  -- File name for a single uploaded file #3
+    file3_descr TINYTEXT NULL,                            -- Description for file uploaded in field "file" #3
+    url TINYTEXT NULL,                                    -- Event URL
+    ticket_url TINYTEXT NULL,                             -- Ticket URL
+    registration_url TINYTEXT NULL,                       -- Registration URL
+    cost TINYTEXT NULL,                                   -- Description of event cost
+    admin_ref_type INT NULL,                              -- Type of admin contact if using a member contact
+    admin_ref_dest INT NULL,                              -- Pointer to admin contact record if using a member contact
+    admin_name TINYTEXT NULL,                             -- Admin Contact Name if not using a member contact
+    admin_org TINYTEXT NULL,                              -- Admin Contact Organization if not using a member contact
+    admin_email TINYTEXT NULL,                            -- Admin Contact E-Mail if not using a member contact
+    admin_phone TINYTEXT NULL,                            -- Admin Contact Phone if not using a member contact
+    free BOOLEAN NULL,                                    -- Event is Free
+    contact_email TINYTEXT NULL,                          -- Contact E-mail address
+    contact_name TINYTEXT NULL,                           -- Contact name
+    contact_phone TINYTEXT NULL,                          -- Event Phone
+    use_member_location BOOLEAN NULL,                     -- Use location of the member (if provided) rather than location table data
+    other_ref_dest INT NULL,                              -- Set location of the event to another member
+    old_event_id INT NULL,                                -- ID of event from old site for reference
+    ical_uid TINYTEXT NULL,                               -- The ical UID for this event.
+    notes TEXT NULL,                                      -- Internal notes for this event
+    PRIMARY KEY (id),
+    INDEX(custom_time),
+    INDEX(root_event),
+    INDEX(ref_type),
+    INDEX(ref_dest),
+    INDEX(featured),
+    INDEX(slideshow),
+    INDEX(major)
+);
+
+----
+
+-- Event Management Settings
+CREATE TABLE {prefix}management (
+    id INT NOT NULL AUTO_INCREMENT,
+    canonical_event_page TINYTEXT NULL,                   -- Canonical page slug for event detail
+    pdf_logo TINYTEXT NULL,                               -- Image for the Top of the PDF
+    footer_text TINYTEXT NULL,                            -- Image for the Top of the PDF
+    to_email TINYTEXT NULL,                               -- Email address of the recipient
+    from_email TINYTEXT NULL,                             -- Email address of the sender
+    email_notification TEXT NULL,                         -- Email notification message
+    calendar_view TINYTEXT NULL,                          -- Default calendar view
+    event_default_state TINYTEXT NULL,                    -- Default calendar view
+    term_event_amenities_singular TINYTEXT NULL,          -- Singular term to use for event amenities
+    term_event_amenities_plural TINYTEXT NULL,            -- Plural term to use for event amenities
+    use_event_amenities BOOLEAN NULL,                     -- Whether amenities are used at all for events
+    use_venue_locations BOOLEAN NULL,                     -- To use Other members as the location of event
+    member_events_allowed BOOLEAN NULL,                   -- If members are allowed to add events.
+    member_events_moderated BOOLEAN DEFAULT '0',          -- If member edits are moderated.
+    non_moderated_status_default INTEGER DEFAULT 20,      -- Non Moderated Member Default Event Status
+    ical_feed_image_size TINYTEXT NULL,                   -- Image size to use in iCal Feed
+    event_display_member_message BOOLEAN DEFAULT '0',     -- Boolean to show member message or not
+    event_member_message TEXT NULL,                       -- Member Message
+    event_add_button_color TINYTEXT NULL,                 -- Color of the search button
+    event_add_button_hidden BOOLEAN NULL,                 -- Option to hide the add event button
+    event_back_to_search_color TINYTEXT NULL,             -- Background Color of the search
+    default_agenda_view TINYTEXT NULL,                    -- Default view file for agenda views
+    agenda_date_background_color TINYTEXT NULL,           -- Background Color of the date
+    agenda_date_text_color TINYTEXT NULL,                 -- Text Color of the date
+    agenda_title_color TINYTEXT NULL,                     -- Color of the Event Title
+    agenda_container_background_color TINYTEXT NULL,      -- Event Container Background Color
+    agenda_container_border_color TINYTEXT NULL,          -- Event Container Border Color
+    agenda_view_max_width TINYTEXT NULL,                  -- Max Width of agenda view
+    detail_ext_links_same_window BOOLEAN DEFAULT '0',     -- Turn on to keep from adding target blank to detail page url's
+    michigan_org_requirements BOOLEAN DEFAULT '0',        -- Turn on required fields for Michigan.org
+    sort_by_featured_in_agenda BOOLEAN DEFAULT '0',       -- Sort by the featured events in agenda view
+    show_search_city BOOLEAN DEFAULT '0',                 -- Show city in search form
+    show_search_region BOOLEAN DEFAULT '0',               -- Show region in search form
+    show_search_county BOOLEAN DEFAULT '0',               -- Show county in search form
+    show_search_category BOOLEAN DEFAULT '1',             -- Show category in search form
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Set default event management entry
+INSERT INTO {prefix}management
+    ( id, canonical_event_page, term_event_amenities_singular, term_event_amenities_plural, member_events_allowed, ical_feed_image_size, event_display_member_message, event_member_message, default_agenda_view )
+   VALUES
+    ( 1, 'event-detail', 'Amenity', 'Amenities', 1, 'large', 0, '', 'agenda')
+;
+
+----
+
+-- Event iCal Feed imports
+CREATE TABLE {prefix}feed_import (
+    id INT NOT NULL AUTO_INCREMENT,
+    feed_url TEXT NOT NULL,            -- The ical feed url to import
+    created DATETIME NULL,             -- The date this feed was created
+    updated DATETIME NULL,             -- Last time this feed was updated
+    duration INT NULL,                 -- The time it took to fetch the feed
+    events INT NULL,                   -- The number of events last fetched
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Event Email Notifications
+CREATE TABLE {prefix}email_notifications (
+    id INT NOT NULL AUTO_INCREMENT,
+    declined_message TEXT NULL,    -- Event declined message
+    approved_message TEXT NULL,    -- Event approved message
+    to_email TINYTEXT NULL,        -- To Email Address
+    from_email TINYTEXT NULL,      -- From Email Address
+    email_notification TEXT NULL,  -- Email notification message
+    PRIMARY KEY (id)
+);
+
+----
+
+-- Set default event email settings
+INSERT INTO {prefix}email_notifications
+    ( id, declined_message, approved_message )
+   VALUES
+    ( 1, 'The Event parameters do not comply with our event guidelines.', 'Your event has been approved.' )
+;
index 104236c..430fdd7 100644 (file)
@@ -49,5 +49,6 @@ $glmMembersEventsDbVersions = array(
     '0.1.11' => array('version' => '0.1.11', 'tables' => 13, 'date' => '01/07/2019'),
     '0.1.12' => array('version' => '0.1.12', 'tables' => 13, 'date' => '01/30/2019'),
     '0.1.13' => array('version' => '0.1.13', 'tables' => 13, 'date' => '02/04/2019'),
+    '0.1.14' => array('version' => '0.1.14', 'tables' => 13, 'date' => '02/13/2019'),
 );
 
diff --git a/setup/databaseScripts/update_database_V0.1.14.sql b/setup/databaseScripts/update_database_V0.1.14.sql
new file mode 100644 (file)
index 0000000..0e0554a
--- /dev/null
@@ -0,0 +1,33 @@
+-- Gaslight Media Members Database  - Events Add-On
+-- File Created: 02/13/19
+-- Database Version: 0.1.14
+-- 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
+
+ALTER TABLE {prefix}locations ADD COLUMN county INT NULL;                           -- Reference to county table
+
+----
+
+ALTER TABLE {prefix}management ADD COLUMN show_search_county BOOLEAN DEFAULT '0';   -- Show county in search form
+
+----
+
+ALTER TABLE {prefix}management ADD COLUMN show_search_category BOOLEAN DEFAULT '1'; -- Show category in search form
+
+----
+
+CREATE INDEX event ON {prefix}locations (event);
+
+----
+
+CREATE INDEX city ON {prefix}locations (city);
+
+----
+
+CREATE INDEX county ON {prefix}locations (county);
+
+----
+
+CREATE INDEX region ON {prefix}locations (region);
index f1150e4..f2dede9 100755 (executable)
@@ -1,5 +1,4 @@
-
-<!-- Location -->
+{* Location *}
 
 {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=""/>
@@ -10,7 +9,7 @@
     <script type="text/javascript">var enableDraggable = true;</script>
 {/if}
 
-<!-- Add New City Dialog Box -->
+{* Add New City Dialog Box *}
 <div id="newCityDialog" class="glm-dialog-box" title="Enter a New City">
     <table class="glm-admin-table">
         <tr>
@@ -25,7 +24,7 @@
     <a id="newCityCancel" class="button button-primary glm-right">Cancel</a>
     <input class="newCitySubmit" type="submit" value="Add new City">
 </div>
-<!-- New city hidden input fields go here -->
+{* New city hidden input fields go here *}
 <span id="newCityNames"></span>
 
 {if !$settings.use_venue_locations}
@@ -35,9 +34,9 @@
     <tr>
         <td id="placeLocationDeletesHere" colspan="2">
 
-            <!--  Only doing one event at a time  - edit.html has JAVAscript code to create the first and only one
+            {*  Only doing one event at a time  - edit.html has JAVAscript code to create the first and only one
                 <a id="addLocation" class="button button-primary glm-button glm-right">Add a Location</a>
-            -->
+            *}
 
         </td>
     </tr>
     <tr id="locationContainer" {if $event.fieldData.use_member_location.value || $event.fieldData.other_ref_dest.value}class="glm-hidden"{/if}>
         <td>
             <table id="locationTable" width="100%">
-                <!-- Location forms go here. -->
-{if $locations}
-    {foreach $locations as $loc}
-                <tr class="location_{$loc.id}"><td colspan="2"><hr></td></tr>
-                <tr id="location_{$loc.id}" data-id="{$loc.id}" class="location_{$loc.id} location-form">
-                    <td>
-                        <input type="hidden" name="locID[{$loc.id}]" value="Loc{$loc.id}">
-                        <input type="hidden" class="eLocation" data-id="{$loc.id}" name="loc{$loc.id}_id" value="{$loc.id}">
-                        <input type="hidden" name="Loc{$loc.id}_event" value="{$event.fieldData.id}"> <!-- required to have event id with prefix -->
-                        <table width="100%">
-                            <tr>
-                                <th>Location Name:</th>
-                                <td>
-                                    <input id="name_{$loc.id}" type="text" name="Loc{$loc.id}_name" value="{$loc.name|escape}" class="glm-form-text-input-medium">
-                                </td>
-                            </tr>
-                            <tr>
-                                <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>Address:</th>
-                                <td>
-                                    <input id="address_{$loc.id}" data-id="{$loc.id}" type="text" name="Loc{$loc.id}_address" value="{$loc.address}" class="glm-form-text-input-medium">
-                                </td>
-                            </tr>
-                            <tr>
-                                <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>City</th>
-                                <td class="glm-item-container">
-                                    {if !$lockedToMember}
-                                        <!--  Add new city dialog -->
-                                        <div data-id="{$loc.id}" class="button button-secondary glm-right new-city-button">Add a new City</div>
-                                    {/if}
-                                    <!-- City Selection -->
-                                    <select id="city_{$loc.id}" data-id="{$loc.id}" class="city-picklist" name="Loc{$loc.id}_city">
-                                        <option value="0"></option>
-                        {foreach from=$loc.city.list item=v}
-                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
-                                            {$v.name}
-                                        </option>
-                        {/foreach}
-                                    </select>
-                                </td>
-                            </tr>
-                            <tr>
-                                <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>State:</th>
-                                <td>
-                                    <select id="state_{$loc.id}" data-id="{$loc.id}" class="" name="Loc{$loc.id}_state">
-                                        <option value=""></option>
-                        {foreach from=$loc.state.list item=v}
-                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
-                                            {$v.name}{if $eventDefaultState == $v.value} (default){/if}
-                                        </option>
-                        {/foreach}
-                                    </select>
-                                </td>
-                            </tr>
-                            <tr>
-                                <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>ZIP / Postal Code:</th>
-                                <td>
-                                    <input id="zip_{$loc.id}" data-id="{$loc.id}" type="text" name="Loc{$loc.id}_zip" value="{$loc.zip}" class="glm-form-text-input-medium zipcode-input">
-                                </td>
-                            </tr>
-                            <tr>
-                                <th>Country:</th>
-                                <td>
-                                    <select id="country_{$loc.id}" data-id="{$loc.id}" name="Loc{$loc.id}_country">
-                        {foreach from=$loc.country.list item=v}
-                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
-                                            {$v.name} {$v.value}
-                                        </option>
-                        {/foreach}
-                                    </select>
-                                </td>
-                            </tr>
-                            <tr>
-                                <th>Region:</th>
-                                <td>
-                                    <select name="Loc{$loc.id}_region">
-                                        <option value="0"></option>
-                        {foreach from=$loc.region.list item=v}
-                                        <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
-                        {/foreach}
-                                    </select>
-                                </td>
-                            </tr>
-                            <tr>
-                                <th>Phone:</th>
-                                <td>
-                                    <input type="text" name="Loc{$loc.id}_phone" value="{$loc.phone}" class="glm-form-text-input-medium glm-phone-input">
-                                </td>
-                            </tr>
-                            <tr>
-                                <th>Web Address:</th>
-                                <td>
-                                    <input type="text" name="Loc{$loc.id}_url" value="{$loc.url}" class="glm-form-text-input-medium">
-                                </td>
-                            </tr>
-                            <tr>
-                                <th>Email Address:</th>
-                                <td>
-                                    <input type="text" name="Loc{$loc.id}_email" value="{$loc.email}" class="glm-form-text-input-medium">
-                                </td>
-                            </tr>
-
-                        </table>
-                    </td>
-                    <td>
-                        <table width="100%">
-                            <tr>
-                                <th>Location:</th>
-                                <td>
-                                        <span class="glm-right">
-                                    <!-- Only doing one location per event right now
-                                            <a id="deleteLocation_{$loc.id}" data-id="{$loc.id}" class="button button-primary glm-button glm-right delete-location">Delete Location222</a>
-                                    -->
-                                        </span>
-                                    <div id="glm-estimate-location_{$loc.id}" class="button button-secondary">Map Location Using Above Address</div>
-                                    <p>
-                                        {if $settings.selected_map_interface == 1}
-                                            <!--  Leaflet Map -->
-                                            <div id="locationMap_{$loc.id}" style="height: 400px; width: 100%;"></div>
-                                        {/if}
+                {* Location forms go here. *}
+                {if $locations}
+                    {foreach $locations as $loc}
+                        <tr class="location_{$loc.id}"><td colspan="2"><hr></td></tr>
+                        <tr id="location_{$loc.id}" data-id="{$loc.id}" class="location_{$loc.id} location-form">
+                            <td>
+                                <input type="hidden" name="locID[{$loc.id}]" value="Loc{$loc.id}">
+                                <input type="hidden" class="eLocation" data-id="{$loc.id}" name="loc{$loc.id}_id" value="{$loc.id}">
+                                <input type="hidden" name="Loc{$loc.id}_event" value="{$event.fieldData.id}"> <!-- required to have event id with prefix -->
+                                <table width="100%">
+                                    <tr>
+                                        <th>Location Name:</th>
+                                        <td>
+                                            <input id="name_{$loc.id}" type="text" name="Loc{$loc.id}_name" value="{$loc.name|escape}" class="glm-form-text-input-medium">
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>Address:</th>
+                                        <td>
+                                            <input id="address_{$loc.id}" data-id="{$loc.id}" type="text" name="Loc{$loc.id}_address" value="{$loc.address}" class="glm-form-text-input-medium">
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>City</th>
+                                        <td class="glm-item-container">
+                                            {if !$lockedToMember}
+                                                {* Add new city dialog *}
+                                                <div data-id="{$loc.id}" class="button button-secondary glm-right new-city-button">Add a new City</div>
+                                            {/if}
+                                            {* City Selection *}
+                                            <select id="city_{$loc.id}" data-id="{$loc.id}" class="city-picklist" name="Loc{$loc.id}_city">
+                                                <option value="0"></option>
+                                                {foreach from=$loc.city.list item=v}
+                                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                                        {$v.name}
+                                                    </option>
+                                                {/foreach}
+                                            </select>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>State:</th>
+                                        <td>
+                                            <select id="state_{$loc.id}" data-id="{$loc.id}" class="" name="Loc{$loc.id}_state">
+                                                <option value=""></option>
+                                                {foreach from=$loc.state.list item=v}
+                                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                                        {$v.name}{if $eventDefaultState == $v.value} (default){/if}
+                                                    </option>
+                                                {/foreach}
+                                            </select>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>ZIP / Postal Code:</th>
+                                        <td>
+                                            <input id="zip_{$loc.id}" data-id="{$loc.id}" type="text" name="Loc{$loc.id}_zip" value="{$loc.zip}" class="glm-form-text-input-medium zipcode-input">
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th>County:</th>
+                                        <td>
+                                            <select id="county_{$loc.id}" data-id="{$loc.id}" name="Loc{$loc.id}_county">
+                                                <option value="0"></option>
+                                                {foreach from=$loc.county.list item=v}
+                                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                                        {$v.name}
+                                                    </option>
+                                                {/foreach}
+                                            </select>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th>Country:</th>
+                                        <td>
+                                            <select id="country_{$loc.id}" data-id="{$loc.id}" name="Loc{$loc.id}_country">
+                                                {foreach from=$loc.country.list item=v}
+                                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                                        {$v.name} {$v.value}
+                                                    </option>
+                                                {/foreach}
+                                            </select>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th>Region:</th>
+                                        <td>
+                                            <select name="Loc{$loc.id}_region">
+                                                <option value="0"></option>
+                                                {foreach from=$loc.region.list item=v}
+                                                    <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                                                {/foreach}
+                                            </select>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th>Phone:</th>
+                                        <td>
+                                            <input type="text" name="Loc{$loc.id}_phone" value="{$loc.phone}" class="glm-form-text-input-medium glm-phone-input">
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th>Web Address:</th>
+                                        <td>
+                                            <input type="text" name="Loc{$loc.id}_url" value="{$loc.url}" class="glm-form-text-input-medium">
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <th>Email Address:</th>
+                                        <td>
+                                            <input type="text" name="Loc{$loc.id}_email" value="{$loc.email}" class="glm-form-text-input-medium">
+                                        </td>
+                                    </tr>
 
-                                        {if $settings.selected_map_interface == 2}
-                                            <!-- Google Map -->
-                                            <div id="locationMap_{$loc.id}" class="glm-map-edit-small" style="height: 400; width: 600px;">(map loads here)</div>
-                                        {/if}
-                                        <p>
-                                            <b>Position:</b>
-                                            &nbsp;Lat <input id="glmLat_{$loc.id}" name="Loc{$loc.id}_lat" type="text" value="{$loc.lat}" class="glm-form-text-input-veryshort">
-                                            &nbsp;Lon <input id="glmLng_{$loc.id}" name="Loc{$loc.id}_lon" type="text" value="{$loc.lon}" class="glm-form-text-input-veryshort">
-                                            &nbsp;&nbsp;<span data-id="{$loc.id}" class="button button-secondary latLonRecenter">Update pointer</span><br>
-                                            You may drag the map marker to the exact location desired. Also consider selecting "Satellite" view to better locate the marker.
-                                        </p>
-                                    </p>
-                                </td>
-                            </tr>
-                        </table>
-                    </td>
-                </tr>
+                                </table>
+                            </td>
+                            <td>
+                                <table width="100%">
+                                    <tr>
+                                        <th>Location:</th>
+                                        <td>
+                                            <span class="glm-right">
+                                                {* Only doing one location per event right now
+                                                    <a id="deleteLocation_{$loc.id}" data-id="{$loc.id}" class="button button-primary glm-button glm-right delete-location">Delete Location222</a>
+                                                *}
+                                            </span>
+                                            <div id="glm-estimate-location_{$loc.id}" class="button button-secondary">Map Location Using Above Address</div>
+                                            <p>
+                                                {if $settings.selected_map_interface == 1}
+                                                    <!--  Leaflet Map -->
+                                                    <div id="locationMap_{$loc.id}" style="height: 400px; width: 100%;"></div>
+                                                {/if}
 
-    {/foreach}
-{/if}
+                                                {if $settings.selected_map_interface == 2}
+                                                    <!-- Google Map -->
+                                                    <div id="locationMap_{$loc.id}" class="glm-map-edit-small" style="height: 400; width: 600px;">(map loads here)</div>
+                                                {/if}
+                                                <p>
+                                                    <b>Position:</b>
+                                                    &nbsp;Lat <input id="glmLat_{$loc.id}" name="Loc{$loc.id}_lat" type="text" value="{$loc.lat}" class="glm-form-text-input-veryshort">
+                                                    &nbsp;Lon <input id="glmLng_{$loc.id}" name="Loc{$loc.id}_lon" type="text" value="{$loc.lon}" class="glm-form-text-input-veryshort">
+                                                    &nbsp;&nbsp;<span data-id="{$loc.id}" class="button button-secondary latLonRecenter">Update pointer</span><br>
+                                                    You may drag the map marker to the exact location desired. Also consider selecting "Satellite" view to better locate the marker.
+                                                </p>
+                                            </p>
+                                        </td>
+                                    </tr>
+                                </table>
+                            </td>
+                        </tr>
+                    {/foreach}
+                {/if}
             </table>
         </td>
     </tr>
 </table>
 
-<!-- Add/Edit Location Template -->
+{* Add/Edit Location Template *}
 
 <table id="addLocationTemplate" class="glm-hidden">
     <tr class="location_{ newLocID }">
         <td>
             <input type="hidden" name="locID[{ newLocID }]" value="{ newLocID }">
-    {if $haveEvent}
-            <input type="hidden" name="{ newLocID }_event" value="{$event.fieldData.id}"> <!-- required to have event id with prefix -->
-    {/if}
+            {if $haveEvent}
+                <input type="hidden" name="{ newLocID }_event" value="{$event.fieldData.id}"> {* required to have event id with prefix *}
+            {/if}
             <table width="100%">
                 <tr>
                 <tr>
                     <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>City</th>
                     <td class="glm-item-container">
                         {if !$lockedToMember}
-                            <!--  Add new city dialog -->
+                            {*  Add new city dialog *}
                             <div data-id="{ newLocID }" class="button button-secondary glm-right new-city-button">Add a new City</div>
                         {/if}
-                        <!-- City Selection -->
+                        {* City Selection *}
                         <select id="city_{ newLocID }" data-id="{ newLocID }" class="city-picklist" name="{ newLocID }_city">
                             <option value="0"></option>
-            {foreach from=$newLocation.fieldData.city.list item=v}
-                            <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
-            {/foreach}
+                            {foreach from=$newLocation.fieldData.city.list item=v}
+                                <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                            {/foreach}
                         </select>
                     </td>
                 </tr>
                     <th{if $settings.michigan_org_requirements && $lockedToMember} class="glm-required"{/if}>State:</th>
                     <td>
                         <select  id="state_{ newLocID }" data-id="{ newLocID }" name="{ newLocID }_state">
-            {foreach from=$newLocation.fieldData.state.list item=v}
-                            <option value="{$v.value}"{if $v.value == $eventDefaultState} selected="selected"{/if}>
-                                {$v.name} {if $eventDefaultState == $v.value} (default) {/if}
-                            </option>
-            {/foreach}
+                            {foreach from=$newLocation.fieldData.state.list item=v}
+                                <option value="{$v.value}"{if $v.value == $eventDefaultState} selected="selected"{/if}>
+                                    {$v.name} {if $eventDefaultState == $v.value} (default) {/if}
+                                </option>
+                            {/foreach}
                         </select>
                     </td>
                 </tr>
                         <input id="zip_{ newLocID }" data-id="{ newLocID }" type="text" name="{ newLocID }_zip" value="{$newLocation.fieldData.zip}" class="glm-form-text-input-medium zipcode-input">
                     </td>
                 </tr>
+                <tr>
+                    <th>County:</th>
+                    <td>
+                        <select id="county_{ newLocID }" data-id="{ newLocID }" name="{ newLocID }_county">
+                            <option value="0"></option>
+                            {foreach from=$newLocation.fieldData.county.list item=v}
+                                <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                            {/foreach}
+                        </select>
+                    </td>
+                </tr>
                 <tr>
                     <th>Country:</th>
                     <td>
                         <select id="country_{ newLocID }" data-id="{ newLocID }" name="{ newLocID }_country">
-            {foreach from=$newLocation.fieldData.country.list item=v}
-                            <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
-                                {$v.name} {$v.value}
-                            </option>
-            {/foreach}
+                            {foreach from=$newLocation.fieldData.country.list item=v}
+                                <option value="{$v.value}"{if $v.default} selected="selected"{/if}>
+                                    {$v.name} {$v.value}
+                                </option>
+                            {/foreach}
                         </select>
                     </td>
                 </tr>
                     <td>
                         <select name="{ newLocID }_region">
                             <option value="0"></option>
-            {foreach from=$newLocation.fieldData.region.list item=v}
-                            <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
-            {/foreach}
+                            {foreach from=$newLocation.fieldData.region.list item=v}
+                                <option value="{$v.value}"{if $v.default} selected="selected"{/if}>{$v.name}</option>
+                            {/foreach}
                         </select>
                     </td>
                 </tr>
                 <tr>
                     <th>Location:</th>
                     <td>
-                    <!-- Only doing one event per location now.
+                        {* Only doing one event per location now.
                         <span class="glm-right"><a id="deleteLocation_{ newLocID }" data-id="{ newLocID }" class="button button-primary glm-button glm-right delete-location">Delete Location</a></span>
-                    -->
+                        *}
                         <div id="glm-estimate-location_{ newLocID }" class="button button-secondary">Map Location Using Address</div>
                         <p>
                             {if $settings.selected_map_interface == 1}
-                                <!--  Leaflet Map -->
+                                {*  Leaflet Map *}
                                 <div id="locationMap_{ newLocID }" style="height: 400px; width: 100%;"></div>
                             {/if}
 
                             {if $settings.selected_map_interface == 2}
-                                <!-- Google Map -->
+                                {* Google Map *}
                                 <div id="locationMap_{ newLocID }" class="glm-map-edit-small" style="height: 400; width: 600px;">(map loads here)</div>
                             {/if}
 
index bf8b127..c7cdbc6 100644 (file)
                         <tr>
                             <th>Front-End Event Search Form</th>
                             <td>
+                                <label> <input type="checkbox" name="show_search_category" {if $eventsSettings.fieldData.show_search_category.value}checked{/if}> Show Category Search</label><br><br>
                                 <label> <input type="checkbox" name="show_search_city" {if $eventsSettings.fieldData.show_search_city.value}checked{/if}> Show City Search</label><br><br>
                                 <label> <input type="checkbox" name="show_search_region" {if $eventsSettings.fieldData.show_search_region.value}checked{/if}> Show Region Search</label><br><br>
+                                <label> <input type="checkbox" name="show_search_county" {if $eventsSettings.fieldData.show_search_county.value}checked{/if}> Show County Search</label><br><br>
                             </td>
                         </tr>
                         <tr>
index 8d46e3a..a49b12f 100644 (file)
                         </select>
                     </div>
                 {/if}
-                <div class="glma-small-8 glma-medium-3 glma-column">
-                    <input class="glm-search-icon glma-right" type="image" alt="Search" src="{$assetsUrl}search-icon-24x24.png">
-                    <select id="glm-event-category" name="category" class="glma-select">
-                        <option value="0">-- All Categories --</option>
-                        {foreach $categories as $cat}
-                            <option value="{$cat.id}"{if $cat.default == 1} selected{/if}>{$cat.name}</option>
-                        {/foreach}
-                    </select>
-                </div>
-                {if $settings.show_search_city || $settings.show_search_region}
+                {if $settings.enable_counties && $settings.show_search_county}
+                    <div class="glma-small-8 glma-medium-3 glma-column">
+                        <select id="glm-event-county" name="county" class="glma-select">
+                            <option value="0">-- All Counties --</option>
+                            {foreach $counties as $county}
+                                <option value="{$county.id}"{if $county.default == 1} selected{/if}>{$county.name}</option>
+                            {/foreach}
+                        </select>
+                    </div>
+                {/if}
+                {if $settings.show_search_category}
+                    <div class="glma-small-8 glma-medium-3 glma-column">
+                        <input class="glm-search-icon glma-right" type="image" alt="Search" src="{$assetsUrl}search-icon-24x24.png">
+                        <select id="glm-event-category" name="category" class="glma-select">
+                            <option value="0">-- All Categories --</option>
+                            {foreach $categories as $cat}
+                                <option value="{$cat.id}"{if $cat.default == 1} selected{/if}>{$cat.name}</option>
+                            {/foreach}
+                        </select>
+                    </div>
+                {/if}
+                {if $settings.show_search_city || $settings.show_search_region || $settings.show_search_county}
                     <div class="glma-small-12 glma-medium-9 glma-columns view-select">
                         <select id="glm-event-view-select" class="glma-select">
                             <option id="agenda-view-option" value="agenda"> Agenda View </option>