diff --git a/app/.DS_Store b/app/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/app/.DS_Store differ diff --git a/app/controllers/group.js b/app/controllers/group.js new file mode 100644 index 0000000..8cbc9ed --- /dev/null +++ b/app/controllers/group.js @@ -0,0 +1,6 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + displaySuccessMsg: false, + successMsg: null +}); diff --git a/app/controllers/settings.js b/app/controllers/settings.js new file mode 100644 index 0000000..a3b1e3e --- /dev/null +++ b/app/controllers/settings.js @@ -0,0 +1,36 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + needs: ['user'], + actions: { + createAddress: function() { + var self = this, + currentUser = this.get('controllers.user').get('currentUser'); + var newAddress = this.store.createRecord('address', { + street : this.get('street'), + postcode : this.get('postcode'), + city : this.get('city'), + country : this.get('country'), + user: currentUser + }); + newAddress.save().then(function(){ + currentUser.save(); + self.setProperties({ + street: null, + postcode: null, + city: null, + country: null, + }); + self.set('addAddress', !self.get('addAddress')); + }); + }, + removeAddress: function(address) { + var currentUser = this.get('controllers.user').get('currentUser'); + address.destroyRecord(); + currentUser.save(); + }, + toggleAddAddress: function() { + this.set('addAddress', !this.get('addAddress')); + } + } +}); diff --git a/app/controllers/setup.js b/app/controllers/setup.js new file mode 100644 index 0000000..eb571c3 --- /dev/null +++ b/app/controllers/setup.js @@ -0,0 +1,35 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + needs: ['group'], + errorMsg: null, + displayErrorMsg: false, + fakeInit: function() { + if(this.get('model').get('username')) { + this.transitionToRoute('group'); + } + }, + actions: { + setupUser: function() { + var self = this, + currentUser = this.get('model'); + if(!this.get('content.username')) { + this.set('errorMsg', 'Please enter your username.'); + this.set('displayErrorMsg', true); + } else { + currentUser.setProperties({ username: this.get('content.username'), phone: this.get('content.phone') }); + currentUser.save().then(function(){ + self.set('displayErrorMsg', false); + self.get('controllers.group').set('displaySuccessMsg', true); + self.get('controllers.group').set('successMsg', 'Your information was saved. Thank you for subscribing.'); + window.setTimeout(function() { + window.$(".js-success").fadeTo(500, 0).slideUp(500, function() { + self.get('controllers.group').set('displaySuccessMsg', false); + }); + }, 4500); + self.transitionToRoute('group'); + }); + } + } + } +}); diff --git a/app/controllers/user.js b/app/controllers/user.js index 4faf7d7..d52ae41 100644 --- a/app/controllers/user.js +++ b/app/controllers/user.js @@ -133,6 +133,9 @@ export default Ember.Controller.extend({ if (exists) { self.store.find('user', userId).then(function(appUser) { self.set('currentUser', appUser); + if(!appUser.get('username')) { + self.transitionToRoute('setup'); + } }); } else { self.createNewUser(email, token); @@ -151,6 +154,9 @@ export default Ember.Controller.extend({ var appUser = self.store.find('user', authData.facebook.id).then(function(value) { self.set('currentUser', value); self.get('controllers.friend').fetchFriends(value); + if(!value.get('username')) { + self.transitionToRoute('setup'); + } return value; }); diff --git a/app/models/address.js b/app/models/address.js new file mode 100644 index 0000000..652cf45 --- /dev/null +++ b/app/models/address.js @@ -0,0 +1,11 @@ +import DS from 'ember-data'; + +export default DS.Model.extend({ + street : DS.attr('string'), + postcode : DS.attr('string'), + city : DS.attr('string'), + country : DS.attr('string'), + primary : DS.attr('boolean'), + group : DS.belongsTo("group", { async: true }), + user : DS.belongsTo("user", { async: true }) +}); diff --git a/app/models/group.js b/app/models/group.js index 03fce65..9074594 100644 --- a/app/models/group.js +++ b/app/models/group.js @@ -5,5 +5,6 @@ export default DS.Model.extend({ picture : DS.attr('string'), members : DS.hasMany("user", { async: true }), restaurants : DS.hasMany("restaurant", { async: true }), + addresses : DS.hasMany("address", { async: true }), user : DS.belongsTo("user", { async: true }), }); diff --git a/app/models/order.js b/app/models/order.js index 08500e7..72d1f0a 100644 --- a/app/models/order.js +++ b/app/models/order.js @@ -1,10 +1,11 @@ import DS from 'ember-data'; export default DS.Model.extend({ - timer : DS.attr('number'), - createdAt : DS.attr('date'), - items : DS.hasMany("order-item", { async: true }), - restaurant : DS.belongsTo("restaurant", { async: true }), - group : DS.belongsTo("group", { async: true }), - organizer : DS.belongsTo("user", { async: true }) + timer : DS.attr('number'), + createdAt : DS.attr('date'), + deliveryInfo : DS.attr('string'), + items : DS.hasMany("order-item", { async: true }), + restaurant : DS.belongsTo("restaurant", { async: true }), + group : DS.belongsTo("group", { async: true }), + organizer : DS.belongsTo("user", { async: true }) }); diff --git a/app/models/restaurant.js b/app/models/restaurant.js index b7d0b09..8c07641 100644 --- a/app/models/restaurant.js +++ b/app/models/restaurant.js @@ -7,6 +7,7 @@ export default DS.Model.extend({ website : DS.attr('string'), menuLink : DS.attr('string'), deliveryCharge : DS.attr('number'), + deliveryArea : DS.attr('string'), minimumOrder : DS.attr('number'), items : DS.hasMany("menu-item", { async: true }), group : DS.belongsTo("group", { async: true }), diff --git a/app/models/user.js b/app/models/user.js index e6bd1a7..959fdcf 100644 --- a/app/models/user.js +++ b/app/models/user.js @@ -1,10 +1,14 @@ import DS from 'ember-data'; export default DS.Model.extend({ - name : DS.attr('string'), - email : DS.attr('string'), - username : DS.attr('string'), - friends : DS.hasMany("user", { async: true }), - favItems : DS.hasMany("menu-item", { inverse: 'favUsers', async: true }), - groups : DS.hasMany("group", { inverse: 'members', async: true }) + name : DS.attr('string'), + email : DS.attr('string'), + username : DS.attr('string'), + phone : DS.attr('string'), + roles : DS.attr('string'), + friends : DS.hasMany("user", { async: true }), + favItems : DS.hasMany("menu-item", { inverse: 'favUsers', async: true }), + addresses : DS.hasMany("address", { async: true }), + orders : DS.hasMany("orders", { async: true }), + groups : DS.hasMany("group", { inverse: 'members', async: true }) }); diff --git a/app/router.js b/app/router.js index bb884d0..ccf04e7 100644 --- a/app/router.js +++ b/app/router.js @@ -24,6 +24,8 @@ Router.map(function() { this.route('group/timer', { path: 'group/:group_id/restaurant/:restaurant_id/timer' }); this.route('group/order', { path: 'group/:group_id/restaurant/:restaurant_id/order/:order_id' }); this.route('group/summary', { path: 'group/:group_id/restaurant/:restaurant_id/order/:order_id/summary' }); + this.route('setup'); + this.route('settings'); }); Router.reopen({ diff --git a/app/routes/application.js b/app/routes/application.js index 6d4bcfd..2a9647a 100644 --- a/app/routes/application.js +++ b/app/routes/application.js @@ -5,7 +5,7 @@ export default Ember.Route.extend(ApplicationRouteMixin, { init: function() { this._super(); if(this.get('session').isAuthenticated) { - var self = this, + var self = this, token = this.get('session').content.accessToken; window.FB.api('/me/', function(r) { self.controllerFor('user').login(r.email, token); }); } diff --git a/app/routes/group/restaurants.js b/app/routes/group/restaurants.js index d8d4b56..8a0dbe0 100644 --- a/app/routes/group/restaurants.js +++ b/app/routes/group/restaurants.js @@ -1,6 +1,7 @@ import Ember from 'ember'; +import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin'; -export default Ember.Route.extend({ +export default Ember.Route.extend(AuthenticatedRouteMixin, { model: function(params) { // var userID = this.get('session').content.userID; return this.store.find('group', params.id); diff --git a/app/routes/index.js b/app/routes/index.js index cc3c3ba..a70f067 100644 --- a/app/routes/index.js +++ b/app/routes/index.js @@ -1,7 +1,9 @@ import Ember from 'ember'; export default Ember.Route.extend({ - // redirect: function() { - // this.transitionTo('group'); - // } + redirect: function() { + if(this.get('session').isAuthenticated) { + this.transitionTo('group'); + } + } }); diff --git a/app/routes/settings.js b/app/routes/settings.js new file mode 100644 index 0000000..291de02 --- /dev/null +++ b/app/routes/settings.js @@ -0,0 +1,9 @@ +import Ember from 'ember'; +import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin'; + +export default Ember.Route.extend(AuthenticatedRouteMixin, { + model: function() { + var userID = this.get('session').content.userID; + return this.store.find('user', userID); + } +}); diff --git a/app/routes/setup.js b/app/routes/setup.js new file mode 100644 index 0000000..66ef1d6 --- /dev/null +++ b/app/routes/setup.js @@ -0,0 +1,14 @@ +import Ember from 'ember'; +import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin'; + +export default Ember.Route.extend(AuthenticatedRouteMixin, { + model: function() { + var userID = this.get('session').content.userID; + return this.store.find('user', userID); + }, + setupController: function (controller, model) { + // debugger; + this._super(controller, model); + this.controller.fakeInit(); + } +}); diff --git a/app/styles/app.scss b/app/styles/app.scss index 2f7adf6..56c2f5c 100644 --- a/app/styles/app.scss +++ b/app/styles/app.scss @@ -482,3 +482,7 @@ address > a { text-decoration: none; } } + +.user-logo { + max-width: 128px; +} diff --git a/app/templates/-header.hbs b/app/templates/-header.hbs index d5fcd92..c415572 100644 --- a/app/templates/-header.hbs +++ b/app/templates/-header.hbs @@ -25,7 +25,7 @@ {{/link-to}}
{{#if content.group.name }} {{ content.group.name }} {{ else }} Untitled {{/if}}
+ {{#if content.group.picture}} ++ {{#if content.group.name}} + {{ content.group.name }} + {{ else }} + Untitled + {{/if}} +
{{/link-to}} - +{{#if content.name }} {{ content.name }} {{ else }} Untitled {{/if}}
+ {{#if content.picture}} ++ {{#if content.name}} + {{ content.name }} + {{ else }} + Untitled + {{/if}} +
{{/link-to}}