From 82049806262154bc5157c163965eb14839020141 Mon Sep 17 00:00:00 2001 From: David Baldwynn Date: Wed, 1 Jul 2015 21:54:46 -0700 Subject: [PATCH] cleaned up submissions table --- app/controllers/forms.server.controller.js | 74 ++-- app/models/form_submission.server.model.js | 7 +- .../create-form.client.controller.js | 403 +++++++++--------- .../submit-form.client.controller.js | 18 +- .../view-form-submission.client.controller.js | 12 +- .../view-form.client.controller.js | 102 +++-- .../forms/views/directiveViews/form/form.html | 6 +- .../forms/views/view-form.client.view.html | 24 +- 8 files changed, 333 insertions(+), 313 deletions(-) diff --git a/app/controllers/forms.server.controller.js b/app/controllers/forms.server.controller.js index ceec948e..6350409a 100644 --- a/app/controllers/forms.server.controller.js +++ b/app/controllers/forms.server.controller.js @@ -15,7 +15,7 @@ var mongoose = require('mongoose'), _ = require('lodash'); /** - * Create a new form manually + * Create a new form */ exports.create = function(req, res) { var form = new Form(req.body); @@ -107,9 +107,9 @@ exports.createSubmission = function(req, res) { submission.form_fields = req.body.form_fields; submission.title = req.body.title; submission.timeElapsed = req.body.timeElapsed; + console.log(req.body); // submission.ipAddr = req.headers['x-forwarded-for'] || req.connection.remoteAddress; - if (form.isGenerated){ fdfTemplate = form.convertToFDF(); } else { @@ -120,9 +120,10 @@ exports.createSubmission = function(req, res) { } } - fdfData = pdfFiller.fillFdfTemplate(fdfTemplate, submission.form_fields, null); - - submission.fdfData = fdfData; + if(form.autofillPDFs){ + fdfData = pdfFiller.fillFdfTemplate(fdfTemplate, submission.form_fields, null); + submission.fdfData = fdfData; + } submission.save(function(err){ if (err) { @@ -146,10 +147,12 @@ exports.listSubmissions = function(req, res) { FormSubmission.find({ form: req.form }).populate('admin', 'form').exec(function(err, submissions) { if (err) { - res.status(400).send({ + console.log(err); + res.status(500).send({ message: errorHandler.getErrorMessage(err) }); } else { + console.log('hello'); res.json(submissions); } }); @@ -186,7 +189,7 @@ exports.delete = function(req, res) { console.log('deleting form'); Form.remove({_id: form._id}, function(err) { if (err) { - res.status(400).send({ + res.status(500).send({ message: err.message }); } else { @@ -228,39 +231,42 @@ exports.formByID = function(req, res, next, id) { } Form.findById(id).populate('admin').exec(function(err, form) { - if (err) return next(err); - if (!form) { + if (err) { + return next(err); + } else if (!form || form === null) { res.status(404).send({ message: 'Form not found' }); } - if(!form.admin){ - form.admin = req.user; - form.save(function(err) { - if (err) { - console.log(err); - res.status(400).send({ - message: errorHandler.getErrorMessage(err) - }); - } else { - //Remove sensitive information from User object - form.admin.password = null; - form.admin.created = null; - form.admin.salt = null; + else { + if(!form.admin){ + form.admin = req.user; + form.save(function(err) { + if (err) { + console.log(err); + res.status(400).send({ + message: errorHandler.getErrorMessage(err) + }); + } else { + //Remove sensitive information from User object + form.admin.password = null; + form.admin.created = null; + form.admin.salt = null; - req.form = form; - next(); - } - }); + req.form = form; + next(); + } + }); + } + + //Remove sensitive information from User object + form.admin.password = null; + form.admin.created = null; + form.admin.salt = null; + + req.form = form; + next(); } - - //Remove sensitive information from User object - form.admin.password = null; - form.admin.created = null; - form.admin.salt = null; - - req.form = form; - next(); }); }; diff --git a/app/models/form_submission.server.model.js b/app/models/form_submission.server.model.js index 847a1f95..c4b6c7fb 100644 --- a/app/models/form_submission.server.model.js +++ b/app/models/form_submission.server.model.js @@ -85,10 +85,10 @@ FormSubmissionSchema.pre('save', function (next) { Form.findById(that.form, function(err, _form){ if(err) next( new Error(err.mesasge) ); - // that.title = _form.title; + that.title = _form.title; // console.log(_form); - if(true){ //_form.autofillPDFs){ + if(_form.autofillPDFs){ dest_filename = _form.title.trim()+'_submission_'+Date.now()+'.pdf'; dest_path = path.join(config.pdfUploadPath, dest_filename); @@ -97,7 +97,6 @@ FormSubmissionSchema.pre('save', function (next) { // console.log('autofillPDFs check'); - pdfFiller.fillForm(_form.pdf.path, dest_path, this.fdfData, function(err){ console.log('fdfData: \n'); console.log(that.fdfData); @@ -113,13 +112,11 @@ FormSubmissionSchema.pre('save', function (next) { next(); }); } else { - next(); } }); - }); mongoose.model('FormSubmission', FormSubmissionSchema); \ No newline at end of file diff --git a/public/modules/forms/controllers/create-form.client.controller.js b/public/modules/forms/controllers/create-form.client.controller.js index a55c6144..8769606f 100644 --- a/public/modules/forms/controllers/create-form.client.controller.js +++ b/public/modules/forms/controllers/create-form.client.controller.js @@ -2,239 +2,232 @@ 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; - // }).then(function(){ - // console.log('aeouaoeuaoeuaou'); - // console.log('isAuthenticated(): '+Principal.isAuthenticated());\ - - $scope.isNewForm = false; + + $scope.isNewForm = false; + $scope.pdfLoading = false; + var _current_upload = null; + $scope.log = ''; + + // Get current form if it exists, or create new one + if($stateParams.formId){ + $scope.form = {}; + var _form = Forms.get({ formId: $stateParams.formId}, function(form){ + _form.pdf = form.pdf; + _form.$save(); + + $scope.form = angular.fromJson(angular.toJson(_form)); + console.log(JSON.stringify($scope.form.pdf)); + }); + } else { + $scope.form = {}; + $scope.form.form_fields = []; + $scope.isNewForm = true; + } + + //PDF Functions + $scope.cancelUpload = function(){ + _current_upload.abort(); $scope.pdfLoading = false; - var _current_upload = null; - $scope.log = ''; + }; - // Get current form if it exists, or create new one - if($stateParams.formId){ - $scope.form = {}; - var _form = Forms.get({ formId: $stateParams.formId}, function(form){ - _form.pdf = form.pdf; - _form.$save(); + $scope.removePDF = function(){ + $scope.form.pdf = null; + $scope.isGenerated = false; + $scope.autofillPDFs = false; - $scope.form = angular.fromJson(angular.toJson(_form)); - console.log(JSON.stringify($scope.form.pdf)); + console.log('form.pdf: '+$scope.form.pdf+' REMOVED'); + }; + + $scope.uploadPDF = function(files) { + + if (files && files.length) { + // for (var i = 0; i < files.length; i++) { + var file = files[0]; + _current_upload = Upload.upload({ + url: '/upload/pdf', + fields: { + 'user': $scope.user, + 'form': $scope.form + }, + file: file + }).progress(function (evt) { + var progressPercentage = parseInt(100.0 * evt.loaded / evt.total); + $scope.log = 'progress: ' + progressPercentage + '% ' + + evt.config.file.name + '\n' + $scope.log; + $scope.pdfLoading = true; + }).success(function (data, status, headers, config) { + $scope.log = 'file ' + data.originalname + 'uploaded as '+ data.name +'. JSON: ' + JSON.stringify(data) + '\n' + $scope.log; + $scope.form.pdf = data; + $scope.pdfLoading = false; + + console.log($scope.log); + console.log('$scope.pdf: '+$scope.form.pdf.name); + if(!$scope.$$phase) { + $scope.$apply(); + } + }).error(function(err){ + $scope.pdfLoading = false; + console.log('Error occured during upload.\n'); + console.log(err); }); - } else { - $scope.form = {}; - $scope.form.form_fields = []; - $scope.isNewForm = true; + // } } + }; - //PDF Functions - $scope.cancelUpload = function(){ - _current_upload.abort(); - $scope.pdfLoading = false; - }; + $scope.goToWithId = function(route, id) { + $state.go(route, {'formId': id}, {reload: true}); + }; - $scope.removePDF = function(){ - $scope.form.pdf = null; - $scope.isGenerated = false; - $scope.autofillPDFs = false; + // Create new Form + $scope.createOrUpdate = function() { - console.log('form.pdf: '+$scope.form.pdf+' REMOVED'); - }; - - $scope.uploadPDF = function(files) { - - if (files && files.length) { - // for (var i = 0; i < files.length; i++) { - var file = files[0]; - _current_upload = Upload.upload({ - url: '/upload/pdf', - fields: { - 'user': $scope.user, - 'form': $scope.form - }, - file: file - }).progress(function (evt) { - var progressPercentage = parseInt(100.0 * evt.loaded / evt.total); - $scope.log = 'progress: ' + progressPercentage + '% ' + - evt.config.file.name + '\n' + $scope.log; - $scope.pdfLoading = true; - }).success(function (data, status, headers, config) { - $scope.log = 'file ' + data.originalname + 'uploaded as '+ data.name +'. JSON: ' + JSON.stringify(data) + '\n' + $scope.log; - $scope.form.pdf = data; - $scope.pdfLoading = false; - - console.log($scope.log); - console.log('$scope.pdf: '+$scope.form.pdf.name); - if(!$scope.$$phase) { - $scope.$apply(); - } - }).error(function(err){ - $scope.pdfLoading = false; - console.log('Error occured during upload.\n'); - console.log(err); - }); - // } - } - }; - - $scope.goToWithId = function(route, id) { - $state.go(route, {'formId': id}, {reload: true}); - }; - - // Create new Form - $scope.createOrUpdate = function() { - - if($scope.isNewForm){ - // Create new Form object - var form = new Forms($scope.form); - - form.$save(function(response) { - - console.log('form created'); - // console.log(response.pdf); - - // Clear form fields - $scope.form = {}; - - // Redirect after save - $scope.goToWithId('viewForm', response._id); - - }, function(errorResponse) { - console.log(errorResponse.data.message); - $scope.error = errorResponse.data.message; - }); - } else{ - console.log('update form'); - $scope.update(); - } - }; - - // Update existing Form - $scope.update = function() { + if($scope.isNewForm){ + // Create new Form object var form = new Forms($scope.form); - form.$update(function(response) { - console.log('form updated'); + + form.$save(function(response) { + + console.log('form created'); + // console.log(response.pdf); + + // Clear form fields + $scope.form = {}; + + // Redirect after save $scope.goToWithId('viewForm', response._id); - // $location.path('forms/' + response._id + '/admin'); + }, function(errorResponse) { console.log(errorResponse.data.message); $scope.error = errorResponse.data.message; }); + } else{ + console.log('update form'); + $scope.update(); + } + }; + + // Update existing Form + $scope.update = function() { + var form = new Forms($scope.form); + form.$update(function(response) { + console.log('form updated'); + $scope.goToWithId('viewForm', response._id); + // $location.path('forms/' + response._id + '/admin'); + }, function(errorResponse) { + console.log(errorResponse.data.message); + $scope.error = errorResponse.data.message; + }); + }; + + //Populate AddField with all available form field types + $scope.addField = {}; + $scope.addField.types = FormFields.fields; + $scope.addField.new = $scope.addField.types[0].name; + $scope.addField.lastAddedID = 0; + + // preview form mode + $scope.previewMode = false; + + // previewForm - for preview purposes, form will be copied into this + // otherwise, actual form might get manipulated in preview mode + $scope.previewForm = {}; + + + // accordion settings + $scope.accordion = {}; + $scope.accordion.oneAtATime = true; + + // create new field button click + $scope.addNewField = function(){ + + // incr field_id counter + $scope.addField.lastAddedID++; + + var newField = { + 'title' : 'New field - ' + ($scope.addField.lastAddedID), + 'fieldType' : $scope.addField.new, + 'fieldValue' : '', + 'required' : true, + 'disabled' : false }; - //Populate AddField with all available form field types - $scope.addField = {}; - $scope.addField.types = FormFields.fields; - $scope.addField.new = $scope.addField.types[0].name; - $scope.addField.lastAddedID = 0; + // put newField into fields array + $scope.form.form_fields.push(newField); + // console.log($scope.form.form_fields); + }; - // preview form mode - $scope.previewMode = false; - - // previewForm - for preview purposes, form will be copied into this - // otherwise, actual form might get manipulated in preview mode - $scope.previewForm = {}; - - - // accordion settings - $scope.accordion = {}; - $scope.accordion.oneAtATime = true; - - // create new field button click - $scope.addNewField = function(){ - - // incr field_id counter - $scope.addField.lastAddedID++; - - var newField = { - 'title' : 'New field - ' + ($scope.addField.lastAddedID), - 'fieldType' : $scope.addField.new, - 'fieldValue' : '', - 'required' : true, - 'disabled' : false - }; - - // put newField into fields array - $scope.form.form_fields.push(newField); - // console.log($scope.form.form_fields); - }; - - // deletes particular field on button click - $scope.deleteField = function (field_id){ - for(var i = 0; i < $scope.form.form_fields.length; i++){ - if($scope.form.form_fields[i].field_id === field_id){ - $scope.form.form_fields.splice(i, 1); - break; - } + // deletes particular field on button click + $scope.deleteField = function (field_id){ + for(var i = 0; i < $scope.form.form_fields.length; i++){ + if($scope.form.form_fields[i].field_id === field_id){ + $scope.form.form_fields.splice(i, 1); + break; } + } + }; + + // add new option to the field + $scope.addOption = function (field){ + if(!field.field_options) + field.field_options = []; + + var lastOptionID = 0; + + if(field.field_options[field.field_options.length-1]) + lastOptionID = field.field_options[field.field_options.length-1].option_id; + + // new option's id + var option_id = lastOptionID + 1; + + var newOption = { + 'option_id' : option_id, + 'option_title' : 'Option ' + option_id, + 'option_value' : option_id }; - // add new option to the field - $scope.addOption = function (field){ - if(!field.field_options) - field.field_options = []; + // put new option into field_options array + field.field_options.push(newOption); + }; - var lastOptionID = 0; - - if(field.field_options[field.field_options.length-1]) - lastOptionID = field.field_options[field.field_options.length-1].option_id; - - // new option's id - var option_id = lastOptionID + 1; - - var newOption = { - 'option_id' : option_id, - 'option_title' : 'Option ' + option_id, - 'option_value' : option_id - }; - - // put new option into field_options array - field.field_options.push(newOption); - }; - - // delete particular option - $scope.deleteOption = function (field, option){ - for(var i = 0; i < field.field_options.length; i++){ - if(field.field_options[i].option_id === option.option_id){ - field.field_options.splice(i, 1); - break; - } + // delete particular option + $scope.deleteOption = function (field, option){ + for(var i = 0; i < field.field_options.length; i++){ + if(field.field_options[i].option_id === option.option_id){ + field.field_options.splice(i, 1); + break; } - }; + } + }; - // preview form - $scope.previewOn = function(){ - if($scope.form.form_fields === null || $scope.form.form_fields.length === 0) { - var title = 'Error'; - var msg = 'No fields added yet, please add fields to the form before preview.'; - var btns = [{result:'ok', label: 'OK', cssClass: 'btn-primary'}]; + // preview form + $scope.previewOn = function(){ + if($scope.form.form_fields === null || $scope.form.form_fields.length === 0) { + var title = 'Error'; + var msg = 'No fields added yet, please add fields to the form before preview.'; + var btns = [{result:'ok', label: 'OK', cssClass: 'btn-primary'}]; - // $dialog.messageBox(title, msg, btns).open(); - } - else { - $scope.previewMode = !$scope.previewMode; - $scope.form.submitted = false; - angular.copy($scope.form, $scope.previewForm); - } - }; - - // hide preview form, go back to create mode - $scope.previewOff = function(){ + // $dialog.messageBox(title, msg, btns).open(); + } + else { $scope.previewMode = !$scope.previewMode; $scope.form.submitted = false; - }; + angular.copy($scope.form, $scope.previewForm); + } + }; - // decides whether field options block will be shown (true for dropdown and radio fields) - $scope.showAddOptions = function (field){ - if(field.field_type === 'radio' || field.field_type === 'dropdown') - return true; - else - return false; - }; + // hide preview form, go back to create mode + $scope.previewOff = function(){ + $scope.previewMode = !$scope.previewMode; + $scope.form.submitted = false; + }; - // }); + // decides whether field options block will be shown (true for dropdown and radio fields) + $scope.showAddOptions = function (field){ + if(field.field_type === 'radio' || field.field_type === 'dropdown') + return true; + else + return false; + }; } ]); \ No newline at end of file diff --git a/public/modules/forms/controllers/submit-form.client.controller.js b/public/modules/forms/controllers/submit-form.client.controller.js index 6e6405b3..307410f4 100644 --- a/public/modules/forms/controllers/submit-form.client.controller.js +++ b/public/modules/forms/controllers/submit-form.client.controller.js @@ -3,20 +3,10 @@ // Forms controller angular.module('forms').controller('SubmitFormController', ['$scope', '$stateParams', '$state', 'Forms', 'CurrentForm', function($scope, $stateParams, $state, Forms, CurrentForm) { - - // Principal.identity().then(function(user){ - // $scope.authentication.user = user; - // }).then(function(){ - $scope.form = Forms.get({ - formId: $stateParams.formId - }); - CurrentForm.setForm($scope.form); - - - // console.log($scope.form); - - - // }); + $scope.form = Forms.get({ + formId: $stateParams.formId + }); + CurrentForm.setForm($scope.form); } ]); \ No newline at end of file diff --git a/public/modules/forms/controllers/view-form-submission.client.controller.js b/public/modules/forms/controllers/view-form-submission.client.controller.js index aa82a69f..c87a0ff2 100644 --- a/public/modules/forms/controllers/view-form-submission.client.controller.js +++ b/public/modules/forms/controllers/view-form-submission.client.controller.js @@ -33,9 +33,9 @@ angular.module('forms').controller('ViewSubmissionController', ['$scope', '$stat $http.delete('/forms/'+$stateParams.formId+'submissions/'+$scope.submission._id). success(function(data, status, headers){ - console.log('submission deleted successfully'); - alert('submission deleted..'); - }); + console.log('submission deleted successfully'); + alert('submission deleted..'); + }); } else { $scope.submission.$remove(function() { @@ -43,9 +43,9 @@ angular.module('forms').controller('ViewSubmissionController', ['$scope', '$stat $state.path('submissions'); $http.delete('/forms/'+$stateParams.formId+'/submissions/'+$scope.submission._id). success(function(data, status, headers){ - console.log('submission deleted successfully'); - alert('submission deleted..'); - }); + console.log('submission deleted successfully'); + alert('submission deleted..'); + }); }); } }; diff --git a/public/modules/forms/controllers/view-form.client.controller.js b/public/modules/forms/controllers/view-form.client.controller.js index 1ca2eaae..f2d5878c 100644 --- a/public/modules/forms/controllers/view-form.client.controller.js +++ b/public/modules/forms/controllers/view-form.client.controller.js @@ -4,51 +4,73 @@ angular.module('forms').controller('ViewFormController', ['$scope', '$stateParams', '$state', 'Forms', 'CurrentForm','$http', function($scope, $stateParams, $state, Forms, CurrentForm, $http) { - // view form submissions - $scope.viewSubmissions = false; + // view form submissions + $scope.form = CurrentForm.getForm(); + $scope.submissions = undefined; + $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() { - $scope.forms = Forms.query(); - }; - - // Find a specific Form - $scope.findOne = function() { - $scope.form = Forms.get({ - formId: $stateParams.formId - }); - CurrentForm.setForm($scope.form); - }; - - // Remove existing Form - $scope.remove = function() { - console.log('hello'); - var form = CurrentForm.getForm() - if(!form){ - form = $scope.form - } - $http.delete('/forms/'+$scope.form._id) + //show submissions of Form + $scope.showSubmissions = function(){ + $scope.viewSubmissions = true; + if(!$scope.submissions){ + $http.get('/forms/'+$scope.form._id+'/submissions') .success(function(data, status, headers){ - console.log('form deleted successfully'); - alert('Form deleted..'); - $state.go('listForms'); - }).error(function(error){ - console.log('ERROR: Form could not be deleted.'); - console.error(error); + console.log(data); + $scope.submissions = data; + console.log('form submissions successfully fetched'); + }) + .error(function(err){ + console.log('Could not fetch form submissions.\nError: '+err); + }); + } else if(!$scope.submissions.length){ + $http.get('/forms/'+$scope.form._id+'/submissions') + .success(function(data, status, headers){ + $scope.submissions = data; + console.log('form submissions successfully fetched'); + }) + .error(function(err){ + console.log('Could not fetch form submissions.\nError: '+err); }); + } + console.log($scope.submissions); + } - }; + //hide submissions of Form + $scope.hideSubmissions = function(){ + $scope.viewSubmissions = false; + } - - // }); + // Return all user's Forms + $scope.findAll = function() { + $scope.forms = Forms.query(); + }; + + // Find a specific Form + $scope.findOne = function() { + $scope.form = Forms.get({ + formId: $stateParams.formId + }); + CurrentForm.setForm($scope.form); + }; + + // Remove existing Form + $scope.remove = function() { + console.log('hello'); + var form = CurrentForm.getForm() + if(!form){ + form = $scope.form + } + $http.delete('/forms/'+$scope.form._id) + .success(function(data, status, headers){ + console.log('form deleted successfully'); + alert('Form deleted..'); + $state.go('listForms'); + }).error(function(error){ + console.log('ERROR: Form could not be deleted.'); + console.error(error); + }); + + }; } ]); \ No newline at end of file diff --git a/public/modules/forms/views/directiveViews/form/form.html b/public/modules/forms/views/directiveViews/form/form.html index 91529ba3..50dd96d2 100755 --- a/public/modules/forms/views/directiveViews/form/form.html +++ b/public/modules/forms/views/directiveViews/form/form.html @@ -41,14 +41,14 @@




-

+

diff --git a/public/modules/forms/views/view-form.client.view.html b/public/modules/forms/views/view-form.client.view.html index db73b0e7..6a74f502 100644 --- a/public/modules/forms/views/view-form.client.view.html +++ b/public/modules/forms/views/view-form.client.view.html @@ -25,20 +25,32 @@

- +
- + + - - + +
# - {{key}} + + {{value.title}} + + Time Elapsed + + Date Submitted (UTC)
{{$index+1}} - {{value}} + {{$index+1}} + {{value.fieldValue}} + + {{submission.timeElapsed}} + + + {{submission.created | date:'yyyy-MM-dd HH:mm:ss'}}