From 3843a93e4b66086aa14d53810abeb275f590b690 Mon Sep 17 00:00:00 2001 From: David Baldwynn Date: Wed, 1 Jul 2015 19:49:35 -0700 Subject: [PATCH] added submission view --- app/controllers/articles.server.controller.js | 120 ------------------ app/controllers/forms.server.controller.js | 36 +++--- .../users.authorization.server.controller.js | 1 - app/models/article.server.model.js | 34 ----- app/models/form.server.model.js | 15 +++ app/models/user.server.model.js | 12 ++ app/routes/articles.server.routes.js | 22 ---- config/express.js | 6 +- data1435634800654.fdf | 16 --- package.json | 3 +- .../controllers/header.client.controller.js | 2 +- public/modules/core/css/core.css | 2 +- .../create-form.client.controller.js | 10 +- .../view-form.client.controller.js | 23 ++-- public/modules/forms/css/form.css | 37 +++++- public/modules/forms/forms.client.module.js | 2 +- .../forms/views/create-form.client.view.html | 2 + .../forms/views/list-forms.client.view.html | 6 +- .../views/view-form-submissions.view.html | 36 +++++- .../forms/views/view-form.client.view.html | 100 +++++++++++---- .../authentication.client.controller.js | 18 +-- public/modules/users/services/auth.js | 27 ++-- .../settings/change-password.client.view.html | 1 + .../settings/edit-profile.client.view.html | 18 ++- 24 files changed, 245 insertions(+), 304 deletions(-) delete mode 100755 app/controllers/articles.server.controller.js delete mode 100755 app/models/article.server.model.js delete mode 100755 app/routes/articles.server.routes.js delete mode 100644 data1435634800654.fdf diff --git a/app/controllers/articles.server.controller.js b/app/controllers/articles.server.controller.js deleted file mode 100755 index f5b4d27f..00000000 --- a/app/controllers/articles.server.controller.js +++ /dev/null @@ -1,120 +0,0 @@ -'use strict'; - -/** - * Module dependencies. - */ -var mongoose = require('mongoose'), - errorHandler = require('./errors.server.controller'), - Article = mongoose.model('Article'), - _ = require('lodash'); - -/** - * Create a article - */ -exports.create = function(req, res) { - var article = new Article(req.body); - article.user = req.user; - - article.save(function(err) { - if (err) { - return res.status(400).send({ - message: errorHandler.getErrorMessage(err) - }); - } else { - res.json(article); - } - }); -}; - -/** - * Show the current article - */ -exports.read = function(req, res) { - res.json(req.article); -}; - -/** - * Update a article - */ -exports.update = function(req, res) { - var article = req.article; - - article = _.extend(article, req.body); - - article.save(function(err) { - if (err) { - return res.status(400).send({ - message: errorHandler.getErrorMessage(err) - }); - } else { - res.json(article); - } - }); -}; - -/** - * Delete an article - */ -exports.delete = function(req, res) { - var article = req.article; - - article.remove(function(err) { - if (err) { - return res.status(400).send({ - message: errorHandler.getErrorMessage(err) - }); - } else { - res.json(article); - } - }); -}; - -/** - * List of Articles - */ -exports.list = function(req, res) { - Article.find().sort('-created').populate('user', 'displayName').exec(function(err, articles) { - if (err) { - return res.status(400).send({ - message: errorHandler.getErrorMessage(err) - }); - } else { - res.json(articles); - } - }); -}; - -/** - * Article middleware - */ -exports.articleByID = function(req, res, next, id) { - - if (!mongoose.Types.ObjectId.isValid(id)) { - return res.status(400).send({ - message: 'Article is invalid' - }); - } - - Article.findById(id).populate('user', 'displayName').exec(function(err, article) { - if (err) return next(err); - if (!article) { - return res.status(404).send({ - message: 'Article not found' - }); - } - req.article = article; - next(); - }); -}; - -/** - * Article authorization middleware - */ -exports.hasAuthorization = function(req, res, next) { - if (req.article.user.id !== req.user.id) { - return res.status(403).send({ - message: 'User is not authorized' - }); - } - next(); -}; diff --git a/app/controllers/forms.server.controller.js b/app/controllers/forms.server.controller.js index a7291c31..451bd30e 100644 --- a/app/controllers/forms.server.controller.js +++ b/app/controllers/forms.server.controller.js @@ -8,7 +8,6 @@ var mongoose = require('mongoose'), Form = mongoose.model('Form'), FormSubmission = mongoose.model('FormSubmission'), pdfFiller = require( 'pdffiller' ), - PDFParser = require('pdf2json/pdfparser'), config = require('../../config/config'), fs = require('fs-extra'), async = require('async'), @@ -23,14 +22,12 @@ exports.create = function(req, res) { form.admin = req.user; form.save(function(err) { - if (err) { console.log(err); return res.status(400).send({ message: errorHandler.getErrorMessage(err) }); } else { - return res.json(form); } }); @@ -39,11 +36,11 @@ exports.create = function(req, res) { /** * Upload PDF */ -var upload_count = 0; exports.uploadPDF = function(files, user, cb) { - var parser = new PDFParser(); - console.log("upload count: "+upload_count); - upload_count++; + var _user = JSON.parse(''+user); + console.log(_user.username); + console.log(config.tmpUploadPath); + if(files) { console.log('inside uploadPDF'); @@ -57,7 +54,7 @@ exports.uploadPDF = function(files, user, cb) { //If file exists move to user's tmp directory if(exists) { - var newDestination = path.join(config.tmpUploadPath, user.username); + var newDestination = path.join(config.tmpUploadPath, _user.username); var stat = null; try { stat = fs.statSync(newDestination); @@ -66,7 +63,7 @@ exports.uploadPDF = function(files, user, cb) { } if (stat && !stat.isDirectory()) { console.log('Directory cannot be created'); - throw new Error('Directory cannot be created because an inode of a different type exists at "' + dest + '"'); + throw new Error('Directory cannot be created because an inode of a different type exists at "' + newDestination + '"'); } fs.move(pdfFile.path, path.join(newDestination, pdfFile.name), function (err) { @@ -193,22 +190,25 @@ exports.delete = function(req, res) { }); } else { return res.status(200); - // res.json(form); } }); }; /** - * Get List of Template Forms + * Get All of Users' Forms */ exports.list = function(req, res) { - Form.find({ type: 'template' }).sort('-created').populate('admin').exec(function(err, forms) { + //Allow 'admin' user to view all forms + var searchObj = {admin: req.user}; + if(req.user.isAdmin()){ + searchObj = {}; + } + Form.find({}).sort('-created').populate('admin').exec(function(err, forms) { if (err) { return res.status(400).send({ message: errorHandler.getErrorMessage(err) }); } else { - console.log(forms); return res.json(forms); } }); @@ -251,13 +251,11 @@ exports.hasAuthorization = function(req, res, next) { var form = req.form; - // console.log('\n\n\nreq.form:\n'); - // console.log(form); - // console.log('req.user.id: '+req.user.id); - - if (req.form.admin.id !== req.user.id) { + // console.log(req.form.admin); + // console.log(req.user); + if (req.form.admin.id !== req.user.id || req.user.roles.indexOf('admin') === -1) { return res.status(403).send({ - message: 'User is not authorized' + message: 'User '+req.user.username+' is not authorized' }); } next(); diff --git a/app/controllers/users/users.authorization.server.controller.js b/app/controllers/users/users.authorization.server.controller.js index 0a615b34..932e4906 100755 --- a/app/controllers/users/users.authorization.server.controller.js +++ b/app/controllers/users/users.authorization.server.controller.js @@ -23,7 +23,6 @@ exports.userByID = function(req, res, next, id) { * Require login routing middleware */ exports.requiresLogin = function(req, res, next) { - if (!req.isAuthenticated()) { return res.status(401).send({ message: 'User is not logged in' diff --git a/app/models/article.server.model.js b/app/models/article.server.model.js deleted file mode 100755 index f2b89db8..00000000 --- a/app/models/article.server.model.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -/** - * Module dependencies. - */ -var mongoose = require('mongoose'), - Schema = mongoose.Schema; - -/** - * Article Schema - */ -var ArticleSchema = new Schema({ - created: { - type: Date, - default: Date.now - }, - title: { - type: String, - default: '', - trim: true, - required: 'Title cannot be blank' - }, - content: { - type: String, - default: '', - trim: true - }, - user: { - type: Schema.ObjectId, - ref: 'User' - } -}); - -mongoose.model('Article', ArticleSchema); diff --git a/app/models/form.server.model.js b/app/models/form.server.model.js index dab0d4d6..b91529a9 100644 --- a/app/models/form.server.model.js +++ b/app/models/form.server.model.js @@ -59,6 +59,10 @@ var FormSchema = new Schema({ type: Boolean, default: false, }, + isLive: { + type: Boolean, + default: true, + }, autofillPDFs: { type: Boolean, default: false, @@ -109,6 +113,17 @@ FormSchema.pre('save', function (next) { } }); +//Delete template PDF of current Form +FormSchema.pre('remove', function (next) { + if(this.pdf){ + //Delete template form + fs.unlink(this.pdf.path, function(err){ + if (err) throw err; + console.log('successfully deleted', this.pdf.path); + }); + } +}); + //Autogenerate FORM from PDF if 'isGenerated' flag is 'true' FormSchema.pre('save', function (next) { var field, _form_fields; diff --git a/app/models/user.server.model.js b/app/models/user.server.model.js index c59c9da8..b815c6b9 100755 --- a/app/models/user.server.model.js +++ b/app/models/user.server.model.js @@ -144,4 +144,16 @@ UserSchema.statics.findUniqueUsername = function(username, suffix, callback) { }); }; +/** + * Function to check if user has Admin priviledges + */ +UserSchema.methods.isAdmin = function() { + + if(this.roles.indexOf('admin') !== -1){ + return true; + } + return false; +}; + + mongoose.model('User', UserSchema); diff --git a/app/routes/articles.server.routes.js b/app/routes/articles.server.routes.js deleted file mode 100755 index 9a93d059..00000000 --- a/app/routes/articles.server.routes.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * Module dependencies. - */ -var users = require('../../app/controllers/users.server.controller'), - articles = require('../../app/controllers/articles.server.controller'); - -module.exports = function(app) { - // Article Routes - app.route('/articles') - .get(articles.list) - .post(users.requiresLogin, articles.create); - - app.route('/articles/:articleId') - .get(articles.read) - .put(users.requiresLogin, articles.hasAuthorization, articles.update) - .delete(users.requiresLogin, articles.hasAuthorization, articles.delete); - - // Finish by binding the article middleware - app.param('articleId', articles.articleByID); -}; diff --git a/config/express.js b/config/express.js index 5cc9d54e..f36c9863 100755 --- a/config/express.js +++ b/config/express.js @@ -106,10 +106,10 @@ module.exports = function(db) { console.log(file.originalname + ' is starting ...'); }, onFileUploadComplete: function (file, req, res) { - console.log('\n\nheadersSent in onFileUploadComplete: ', res.headersSent); - // console.log(req.files.file[0]); + // console.log('\n\nheadersSent in onFileUploadComplete: ', res.headersSent); + console.log(req.body.user); try{ - formCtrl.uploadPDF(req.files, function(_file){ + formCtrl.uploadPDF(req.files, req.body.user, function(_file){ console.log(_file.filename + ' uploaded to ' + _file.path); res.status(200).send(_file); }); diff --git a/data1435634800654.fdf b/data1435634800654.fdf deleted file mode 100644 index f6a09883..00000000 --- a/data1435634800654.fdf +++ /dev/null @@ -1,16 +0,0 @@ -%FDF-1.2 -%âãÏÓ -1 0 obj -<< -/FDF -<< -/Fields [] ->> ->> -endobj -trailer - -<< -/Root 1 0 R ->> -%%EOF \ No newline at end of file diff --git a/package.json b/package.json index 3250e0e3..e8d6c8d6 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ "passport-local": "~1.0.0", "passport-twitter": "~1.0.2", "satelize": "^0.1.1", - "swig": "~1.4.1" + "swig": "~1.4.1", + "then-fs": "^2.0.0" }, "devDependencies": { "supertest": "~0.14.0", diff --git a/public/modules/core/controllers/header.client.controller.js b/public/modules/core/controllers/header.client.controller.js index 2a2b3d49..0d584c2e 100755 --- a/public/modules/core/controllers/header.client.controller.js +++ b/public/modules/core/controllers/header.client.controller.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('core').controller('HeaderController', ['$rootScope','$scope','Menus', '$state', 'Auth', 'User', - function($rootScope, $scope, Menus, $state, Auth, User) { + function ($rootScope, $scope, Menus, $state, Auth, User) { $scope.user = $rootScope.user = Auth.ensureHasCurrentUser(User); $scope.authentication = $rootScope.authentication = Auth; diff --git a/public/modules/core/css/core.css b/public/modules/core/css/core.css index 0b670576..bd008122 100755 --- a/public/modules/core/css/core.css +++ b/public/modules/core/css/core.css @@ -12,7 +12,7 @@ } .content { - margin-top: 100px; + margin-top: 70px; } .undecorated-link:hover { text-decoration: none; diff --git a/public/modules/forms/controllers/create-form.client.controller.js b/public/modules/forms/controllers/create-form.client.controller.js index 79647a82..a55c6144 100644 --- a/public/modules/forms/controllers/create-form.client.controller.js +++ b/public/modules/forms/controllers/create-form.client.controller.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('forms').controller('EditFormController', ['$scope', '$rootScope', '$state', 'Upload', '$stateParams', 'FormFields', 'Forms', 'CurrentForm', '$modal', '$location', +angular.module('forms').controller('EditFormController', ['$scope', '$state', '$rootScope', 'Upload', '$stateParams', 'FormFields', 'Forms', 'CurrentForm', '$modal', '$location', function ($scope, $state, $rootScope, Upload, $stateParams, FormFields, Forms, CurrentForm, $modal, $location) { // Principal.identity().then(function(user){ // $scope.authentication.user = user; @@ -80,7 +80,7 @@ angular.module('forms').controller('EditFormController', ['$scope', '$rootScope' }; $scope.goToWithId = function(route, id) { - $state.transitionTo(route, { 'formId' : id }, { reload: true }); + $state.go(route, {'formId': id}, {reload: true}); }; // Create new Form @@ -100,7 +100,6 @@ angular.module('forms').controller('EditFormController', ['$scope', '$rootScope' // Redirect after save $scope.goToWithId('viewForm', response._id); - // $location.path('forms/' + response._id + '/admin'); }, function(errorResponse) { console.log(errorResponse.data.message); @@ -117,8 +116,8 @@ angular.module('forms').controller('EditFormController', ['$scope', '$rootScope' var form = new Forms($scope.form); form.$update(function(response) { console.log('form updated'); - // console.log(response.pdf); - $location.path('forms/' + response._id + '/admin'); + $scope.goToWithId('viewForm', response._id); + // $location.path('forms/' + response._id + '/admin'); }, function(errorResponse) { console.log(errorResponse.data.message); $scope.error = errorResponse.data.message; @@ -131,7 +130,6 @@ angular.module('forms').controller('EditFormController', ['$scope', '$rootScope' $scope.addField.new = $scope.addField.types[0].name; $scope.addField.lastAddedID = 0; - // preview form mode $scope.previewMode = false; diff --git a/public/modules/forms/controllers/view-form.client.controller.js b/public/modules/forms/controllers/view-form.client.controller.js index cff5a7e7..d8846ccc 100644 --- a/public/modules/forms/controllers/view-form.client.controller.js +++ b/public/modules/forms/controllers/view-form.client.controller.js @@ -4,10 +4,17 @@ angular.module('forms').controller('ViewFormController', ['$scope', '$stateParams', '$state', 'Forms', 'CurrentForm','$http', function($scope, $stateParams, $state, Forms, CurrentForm, $http) { - // Principal.identity().then(function(user){ - // $scope.authentication.user = user; - // }).then(function(){ - + // view form submissions + $scope.viewSubmissions = false; + + //show submissions of Form + $scope.showSubmissions = function(){ + $scope.viewSubmissions = true; + } + //hide submissions of Form + $scope.hideSubmissions = function(){ + $scope.viewSubmissions = false; + } // Return all user's Forms $scope.findAll = function() { @@ -22,10 +29,10 @@ angular.module('forms').controller('ViewFormController', ['$scope', '$stateParam CurrentForm.setForm($scope.form); }; - // Remove existing Form - $scope.remove = function(form) { - if (form) { + $scope.remove = function() { + if (CurrentForm.getForm()) { + var form = CurrentForm.getForm(); form.$remove(); $http.delete('/forms/'+$scope.form._id). @@ -37,8 +44,6 @@ angular.module('forms').controller('ViewFormController', ['$scope', '$stateParam } else{ $scope.form.$remove(function() { - console.log('remove'); - $state.path('forms'); $http.delete('/forms/'+$scope.form._id). success(function(data, status, headers){ console.log('form deleted successfully'); diff --git a/public/modules/forms/css/form.css b/public/modules/forms/css/form.css index 42c6b6cd..ecfb28fb 100644 --- a/public/modules/forms/css/form.css +++ b/public/modules/forms/css/form.css @@ -1,21 +1,49 @@ -/* Styles for form list view (/forms) */ +/* Styles for form admin view (/forms/:formID/admin) */ +.admin-form > .page-header { + padding-bottom: 0px; + margin-bottom: 40px; +} + .admin-form > .page-header h1 { + margin-bottom: 0px + } + .admin-form > .page-header > .col-xs-3 { + padding-top: 1.4em; + } +.admin-form .form-controls .row { + padding: 5px; +} + +.status-light { + padding-left:0.6em; +} +.status-light.status-light-off { + color: red; +} +.status-light.status-light-on { + color: green; +} + +/* Styles for form list view (/forms) */ +section > section.ng-scope { + padding: 0 60px 20px 60px; +} .form-item.row { text-align: center; - border-bottom: 4px inset #ccc; + border-bottom: 6px inset #ccc; background-color: #eee; width: 180px; height: 215px; + margin-bottom: 45px; } .form-item.row.create-new { - border-bottom: 4px inset #ccc; background-color: rgb(131,131,131); color: white; } .form-item.row:hover, .form-item.row.create-new:hover { - border-bottom: 6px inset #ccc; + border-bottom: 8px inset #ccc; background-color: #d9d9d9; } @@ -24,7 +52,6 @@ background-color: rgb(81,81,81); } - .form-item.row > .title-row{ position: relative; top: 15px; diff --git a/public/modules/forms/forms.client.module.js b/public/modules/forms/forms.client.module.js index 8c77200e..1a783aa9 100644 --- a/public/modules/forms/forms.client.module.js +++ b/public/modules/forms/forms.client.module.js @@ -1,4 +1,4 @@ 'use strict'; // Use Application configuration module to register a new module -ApplicationConfiguration.registerModule('forms', ['ngFileUpload']); \ No newline at end of file +ApplicationConfiguration.registerModule('forms', ['ngFileUpload', 'users']); \ No newline at end of file diff --git a/public/modules/forms/views/create-form.client.view.html b/public/modules/forms/views/create-form.client.view.html index cd933826..dff80944 100644 --- a/public/modules/forms/views/create-form.client.view.html +++ b/public/modules/forms/views/create-form.client.view.html @@ -1,3 +1,5 @@ + +

Create your form


diff --git a/public/modules/forms/views/list-forms.client.view.html b/public/modules/forms/views/list-forms.client.view.html index d5db734f..41eb7193 100644 --- a/public/modules/forms/views/list-forms.client.view.html +++ b/public/modules/forms/views/list-forms.client.view.html @@ -4,8 +4,8 @@

My MedForms

-
- + diff --git a/public/modules/forms/views/view-form-submissions.view.html b/public/modules/forms/views/view-form-submissions.view.html index 7b04b287..21e88299 100644 --- a/public/modules/forms/views/view-form-submissions.view.html +++ b/public/modules/forms/views/view-form-submissions.view.html @@ -1,8 +1,38 @@
-