tellform/app/models/form_submission.server.model.js
2016-11-09 10:02:12 -08:00

133 lines
2.3 KiB
JavaScript

'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
freegeoip = require('node-freegeoip'),
_ = require('lodash'),
config = require('../../config/config'),
path = require('path'),
fs = require('fs-extra'),
mUtilities = require('mongoose-utilities'),
async = require('async'),
FieldSchema = require('./form_field.server.model.js');
// Setter function for form_fields
function formFieldsSetter(form_fields) {
for (var i = 0; i < form_fields.length; i++) {
form_fields[i].isSubmission = true;
form_fields[i].submissionId = form_fields[i]._id;
form_fields[i]._id = new mongoose.mongo.ObjectID();
}
console.log(form_fields)
return form_fields;
}
/**
* Form Submission Schema
*/
var FormSubmissionSchema = new Schema({
title: {
type: String
},
admin: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
form_fields: [FieldSchema],
form: {
type: Schema.Types.ObjectId,
ref: 'Form',
required: true
},
ipAddr: {
type: String
},
geoLocation: {
Country: {
type: String
},
Region: {
type: String
},
City: {
type: String
}
},
device: {
type: {
type: String
},
name: {
type: String
}
},
pdfFilePath: {
type: Schema.Types.Mixed
},
pdf: {
type: Schema.Types.Mixed
},
fdfData: {
type: Schema.Types.Mixed
},
timeElapsed: {
type: Number
},
percentageComplete: {
type: Number
},
hasPlugins: {
oscarhost: {
type: Boolean,
default: false
}
}
});
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].submissionId = form_fields[i]._id;
form_fields[i]._id = new mongoose.mongo.ObjectID();
}
console.log(form_fields);
return form_fields;
}
});
FormSubmissionSchema.plugin(mUtilities.timestamp, {
createdPath: 'created',
modifiedPath: 'lastModified',
useVirtual: false
});
//Check for IP Address of submitting person
FormSubmissionSchema.pre('save', function (next) {
var self = this;
if (this.ipAddr) {
if (this.isModified('ipAddr') || !this.geoLocation) {
freegeoip.getLocation(this.ipAddr, function (err, location) {
if (err) return next(err);
self.geoLocation = location;
return next();
});
}
}
return next();
});
module.exports = FormSubmissionSchema;