Setting up cart and request models.
authorSteve Sutton <steve@gaslightmedia.com>
Tue, 19 Sep 2017 20:59:17 +0000 (16:59 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Tue, 19 Sep 2017 20:59:17 +0000 (16:59 -0400)
Also worked on placing the request model into cart.

12 files changed:
classes/regCartSupport.php
css/front.css
gulpfile.js
js/frontRegApp.js
js/models/front/cart.js
js/models/front/request.js [new file with mode: 0644]
js/views/front/account.js
js/views/front/app.js
js/views/front/regClass.js
models/front/registrations/registration.php
setup/frontHooks.php
views/front/registrations/registration.html

index eb45eb9..4d5eb30 100644 (file)
@@ -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);
         }
index bbb32bb..8e62919 100644 (file)
     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;
+}
index b3499ba..4f3ea37 100644 (file)
@@ -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']);
index cd68d54..a6d4458 100644 (file)
@@ -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;
     },
 
index 1436eee..6fb50a4 100644 (file)
@@ -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 (file)
index 0000000..39e1e29
--- /dev/null
@@ -0,0 +1,8 @@
+app.Models.Front.Request = Backbone.Model.extend({
+    defaults: {
+        id: null,
+        account: null,
+        account_fname: '',
+        account_lname: '',
+    },
+});
index 55dd8af..06d08eb 100644 (file)
@@ -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',
     },
index fc0a947..a61b4c6 100644 (file)
@@ -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();
     },
index e24e12d..75efb09 100644 (file)
@@ -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;
     },
 
index 587cba0..e48edf9 100644 (file)
@@ -70,7 +70,7 @@
             }
         }
 
-        // Get account ID if supplied
+        // Get eventRegId if supplied
         if (isset($_REQUEST['eventRegId'])) {
 
             // Make sure it's numeric
         }
         $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 '<pre>$cartId: ' . print_r( $cartId, true ) . '</pre>';
+        } else {
+            // create one
+            $cartId = $regCart->createRegistrationCart();
+            //echo '<pre>$cart: ' . print_r( $cart, true ) . '</pre>';
+            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 '<pre>$cart: ' . print_r( $cart, true ) . '</pre>';
+            $regRequestJSON = json_encode( $cart['request'] );
+        }
+        //echo '<pre>$_SESSION: ' . print_r( $_SESSION, true ) . '</pre>';
+
         switch ( $option ) {
         default:
             // Get the RegEvent entry
                 'cart_hold_days'       => $regEvent['cart_hold_days'],
                 'terms'                => 'Sample terms and conditions',
             );
-            //echo '<pre>$event: ' . print_r( $event, true ) . '</pre>';
 
             break;
 
             $jsonClasses[] = json_encode( $rClass );
         }
         $regClassJSON = '[' . implode( ',', $jsonClasses ) . ']';
+        $regCartJSON = json_encode( $cart );
 
         // Compile template data
         $templateData = array(
             '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
index d3d3765..49e91aa 100644 (file)
@@ -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();
+    }
+});
index 034facc..9980ab1 100644 (file)
 </script>
 
 <script type="text/template" id="regClass-template">
-    <h3><%= name %></h3>
-    <p><%= descr %></p>
-    <div>
+    <div class="glm-class-row-header">
+        <span class="glm-reg-level-title"><%= name %></span>
+        <span class="reg-class-count"><%= reg_count %></span>
+        <span class="toggle-class-open">+</span>
+        <span class="toggle-class-close">-</span>
+    </div>
+    <div class="reg-class-detail">
+        <div><%- descr %></div>
         <div>Current Rate: <%= reg_rate_name %></div>
         <div>Base Price: $<%= reg_rate_base_price %></div>
         <div>Per Registrant: $<%= reg_rate_per_reg %></div>
-        <div>Total: <%= reg_count %></div>
-        <div>Total Price:
-            <% if ( reg_count > 0 ) { %>
-        $<%= reg_rate_base_price + ( reg_rate_per_reg * reg_count ) %>
-            <% } else { %>
-        $0
-            <% } %>
+        <div class="registrant-add clearfix">
+            <input type="text" class="addEmail" placeholder="Enter Email Address">
+            <input type="submit" class="addRegistrant" value="Add">
+        </div>
+        <div class="reg-class-accounts">
+            Registrants
         </div>
-    </div>
-    <div class="registrant-add clearfix">
-        <input type="text" class="addEmail" placeholder="Enter Email Address">
-        <input type="submit" class="addRegistrant" value="Add">
     </div>
 </script>
 
@@ -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} );