removed submissions and analytics from form render object
This commit is contained in:
parent
f4854e078a
commit
ca0cd1114e
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -43,3 +43,6 @@ angular.module('view-form').value('supportedFields', [
|
|||
'number',
|
||||
'natural'
|
||||
]);
|
||||
|
||||
angular.module('view-form').constant('VIEW_FORM_URL', '/forms/:formId/render');
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
]);
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 = {};
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
});
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
// Setting up route
|
||||
angular.module('view-form').config(['$stateProvider',
|
||||
|
||||
function($stateProvider) {
|
||||
// Forms state routing
|
||||
$stateProvider.
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
}
|
||||
|
||||
$.ajaxSetup( { "async": false } );
|
||||
var result = $.getJSON('myUrl');
|
||||
var geoData = $.getJSON('//freegeoip.net/json/?callback=?');
|
||||
$.ajaxSetup( { "async": true } );
|
||||
|
||||
|
|
|
@ -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']);
|
||||
});
|
|
@ -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>
|
Loading…
Reference in a new issue