Skip to content
Snippets Groups Projects
Commit 5d575e71 authored by Diego Sampaio's avatar Diego Sampaio
Browse files

Add option to not overwrite livechat custom fields

parent 790c6193
No related branches found
No related tags found
No related merge requests found
...@@ -2,13 +2,13 @@ this.CustomFields = (function() { ...@@ -2,13 +2,13 @@ this.CustomFields = (function() {
var queue = {}; var queue = {};
var initiated = false; var initiated = false;
var setCustomField = function(token, key, value) { var setCustomField = function(token, key, value, overwrite = true) {
if (!initiated) { if (!initiated) {
// queue by key // queue by key
queue[key] = { token, value }; queue[key] = { token, value, overwrite };
return; return;
} }
Meteor.call('livechat:setCustomField', token, key, value); Meteor.call('livechat:setCustomField', token, key, value, overwrite);
}; };
var init = function() { var init = function() {
...@@ -16,7 +16,7 @@ this.CustomFields = (function() { ...@@ -16,7 +16,7 @@ this.CustomFields = (function() {
if (Meteor.userId()) { if (Meteor.userId()) {
initiated = true; initiated = true;
Object.keys(queue).forEach((key) => { Object.keys(queue).forEach((key) => {
setCustomField.call(this, queue[key].token, key, queue[key].value); setCustomField.call(this, queue[key].token, key, queue[key].value, queue[key].overwrite);
}); });
queue = {}; queue = {};
} else { } else {
......
...@@ -8,8 +8,8 @@ var api = { ...@@ -8,8 +8,8 @@ var api = {
Meteor.call('livechat:pageVisited', visitor.getToken(), info); Meteor.call('livechat:pageVisited', visitor.getToken(), info);
}, },
setCustomField: function(key, value) { setCustomField: function(key, value, overwrite = true) {
CustomFields.setCustomField(visitor.getToken(), key, value); CustomFields.setCustomField(visitor.getToken(), key, value, overwrite);
}, },
setTheme: function(theme) { setTheme: function(theme) {
......
...@@ -74,8 +74,11 @@ ...@@ -74,8 +74,11 @@
}); });
}; };
var setCustomField = function(key, value) { var setCustomField = function(key, value, overwrite) {
callHook('setCustomField', [ key, value ]); if (typeof overwrite === 'undefined') {
overwrite = true;
}
callHook('setCustomField', [ key, value, overwrite ]);
}; };
var setTheme = function(theme) { var setTheme = function(theme) {
......
Meteor.methods({ Meteor.methods({
'livechat:setCustomField'(token, key, value) { 'livechat:setCustomField'(token, key, value, overwrite = true) {
const customField = RocketChat.models.LivechatCustomField.findOneById(key); const customField = RocketChat.models.LivechatCustomField.findOneById(key);
if (customField) { if (customField) {
if (customField.scope === 'room') { if (customField.scope === 'room') {
return RocketChat.models.Rooms.updateLivechatDataByToken(token, key, value); return RocketChat.models.Rooms.updateLivechatDataByToken(token, key, value, overwrite);
} else { } else {
// Save in user // Save in user
return RocketChat.models.Users.updateLivechatDataByToken(token, key, value); return RocketChat.models.Users.updateLivechatDataByToken(token, key, value, overwrite);
} }
} }
......
...@@ -16,12 +16,19 @@ RocketChat.models.Rooms.updateSurveyFeedbackById = function(_id, surveyFeedback) ...@@ -16,12 +16,19 @@ RocketChat.models.Rooms.updateSurveyFeedbackById = function(_id, surveyFeedback)
return this.update(query, update); return this.update(query, update);
}; };
RocketChat.models.Rooms.updateLivechatDataByToken = function(token, key, value) { RocketChat.models.Rooms.updateLivechatDataByToken = function(token, key, value, overwrite = true) {
const query = { const query = {
'v.token': token, 'v.token': token,
open: true open: true
}; };
if (!overwrite) {
const room = this.findOne(query, { fields: { livechatData: 1 } });
if (room.livechatData && typeof room.livechatData[key] !== 'undefined') {
return true;
}
}
const update = { const update = {
$set: { $set: {
[`livechatData.${key}`]: value [`livechatData.${key}`]: value
......
...@@ -166,11 +166,18 @@ RocketChat.models.Users.openOffice = function() { ...@@ -166,11 +166,18 @@ RocketChat.models.Users.openOffice = function() {
}); });
}; };
RocketChat.models.Users.updateLivechatDataByToken = function(token, key, value) { RocketChat.models.Users.updateLivechatDataByToken = function(token, key, value, overwrite = true) {
const query = { const query = {
'profile.token': token 'profile.token': token
}; };
if (!overwrite) {
const user = this.findOne(query, { fields: { livechatData: 1 } });
if (user.livechatData && typeof user.livechatData[key] !== 'undefined') {
return true;
}
}
const update = { const update = {
$set: { $set: {
[`livechatData.${key}`]: value [`livechatData.${key}`]: value
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment