tellform/app/models/form_submission.server.model.js

105 lines
2.3 KiB
JavaScript
Raw Normal View History

2015-06-29 22:51:29 +00:00
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
2017-10-11 05:07:13 +00:00
timeStampPlugin = require('../libs/timestamp.server.plugin'),
2016-11-08 22:53:10 +00:00
FieldSchema = require('./form_field.server.model.js');
2015-10-06 20:14:38 +00:00
2016-04-29 06:16:17 +00:00
/**
2015-06-29 22:51:29 +00:00
* Form Submission Schema
*/
var FormSubmissionSchema = new Schema({
2016-06-05 03:13:42 +00:00
form_fields: [FieldSchema],
2016-04-29 06:16:17 +00:00
form: {
type: Schema.Types.ObjectId,
ref: 'Form',
2015-06-29 22:51:29 +00:00
required: true
},
ipAddr: {
2016-04-29 06:16:17 +00:00
type: String
2015-06-29 22:51:29 +00:00
},
geoLocation: {
Country: {
2016-04-29 06:16:17 +00:00
type: String
},
City: {
2016-04-29 06:16:17 +00:00
type: String
}
2015-06-29 22:51:29 +00:00
},
device: {
type: {
2016-04-29 06:16:17 +00:00
type: String
},
name: {
2016-04-29 06:16:17 +00:00
type: String
}
},
2015-06-29 22:51:29 +00:00
2016-04-29 06:16:17 +00:00
timeElapsed: {
2016-06-05 03:13:42 +00:00
type: Number
2016-04-29 06:16:17 +00:00
},
percentageComplete: {
2016-04-29 06:16:17 +00:00
type: Number
}
2015-06-29 22:51:29 +00:00
});
FormSubmissionSchema.pre('save', function (next) {
//Iterate through form fields and format data
for(var i = 0; i < this.form_fields.length; i++){
if(this.form_fields[i].fieldType === 'dropdown'){
this.form_fields[i].fieldValue = this.form_fields[i].fieldValue.option_value;
}
2017-10-19 00:18:18 +00:00
delete form_fields[i].validFieldTypes;
delete form_fields[i].disabled;
delete form_fields[i].required;
delete form_fields[i].isSubmission;
delete form_fields[i].title;
delete form_fields[i].fieldOptions;
delete form_fields[i].ratingOptions;
delete form_fields[i].logicJump;
delete form_fields[i].description;
delete form_fields[i].created;
delete form_fields[i].lastModified;
delete form_fields[i].deletePreserved;
}
next();
});
2016-11-09 18:02:12 +00:00
FormSubmissionSchema.path('form_fields', {
set: function(form_fields){
for (var i = 0; i < form_fields.length; i++) {
form_fields[i].isSubmission = true;
form_fields[i]._id = new mongoose.mongo.ObjectID();
2017-10-19 00:18:18 +00:00
delete form_fields[i].validFieldTypes;
delete form_fields[i].disabled;
delete form_fields[i].required;
delete form_fields[i].isSubmission;
delete form_fields[i].title;
delete form_fields[i].fieldOptions;
delete form_fields[i].ratingOptions;
delete form_fields[i].logicJump;
delete form_fields[i].description;
delete form_fields[i].created;
delete form_fields[i].lastModified;
delete form_fields[i].deletePreserved;
2016-11-09 18:02:12 +00:00
}
return form_fields;
}
});
2016-06-05 03:13:42 +00:00
2017-10-11 05:07:13 +00:00
FormSubmissionSchema.plugin(timeStampPlugin, {
2015-10-06 20:14:38 +00:00
createdPath: 'created',
modifiedPath: 'lastModified',
useVirtual: false
});
2015-09-10 22:06:28 +00:00
module.exports = FormSubmissionSchema;