@tiledesk/tiledesk-server 2.2.39 → 2.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/LICENSE +14 -657
- package/README.md +17 -3
- package/app.js +14 -2
- package/channels/chat21/chat21WebHook.js +12 -1
- package/event/botEvent.js +1 -1
- package/event/subscriptionEvent.js +11 -0
- package/fonts/Roboto-Italic.ttf +0 -0
- package/fonts/Roboto-Medium.ttf +0 -0
- package/fonts/Roboto-MediumItalic.ttf +0 -0
- package/fonts/Roboto-Regular.ttf +0 -0
- package/middleware/passport.js +4 -1
- package/models/lead.js +2 -0
- package/models/request.js +38 -11
- package/models/subscriptionLog.js +34 -0
- package/models/tagLibrary.js +42 -0
- package/package.json +4 -11
- package/pubmodules/activities/activityArchiver.js +295 -0
- package/pubmodules/activities/index.js +3 -0
- package/pubmodules/activities/models/activity.js +88 -0
- package/pubmodules/activities/routes/activity.js +710 -0
- package/pubmodules/activities/test/activityRoute.js +85 -0
- package/pubmodules/analytics/analytics.js +1719 -0
- package/pubmodules/analytics/index.js +3 -0
- package/pubmodules/canned/cannedResponse.js +51 -0
- package/pubmodules/canned/cannedResponseRoute.js +157 -0
- package/pubmodules/canned/index.js +3 -0
- package/pubmodules/emailNotification/requestNotification.js +184 -26
- package/pubmodules/messageActions/messageActionsInterceptor.js +4 -2
- package/pubmodules/pubModulesManager.js +104 -5
- package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +3 -1
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +3 -1
- package/pubmodules/trigger/default.js +271 -0
- package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
- package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
- package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
- package/pubmodules/trigger/index.js +3 -0
- package/pubmodules/trigger/models/trigger.js +149 -0
- package/pubmodules/trigger/rulesTrigger.js +1181 -0
- package/pubmodules/trigger/start.js +114 -0
- package/pubmodules/trigger/triggerRoute.js +150 -0
- package/routes/department.js +51 -0
- package/routes/group.js +140 -0
- package/routes/lead.js +24 -1
- package/routes/message.js +6 -3
- package/routes/project.js +52 -0
- package/routes/public-request.js +265 -2
- package/routes/request.js +83 -11
- package/routes/subscription.js +140 -0
- package/routes/tag.js +138 -0
- package/routes/user-request.js +3 -2
- package/routes/widget.js +16 -1
- package/routes/widgetLoader.js +31 -0
- package/services/emailService.js +189 -11
- package/services/faqService.js +1 -1
- package/services/leadService.js +2 -0
- package/services/modulesManager.js +7 -188
- package/services/requestService.js +364 -6
- package/services/subscriptionNotifier.js +485 -0
- package/template/email/assignedEmailMessage.html +1 -1
- package/template/email/assignedRequest.html +1 -1
- package/template/email/newMessage.html +1 -1
- package/template/email/newMessageFollower.html +236 -0
- package/template/email/passwordChanged.html +1 -1
- package/template/email/pooledEmailMessage.html +1 -1
- package/template/email/pooledRequest.html +1 -1
- package/template/email/resetPassword.html +2 -2
- package/template/email/ticket.html +1 -1
- package/test/messageRoute.js +69 -0
- package/test/requestService.js +3 -1
- package/views/messages.jade +2 -2
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
var faqService = require('../../services/faqService');
|
|
2
|
+
var Trigger = require('./models/trigger');
|
|
3
|
+
var DefaultTrigger = require('./default');
|
|
4
|
+
var projectEvent = require('../../event/projectEvent');
|
|
5
|
+
var winston = require('../../config/winston');
|
|
6
|
+
|
|
7
|
+
var rulesTrigger = require('./rulesTrigger');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
function saveTrigger(trigger) {
|
|
11
|
+
trigger.save(function (err, savedTrigger) {
|
|
12
|
+
if (err) {
|
|
13
|
+
return winston.error("Error saving trigger for project with id "+trigger.id_project , err);
|
|
14
|
+
}
|
|
15
|
+
return winston.debug("Trigger saved for project with id "+trigger.id_project, saveTrigger);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
projectEvent.on('project.create', async (project) => {
|
|
19
|
+
setImmediate( async () => {
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
var botIdentity = await faqService.create("Bot", undefined, project._id, "system", "identity", "An identity bot");
|
|
24
|
+
var botIdentityId = "bot_"+botIdentity.id;
|
|
25
|
+
winston.debug("botIdentityId:"+botIdentityId);
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
winston.debug("DefaultTrigger.defTriggerObj.s_new_conversation_01",DefaultTrigger.defTriggerObj.s_new_conversation_01._id);
|
|
29
|
+
|
|
30
|
+
let s_new_conversation_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_new_conversation_01);
|
|
31
|
+
s_new_conversation_01.id_project = project._id;
|
|
32
|
+
winston.debug("s_new_conversation_01",s_new_conversation_01);
|
|
33
|
+
let s_new_conversation_01Trigger = new Trigger(s_new_conversation_01);
|
|
34
|
+
saveTrigger(s_new_conversation_01Trigger);
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
// let s_proactive_greeting_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_proactive_greeting_01);
|
|
39
|
+
// s_proactive_greeting_01.id_project = project._id;
|
|
40
|
+
// let s_proactive_greeting_01Trigger = new Trigger(s_proactive_greeting_01);
|
|
41
|
+
// saveTrigger(s_proactive_greeting_01Trigger);
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
let s_online_welcome_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_online_welcome_01);
|
|
45
|
+
s_online_welcome_01.id_project = project._id;
|
|
46
|
+
s_online_welcome_01.actions[0].parameters.sender = botIdentityId;
|
|
47
|
+
let s_online_welcome_01Trigger = new Trigger(s_online_welcome_01);
|
|
48
|
+
saveTrigger(s_online_welcome_01Trigger);
|
|
49
|
+
|
|
50
|
+
let s_offline_welcome_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_offline_welcome_01);
|
|
51
|
+
s_offline_welcome_01.id_project = project._id;
|
|
52
|
+
s_offline_welcome_01.actions[0].parameters.sender = botIdentityId;
|
|
53
|
+
let s_offline_welcome_01Trigger = new Trigger(s_offline_welcome_01);
|
|
54
|
+
saveTrigger(s_offline_welcome_01Trigger);
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
let s_closed_operating_hours_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_closed_operating_hours_01);
|
|
58
|
+
s_closed_operating_hours_01.id_project = project._id;
|
|
59
|
+
s_closed_operating_hours_01.actions[0].parameters.sender = botIdentityId;
|
|
60
|
+
let s_closed_operating_hours_01Trigger = new Trigger(s_closed_operating_hours_01);
|
|
61
|
+
saveTrigger(s_closed_operating_hours_01Trigger);
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
let s_invite_bot_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_invite_bot_01);
|
|
65
|
+
s_invite_bot_01.id_project = project._id;
|
|
66
|
+
let s_invite_bot_01Trigger = new Trigger(s_invite_bot_01);
|
|
67
|
+
saveTrigger(s_invite_bot_01Trigger);
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
let s_checkout_page_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_checkout_page_01);
|
|
71
|
+
s_checkout_page_01.id_project = project._id;
|
|
72
|
+
s_checkout_page_01.actions[0].parameters.sender = botIdentityId;
|
|
73
|
+
let s_checkout_page_01Trigger = new Trigger(s_checkout_page_01);
|
|
74
|
+
saveTrigger(s_checkout_page_01Trigger);
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
let s_ticketing_taking_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_ticketing_taking_01);
|
|
78
|
+
s_ticketing_taking_01.id_project = project._id;
|
|
79
|
+
s_ticketing_taking_01.actions[0].parameters.sender = botIdentityId;
|
|
80
|
+
let s_ticketing_taking_01Trigger = new Trigger(s_ticketing_taking_01);
|
|
81
|
+
saveTrigger(s_ticketing_taking_01Trigger);
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
//DIABLED
|
|
86
|
+
/*
|
|
87
|
+
let s_new_login_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_new_login_01);
|
|
88
|
+
s_new_login_01.id_project = project._id;
|
|
89
|
+
let s_new_login_01Trigger = new Trigger(s_new_login_01);
|
|
90
|
+
saveTrigger(s_new_login_01Trigger);
|
|
91
|
+
|
|
92
|
+
let s_invite_proactive_greeting_bot_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_invite_proactive_greeting_bot_01);
|
|
93
|
+
s_invite_proactive_greeting_bot_01.id_project = project._id;
|
|
94
|
+
let s_invite_proactive_greeting_bot_01Trigger = new Trigger(s_invite_proactive_greeting_bot_01);
|
|
95
|
+
saveTrigger(s_invite_proactive_greeting_bot_01Trigger);
|
|
96
|
+
|
|
97
|
+
let s_proactivegreeting_message_01 = Object.assign({}, DefaultTrigger.defTriggerObj.s_proactivegreeting_message_01);
|
|
98
|
+
s_proactivegreeting_message_01.id_project = project._id;
|
|
99
|
+
s_proactivegreeting_message_01.actions[0].parameters.sender = botIdentityId;
|
|
100
|
+
let s_proactivegreeting_message_01Trigger = new Trigger(s_proactivegreeting_message_01);
|
|
101
|
+
saveTrigger(s_proactivegreeting_message_01Trigger);
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
winston.info("triggers created for new project");
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
rulesTrigger.listen();
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
var express = require('express');
|
|
2
|
+
var router = express.Router();
|
|
3
|
+
var Trigger = require("./models/trigger");
|
|
4
|
+
var triggerEventEmitter = require("./event/triggerEventEmitter");
|
|
5
|
+
var DefaultTrigger = require('./default');
|
|
6
|
+
|
|
7
|
+
var winston = require('../../config/winston');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
winston.debug("trigger route");
|
|
11
|
+
|
|
12
|
+
router.post('/', function (req, res) {
|
|
13
|
+
|
|
14
|
+
winston.debug(req.body);
|
|
15
|
+
|
|
16
|
+
var trigger = new Trigger({
|
|
17
|
+
name: req.body.name,
|
|
18
|
+
description: req.body.description,
|
|
19
|
+
id_project: req.projectid,
|
|
20
|
+
trigger: req.body.trigger,
|
|
21
|
+
conditions: req.body.conditions,
|
|
22
|
+
actions: req.body.actions,
|
|
23
|
+
enabled:true,
|
|
24
|
+
createdBy: req.user.id,
|
|
25
|
+
updatedBy: req.user.id
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
trigger.save(function (err, savedTrigger) {
|
|
29
|
+
if (err) {
|
|
30
|
+
winston.error('--- > ERROR ', err);
|
|
31
|
+
return res.status(500).send({ success: false, msg: 'Error saving object.' });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
triggerEventEmitter.emit('trigger.create', savedTrigger);
|
|
35
|
+
|
|
36
|
+
res.json(savedTrigger);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
router.put('/:triggerid', function (req, res) {
|
|
41
|
+
|
|
42
|
+
winston.debug(req.body);
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
var update = {};
|
|
46
|
+
update.name = req.body.name;
|
|
47
|
+
update.description = req.body.description;
|
|
48
|
+
update.trigger = req.body.trigger;
|
|
49
|
+
update.conditions = req.body.conditions;
|
|
50
|
+
|
|
51
|
+
update.actions = req.body.actions;
|
|
52
|
+
update.enabled = req.body.enabled;
|
|
53
|
+
update.id_project = req.projectid;
|
|
54
|
+
update.updatedBy = req.user.id;
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
Trigger.findByIdAndUpdate(req.params.triggerid, update, { new: true, upsert: true }, function (err, updatedTrigger) {
|
|
58
|
+
if (err) {
|
|
59
|
+
winston.error('--- > ERROR ', err);
|
|
60
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
triggerEventEmitter.emit('trigger.update', updatedTrigger);
|
|
64
|
+
|
|
65
|
+
res.json(updatedTrigger);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// curl -v -X PUT -H 'Content-Type:application/json' -u andrea.leo@f21.it:123456 http://localhost:3000/5e9eca85696a55a7eb4615f2/modules/triggers/s_invite_bot_01/reset
|
|
70
|
+
|
|
71
|
+
router.put('/:triggercode/reset', function (req, res) {
|
|
72
|
+
|
|
73
|
+
winston.debug(req.body);
|
|
74
|
+
|
|
75
|
+
var query = {code:req.params.triggercode, id_project: req.projectid};
|
|
76
|
+
winston.verbose("query resetting trigger: " , query);
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
let triggerObj = Object.assign({}, DefaultTrigger.defTrigger[req.params.triggercode].toJSON());
|
|
80
|
+
triggerObj.id_project = req.projectid;
|
|
81
|
+
|
|
82
|
+
winston.verbose("reset triggerObj: " ,triggerObj);
|
|
83
|
+
|
|
84
|
+
let trigger = new Trigger(triggerObj);
|
|
85
|
+
// var trigger = DefaultTrigger.defTrigger[req.params.triggercode];
|
|
86
|
+
// winston.verbose("trigger: ", trigger.toJSON());
|
|
87
|
+
|
|
88
|
+
Trigger.remove(query, function (errOld, triggerOld) {
|
|
89
|
+
if (errOld) {
|
|
90
|
+
winston.error('Error deleting trigger ', errOld);
|
|
91
|
+
// return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
|
92
|
+
}
|
|
93
|
+
trigger.save(function (err, updatedTrigger) {
|
|
94
|
+
if (err) {
|
|
95
|
+
winston.error('--- > ERROR ', {triggerObj:triggerObj, err: err, query: query});
|
|
96
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
|
97
|
+
}
|
|
98
|
+
triggerEventEmitter.emit('trigger.update', updatedTrigger);
|
|
99
|
+
res.json(updatedTrigger);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
router.delete('/:triggerid', function (req, res) {
|
|
109
|
+
|
|
110
|
+
winston.debug(req.body);
|
|
111
|
+
|
|
112
|
+
Trigger.remove({ _id: req.params.triggerid }, function (err, trigger) {
|
|
113
|
+
if (err) {
|
|
114
|
+
winston.error('--- > ERROR ', err);
|
|
115
|
+
return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
|
116
|
+
}
|
|
117
|
+
triggerEventEmitter.emit('trigger.delete', trigger);
|
|
118
|
+
|
|
119
|
+
res.json(trigger);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
router.get('/:triggerid', function (req, res) {
|
|
125
|
+
|
|
126
|
+
winston.debug(req.body);
|
|
127
|
+
|
|
128
|
+
Trigger.findById(req.params.triggerid, function (err, trigger) {
|
|
129
|
+
if (err) {
|
|
130
|
+
winston.error('--- > ERROR ', err)
|
|
131
|
+
return res.status(500).send({ success: false, msg: 'Error getting object.' });
|
|
132
|
+
}
|
|
133
|
+
if (!trigger) {
|
|
134
|
+
return res.status(404).send({ success: false, msg: 'Object not found.' });
|
|
135
|
+
}
|
|
136
|
+
res.json(trigger);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
router.get('/', function (req, res) {
|
|
143
|
+
|
|
144
|
+
Trigger.find({ "id_project": req.projectid }, function (err, triggers) {
|
|
145
|
+
if (err) return next(err);
|
|
146
|
+
res.json(triggers);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
module.exports = router;
|
package/routes/department.js
CHANGED
|
@@ -14,6 +14,40 @@ var cacheUtil = require('../utils/cacheUtil');
|
|
|
14
14
|
var departmentEvent = require("../event/departmentEvent");
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
router.post('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
|
|
18
|
+
|
|
19
|
+
winston.debug("DEPT REQ BODY ", req.body);
|
|
20
|
+
var newDepartment = new Department({
|
|
21
|
+
routing: req.body.routing,
|
|
22
|
+
name: req.body.name,
|
|
23
|
+
description: req.body.description,
|
|
24
|
+
default: req.body.default,
|
|
25
|
+
status: req.body.status,
|
|
26
|
+
id_group: req.body.id_group,
|
|
27
|
+
id_project: req.projectid,
|
|
28
|
+
createdBy: req.user.id,
|
|
29
|
+
updatedBy: req.user.id
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
if (req.body.id_bot) {
|
|
33
|
+
newDepartment.id_bot = req.body.id_bot;
|
|
34
|
+
newDepartment.bot_only = req.body.bot_only;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
newDepartment.save(function (err, savedDepartment) {
|
|
39
|
+
if (err) {
|
|
40
|
+
winston.error('Error creating the department ', err);
|
|
41
|
+
return res.status(500).send({ success: false, msg: 'Error saving object.' });
|
|
42
|
+
}
|
|
43
|
+
winston.debug('NEW DEPT SAVED ', savedDepartment);
|
|
44
|
+
departmentEvent.emit('department.create', savedDepartment);
|
|
45
|
+
res.json(savedDepartment);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
17
51
|
router.put('/:departmentid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
|
|
18
52
|
|
|
19
53
|
winston.debug(req.body);
|
|
@@ -265,6 +299,23 @@ router.get('/', function (req, res) {
|
|
|
265
299
|
}
|
|
266
300
|
});
|
|
267
301
|
|
|
302
|
+
router.delete('/:departmentid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
|
|
303
|
+
|
|
304
|
+
winston.debug(req.body);
|
|
305
|
+
winston.debug("req.params.departmentid: "+req.params.departmentid);
|
|
306
|
+
|
|
307
|
+
Department.findOneAndRemove({_id: req.params.departmentid}, function (err, department) {
|
|
308
|
+
// Department.remove({ _id: req.params.departmentid }, function (err, department) {
|
|
309
|
+
|
|
310
|
+
if (err) {
|
|
311
|
+
winston.error('Error deleting the department ', err);
|
|
312
|
+
return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
|
313
|
+
}
|
|
314
|
+
// nn funziuona perchje nn c'è id_project
|
|
315
|
+
departmentEvent.emit('department.delete', department);
|
|
316
|
+
res.json(department);
|
|
317
|
+
});
|
|
318
|
+
});
|
|
268
319
|
|
|
269
320
|
|
|
270
321
|
module.exports = router;
|
package/routes/group.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
var express = require('express');
|
|
2
|
+
var router = express.Router();
|
|
3
|
+
var Group = require("../models/group");
|
|
4
|
+
var groupEvent = require("../event/groupEvent");
|
|
5
|
+
var winston = require('../config/winston');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
router.post('/', function (req, res) {
|
|
10
|
+
|
|
11
|
+
winston.debug('SAVE GROUP ', req.body);
|
|
12
|
+
var newGroup = new Group({
|
|
13
|
+
name: req.body.name,
|
|
14
|
+
members: req.body.members,
|
|
15
|
+
trashed: false,
|
|
16
|
+
id_project: req.projectid,
|
|
17
|
+
createdBy: req.user.id,
|
|
18
|
+
updatedBy: req.user.id
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
newGroup.save(function (err, savedGroup) {
|
|
22
|
+
if (err) {
|
|
23
|
+
winston.error('Error creating the group ', err);
|
|
24
|
+
return res.status(500).send({ success: false, msg: 'Error saving object.' });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
groupEvent.emit('group.create', savedGroup);
|
|
29
|
+
res.json(savedGroup);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
router.put('/:groupid', function (req, res) {
|
|
34
|
+
|
|
35
|
+
winston.debug(req.body);
|
|
36
|
+
|
|
37
|
+
var update = {};
|
|
38
|
+
if (req.body.name!=undefined) {
|
|
39
|
+
update.name = req.body.name;
|
|
40
|
+
}
|
|
41
|
+
if (req.body.members!=undefined) {
|
|
42
|
+
update.members = req.body.members;
|
|
43
|
+
}
|
|
44
|
+
if (req.body.trashed!=undefined) {
|
|
45
|
+
update.trashed = req.body.trashed;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
Group.findByIdAndUpdate(req.params.groupid, update, { new: true, upsert: true }, function (err, updatedGroup) {
|
|
50
|
+
if (err) {
|
|
51
|
+
winston.error('Error putting the group ', err);
|
|
52
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
groupEvent.emit('group.update', updatedGroup);
|
|
56
|
+
res.json(updatedGroup);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// router.put('/:groupid', function (req, res) {
|
|
61
|
+
|
|
62
|
+
// winston.debug(req.body);
|
|
63
|
+
|
|
64
|
+
// var update = {};
|
|
65
|
+
|
|
66
|
+
// update.name = req.body.name;
|
|
67
|
+
// update.members = req.body.members;
|
|
68
|
+
// update.trashed = req.body.trashed;
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
// Group.findByIdAndUpdate(req.params.groupid, update, { new: true, upsert: true }, function (err, updatedGroup) {
|
|
72
|
+
// if (err) {
|
|
73
|
+
// winston.error('Error putting the group ', err);
|
|
74
|
+
// return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
|
75
|
+
// }
|
|
76
|
+
|
|
77
|
+
// groupEvent.emit('group.update', updatedGroup);
|
|
78
|
+
// res.json(updatedGroup);
|
|
79
|
+
// });
|
|
80
|
+
// });
|
|
81
|
+
|
|
82
|
+
router.delete('/:groupid', function (req, res) {
|
|
83
|
+
|
|
84
|
+
winston.debug(req.body);
|
|
85
|
+
|
|
86
|
+
Group.findOneAndRemove({_id: req.params.groupid}, function (err, group) {
|
|
87
|
+
// Group.remove({ _id: req.params.groupid }, function (err, group) {
|
|
88
|
+
if (err) {
|
|
89
|
+
winston.error('Error removing the group ', err);
|
|
90
|
+
return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
|
91
|
+
}
|
|
92
|
+
// nn funziuona perchje nn c'è id_project
|
|
93
|
+
groupEvent.emit('group.delete', group);
|
|
94
|
+
|
|
95
|
+
res.json(group);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
router.get('/:groupid', function (req, res) {
|
|
101
|
+
|
|
102
|
+
winston.debug(req.body);
|
|
103
|
+
|
|
104
|
+
Group.findById(req.params.groupid, function (err, group) {
|
|
105
|
+
if (err) {
|
|
106
|
+
winston.error('Error getting the group ', err);
|
|
107
|
+
return res.status(500).send({ success: false, msg: 'Error getting object.' });
|
|
108
|
+
}
|
|
109
|
+
if (!group) {
|
|
110
|
+
winston.warn('group not found', err);
|
|
111
|
+
return res.status(404).send({ success: false, msg: 'Object not found.' });
|
|
112
|
+
}
|
|
113
|
+
res.json(group);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
router.get('/', function (req, res) {
|
|
120
|
+
|
|
121
|
+
winston.debug("req projectid", req.projectid);
|
|
122
|
+
|
|
123
|
+
var query = { "id_project": req.projectid, trashed: false };
|
|
124
|
+
|
|
125
|
+
if (req.query.member) {
|
|
126
|
+
query.members = { $in : req.query.member }
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
winston.debug("query", query);
|
|
130
|
+
|
|
131
|
+
Group.find(query, function (err, groups) {
|
|
132
|
+
if (err) {
|
|
133
|
+
winston.error('Error getting the group ', err);
|
|
134
|
+
return next(err);
|
|
135
|
+
}
|
|
136
|
+
res.json(groups);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
module.exports = router;
|
package/routes/lead.js
CHANGED
|
@@ -80,6 +80,15 @@ router.put('/:leadid', function (req, res) {
|
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
leadEvent.emit('lead.update', updatedLead);
|
|
83
|
+
|
|
84
|
+
if (req.body.fullname!=undefined) {
|
|
85
|
+
leadEvent.emit('lead.fullname.update', updatedLead);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (req.body.email!=undefined) {
|
|
89
|
+
leadEvent.emit('lead.email.update', updatedLead);
|
|
90
|
+
}
|
|
91
|
+
|
|
83
92
|
res.json(updatedLead);
|
|
84
93
|
});
|
|
85
94
|
});
|
|
@@ -187,6 +196,11 @@ router.get('/csv', function (req, res, next) {
|
|
|
187
196
|
|
|
188
197
|
winston.debug("sort query", sortQuery);
|
|
189
198
|
|
|
199
|
+
// TODO ORDER BY SCORE
|
|
200
|
+
// return Faq.find(query, {score: { $meta: "textScore" } })
|
|
201
|
+
// .sort( { score: { $meta: "textScore" } } ) //https://docs.mongodb.com/manual/reference/operator/query/text/#sort-by-text-search-score
|
|
202
|
+
|
|
203
|
+
|
|
190
204
|
// Lead.find({ "id_project": req.projectid }, function (err, leads, next) {
|
|
191
205
|
return Lead.find(query, '-attributes -__v').
|
|
192
206
|
skip(skip).limit(limit).
|
|
@@ -258,6 +272,8 @@ router.get('/', function (req, res) {
|
|
|
258
272
|
query.fullname = { "$exists": true };
|
|
259
273
|
}
|
|
260
274
|
|
|
275
|
+
// aggiungi filtro per data
|
|
276
|
+
|
|
261
277
|
if (req.query.status) {
|
|
262
278
|
query.status = req.query.status;
|
|
263
279
|
}
|
|
@@ -277,6 +293,13 @@ router.get('/', function (req, res) {
|
|
|
277
293
|
|
|
278
294
|
winston.debug("sort query", sortQuery);
|
|
279
295
|
|
|
296
|
+
// TODO ORDER BY SCORE
|
|
297
|
+
// return Faq.find(query, {score: { $meta: "textScore" } })
|
|
298
|
+
// .sort( { score: { $meta: "textScore" } } ) //https://docs.mongodb.com/manual/reference/operator/query/text/#sort-by-text-search-score
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
// aggiungi filtro per data marco
|
|
302
|
+
|
|
280
303
|
return Lead.find(query).
|
|
281
304
|
skip(skip).limit(limit).
|
|
282
305
|
sort(sortQuery).
|
|
@@ -288,7 +311,7 @@ router.get('/', function (req, res) {
|
|
|
288
311
|
|
|
289
312
|
// blocked to 1000 TODO increases it
|
|
290
313
|
// collection.count is deprecated, and will be removed in a future version. Use Collection.countDocuments or Collection.estimatedDocumentCount instead
|
|
291
|
-
return Lead.
|
|
314
|
+
return Lead.countDocuments(query, function (err, totalRowCount) {
|
|
292
315
|
|
|
293
316
|
var objectToReturn = {
|
|
294
317
|
perPage: limit,
|
package/routes/message.js
CHANGED
|
@@ -51,6 +51,7 @@ async (req, res) => {
|
|
|
51
51
|
return res.status(422).json({ errors: errors.array() });
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
|
|
54
55
|
var project_user = req.projectuser;
|
|
55
56
|
var sender = req.body.sender;
|
|
56
57
|
var fullname = req.body.senderFullname || req.user.fullName;
|
|
@@ -159,7 +160,8 @@ async (req, res) => {
|
|
|
159
160
|
location: req.body.location,
|
|
160
161
|
participants: req.body.participants,
|
|
161
162
|
lead: createdLead, requester: project_user,
|
|
162
|
-
priority: req.body.priority
|
|
163
|
+
priority: req.body.priority,
|
|
164
|
+
followers: req.body.followers,
|
|
163
165
|
};
|
|
164
166
|
|
|
165
167
|
return requestService.create(new_request).then(function (savedRequest) {
|
|
@@ -188,7 +190,8 @@ async (req, res) => {
|
|
|
188
190
|
.populate('lead')
|
|
189
191
|
.populate('department')
|
|
190
192
|
.populate('participatingBots')
|
|
191
|
-
.populate('participatingAgents')
|
|
193
|
+
.populate('participatingAgents')
|
|
194
|
+
// .populate('followers')
|
|
192
195
|
.populate({path:'requester',populate:{path:'id_user'}})
|
|
193
196
|
.execPopulate(function (err, savedRequestPopulated){
|
|
194
197
|
|
|
@@ -247,6 +250,7 @@ async (req, res) => {
|
|
|
247
250
|
.populate('department')
|
|
248
251
|
.populate('participatingBots')
|
|
249
252
|
.populate('participatingAgents')
|
|
253
|
+
// .populate('followers')
|
|
250
254
|
.populate({path:'requester',populate:{path:'id_user'}})
|
|
251
255
|
.execPopulate(function (err, requestPopulated){
|
|
252
256
|
|
|
@@ -286,7 +290,6 @@ async (req, res) => {
|
|
|
286
290
|
|
|
287
291
|
|
|
288
292
|
|
|
289
|
-
|
|
290
293
|
// router.put('/:messageid', function(req, res) {
|
|
291
294
|
|
|
292
295
|
// console.log(req.body);
|
package/routes/project.js
CHANGED
|
@@ -2,6 +2,8 @@ var express = require('express');
|
|
|
2
2
|
var router = express.Router();
|
|
3
3
|
var Project = require("../models/project");
|
|
4
4
|
var projectEvent = require("../event/projectEvent");
|
|
5
|
+
var projectService = require("../services/projectService");
|
|
6
|
+
|
|
5
7
|
var Project_user = require("../models/project_user");
|
|
6
8
|
|
|
7
9
|
var operatingHoursService = require("../services/operatingHoursService");
|
|
@@ -17,6 +19,56 @@ var RoleConstants = require("../models/roleConstants");
|
|
|
17
19
|
var cacheUtil = require('../utils/cacheUtil');
|
|
18
20
|
var orgUtil = require("../utils/orgUtil");
|
|
19
21
|
|
|
22
|
+
|
|
23
|
+
router.post('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken], async (req, res) => {
|
|
24
|
+
|
|
25
|
+
// create(name, createdBy, settings)
|
|
26
|
+
return projectService.create(req.body.name, req.user.id, undefined, req.body.defaultLanguage).then(function(savedProject) {
|
|
27
|
+
res.json(savedProject);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// DOWNGRADE PLAN. UNUSED
|
|
33
|
+
router.put('/:projectid/downgradeplan', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('owner')], function (req, res) {
|
|
34
|
+
winston.debug('downgradeplan - UPDATE PROJECT REQ BODY ', req.body);
|
|
35
|
+
Project.findByIdAndUpdate(req.params.projectid, req.body, { new: true, upsert: true }, function (err, updatedProject) {
|
|
36
|
+
if (err) {
|
|
37
|
+
winston.error('Error putting project ', err);
|
|
38
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
|
39
|
+
}
|
|
40
|
+
projectEvent.emit('project.downgrade', updatedProject );
|
|
41
|
+
res.json(updatedProject);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
router.delete('/:projectid/physical', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('owner')], function (req, res) {
|
|
47
|
+
winston.debug(req.body);
|
|
48
|
+
// TODO delete also department, faq_kb, faq, group, label, lead, message, project_users, requests, subscription
|
|
49
|
+
Project.remove({ _id: req.params.projectid }, function (err, project) {
|
|
50
|
+
if (err) {
|
|
51
|
+
winston.error('Error deleting project ', err);
|
|
52
|
+
return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
|
53
|
+
}
|
|
54
|
+
projectEvent.emit('project.delete', project );
|
|
55
|
+
res.json(project);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
router.delete('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('owner')], function (req, res) {
|
|
60
|
+
winston.debug(req.body);
|
|
61
|
+
// TODO delete also department, faq_kb, faq, group, label, lead, message, project_users, requests, subscription
|
|
62
|
+
Project.findByIdAndUpdate(req.params.projectid, {status:0}, { new: true, upsert: true }, function (err, project) {
|
|
63
|
+
if (err) {
|
|
64
|
+
winston.error('Error deleting project ', err);
|
|
65
|
+
return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
|
66
|
+
}
|
|
67
|
+
projectEvent.emit('project.delete', project );
|
|
68
|
+
res.json(project);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
20
72
|
router.put('/:projectid', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) {
|
|
21
73
|
winston.debug('UPDATE PROJECT REQ BODY ', req.body);
|
|
22
74
|
|