// Default registrant values
defaults: {
+ name: 'AppAccount',
id: '',
email: '',
- parent: '',
},
url: ajaxUrl+'&glm_action=regFront&collection=account',
defaults: {
username: '',
- password: ''
+ password: '',
+ message: '',
},
urlRoot: appLoginUrl,
app.Views.Front.Account = Backbone.View.extend({
tagName: 'div',
- className: 'glm-reg-level-registrant clearfix',
+ className: '',
template: _.template( jQuery('#account-template').html() ),
events: {
- //'click label': 'edit',
- 'click .glm-reg-level-registrant-delete': 'deleteOne',
- 'click .saveRegistrant': 'close',
},
initialize: function(){
this.listenTo( this.model, 'change', this.render );
- //this.listenTo( this.model, 'destroy', this.remove );
return this;
},
render: function(){
this.$el.html( this.template( this.model.toJSON() ) );
- //this.$nameInput = this.$('.editName');
- this.$emailInput = this.$('.editEmail');
return this;
},
- deleteOne: function(){
- //console.log( this.model );
- this.model.destroy();
- this.remove();
- },
-
- edit: function(){
- this.$el.addClass( 'editing' );
- this.$emailInput.focus();
- },
-
- close: function(){
- var regemail = this.$emailInput.val().trim();
-
- this.model.save({ email: regemail }, { validate: true });
- if ( this.model.validationError ) {
- alert( this.model.validationError );
- this.render();
- }
-
- this.$el.removeClass('editing');
- },
-
});
// js/views/app.js
this.cart = cart;
this.event = new app.Views.Front.RegEvent({ model: regEvent });
this.render();
- // var regRequest = cart.get( 'request' );
- // console.log( regRequest.id );
},
render: function(){
+ // Check to see if there's a login
+ if ( loginAccount ) {
+ jQuery('.glm-reg-account-login').hide();
+ var accountView = new app.Views.Front.Account({ model: loginAccount });
+ this.$el.append( accountView.render().el );
+ }
this.$el.append( this.event.render().el );
return this;
},
events: {
'click #appLogin': 'login',
'click #glm-reg-cart-continue': 'continue',
+ 'click #accountLogin': 'loginToAccount',
+ 'click #accountLogout': 'logout',
},
continue: function(){
console.log( cart );
// Need to update the cart
+ },
+ logout: function(){
+ // Send data to Logout
+ jQuery.ajax({
+ context: this,
+ url: appAccountUrl,
+ dataType: 'json',
+ data: 'option=logout'
+ })
+ .done(function( msg ){
+ console.log( msg );
+ // Here we can update.
+ loginAccount = '';
+ this.render();
+ })
+ .fail(function(msg){
+ console.log('Fail:');
+ console.log( msg );
+ });
+ },
+
+ loginToAccount: function(){
+ this.$userInput = jQuery('.login');
+ this.$pwdInput = jQuery('.password');
+
+ // Send data to login ajax and verify user login
+ jQuery.ajax({
+ context: this,
+ url: appAccountUrl,
+ dataType: 'json',
+ data: 'option=login&username=' + this.$userInput.val().trim() + '&password=' + this.$pwdInput.val().trim()
+ })
+ .done(function(account){
+ if ( account.valid !== false ) {
+ // Create account model and assign to this.loginAccount
+ loginAccount = new app.Models.Front.Account({
+ id: account.id,
+ email: account.email
+ });
+ // Destroy the model and remove the view
+ this.loginModel.destroy();
+ this.loginView.remove();
+ this.render();
+ } else {
+ console.log( 'Login failed' );
+ this.loginModel.set({ message: 'Failed login!' });
+ }
+ })
+ .fail(function(msg){
+ console.log('Fail:');
+ console.log( msg );
+ });
},
login: function(){
- this.loginView = new app.Views.Front.Login({ model: new app.Models.Front.Login() });
+ this.loginModel = new app.Models.Front.Login();
+ this.loginView = new app.Views.Front.Login({ model: this.loginModel });
this.$el.append( this.loginView.render().el );
jQuery('#appLogin').hide();
},
template: _.template( jQuery('#eventReg-account-login').html() ),
events: {
- 'click .accountLogin': 'loginToAccount',
'click #loginCancel': 'closeLoginForm'
},
initialize: function(){
+ this.listenTo( this.model, 'change', this.render );
return this;
},
return;
},
- loginToAccount: function(){
- // Send data to login ajax and verify user login
- jQuery.ajax({
- url: ajaxUrl
- });
- },
-
render: function(){
this.$el.html( this.template( this.model.toJSON() ) );
- this.$userInput = jQuery('.login');
- this.$pwdInput = jQuery('.password');
return this;
},
},
render: function(){
+ console.log( loginAccount );
+ if ( loginAccount === '' ) {
+ console.log( 'hide called for .glm-add-account' );
+ this.$('.glm-add-account').hide();
+ }
this.model.set({ reg_count: this.model.registrants.length });
this.$el.html( this.template( this.model.toJSON() ) );
// Need to see if this class has attendees and render them
events: {
'click .addRegistrant': 'newEntry',
+ 'click .glm-add-account': 'addAccount',
+ 'click .glm-add-new-account': 'addNewAccount',
+ },
+
+ addAccount: function(){
+ console.log( 'Add Account Called' );
+ // Check to make sure the loginAccount is not empty
+ if ( loginAccount !== '' ) {
+ var regRequest = cart.get( 'request' );
+ var accountEmail = loginAccount.get( 'email' );
+ var accountId = loginAccount.get( 'id' );
+ if ( accountId && accountEmail ) {
+ this.model.registrants.create({
+ option: 'add',
+ account: accountId,
+ reg_request: regRequest.id,
+ reg_event: this.model.get( 'reg_event' ),
+ reg_class: this.model.get( 'id' ),
+ reg_rate: this.model.get('reg_rate_id'),
+ email: accountEmail,
+ });
+ }
+ }
+ },
+
+ addNewAccount: function(){
+ console.log( 'Add New Account Called' )
},
toggleClassOpen: function(){
// Default registrant values
defaults: {
+ name: 'AppAccount',
id: '',
email: '',
- parent: '',
},
url: ajaxUrl+'&glm_action=regFront&collection=account',
defaults: {
username: '',
- password: ''
+ password: '',
+ message: '',
},
urlRoot: appLoginUrl,
app.Views.Front.Account = Backbone.View.extend({
tagName: 'div',
- className: 'glm-reg-level-registrant clearfix',
+ className: '',
template: _.template( jQuery('#account-template').html() ),
events: {
- //'click label': 'edit',
- 'click .glm-reg-level-registrant-delete': 'deleteOne',
- 'click .saveRegistrant': 'close',
},
initialize: function(){
this.listenTo( this.model, 'change', this.render );
- //this.listenTo( this.model, 'destroy', this.remove );
return this;
},
render: function(){
this.$el.html( this.template( this.model.toJSON() ) );
- //this.$nameInput = this.$('.editName');
- this.$emailInput = this.$('.editEmail');
return this;
},
- deleteOne: function(){
- //console.log( this.model );
- this.model.destroy();
- this.remove();
- },
-
- edit: function(){
- this.$el.addClass( 'editing' );
- this.$emailInput.focus();
- },
-
- close: function(){
- var regemail = this.$emailInput.val().trim();
-
- this.model.save({ email: regemail }, { validate: true });
- if ( this.model.validationError ) {
- alert( this.model.validationError );
- this.render();
- }
-
- this.$el.removeClass('editing');
- },
-
});
this.cart = cart;
this.event = new app.Views.Front.RegEvent({ model: regEvent });
this.render();
- // var regRequest = cart.get( 'request' );
- // console.log( regRequest.id );
},
render: function(){
+ // Check to see if there's a login
+ if ( loginAccount ) {
+ jQuery('.glm-reg-account-login').hide();
+ var accountView = new app.Views.Front.Account({ model: loginAccount });
+ this.$el.append( accountView.render().el );
+ }
this.$el.append( this.event.render().el );
return this;
},
events: {
'click #appLogin': 'login',
'click #glm-reg-cart-continue': 'continue',
+ 'click #accountLogin': 'loginToAccount',
+ 'click #accountLogout': 'logout',
},
continue: function(){
console.log( cart );
// Need to update the cart
+ },
+
+ logout: function(){
+ // Send data to Logout
+ jQuery.ajax({
+ context: this,
+ url: appAccountUrl,
+ dataType: 'json',
+ data: 'option=logout'
+ })
+ .done(function( msg ){
+ console.log( msg );
+ // Here we can update.
+ loginAccount = '';
+ this.render();
+ })
+ .fail(function(msg){
+ console.log('Fail:');
+ console.log( msg );
+ });
+ },
+
+ loginToAccount: function(){
+ this.$userInput = jQuery('.login');
+ this.$pwdInput = jQuery('.password');
+ // Send data to login ajax and verify user login
+ jQuery.ajax({
+ context: this,
+ url: appAccountUrl,
+ dataType: 'json',
+ data: 'option=login&username=' + this.$userInput.val().trim() + '&password=' + this.$pwdInput.val().trim()
+ })
+ .done(function(account){
+ if ( account.valid !== false ) {
+ // Create account model and assign to this.loginAccount
+ loginAccount = new app.Models.Front.Account({
+ id: account.id,
+ email: account.email
+ });
+ // Destroy the model and remove the view
+ this.loginModel.destroy();
+ this.loginView.remove();
+ this.render();
+ } else {
+ console.log( 'Login failed' );
+ this.loginModel.set({ message: 'Failed login!' });
+ }
+ })
+ .fail(function(msg){
+ console.log('Fail:');
+ console.log( msg );
+ });
},
login: function(){
- this.loginView = new app.Views.Front.Login({ model: new app.Models.Front.Login() });
+ this.loginModel = new app.Models.Front.Login();
+ this.loginView = new app.Views.Front.Login({ model: this.loginModel });
this.$el.append( this.loginView.render().el );
jQuery('#appLogin').hide();
},
template: _.template( jQuery('#eventReg-account-login').html() ),
events: {
- 'click .accountLogin': 'loginToAccount',
'click #loginCancel': 'closeLoginForm'
},
initialize: function(){
+ this.listenTo( this.model, 'change', this.render );
return this;
},
return;
},
- loginToAccount: function(){
- // Send data to login ajax and verify user login
- jQuery.ajax({
- url: ajaxUrl
- });
- },
-
render: function(){
this.$el.html( this.template( this.model.toJSON() ) );
- this.$userInput = jQuery('.login');
- this.$pwdInput = jQuery('.password');
return this;
},
},
render: function(){
+ console.log( loginAccount );
+ if ( loginAccount === '' ) {
+ console.log( 'hide called for .glm-add-account' );
+ this.$('.glm-add-account').hide();
+ }
this.model.set({ reg_count: this.model.registrants.length });
this.$el.html( this.template( this.model.toJSON() ) );
// Need to see if this class has attendees and render them
events: {
'click .addRegistrant': 'newEntry',
+ 'click .glm-add-account': 'addAccount',
+ 'click .glm-add-new-account': 'addNewAccount',
+ },
+
+ addAccount: function(){
+ console.log( 'Add Account Called' );
+ // Check to make sure the loginAccount is not empty
+ if ( loginAccount !== '' ) {
+ var regRequest = cart.get( 'request' );
+ var accountEmail = loginAccount.get( 'email' );
+ var accountId = loginAccount.get( 'id' );
+ if ( accountId && accountEmail ) {
+ this.model.registrants.create({
+ option: 'add',
+ account: accountId,
+ reg_request: regRequest.id,
+ reg_event: this.model.get( 'reg_event' ),
+ reg_class: this.model.get( 'id' ),
+ reg_rate: this.model.get('reg_rate_id'),
+ email: accountEmail,
+ });
+ }
+ }
+ },
+
+ addNewAccount: function(){
+ console.log( 'Add New Account Called' )
},
toggleClassOpen: function(){
*/
public function modelAction( $actionData = false )
{
- //static $accountId = 10;
$return = false;
$option = filter_var( $_REQUEST['option'], FILTER_SANITIZE_STRING );
switch ( $option ) {
+ case 'logout':
+ unset( $_SESSION['LoginAccount'] );
+ $return = array( 'valid' => false );
+ break;
case 'login':
+ $username = filter_var( $_REQUEST['username'], FILTER_SANITIZE_STRING );
+ $password = filter_var( $_REQUEST['password'], FILTER_SANITIZE_STRING );
// Check accounts for ones that match
- $returnPassword = $this->wpdb->get_var(
+ $returnData = $this->wpdb->get_row(
$this->wpdb->prepare(
- "SELECT password
+ "SELECT id,password
FROM " . GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_PREFIX . "account
WHERE email = %s",
- $jsonData->username
- )
+ $username
+ ),
+ ARRAY_A
);
- if ( $returnPassword == crypt( $jsonData->password, $returnPassword ) ) {
- $return = array( 'valid' => true );
+ $returnPassword = $returnData['password'];
+ $returnId = $returnData['id'];
+ if ( $returnPassword == crypt( $password, $returnPassword ) ) {
+ $return = array( 'valid' => true, 'email' => $username, 'id' => $returnId );
+ // Add the user to the php session
+ $_SESSION['LoginAccount'] = array(
+ 'id' => $returnId,
+ 'email' => $username
+ );
} else {
$return = array( 'valid' => false );
}
break;
- case 'checkEmail':
- break;
- }
- if ( $email = filter_var( $_REQUEST['email'], FILTER_VALIDATE_EMAIL ) ) {
- $accountId = $this->wpdb->get_var(
- $this->wpdb->prepare(
- "SELECT id
- FROM " . GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_PREFIX . "account
- WHERE email = %s",
- $email
- )
- );
- if ( $accountId ) {
- $return = array(
- 'valid' => true,
- 'validEmail' => true,
- 'id' => (int)$accountId,
- 'email' => $email,
+ case 'checkEmail':
+ if ( $email = filter_var( $_REQUEST['email'], FILTER_VALIDATE_EMAIL ) ) {
+ $accountId = $this->wpdb->get_var(
+ $this->wpdb->prepare(
+ "SELECT id
+ FROM " . GLM_MEMBERS_REGISTRATIONS_PLUGIN_DB_PREFIX . "account
+ WHERE email = %s",
+ $email
+ )
);
+ if ( $accountId ) {
+ $return = array(
+ 'valid' => true,
+ 'validEmail' => true,
+ 'id' => (int)$accountId,
+ 'email' => $email,
+ );
+ } else {
+ $return = array(
+ 'valid' => false,
+ 'validEmail' => true,
+ 'email' => $email,
+ );
+ }
} else {
$return = array(
'valid' => false,
- 'validEmail' => true,
- 'email' => $email,
+ 'validEmail' => false,
);
}
- } else {
- $return = array(
- 'valid' => false,
- 'validEmail' => false,
- );
+ break;
}
header('Content-type:application/json;charset=utf-8', true);
echo json_encode( $return );
public function modelAction($actionData = false)
{
+ $loginAccount = '';
+
$scripts = array(
//'backbone-local' => 'js/lib/backbone.localStorage.min.js',
'regApp' => 'js/frontRegApp.js',
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'] );
+ $regRequestJSON = json_encode( $cart['request'], JSON_NUMERIC_CHECK );
}
//echo '<pre>$_SESSION: ' . print_r( $_SESSION, true ) . '</pre>';
$regClass = $RegClass->getList( $where );
//echo '<pre>$regClass: ' . print_r( $regClass, true ) . '</pre>';
$RegRate = new GlmDataRegistrationsRegRate( $this->wpdb, $this->config);
- foreach ( $regClass as &$rClass ) {
- // grab the reg rate for this class
- $rates = $RegRate->getList( "T.reg_class = " . $rClass['id'] );
- //echo '<pre>$rates: ' . print_r( $rates, true ) . '</pre>';
- if ( isset( $rates ) && is_array( $rates ) ) {
- foreach ( $rates as $rate ) {
- $rClass['reg_rate_id'] = $rate['id'];
- $rClass['reg_rate_name'] = $rate['name'];
- $rClass['reg_rate_base_price'] = $rate['base_rate'];
- $rClass['reg_rate_per_reg'] = $rate['per_registrant'];
+ if ( isset( $regClass ) && is_array( $regClass ) ) {
+ foreach ( $regClass as &$rClass ) {
+ // grab the reg rate for this class
+ $rates = $RegRate->getList( "T.reg_class = " . $rClass['id'] );
+ //echo '<pre>$rates: ' . print_r( $rates, true ) . '</pre>';
+ if ( isset( $rates ) && is_array( $rates ) ) {
+ foreach ( $rates as $rate ) {
+ $rClass['reg_rate_id'] = $rate['id'];
+ $rClass['reg_rate_name'] = $rate['name'];
+ $rClass['reg_rate_base_price'] = $rate['base_rate'];
+ $rClass['reg_rate_per_reg'] = $rate['per_registrant'];
+ }
}
}
}
// Build the Class array of json objects for the classes.
$jsonClasses = array();
- foreach ( $regClass as $rClass ) {
- $jsonClasses[] = json_encode( $rClass );
+ if ( isset( $regClass ) && is_array( $regClass ) ) {
+ foreach ( $regClass as $rClass ) {
+ $jsonClasses[] = json_encode( $rClass, JSON_NUMERIC_CHECK );
+ }
}
$regClassJSON = '[' . implode( ',', $jsonClasses ) . ']';
$regCartJSON = json_encode( $cart );
+ // check to see if there's a user logged in
+ if ( isset( $_SESSION['LoginAccount'] ) && filter_var( $_SESSION['LoginAccount']['id'], FILTER_VALIDATE_INT ) ) {
+ $loginAccount = json_encode( $_SESSION['LoginAccount'], JSON_NUMERIC_CHECK );
+ //unset( $_SESSION['LoginAccount'] );
+ }
+
+ //echo '<pre>$_SESSION: ' . print_r( $_SESSION, true ) . '</pre>';
+
// Compile template data
$templateData = array(
'entry' => $regEventSample,
'thisJsUrl' => GLM_MEMBERS_REGISTRATIONS_PLUGIN_URL . '/js',
- 'regEventJSON' => json_encode( $event ),
+ 'regEventJSON' => json_encode( $event, JSON_NUMERIC_CHECK ),
'regClassesJSON' => $regClassJSON,
'regCartJSON' => $regCartJSON,
'regRequestJSON' => $regRequestJSON,
'eventData' => $eventData,
+ 'loginAccount' => $loginAccount,
);
// Return status, any suggested view, and any data to controller
return array(
{* Event Registration App - Backbone.js *}
{* Underscore Templates for the Event Registration App *}
-{literal}
+{* Template for Account Login *}{literal}
+<script type="text/template" id="eventReg-account-login">
+ <h4>Login</h4>
+ <% if ( message ) { %>
+ <span style="color: red;"><%= message %></span>
+ <% } %>
+ <a class="glm-reg-account-login" id="loginCancel">Close</a>
+ <a id="forgotLogin">Forgot Password</a>
+ <input class="login">
+ <input class="password">
+ <input type="submit" id="accountLogin" value="Login">
+</script>
+{/literal}
+{* Template for Logged in Account *}{literal}
+<script type="text/template" id="account-template">
+ <span>Logged in as <%= email %></span>
+ <span id="accountLogout">Logout</span>
+</script>
+{/literal}
+{* Template for the regEvent *}{literal}
<script type="text/template" id="regEvent-template">
<h2><%= event_name %></h2>
<div class="glm-reg-compcode-entry glm-hidden">
</div>
</div>
<div class="glm-reg-submit">
- <input id="glm-reg-cart-continue" type="submit" value="Continue to Cart" />
+ <input id="glm-reg-cart-continue" type="submit" value="Complete Registration" />
</div>
</script>
-
-<script type="text/template" id="registrant-template">
- <a class="glm-reg-level-registrant-delete">Delete</a>
- <label class="registrant-label">
- <span class="glm-reg-level-registrant-email"><%= email %></span>
- </label>
-</script>
-
-<script type="text/template" id="account-template">
- <a class="glm-reg-level-registrant-delete">Delete</a>
- <label class="registrant-label">
- <span class="glm-reg-level-registrant-email"><%= email %></span>
- </label>
- <div class="registrant-edit">
- <input type="text" class="editEmail" value="<%- email %>">
- <input type="submit" class="saveRegistrant" value="Save">
- </div>
-</script>
-
+{/literal}
+{* Template for regClass *}{literal}
<script type="text/template" id="regClass-template">
<div class="glm-class-row-header">
<span class="glm-reg-level-title"><%= name %></span>
<div>Current Rate: <%= reg_rate_name %></div>
<div>Base Price: <%= reg_rate_base_price %></div>
<div>Per Registrant: <%= reg_rate_per_reg %></div>
- <div class="registrant-add clearfix">
+ <button class="glm-add-account tiny">Add Me</button>
+ <button class="glm-add-new-account tiny">Add New</button>
+ <div class="registrant-add clearfix glm-hidden">
+ <input type="text" class="addFname" placeholder="First Name">
+ <input type="text" class="addLname" placeholder="Last Name">
<input type="text" class="addEmail" placeholder="Enter Email Address">
<input type="submit" class="addRegistrant" value="Add">
</div>
</div>
</div>
</script>
-
-<script type="text/template" id="eventReg-account-login">
- <h4>Login</h4>
- <a class="glm-reg-account-login" id="loginCancel">Close</a>
- <input class="login">
- <input class="password">
- <input type="submit" class="accountLogin" value="Login">
-</script>
-
+{/literal}
+{* Template for registrant add form *}{literal}
<script type="text/template" id="eventReg-registrant-add">
<div>
<input class="reg_fname" placeholder="First Name">
</div>
</script>
{/literal}
+{* Template for registrant *}{literal}
+<script type="text/template" id="registrant-template">
+ <a class="glm-reg-level-registrant-delete">Delete</a>
+ <label class="registrant-label">
+ <span class="glm-reg-level-registrant-email"><%= email %></span>
+ </label>
+</script>
+{/literal}
<div class="glm-reg-event-list" id="regApp">
<div class="glm-reg-account">
<a class="glm-reg-account-login" id="appLogin">Login</a>
};
var regEvent = '';
var cart = '';
+var loginAccount = '';
jQuery(function($){
+ {if $loginAccount }
+ loginAccount = new app.Models.Front.Account( {$loginAccount} );
+ {else}
+ loginAccount = '';
+ {/if}
cart = new app.Models.Front.Cart( {$regCartJSON} );
cart.setRequest( {$regRequestJSON} );
regEvent = new app.Models.Front.RegEvent;
regEvent.set( {$regEventJSON} );
regEvent.setClasses( {$regClassesJSON} );
- new app.Views.Front.App();
+ var glmApp = new app.Views.Front.App();
});
</script>