removed submissions and analytics from form render object

This commit is contained in:
David Baldwynn 2017-03-06 12:30:31 -08:00
parent f4854e078a
commit ca0cd1114e
No known key found for this signature in database
GPG key ID: 15D1C13202224A9B
17 changed files with 44 additions and 210 deletions

View file

@ -47,7 +47,7 @@ exports.deleteSubmissions = function(req, res) {
*/
exports.createSubmission = function(req, res) {
var form = req.form;
var timeElapsed = 0;
if(typeof req.body.timeElapsed == "number"){
@ -61,7 +61,7 @@ exports.createSubmission = function(req, res) {
timeElapsed: timeElapsed,
percentageComplete: req.body.percentageComplete
});
//Save submitter's IP Address
if(req.headers['x-forwarded-for'] || req.connection.remoteAddress){
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
@ -145,7 +145,6 @@ exports.create = function(req, res) {
* Show the current form
*/
exports.read = function(req, res) {
FormSubmission.find({ form: req.form._id }).exec(function(err, _submissions) {
if (err) {
console.log(err);
@ -170,6 +169,26 @@ exports.read = function(req, res) {
});
};
/**
* Show the current form for rendering form live
*/
exports.readForRender = function(req, res) {
var newForm = req.form.toJSON();
if (!newForm.isLive) {
return res.status(404).send({
message: 'Form Does Not Exist'
});
}
//Remove extraneous fields from form object
delete newForm.submissions;
delete newForm.analytics;
delete newForm.isLive;
return res.json(newForm);
};
/**
* Update a form
*/

View file

@ -5,7 +5,6 @@
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
pdfFiller = require('pdffiller'),
_ = require('lodash'),
config = require('../../config/config'),
path = require('path'),
@ -83,7 +82,6 @@ var formSchemaOptions = {
}
};
/**
* Form Schema
*/
@ -117,14 +115,6 @@ var FormSchema = new Schema({
ref: 'User',
required: 'Form must have an Admin'
},
pdf: {
type: Schema.Types.Mixed
},
pdfFieldMap: {
type: Schema.Types.Mixed
},
startPage: {
showStart:{
type: Boolean,
@ -182,7 +172,7 @@ var FormSchema = new Schema({
}
},
font: String
},
}
}, formSchemaOptions);
/*

View file

@ -8,10 +8,18 @@ var forms = require('../../app/controllers/forms.server.controller'),
module.exports = function(app) {
// Core routing
app.route('/').get(core.index);
app.route('/')
.get(core.index);
app.route('/subdomain/api/').get(core.redoc);
app.route('/subdomain/:userSlug((?!api$)[A-Za-z0-9]+)/').get(core.form);
app.route('/subdomain/:userSlug((?!api$)[A-Za-z0-9]+)/forms/:formId([a-zA-Z0-9]+)').get(forms.read)
app.route('/subdomain/api/')
.get(core.redoc);
app.route('/subdomain/:userSlug((?!api$)[A-Za-z0-9]+)/')
.get(core.form);
app.route('/subdomain/:userSlug((?!api$)[A-Za-z0-9]+)/forms/:formId([a-zA-Z0-9]+)')
.post(forms.createSubmission);
app.route('/subdomain/:userSlug((?!api$)[A-Za-z0-9]+)/forms/:formId([a-zA-Z0-9]+)/render')
.get(forms.readForRender);
};

View file

@ -32,7 +32,7 @@ module.exports = function(app) {
.post(auth.isAuthenticatedOrApiKey, forms.create);
app.route('/forms/:formId([a-zA-Z0-9]+)')
.get(forms.read)
.get(auth.isAuthenticatedOrApiKey, forms.hasAuthorization, forms.read)
.post(forms.createSubmission)
.put(auth.isAuthenticatedOrApiKey, forms.hasAuthorization, forms.update)
.delete(auth.isAuthenticatedOrApiKey, forms.hasAuthorization, forms.delete);

View file

@ -136,9 +136,7 @@ module.exports = function(db) {
req.url = path;
req.userId = user._id;
console.log('\n\n\ngot subdomain: '+ req.subdomains.reverse()[0]);
// Q.E.D.
next();
});

View file

@ -88,7 +88,6 @@
"passport-localapikey-update": "^0.5.0",
"passport-twitter": "~1.0.2",
"path-exists": "^2.1.0",
"pdffiller": "~0.1.1",
"prerender-node": "^2.2.1",
"random-js": "^1.0.8",
"raven": "^0.9.0",

View file

@ -43,3 +43,6 @@ angular.module('view-form').value('supportedFields', [
'number',
'natural'
]);
angular.module('view-form').constant('VIEW_FORM_URL', '/forms/:formId/render');

View file

@ -5,8 +5,6 @@ angular.module('view-form').controller('SubmitFormController', [
'$scope', '$rootScope', '$state', '$translate', 'myForm',
function($scope, $rootScope, $state, $translate, myForm) {
$scope.myform = myForm;
$translate.use(myForm.language);
}
]);

View file

@ -49,7 +49,7 @@ angular.module('view-form').directive('fieldDirective', ['$http', '$compile', '$
forms: '='
},
link: function(scope, element) {
$rootScope.chooseDefaultOption = scope.chooseDefaultOption = function(type) {
if(type === 'yes_no'){
scope.field.fieldValue = 'true';

View file

@ -35,7 +35,6 @@ function hashFnv32a(str, asString, seed) {
}
return hval >>> 0;
}
;
angular.module('view-form').directive('submitFormDirective', ['$http', 'TimeCounter', '$filter', '$rootScope', 'SendVisitorData',
function ($http, TimeCounter, $filter, $rootScope, SendVisitorData) {

View file

@ -3,7 +3,6 @@
//Forms service used for communicating with the forms REST endpoints
angular.module('view-form').service('CurrentForm',
function(){
//Private variables
var _form = {};

View file

@ -1,25 +1,11 @@
'use strict';
//Forms service used for communicating with the forms REST endpoints
angular.module('view-form').factory('Forms', ['$resource', 'FORM_URL',
function($resource, FORM_URL) {
return $resource(FORM_URL, {
angular.module('view-form').factory('Forms', ['$resource', 'VIEW_FORM_URL',
function($resource, VIEW_FORM_URL) {
return $resource(VIEW_FORM_URL, {
formId: '@_id'
}, {
'query' : {
method: 'GET',
isArray: true
//DAVID: TODO: Do we really need to get visible_form_fields for a Query?
// transformResponse: function(data, header) {
// var forms = angular.fromJson(data);
// angular.forEach(forms, function(form, idx) {
// form.visible_form_fields = _.filter(form.form_fields, function(field){
// return (field.deletePreserved === false);
// });
// });
// return forms;
// }
},
'get' : {
method: 'GET',
transformResponse: function(data, header) {

View file

@ -1,29 +0,0 @@
'use strict';
// Configuring the Forms drop-down menus
angular.module('view-form').filter('formValidity',
function(){
return function(formObj){
if(formObj && formObj.form_fields && formObj.visible_form_fields){
//get keys
var formKeys = Object.keys(formObj);
//we only care about things that don't start with $
var fieldKeys = formKeys.filter(function(key){
return key[0] !== '$';
});
var fields = formObj.form_fields;
var valid_count = fields.filter(function(field){
if(typeof field === 'object' && field.fieldType !== 'statement' && field.fieldType !== 'rating'){
return !!(field.fieldValue);
}
}).length;
return valid_count - (formObj.form_fields.length - formObj.visible_form_fields.length);
}
return 0;
};
});

View file

@ -2,7 +2,6 @@
// Setting up route
angular.module('view-form').config(['$stateProvider',
function($stateProvider) {
// Forms state routing
$stateProvider.

View file

@ -29,7 +29,6 @@
}
$.ajaxSetup( { "async": false } );
var result = $.getJSON('myUrl');
var geoData = $.getJSON('//freegeoip.net/json/?callback=?');
$.ajaxSetup( { "async": true } );

View file

@ -1,59 +0,0 @@
angular.module('forms', [
'duScroll', 'ngResource', 'NodeForm.templates', 'pascalprecht.translate',
'angular-input-stars',
'ui.select'
]);
angular.module('NodeForm', [
'ui.select', 'cgBusy', 'ngSanitize', 'vButton', 'ngResource',
'ui.router', 'ui.bootstrap', 'ui.utils', 'ngRaven', 'forms',
'ui.select'
]);
angular.module('forms').factory('Auth', [
function() {
var service = {
_currentUser: null,
get currentUser(){
return this._currentUser;
},
ensureHasCurrentUser: function() {
return null;
},
isAuthenticated: function() {
return false;
},
getUserState: function() {
return '';
},
login: function() {
},
logout: function() {
},
};
return service;
}
]);
angular.module('forms').factory('$state', [function() {
return {
go: function() {}
};
}]);
angular.module('forms').factory('myForm', ['Forms', function(Forms) {
var form = window.form;
form.visible_form_fields = _.filter(form.form_fields, function(field){
return (field.deletePreserved === false);
});
return form;
}]);
angular.module('forms').constant('FORM_URL', '/form/:formId');
angular.module('forms').value('SendVisitorData', {
send: function(){}
});
angular.element(document).ready(function() {
//Then init the app
angular.bootstrap(document, ['forms']);
});

View file

@ -1,75 +0,0 @@
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>tellform demo</title>
<!-- General META -->
<meta charset="utf-8">
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel='stylesheet' href='lib/bootstrap/dist/css/bootstrap.min.css' />
<link rel='stylesheet' href='lib/font-awesome/css/font-awesome.css' />
<link rel='stylesheet' href='lib/components-font-awesome/css/font-awesome.css' />
<link rel='stylesheet' href='lib/ui-select/dist/select.css' />
<link rel='stylesheet' href='lib/v-button/dist/v-button.css' />
<link rel='stylesheet' href='lib/angular-busy/dist/angular-busy.css' />
<link rel='stylesheet' href='lib/angular-input-stars/angular-input-stars.css' />
<link rel='stylesheet' href='lib/jquery-ui/themes/flick/jquery-ui.css' />
<link rel='stylesheet' href='../dist/form.css' />
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/select2/3.4.5/select2.css" />
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.8.5/css/selectize.default.css" />
<!-- HTML5 Shim -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body ng-cloak>
<section class="content">
<section class="public-form" data-ng-controller="SubmitFormController" ng-style="{ 'background-color': myform.design.colors.backgroundColor }">
<submit-form-directive myform="myform"></submit-form-directive>
</section>
</section>
<script>
window.form = {"_id":"572b6e3878342701004bec43","lastModified":"2016-05-05T18:18:23.952Z","admin":{"_id":"572af7fc8e513d0100abbf72","lastModified":"2016-05-05T07:41:45.577Z","email":"sam@lalop.co","provider":"local","username":"sam@lalop.co","__v":0,"created":"2016-05-05T07:36:28.721Z","language":"english","roles":["user"],"lastName":"sam","firstName":"sam"},"title":"hello hello","__v":23,"created":"2016-05-05T16:00:56.035Z","plugins":{"oscarhost":{"settings":{"validFields":["address","city","email","firstName","hin","lastName","phone","postal","province","sex","spokenLanguage","title","DOB"],"validUpdateTypes":["upsert","force_add","force_update","fetch"]}}},"design":{"colors":{"buttonTextColor":"#333","buttonColor":"#fff","answerColor":"#333","questionColor":"#333","backgroundColor":"#fff"}},"autofillPDFs":false,"isLive":false,"isGenerated":false,"hideFooter":false,"startPage":{"buttons":[],"introButtonText":"Start","introTitle":"Welcome to Form","showStart":false},"submissions":[],"form_fields":[{"lastModified":"2016-05-05T18:18:23.950Z","title":"Short Text2","fieldType":"textfield","fieldValue":"","_id":"572b8da578342701004bec4e","created":"2016-05-05T18:15:01.633Z","validFieldTypes":["textfield","date","email","link","legal","url","textarea","statement","welcome","thankyou","file","dropdown","scale","rating","radio","checkbox","hidden","yes_no","natural","number"],"deletePreserved":false,"disabled":false,"required":true,"fieldOptions":[],"description":""},{"lastModified":"2016-05-05T18:18:23.950Z","title":"Multiple Choice2","fieldType":"radio","fieldValue":"","_id":"572b8dbd78342701004bec4f","created":"2016-05-05T18:15:25.237Z","validFieldTypes":["textfield","date","email","link","legal","url","textarea","statement","welcome","thankyou","file","dropdown","scale","rating","radio","checkbox","hidden","yes_no","natural","number"],"deletePreserved":false,"disabled":false,"required":true,"fieldOptions":[{"option_id":67415,"option_title":"Option 0","option_value":"Option 0","_id":"572b8dc178342701004bec50"},{"option_id":79494,"option_title":"Option 67415","option_value":"Option 67415","_id":"572b8dc278342701004bec51"},{"option_id":75726,"option_title":"Option 79494","option_value":"Option 79494","_id":"572b8dc278342701004bec52"}],"description":""},{"lastModified":"2016-05-05T18:18:23.951Z","title":"Dropdown2","fieldType":"dropdown","fieldValue":"","_id":"572b8e6a78342701004bec53","created":"2016-05-05T18:18:18.667Z","validFieldTypes":["textfield","date","email","link","legal","url","textarea","statement","welcome","thankyou","file","dropdown","scale","rating","radio","checkbox","hidden","yes_no","natural","number"],"deletePreserved":false,"disabled":false,"required":true,"fieldOptions":[{"option_id":12229,"option_title":"Option 0","option_value":"Option 0","_id":"572b8e6e78342701004bec54"},{"option_id":80879,"option_title":"Option 12229","option_value":"Option 12229","_id":"572b8e6f78342701004bec55"},{"option_id":88875,"option_title":"Option 80879","option_value":"Option 80879","_id":"572b8e6f78342701004bec56"}],"description":""}],"description":"","language":"french"}
</script>
<script src='lib/jquery/dist/jquery.js'></script>
<script src='lib/angular/angular.js'></script>
<script src='boot.js'></script>
<script src='lib/angular-resource/angular-resource.js'></script>
<script src='lib/angular-bootstrap/ui-bootstrap-tpls.js'></script>
<script src='lib/angular-ui-scroll/dist/ui-scroll.js'></script>
<script src='lib/angular-ui-scrollpoint/dist/scrollpoint.js'></script>
<script src='lib/angular-ui-event/dist/event.js'></script>
<script src='lib/angular-ui-mask/dist/mask.js'></script>
<script src='lib/angular-ui-validate/dist/validate.js'></script>
<script src='lib/angular-ui-indeterminate/dist/indeterminate.js'></script>
<script src='lib/angular-strap/dist/angular-strap.js'></script>
<script src='lib/angular-strap/dist/angular-strap.tpl.js'></script>
<script src='lib/lodash/lodash.js'></script>
<script src='lib/jquery-ui/jquery-ui.js'></script>
<script src='lib/angular-scroll/angular-scroll.js'></script>
<script src='lib/ui-select/dist/select.js'></script>
<script src='lib/angular-sanitize/angular-sanitize.js'></script>
<script src='lib/v-button/dist/v-button.js'></script>
<script src='lib/angular-animate/angular-animate.js'></script>
<script src='lib/bootstrap/dist/js/bootstrap.js'></script>
<script src='lib/angular-ui-utils/index.js'></script>
<script src='lib/restangular/dist/restangular.js'></script>
<script src='lib/angular-ui-date/src/date.js'></script>
<script src='lib/angular-input-stars/angular-input-stars.js'></script>
<script src='lib/angular-busy/dist/angular-busy.js'></script>
<script src='lib/angular-translate/angular-translate.js'></script>
<script src='../dist/form.js'></script>
</body>
</html>