tellform/app/sockets/analytics_service.js

77 lines
1.7 KiB
JavaScript
Raw Normal View History

2016-06-07 00:37:09 +00:00
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
errorHandler = require('../controllers/errors.server.controller'),
Form = mongoose.model('Form');
// Create the chat configuration
module.exports = function (io, socket) {
var visitorsData = {};
var saveVisitorData = function (data, cb){
Form.findById(data.formId, function(err, form) {
if (err) {
console.log(err);
throw new Error(errorHandler.getErrorMessage(err));
}
var newVisitor = {
referrer: data.referrer,
lastActiveField: data.lastActiveField,
timeElapsed: data.timeElapsed,
2016-06-17 21:51:17 +00:00
isSubmitted: data.isSubmitted,
language: data.language,
ipAddr: data.ipAddr,
deviceType: data.deviceType
2016-06-07 00:37:09 +00:00
};
2016-11-09 19:04:47 +00:00
2016-06-07 00:37:09 +00:00
form.analytics.visitors.push(newVisitor);
2017-04-23 02:27:45 +00:00
form.save(function (formSaveErr) {
2016-06-07 00:37:09 +00:00
if (err) {
2017-04-23 02:27:45 +00:00
console.error(err);
throw new Error(errorHandler.getErrorMessage(formSaveErr));
2016-06-07 00:37:09 +00:00
}
delete visitorsData[socket.id];
2017-04-23 02:27:45 +00:00
if(cb){
return cb();
2017-04-23 02:27:45 +00:00
}
2016-06-07 00:37:09 +00:00
});
});
socket.disconnect(0);
};
2017-04-23 02:27:45 +00:00
io.on('connection', function(current_socket) {
2016-06-07 00:37:09 +00:00
// a user has visited our page - add them to the visitorsData object
2017-04-23 02:27:45 +00:00
current_socket.on('form-visitor-data', function(data) {
current_socket.id = data.formId;
visitorsData[current_socket.id] = data;
visitorsData[current_socket.id].isSaved = false;
if (data.isSubmitted) {
saveVisitorData(data, function () {
2017-04-23 02:27:45 +00:00
visitorsData[current_socket.id].isSaved = true;
current_socket.disconnect(0);
});
}
2016-06-07 00:37:09 +00:00
});
2017-04-23 02:27:45 +00:00
current_socket.on('disconnect', function() {
var data = visitorsData[current_socket.id];
2016-06-07 00:37:09 +00:00
2017-04-23 02:27:45 +00:00
if(data && !data.isSubmitted && !data.isSaved) {
data.isSaved = true;
saveVisitorData(data);
2016-06-07 00:37:09 +00:00
}
});
});
};