diff --git a/app/controllers/me.js b/app/controllers/me.js new file mode 100644 index 0000000..eac3232 --- /dev/null +++ b/app/controllers/me.js @@ -0,0 +1,16 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + isAdmin: function() { + var level = this.get('model.adminLevel'); + return level >= 1; + }.property('model'), + + actions: { + changeUser() { + // save the changes + var user = this.get('model'); + user.save(); + } + } +}); diff --git a/app/controllers/project/delete.js b/app/controllers/project/delete.js index dbc5cc7..212648b 100644 --- a/app/controllers/project/delete.js +++ b/app/controllers/project/delete.js @@ -11,35 +11,11 @@ export default Ember.Controller.extend({ }, confirmDelete() { - // get current user object - var userId = this.get('sessionUser.user.id'); - var user = this.store.peekRecord('user', userId); - - // get the project + // delete the project var project = this.get('model'); - let projectId = project.get('id'); - - // delete the project and remove from user projects - var visualizations = project.get('visualizations'); - visualizations.forEach(function(visualization) { - // destroy all plots - var plots = visualization.get('plots'); - plots.forEach(function(plot) { - plot.destroyRecord(); - }); - - visualization.destroyRecord(); - }); - project.destroyRecord(); - // save the changes to project - var controller = this; - - user.get('projects').removeObject(projectId); - user.save().then(function() { - controller.transitionToRoute('/projects'); - }); + this.transitionToRoute('/projects'); } } }); diff --git a/app/controllers/project/index.js b/app/controllers/project/index.js index eb33367..e949d77 100644 --- a/app/controllers/project/index.js +++ b/app/controllers/project/index.js @@ -10,13 +10,10 @@ export default Ember.Controller.extend({ // create the visualization var visualization = this.store.createRecord('visualization', { name: 'Visualization', project: projectId }); - // the visualization must be added to the project before the project is saved, otherwise ember will set the projectId to null! + // this change will not be saved, but it is nessecary otherwise ember will omit the project's id in the post request project.get('visualizations').pushObject(visualization); - // save the visualization and project - visualization.save().then(function() { - project.save(); - }); + visualization.save(); } } }); diff --git a/app/controllers/project/new.js b/app/controllers/project/new.js index 1834a47..c786f7e 100644 --- a/app/controllers/project/new.js +++ b/app/controllers/project/new.js @@ -5,9 +5,8 @@ export default Ember.Controller.extend({ actions: { newProject() { - // get current user object - var userId = this.get('sessionUser.user.id'); - var user = this.store.peekRecord('user', userId); + // get current user + var user = this.get('sessionUser.user'); // create new project from properties var properties = this.getProperties('name'); @@ -16,14 +15,8 @@ export default Ember.Controller.extend({ var project = this.store.createRecord('project', properties); var controller = this; - // save the project and user project.save().then(function() { - // add the project to the user - user.get('projects').pushObject(project); - - user.save().then(function() { - controller.transitionToRoute('/projects'); - }); + controller.transitionToRoute('/projects'); }); }, diff --git a/app/controllers/user/delete.js b/app/controllers/user/delete.js new file mode 100644 index 0000000..ef1e8a0 --- /dev/null +++ b/app/controllers/user/delete.js @@ -0,0 +1,19 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + sessionUser: Ember.inject.service('session-user'), + + actions: { + cancelDelete() { + this.transitionToRoute('/user/'); + }, + + confirmDelete() { + // delete all projects + var user = this.get('model'); + user.destroyRecord(); + + this.transitionToRoute('/user/'); + } + } +}); diff --git a/app/controllers/user/edit.js b/app/controllers/user/edit.js index d66f684..e47d437 100644 --- a/app/controllers/user/edit.js +++ b/app/controllers/user/edit.js @@ -2,10 +2,18 @@ import Ember from 'ember'; export default Ember.Controller.extend({ actions: { - changeUser() { + saveEdit() { // save the changes var user = this.get('model'); - user.save(); + var controller = this; + + user.save().then(function() { + controller.transitionToRoute('/user/'); + }); + }, + + cancelEdit() { + this.transitionToRoute('/user/'); } } }); diff --git a/app/controllers/user/index.js b/app/controllers/user/index.js new file mode 100644 index 0000000..0b0c945 --- /dev/null +++ b/app/controllers/user/index.js @@ -0,0 +1,17 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + users: function() { + var filteredUsers = this.get('model'); + filteredUsers.forEach(function(user) { + // catch undefined user + if (user) { + if (user.get('id') === 'me') { + filteredUsers.removeObject(user); + } + } + }); + + return filteredUsers; + }.property('model.@each') +}); diff --git a/app/controllers/user/new.js b/app/controllers/user/new.js new file mode 100644 index 0000000..3da5896 --- /dev/null +++ b/app/controllers/user/new.js @@ -0,0 +1,21 @@ +import Ember from 'ember'; + +export default Ember.Controller.extend({ + actions: { + newUser() { + // create new user from properties + var properties = this.getProperties('username', 'password'); + + var user = this.store.createRecord('user', properties); + var controller = this; + + user.save().then(function() { + controller.transitionToRoute('/user'); + }); + }, + + cancelNewUser() { + this.transitionToRoute('/user'); + } + } +}); diff --git a/app/controllers/visualization/delete.js b/app/controllers/visualization/delete.js index 37c2c9b..14db97b 100644 --- a/app/controllers/visualization/delete.js +++ b/app/controllers/visualization/delete.js @@ -10,27 +10,12 @@ export default Ember.Controller.extend({ confirmDelete() { // get the objects - var visualization = this.get('model'); - let visualizationId = this.get('model.id'); - var projectId = this.get('model.project.id'); - var project = this.store.peekRecord('project', projectId); - - // destroy all plots - var plots = visualization.get('plots'); - plots.forEach(function(plot) { - plot.destroyRecord(); - }); + var visualization = this.get('model'); visualization.destroyRecord(); - // delete the visualization and remove from the project - var controller = this; - - project.get('visualizations').removeObject(visualizationId); - project.save().then(function() { - controller.transitionToRoute('/project/' + projectId); - }); + this.transitionToRoute('/project/' + projectId); } } }); diff --git a/app/models/user.js b/app/models/user.js index d343d10..bc61b02 100644 --- a/app/models/user.js +++ b/app/models/user.js @@ -4,6 +4,7 @@ import { hasMany } from 'ember-data/relationships'; export default Model.extend({ username: attr('string'), + password: attr('string'), adminLevel: attr('number'), projects: hasMany('project', { async: true }), mail: attr('string') diff --git a/app/router.js b/app/router.js index 8f2875d..03ad117 100644 --- a/app/router.js +++ b/app/router.js @@ -7,6 +7,7 @@ const Router = Ember.Router.extend({ Router.map(function() { this.route('login'); + this.route('logout'); this.route('projects'); this.route('project', function() { @@ -16,9 +17,7 @@ Router.map(function() { this.route('delete', { path: '/delete/:projectid' }); }); - this.route('user', function() { - this.route('edit'); - }); + this.route('me'); this.route('visualization', function() { this.route('index', { path: '/:visualizationid' }); @@ -27,8 +26,13 @@ Router.map(function() { this.route('delete', { path: '/delete/:visualizationid' }); }); + this.route('user', function() { + this.route('edit', { path: '/edit/:userid' }); + this.route('new'); + this.route('delete', { path: '/delete/:userid' }); + }); + this.route('404', { path: '/*path' }); - this.route('logout'); }); export default Router; diff --git a/app/routes/me.js b/app/routes/me.js new file mode 100644 index 0000000..b8e23aa --- /dev/null +++ b/app/routes/me.js @@ -0,0 +1,9 @@ +import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; + +export default Ember.Route.extend(AuthenticatedRouteMixin, { + model() { + // get session user + return this.store.findRecord('user', 'me'); + } +}); diff --git a/app/routes/user/delete.js b/app/routes/user/delete.js new file mode 100644 index 0000000..7fa7c6a --- /dev/null +++ b/app/routes/user/delete.js @@ -0,0 +1,8 @@ +import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; + +export default Ember.Route.extend(AuthenticatedRouteMixin, { + model(params) { + return this.store.findRecord('user', params.userid); + } +}); diff --git a/app/routes/user/edit.js b/app/routes/user/edit.js index 9def44d..7fa7c6a 100644 --- a/app/routes/user/edit.js +++ b/app/routes/user/edit.js @@ -2,11 +2,7 @@ import Ember from 'ember'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; export default Ember.Route.extend(AuthenticatedRouteMixin, { - sessionUser: Ember.inject.service('session-user'), - - model() { - // get session user - var userId = this.get('sessionUser.user.id'); - return this.store.findRecord('user', userId); + model(params) { + return this.store.findRecord('user', params.userid); } }); diff --git a/app/routes/user/index.js b/app/routes/user/index.js new file mode 100644 index 0000000..f4885a9 --- /dev/null +++ b/app/routes/user/index.js @@ -0,0 +1,8 @@ +import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; + +export default Ember.Route.extend(AuthenticatedRouteMixin, { + model() { + return this.store.findAll('user'); + } +}); diff --git a/app/routes/user/new.js b/app/routes/user/new.js new file mode 100644 index 0000000..30e4e30 --- /dev/null +++ b/app/routes/user/new.js @@ -0,0 +1,5 @@ +import Ember from 'ember'; +import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; + +export default Ember.Route.extend(AuthenticatedRouteMixin, { +}); diff --git a/app/templates/application.hbs b/app/templates/application.hbs index 4621e6e..457586e 100644 --- a/app/templates/application.hbs +++ b/app/templates/application.hbs @@ -9,7 +9,7 @@
+ Are you sure you want to delete the user "{{model.username}}"?
+
+ This will also delete all projects belonging to this user!
+