From b5d29f4c91f79e47ceac7a8cddd0699050bf9790 Mon Sep 17 00:00:00 2001 From: Steve Sutton Date: Tue, 19 Sep 2017 16:59:17 -0400 Subject: [PATCH] Setting up cart and request models. Also worked on placing the request model into cart. --- classes/regCartSupport.php | 24 +++++------ css/front.css | 27 +++++++++++-- gulpfile.js | 2 +- js/frontRegApp.js | 44 ++++++++++++++++++--- js/models/front/cart.js | 15 +++++-- js/models/front/request.js | 8 ++++ js/views/front/account.js | 2 +- js/views/front/app.js | 1 + js/views/front/regClass.js | 17 +++++++- models/front/registrations/registration.php | 29 +++++++++++++- setup/frontHooks.php | 5 +++ views/front/registrations/registration.html | 31 ++++++++------- 12 files changed, 163 insertions(+), 42 deletions(-) create mode 100644 js/models/front/request.js diff --git a/classes/regCartSupport.php b/classes/regCartSupport.php index eb45eb9..4d5eb30 100644 --- a/classes/regCartSupport.php +++ b/classes/regCartSupport.php @@ -79,19 +79,19 @@ class GlmRegCartSupport } - - + + /* * Create a new cart * * A new cart consists of only one reg_request record - * + * * @return array Array of request and all associated information or false * @access public */ public function createRegistrationCart() { - + $res = $this->wpdb->insert( GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_PREFIX . 'reg_request', array( @@ -105,22 +105,22 @@ class GlmRegCartSupport '%s' ) ); - + if ($res != 1) { return false; } - + // If there's a new reg request id, declare success $requestID = $this->wpdb->insert_id; if ($requestID) { return $requestID; } - + return false; - + } - - + + /* * Retrieve a complete cart * @@ -149,7 +149,7 @@ class GlmRegCartSupport $RegEvent = new GlmDataRegistrationsRegEvent($this->wpdb, $this->config); $RegTime = new GlmDataRegistrationsRegTime($this->wpdb, $this->config); - $RegRequest = new GlmDataRegistrationsRequest($this->wpdb, $this->config); + $RegRequest = new GlmDataRegistrationsRegRequest($this->wpdb, $this->config); $RequestEvent = new GlmDataRegistrationsRequestEvent($this->wpdb, $this->config); $RequestClass = new GlmDataRegistrationsRequestClass($this->wpdb, $this->config); $RequestRate = new GlmDataRegistrationsRegRequestRate($this->wpdb, $this->config); @@ -233,7 +233,7 @@ class GlmRegCartSupport } $this->cart['status'] = true; - + if ($json) { return json_encode($this->cart); } diff --git a/css/front.css b/css/front.css index bbb32bb..8e62919 100644 --- a/css/front.css +++ b/css/front.css @@ -29,13 +29,16 @@ float: left; clear: left; } -.glm-reg-level h3 { +.glm-reg-level-title { font-size: 1rem; font-weight: bold; - background-color: #729d8d; - color: white; text-decoration: none; padding: .3rem; + width: 80%; +} +.glm-class-row-header { + border-bottom: 4px solid black; + height: 2rem; } .glm-reg-entryforms { width: 100%; @@ -120,3 +123,21 @@ div.glm-reg-login { div.glm-reg-login h4 { color: white; } +.reg-class-detail { + /* display: none; */ +} +.toggle-class-open { + font-size: 1.5rem; + float: right; +} +.toggle-class-close { + font-size: 2rem; + display: none; + float: right; +} +.reg-class-count { + float: right; +} +.reg-class-accounts { + padding: 5px; +} diff --git a/gulpfile.js b/gulpfile.js index b3499ba..4f3ea37 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -39,7 +39,7 @@ gulp.task('watch', function(){ 'js/model/front/*.js', 'js/collections/front/*.js', 'js/views/front/*.js', - ], {awaitWriteFinish: true}, ['frontscripts']); + ], ['frontscripts']); }); gulp.task('default', ['frontscripts', 'adminscripts', 'watch']); diff --git a/js/frontRegApp.js b/js/frontRegApp.js index cd68d54..a6d4458 100644 --- a/js/frontRegApp.js +++ b/js/frontRegApp.js @@ -86,11 +86,20 @@ app.Models.Front.AccountDetail = app.Models.Front.Account.extend({ app.Models.Front.Cart = Backbone.Model.extend({ defaults: { - name: 'cart', + status: null, + errorMsg: '', + notes: [], + accounts: [], + times: [], + request: {}, }, - initialize: function(){ - this.events = new app.Collections.Front.RegEvents; + setRequest: function( request ){ + this.request = new app.Models.Front.Request( request ); + }, + + setAccounts: function( accounts ){ + this.accounts = accounts; }, }); @@ -201,6 +210,15 @@ app.Models.Front.regRate = Backbone.Model.extend({ }); +app.Models.Front.Request = Backbone.Model.extend({ + defaults: { + id: null, + account: null, + account_fname: '', + account_lname: '', + }, +}); + // js/collections/accounts.js // Event Registrant collection @@ -323,7 +341,7 @@ app.Views.Front.Account = Backbone.View.extend({ template: _.template( jQuery('#account-template').html() ), events: { - 'click label': 'edit', + //'click label': 'edit', 'click .glm-reg-level-registrant-delete': 'deleteOne', 'click .saveRegistrant': 'close', }, @@ -376,6 +394,7 @@ app.Views.Front.App = Backbone.View.extend({ el: '#regApp', initialize: function(){ + this.cart = cart; this.event = new app.Views.Front.RegEvent({ model: regEvent }); this.render(); }, @@ -464,9 +483,23 @@ app.Views.Front.RegClass = Backbone.View.extend({ events: { 'click .addRegistrant': 'newEntry', + 'click .toggle-class-open': 'toggleClassOpen', + 'click .toggle-class-close': 'toggleClassClose', //'click .glm-reg-level-registrant-delete': 'deleteOne', }, + toggleClassOpen: function(){ + this.$('.reg-class-detail').show(); + this.$('.toggle-class-open').hide(); + this.$('.toggle-class-close').show(); + }, + + toggleClassClose: function(){ + this.$('.reg-class-detail').hide(); + this.$('.toggle-class-close').hide(); + this.$('.toggle-class-open').show(); + }, + // For the new entry check the email from the server and see // if there's already an account setup. newEntry: function(){ @@ -522,7 +555,8 @@ app.Views.Front.RegClass = Backbone.View.extend({ var view = this.model.accounts.map(function(item){ return (new app.Views.Front.Account({ model: item })).render().el; }); - this.$el.append(view); + var accountContainer = this.$('.reg-class-accounts'); + accountContainer.append(view); return this; }, diff --git a/js/models/front/cart.js b/js/models/front/cart.js index 1436eee..6fb50a4 100644 --- a/js/models/front/cart.js +++ b/js/models/front/cart.js @@ -1,9 +1,18 @@ app.Models.Front.Cart = Backbone.Model.extend({ defaults: { - name: 'cart', + status: null, + errorMsg: '', + notes: [], + accounts: [], + times: [], + request: {}, }, - initialize: function(){ - this.events = new app.Collections.Front.RegEvents; + setRequest: function( request ){ + this.request = new app.Models.Front.Request( request ); + }, + + setAccounts: function( accounts ){ + this.accounts = accounts; }, }); diff --git a/js/models/front/request.js b/js/models/front/request.js new file mode 100644 index 0000000..39e1e29 --- /dev/null +++ b/js/models/front/request.js @@ -0,0 +1,8 @@ +app.Models.Front.Request = Backbone.Model.extend({ + defaults: { + id: null, + account: null, + account_fname: '', + account_lname: '', + }, +}); diff --git a/js/views/front/account.js b/js/views/front/account.js index 55dd8af..06d08eb 100644 --- a/js/views/front/account.js +++ b/js/views/front/account.js @@ -9,7 +9,7 @@ app.Views.Front.Account = Backbone.View.extend({ template: _.template( jQuery('#account-template').html() ), events: { - 'click label': 'edit', + //'click label': 'edit', 'click .glm-reg-level-registrant-delete': 'deleteOne', 'click .saveRegistrant': 'close', }, diff --git a/js/views/front/app.js b/js/views/front/app.js index fc0a947..a61b4c6 100644 --- a/js/views/front/app.js +++ b/js/views/front/app.js @@ -8,6 +8,7 @@ app.Views.Front.App = Backbone.View.extend({ el: '#regApp', initialize: function(){ + this.cart = cart; this.event = new app.Views.Front.RegEvent({ model: regEvent }); this.render(); }, diff --git a/js/views/front/regClass.js b/js/views/front/regClass.js index e24e12d..75efb09 100644 --- a/js/views/front/regClass.js +++ b/js/views/front/regClass.js @@ -24,9 +24,23 @@ app.Views.Front.RegClass = Backbone.View.extend({ events: { 'click .addRegistrant': 'newEntry', + 'click .toggle-class-open': 'toggleClassOpen', + 'click .toggle-class-close': 'toggleClassClose', //'click .glm-reg-level-registrant-delete': 'deleteOne', }, + toggleClassOpen: function(){ + this.$('.reg-class-detail').show(); + this.$('.toggle-class-open').hide(); + this.$('.toggle-class-close').show(); + }, + + toggleClassClose: function(){ + this.$('.reg-class-detail').hide(); + this.$('.toggle-class-close').hide(); + this.$('.toggle-class-open').show(); + }, + // For the new entry check the email from the server and see // if there's already an account setup. newEntry: function(){ @@ -82,7 +96,8 @@ app.Views.Front.RegClass = Backbone.View.extend({ var view = this.model.accounts.map(function(item){ return (new app.Views.Front.Account({ model: item })).render().el; }); - this.$el.append(view); + var accountContainer = this.$('.reg-class-accounts'); + accountContainer.append(view); return this; }, diff --git a/models/front/registrations/registration.php b/models/front/registrations/registration.php index 587cba0..e48edf9 100644 --- a/models/front/registrations/registration.php +++ b/models/front/registrations/registration.php @@ -70,7 +70,7 @@ } } - // Get account ID if supplied + // Get eventRegId if supplied if (isset($_REQUEST['eventRegId'])) { // Make sure it's numeric @@ -82,6 +82,29 @@ } $view = 'registration'; + // Check to see if a session is set for this cart + include GLM_MEMBERS_REGISTRATIONS_PLUGIN_CLASS_PATH . '/regCartSupport.php'; + $regCart = new GlmRegCartSupport( $this->wpdb, $this->config ); + if ( isset( $_SESSION['glm_reg_cart_id'] ) ) { + $cartId = $_SESSION['glm_reg_cart_id']; + //unset( $_SESSION['glm_reg_cart_id'] ); + //echo '
$cartId: ' . print_r( $cartId, true ) . '
'; + } else { + // create one + $cartId = $regCart->createRegistrationCart(); + //echo '
$cart: ' . print_r( $cart, true ) . '
'; + if ( isset( $cartId ) && filter_var( $cartId, FILTER_VALIDATE_INT ) ) { + $_SESSION['glm_reg_cart_id'] = $cartId; + } + + } + if ( isset( $cartId ) && filter_var( $cartId, FILTER_VALIDATE_INT ) ) { + $cart = $regCart->getRegistrationCart( $cartId ); + echo '
$cart: ' . print_r( $cart, true ) . '
'; + $regRequestJSON = json_encode( $cart['request'] ); + } + //echo '
$_SESSION: ' . print_r( $_SESSION, true ) . '
'; + switch ( $option ) { default: // Get the RegEvent entry @@ -99,7 +122,6 @@ 'cart_hold_days' => $regEvent['cart_hold_days'], 'terms' => 'Sample terms and conditions', ); - //echo '
$event: ' . print_r( $event, true ) . '
'; break; @@ -124,6 +146,7 @@ $jsonClasses[] = json_encode( $rClass ); } $regClassJSON = '[' . implode( ',', $jsonClasses ) . ']'; + $regCartJSON = json_encode( $cart ); // Compile template data $templateData = array( @@ -131,6 +154,8 @@ 'thisJsUrl' => GLM_MEMBERS_REGISTRATIONS_PLUGIN_URL . '/js', 'regEventJSON' => json_encode( $event ), 'regClassesJSON' => $regClassJSON, + 'regCartJSON' => $regCartJSON, + 'regRequestJSON' => $regRequestJSON, 'eventData' => $eventData, ); // Return status, any suggested view, and any data to controller diff --git a/setup/frontHooks.php b/setup/frontHooks.php index d3d3765..49e91aa 100644 --- a/setup/frontHooks.php +++ b/setup/frontHooks.php @@ -25,3 +25,8 @@ * * *** Also note that parameters will be in the context of the main front controller constructor. *** */ +add_action('init', function(){ + if ( !session_id() ) { + session_start(); + } +}); diff --git a/views/front/registrations/registration.html b/views/front/registrations/registration.html index 034facc..9980ab1 100644 --- a/views/front/registrations/registration.html +++ b/views/front/registrations/registration.html @@ -35,24 +35,24 @@ @@ -82,7 +82,10 @@ var app = { Views: { Front: {}, Admin: {} }, }; var regEvent = ''; +var cart = ''; jQuery(function($){ + cart = new app.Models.Front.Cart( {$regCartJSON} ); + cart.setRequest( {$regRequestJSON} ); regEvent = new app.Models.Front.RegEvent; regEvent.set( {$regEventJSON} ); regEvent.setClasses( {$regClassesJSON} ); -- 2.17.1