Adding initial part of backbone.js into model and view.
authorSteve Sutton <steve@gaslightmedia.com>
Mon, 21 Aug 2017 20:37:31 +0000 (16:37 -0400)
committerSteve Sutton <steve@gaslightmedia.com>
Mon, 21 Aug 2017 20:37:31 +0000 (16:37 -0400)
Setting up initial backbone models and views.
I'm going to go through this very soon and organize the js files.

js/myBackbone.js [new file with mode: 0644]
models/front/registrations/list.php
models/front/registrations/registration.php
views/front/registrations/list.html
views/front/registrations/registration.html

diff --git a/js/myBackbone.js b/js/myBackbone.js
new file mode 100644 (file)
index 0000000..0765dbf
--- /dev/null
@@ -0,0 +1,75 @@
+jQuery(document).ready(function($){
+    // Backbone.js
+    // Model (Test)
+
+    var EventReg = Backbone.Model.extend({
+        // Default todo attrubute values
+        defaults: {
+            event_name: '',
+            descr: ''
+        }
+    });
+
+    var EventRegList = Backbone.Collection.extend({
+        model: EventReg
+    });
+
+    var EventRegView = Backbone.View.extend({
+
+        tagName: 'div',
+
+        className: 'glm-reg-event-item clearfix',
+
+        eventRegTpl: _.template(
+            '<h2><%= event_name %></h2>' +
+            '<div class="glm-reg-compcode-entry">' +
+            '<input type="text" placeholder="Enter Comp Code Here" />' +
+            '</div>' +
+            '<p><%= descr %></p>'
+        ),
+
+        // Called when the view is first created
+        initialize: function(){
+            this.listenTo(this.model, 'change', this.render);
+        },
+
+        render: function(){
+            this.$el.html( this.eventRegTpl( this.model.toJSON() ) );
+            return this;
+        },
+
+    });
+
+    var EventListView = Backbone.View.extend({
+
+        el: '#eventapp',
+
+        initialize: function(){
+            this.collection.bind('add', this.onModelAdded, this);
+            this.render();
+        },
+
+
+        onModelAdded: function(item) {
+            var eventView = new eventView({model: item});
+            this.$el.append( eventView.render().el);
+        },
+
+        render: function(){
+            var eventView = this.collection.map(function(item){
+                return (new EventRegView({model: item})).render().el;
+            });
+            this.$el.append(eventView);
+            return this;
+        },
+
+    });
+
+    // Use the registration object to build new EventReg
+    var event1 = new EventReg({ 'event_name': registration.event_name, 'descr': registration.descr });
+
+    var eventList = new EventRegList( [ event1 ] );
+
+    var eventRegView = new EventListView({ collection: eventList });
+
+});
index 303649f..2b2cdc7 100644 (file)
         // Save plugin configuration object
         $this->config = $config;
 
+        /*
+         * Run constructor for the REgistrations data class
+         *
+         * Note, the third parameter is a flag that indicates to the Contacts
+         * data class that it should flag a group of fields as 'view_only'.
+         */
+        parent::__construct(false, false, true);
     }
 
     /**
 
     public function modelAction($actionData = false)
     {
-        $start      = 1;
-        $limit      = 20;
-        $where      = 'true';
-        $alphaWhere = '';
+        $start          = 1;
+        $limit          = 20;
+        $where          = '';
+        $alphaWhere     = '';
+        $alphaList      = '';
+        $paging         = '';
+        $nextStart      = '';
+        $alphaSelected  = false;
+        $haveRegEvents  = false;
+        $regEventsCount = false;
 
         // Get any provided option
         if (isset($_REQUEST['option'])) {
 
         default:
             // Get a current list of reg events
-            $listResult = $this->getSimpleRegEventsList($where.$alphaWhere, 'event_name', true, 'id', $start, $limit);
+            $listResult = $this->getSimpleRegEventsList($where.$alphaWhere, 'event_name', true, 'id', $start, $limit, true);
             echo '<pre>$listResult: ' . print_r( $listResult, true ) . '</pre>';
-            break;
 
+            // Get paging results
+            $numbDisplayed = $listResult['returned'];
+            $lastDisplayed = $listResult['last'];
+            if ($start == 1) {
+                $prevStart = false;
+            } else {
+                $prevStart = $start - $limit;
+                if ($start < 1) {
+                    $start = 1;
+                }
+            }
+            if ($listResult['returned'] == $limit) {
+                $nextStart = $start + $limit;
+            }
+
+            // since we're doing paging, we have to break out just the event data
+            $list = $listResult['list'];
+            unset($listResult);
+
+            // If we have list entries - even if it's an empty list
+            $success       = true;
+            $haveRegEvents = false;
+            if ($list !== false) {
+
+                $success = true;
+
+                // If we have any entries
+                if (count($list) > 0) {
+                    $haveRegEvents = true;
+                }
+            }
+            break;
         }
 
         // including test data for now
 
         // Compile template data
         $templateData = array(
-            'events' => $eventData,
+            //'events'            => $eventData,
+            'regEventsCount'    => $regEventsCount,
+            'haveRegEvents'     => $haveRegEvents,
+            'regEvents'         => $list,
+            'alphaList'         => $alphaList,
+            'alphaSelected'     => $alphaSelected,
+            'numbDisplayed'     => $numbDisplayed,
+            'lastDisplayed'     => $lastDisplayed,
+            'paging'            => $paging,
+            'prevStart'         => $prevStart,
+            'nextStart'         => $nextStart,
+            'start'             => $start,
+            'limit'             => $limit,
         );
              // Return status, any suggested view, and any data to controller
         return array(
index 99b3262..08f0951 100644 (file)
         // Save plugin configuration object
         $this->config = $config;
 
+        /*
+         * Run constructor for the REgistrations data class
+         *
+         * Note, the third parameter is a flag that indicates to the Contacts
+         * data class that it should flag a group of fields as 'view_only'.
+         */
+        parent::__construct(false, false, true);
     }
 
     public function modelAction($actionData = false)
     {
+        wp_register_script(
+            'mybackboneapp',
+            GLM_MEMBERS_REGISTRATIONS_PLUGIN_URL . 'js/myBackbone.js',
+            array( 'jquery', 'backbone', 'underscore' ),
+            '1.0',
+            true
+        );
+        wp_enqueue_script( array( 'backbone', 'jquery', 'mybackboneapp' ) );
         $regEvent = array();
 
         // Get any provided option
         $view = 'registration';
 
         switch ( $option ) {
+        default:
+            // Get the RegEvent entry
+            $entry = $this->getEntry( $eventRegID );
+            //echo '<pre>$entry: ' . print_r( $entry, true ) . '</pre>';
+
+            break;
 
         }
 
@@ -76,7 +97,8 @@
 
         // Compile template data
         $templateData = array(
-            'events' => $regEvent,
+            'eventReg' => $entry,
+            'events'   => array()
         );
              // Return status, any suggested view, and any data to controller
         return array(
index ecc7bf6..adde015 100644 (file)
@@ -1,8 +1,8 @@
 <div class="glm-reg-event-list">
-    {foreach $events as $event}
+    {foreach $regEvents as $event}
     <div class="glm-reg-event-item clearfix">
-        <h2><a href="{$thisUrl}?page=registration&eventRegId={$event.id}">{$event.title}</a></h2>
-        <p>{$event.short_desc}</p>
+        <h2><a href="{$thisUrl}?page=registration&eventRegId={$event.id}">{$event.event_name}</a></h2>
+        <p>Short description will go here.</p>
 
     </div>
     {/foreach}
index 1f1f640..7d61869 100644 (file)
@@ -1,4 +1,5 @@
-<div class="glm-reg-event-list">
+<div id="eventapp"></div>
+<div class="glm-reg-event-list" style="display:none;">
     {foreach $events as $event}
     <div class="glm-reg-event-item clearfix">
         <h2>{$event.title}</h2>
@@ -29,3 +30,9 @@
     {/foreach}
 
 </div>
+<script>
+var registration = {
+    'event_name': '{$eventReg.event_name}',
+    'descr': 'This is only a test'
+};
+</script>