From 3a6fc8c757277e3e5ff14c2e5c49514b41d75f2f Mon Sep 17 00:00:00 2001 From: Chuck Scott Date: Mon, 28 Aug 2017 10:28:13 -0400 Subject: [PATCH] Added reg_time_pending table to track hold times for registrant slots while in carts that have not checked out. Started adding registration times calendar to admin reg event dashboard. --- index.php | 2 +- models/admin/registrations/event.php | 107 +++++++++++++++++- ...V0.0.9.sql => create_database_V0.0.10.sql} | 16 +++ setup/databaseScripts/dbVersions.php | 3 +- ...e_V0.0.9.sql => drop_database_V0.0.10.sql} | 0 .../update_database_V0.0.10.sql | 21 ++++ views/admin/registrations/event.html | 59 +++++++++- 7 files changed, 201 insertions(+), 7 deletions(-) rename setup/databaseScripts/{create_database_V0.0.9.sql => create_database_V0.0.10.sql} (98%) rename setup/databaseScripts/{drop_database_V0.0.9.sql => drop_database_V0.0.10.sql} (100%) create mode 100644 setup/databaseScripts/update_database_V0.0.10.sql diff --git a/index.php b/index.php index 0351e4c..859ace9 100644 --- a/index.php +++ b/index.php @@ -44,7 +44,7 @@ if (!defined('ABSPATH')) { * version from this plugin. */ define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_VERSION', '0.0.1'); -define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_VERSION', '0.0.9'); +define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_VERSION', '0.0.10'); // This is the minimum version of the GLM Members DB plugin require for this plugin. define('GLM_MEMBERS_REGISTRATIONS_PLUGIN_MIN_MEMBERS_REQUIRED_VERSION', '2.8.0'); diff --git a/models/admin/registrations/event.php b/models/admin/registrations/event.php index 4d43dfe..a2c74ed 100644 --- a/models/admin/registrations/event.php +++ b/models/admin/registrations/event.php @@ -92,6 +92,10 @@ class GlmMembersAdmin_registrations_event extends GlmDataRegistrationsRegEvent $template = 'list.html'; $regEvent = false; $haveEvent = false; + $haveRegEventRecurrences = false; + $haveRegEventTimes = false; + $regEventFirstTime = false; + $regEventLastTime = false; $eventID = 0; $haveRegEvent = false; $regEventID = 0; @@ -232,18 +236,111 @@ class GlmMembersAdmin_registrations_event extends GlmDataRegistrationsRegEvent case 'dashboard': default: + // If we have an event ID if ($regEventID) { + + // Try to get the event configuration including recurrences and times $this->postProcAddedEventData = true; $regEvent = $this->getEventConfig($regEventID, true, true, true); + + // If we have the event data if ($regEvent) { + $haveRegEvent = true; + + // If event is time_specific and we have recurrences for the event + if ($regEvent['time_specific']['value'] && is_array($regEvent['recurrences']) && count($regEvent['recurrences']) > 0) { + + $haveRegEventRecurrences = true; + + // For each recurrence + foreach ($regEvent['recurrences'] as $k=>$v) { + + $regEvent['recurrences'][$k]['haveTimes'] = false; + + // If we have times for this recuirrence + if ($v['times'] && count($v['times']) > 0) { + + $regEvent['recurrences'][$k]['haveTimes'] = false; + $haveRegEventTimes = true; + + // Get the first event date/time + $first = current($v['times']); + $last = end($v['times']); + $regEvent['recurrences'][$k]['first_time'] = $first; + $regEvent['recurrences'][$k]['lastTime'] = $last; + + // Set event first and last times + if (!$regEventFirstTime || $regEventFirstTime['timestamp'] < $first ) { + $regEventFirstTime = $first; + } + if (!$regEventLastTime || $regEventLastTime['timestamp'] > $last ) { + $regEventLastTime = $last; + } + + // Check all event times for matching reg event times + foreach ($v['times'] as $tk=>$tv) { + + // If time doesn't exist in reg_times + if (!isset($regEvent['reg_times'][$tk])) { + + $sTime = date('Y-m-d H:i:s',strtotime($tv['start_time']['datetime'])); + $eTime = date('Y-m-d H:i:s',strtotime($tv['end_time']['datetime'])); + + // Add reg event time + $this->wpdb->insert( + GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_PREFIX."reg_time", + array( + 'reg_event' => $regEvent['event'], + 'event_time' => $tk, + 'start_datetime' => $sTime, + 'end_datetime' => $eTime, + 'all_day' => $tv['all_day']['value'], + 'attendees' => $regEvent['attendees'], + 'attendee_max' => $regEvent['attendee_max'], + 'attendee_count' => 0, + 'attendees_pending' => 0, + 'attendees_available' => $regEvent['attendee_max'], + 'total_base_charge' => 0, + 'total_per_attendee' => 0, + 'total_other' => 0, + 'total_taxes' => 0, + 'total_charges' => 0, + 'total_discounts' => 0, + 'total_payments' => 0 + ), + array( + '%d', // reg_event + '%d', // event_time record ID + '%s', // start_datetime + '%s', // end_datetime + '%d', // all_day flag + '%d', // attendees flag + '%d', // attendee_max + '%d', // attendee_count + '%d', // attendees_pending + '%d', // attendees_available + '%f', // total_base__charge + '%f', // total_per_attendee + '%f', // total_other + '%f', // total_taxes + '%f', // total_charges + '%f', // total_discounts + '%f' // total_payments + ) + ); + } + } + } + } + } } } - + if (!$haveRegEvent) { $reason = 'Unable to load registration event data or registration event not selected.'; } - + $template = 'event.html'; break; @@ -253,13 +350,17 @@ class GlmMembersAdmin_registrations_event extends GlmDataRegistrationsRegEvent if ($haveRegEvent) { update_option('glmMembersDatabaseLastUsedRegEventID', $regEventID); } - + // Compile template data $templateData = array( 'option' => $option, 'haveEvent' => $haveEvent, 'eventID' => $eventID, 'haveRegEvent' => $haveRegEvent, + 'haveRegEventRecurrences' => $haveRegEventRecurrences, + 'haveRegEventTimes' => $haveRegEventTimes, + 'regEventFirstTime' => $regEventFirstTime, + 'regEventLastTime' => $regEventLastTime, 'regEventID' => $regEventID, 'regEvent' => $regEvent, 'regEventUpdated' => $regEventUpdated, diff --git a/setup/databaseScripts/create_database_V0.0.9.sql b/setup/databaseScripts/create_database_V0.0.10.sql similarity index 98% rename from setup/databaseScripts/create_database_V0.0.9.sql rename to setup/databaseScripts/create_database_V0.0.10.sql index 5f0f1ad..85d0af4 100644 --- a/setup/databaseScripts/create_database_V0.0.9.sql +++ b/setup/databaseScripts/create_database_V0.0.10.sql @@ -359,6 +359,22 @@ CREATE TABLE {prefix}reg_time ( ---- +-- Pending Attendees - In carts but not checked out +-- Attendee counts may be held for a particular reg_time entry for carts that have not been checked out +-- These are held for reg_event reg_hold_minutes, afterwhich they are timed out and removed from this table +-- Cart entries are given the ID's for these entries when a hold is requested, if the entry is gone, the hold has expired +CREATE TABLE {prefix}reg_time_pending ( + id INT NOT NULL AUTO_INCREMENT, + reg_event INT NULL, -- Pointer to reg_event table + reg_time INT NULL, -- ID of time record + expire_time DATETIME NULL, -- Time at which this hold expires + PRIMARY KEY (id), + INDEX (reg_event), + INDEX (event_time) +); + +---- + -- Registration Class - Type of registration for a specific event - Equates to "Rate Options" in the old system -- One or more for each event CREATE TABLE {prefix}reg_class ( diff --git a/setup/databaseScripts/dbVersions.php b/setup/databaseScripts/dbVersions.php index 454a380..7ad380a 100644 --- a/setup/databaseScripts/dbVersions.php +++ b/setup/databaseScripts/dbVersions.php @@ -22,7 +22,8 @@ $glmMembersRegistrationsDbVersions = array( '0.0.6' => array('version' => '0.0.6', 'tables' => 19, 'date' => '04/06/2017'), '0.0.7' => array('version' => '0.0.7', 'tables' => 19, 'date' => '04/07/2017'), '0.0.8' => array('version' => '0.0.8', 'tables' => 19, 'date' => '04/18/2017'), - '0.0.9' => array('version' => '0.0.9', 'tables' => 19, 'date' => '04/24/2017') + '0.0.9' => array('version' => '0.0.9', 'tables' => 19, 'date' => '04/24/2017'), + '0.0.10' => array('version' => '0.0.10', 'tables' => 20, 'date' => '04/25/2017') ); diff --git a/setup/databaseScripts/drop_database_V0.0.9.sql b/setup/databaseScripts/drop_database_V0.0.10.sql similarity index 100% rename from setup/databaseScripts/drop_database_V0.0.9.sql rename to setup/databaseScripts/drop_database_V0.0.10.sql diff --git a/setup/databaseScripts/update_database_V0.0.10.sql b/setup/databaseScripts/update_database_V0.0.10.sql new file mode 100644 index 0000000..1f825fb --- /dev/null +++ b/setup/databaseScripts/update_database_V0.0.10.sql @@ -0,0 +1,21 @@ +-- Gaslight Media Members Database - Registratiuons Add-On +-- File Created: 08/24/17 09:47:15 +-- Database Version: 0.0.10 +-- 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 + +-- Pending Attendees - In carts but not checked out +-- Attendee counts may be held for a particular reg_time entry for carts that have not been checked out +-- These are held for reg_event reg_hold_minutes, afterwhich they are timed out and removed from this table +-- Cart entries are given the ID's for these entries when a hold is requested, if the entry is gone, the hold has expired +CREATE TABLE {prefix}reg_time_pending ( + id INT NOT NULL AUTO_INCREMENT, + reg_event INT NULL, -- Pointer to reg_event table + reg_time INT NULL, -- ID of time record + expire_time DATETIME NULL, -- Time at which this hold expires + PRIMARY KEY (id), + INDEX (reg_event), + INDEX (expire_time) +); diff --git a/views/admin/registrations/event.html b/views/admin/registrations/event.html index 058c1df..507c782 100644 --- a/views/admin/registrations/event.html +++ b/views/admin/registrations/event.html @@ -22,10 +22,20 @@
-

Earliest Registration Date:

+

Earliest Event Date:

- {$regEvent.earliest_registration} + {$regEventFirstTime.start_time.datetime} +
+
+
+
+
+
+

Latest Event Date:

+
+
+ {$regEventLastTime.start_time.datetime}
@@ -48,6 +58,16 @@ {/if} + + + + + +
+
(calendar loads here)
+
+ + {else}

{/if} @@ -56,6 +76,41 @@