feat(metrics KPI): Added some metrics KPI Datas

This commit is contained in:
Emile Ndagijimana 2022-09-21 14:33:17 +02:00
parent 344fa07316
commit d323c1e51e
3 changed files with 335 additions and 73 deletions

View file

@ -2,7 +2,7 @@
import { SyncedCron } from 'meteor/percolate:synced-cron';
import { TAPi18n } from '/imports/i18n';
import ImpersonatedUsers from './impersonatedUsers';
import { Index, MongoDBEngine } from 'meteor/easy:search'
import { Index, MongoDBEngine } from 'meteor/easy:search';
// Sandstorm context is detected using the METEOR_SETTINGS environment variable
// in the package definition.
@ -45,39 +45,39 @@ Users.attachSchema(
/**
* the list of organizations that a user belongs to
*/
type: [Object],
optional: true,
type: [Object],
optional: true,
},
'orgs.$.orgId':{
'orgs.$.orgId': {
/**
* The uniq ID of the organization
*/
type: String,
type: String,
},
'orgs.$.orgDisplayName':{
'orgs.$.orgDisplayName': {
/**
* The display name of the organization
*/
type: String,
type: String,
},
teams: {
/**
* the list of teams that a user belongs to
*/
type: [Object],
optional: true,
type: [Object],
optional: true,
},
'teams.$.teamId':{
'teams.$.teamId': {
/**
* The uniq ID of the team
*/
type: String,
type: String,
},
'teams.$.teamDisplayName':{
'teams.$.teamDisplayName': {
/**
* The display name of the team
*/
type: String,
type: String,
},
emails: {
/**
@ -228,7 +228,7 @@ Users.attachSchema(
type: String,
optional: true,
},
'profile.moveAndCopyDialog' : {
'profile.moveAndCopyDialog': {
/**
* move and copy card dialog
*/
@ -254,7 +254,7 @@ Users.attachSchema(
*/
type: String,
},
'profile.moveChecklistDialog' : {
'profile.moveChecklistDialog': {
/**
* move checklist dialog
*/
@ -286,7 +286,7 @@ Users.attachSchema(
*/
type: String,
},
'profile.copyChecklistDialog' : {
'profile.copyChecklistDialog': {
/**
* copy checklist dialog
*/
@ -494,6 +494,10 @@ Users.attachSchema(
type: [String],
optional: true,
},
lastConnectionDate: {
type: Date,
optional: true,
},
}),
);
@ -542,13 +546,13 @@ UserSearchIndex = new Index({
fields: ['username', 'profile.fullname', 'profile.avatarUrl'],
allowedFields: ['username', 'profile.fullname', 'profile.avatarUrl'],
engine: new MongoDBEngine({
fields: function(searchObject, options) {
fields: function (searchObject, options) {
return {
'username': 1,
username: 1,
'profile.fullname': 1,
'profile.avatarUrl': 1
'profile.avatarUrl': 1,
};
}
},
}),
});
@ -561,6 +565,7 @@ Users.safeFields = {
orgs: 1,
teams: 1,
authenticationMethod: 1,
lastConnectionDate: 1,
};
if (Meteor.isClient) {
@ -630,43 +635,65 @@ Users.helpers({
teamIds() {
if (this.teams) {
// TODO: Should the Team collection be queried to determine if the team isActive?
return this.teams.map(team => { return team.teamId });
return this.teams.map((team) => {
return team.teamId;
});
}
return [];
},
orgIds() {
if (this.orgs) {
// TODO: Should the Org collection be queried to determine if the organization isActive?
return this.orgs.map(org => { return org.orgId });
return this.orgs.map((org) => {
return org.orgId;
});
}
return [];
},
orgsUserBelongs() {
if (this.orgs) {
return this.orgs.map(function(org){return org.orgDisplayName}).sort().join(',');
return this.orgs
.map(function (org) {
return org.orgDisplayName;
})
.sort()
.join(',');
}
return '';
},
orgIdsUserBelongs() {
if (this.orgs) {
return this.orgs.map(function(org){return org.orgId}).join(',');
return this.orgs
.map(function (org) {
return org.orgId;
})
.join(',');
}
return '';
},
teamsUserBelongs() {
if (this.teams) {
return this.teams.map(function(team){ return team.teamDisplayName}).sort().join(',');
return this.teams
.map(function (team) {
return team.teamDisplayName;
})
.sort()
.join(',');
}
return '';
},
teamIdsUserBelongs() {
if (this.teams) {
return this.teams.map(function(team){ return team.teamId}).join(',');
return this.teams
.map(function (team) {
return team.teamId;
})
.join(',');
}
return '';
},
boards() {
return Boards.userBoards(this._id, null, {}, { sort: { sort: 1 } })
return Boards.userBoards(this._id, null, {}, { sort: { sort: 1 } });
},
starredBoards() {
@ -675,7 +702,7 @@ Users.helpers({
this._id,
false,
{ _id: { $in: starredBoards } },
{ sort: { sort: 1 } }
{ sort: { sort: 1 } },
);
},
@ -690,7 +717,7 @@ Users.helpers({
this._id,
false,
{ _id: { $in: invitedBoards } },
{ sort: { sort: 1 } }
{ sort: { sort: 1 } },
);
},
@ -728,7 +755,7 @@ Users.helpers({
* <li> the board, swimlane and list id is stored for each board
*/
getMoveAndCopyDialogOptions() {
let _ret = {}
let _ret = {};
if (this.profile && this.profile.moveAndCopyDialog) {
_ret = this.profile.moveAndCopyDialog;
}
@ -739,7 +766,7 @@ Users.helpers({
* <li> the board, swimlane, list and card id is stored for each board
*/
getMoveChecklistDialogOptions() {
let _ret = {}
let _ret = {};
if (this.profile && this.profile.moveChecklistDialog) {
_ret = this.profile.moveChecklistDialog;
}
@ -750,7 +777,7 @@ Users.helpers({
* <li> the board, swimlane, list and card id is stored for each board
*/
getCopyChecklistDialogOptions() {
let _ret = {}
let _ret = {};
if (this.profile && this.profile.copyChecklistDialog) {
_ret = this.profile.copyChecklistDialog;
}
@ -811,7 +838,7 @@ Users.helpers({
return profile.hiddenMinicardLabelText || false;
},
hasRescuedCardDescription(){
hasRescuedCardDescription() {
const profile = this.profile || {};
return profile.rescueCardDescription || false;
},
@ -1430,17 +1457,30 @@ if (Meteor.isServer) {
}
try {
const fullName = inviter.profile !== undefined && inviter.profile.fullname !== undefined ? inviter.profile.fullname : "";
const userFullName = user.profile !== undefined && user.profile.fullname !== undefined ? user.profile.fullname : "";
const fullName =
inviter.profile !== undefined &&
inviter.profile.fullname !== undefined
? inviter.profile.fullname
: '';
const userFullName =
user.profile !== undefined && user.profile.fullname !== undefined
? user.profile.fullname
: '';
const params = {
user: userFullName != "" ? userFullName + " (" + user.username + " )" : user.username,
inviter: fullName != "" ? fullName + " (" + inviter.username + " )" : inviter.username,
user:
userFullName != ''
? userFullName + ' (' + user.username + ' )'
: user.username,
inviter:
fullName != ''
? fullName + ' (' + inviter.username + ' )'
: inviter.username,
board: board.title,
url: board.absoluteUrl(),
};
const lang = user.getLanguage();
/*
/*
if (process.env.MAIL_SERVICE !== '') {
let transporter = nodemailer.createTransport({
service: process.env.MAIL_SERVICE,
@ -1486,7 +1526,11 @@ if (Meteor.isServer) {
if (!Meteor.user().isAdmin)
throw new Meteor.Error(403, 'Permission denied');
ImpersonatedUsers.insert({ adminId: Meteor.user()._id, userId: userId, reason: 'clickedImpersonate' });
ImpersonatedUsers.insert({
adminId: Meteor.user()._id,
userId: userId,
reason: 'clickedImpersonate',
});
this.setUserId(userId);
},
isImpersonated(userId) {
@ -1502,19 +1546,22 @@ if (Meteor.isServer) {
if (Meteor.user() && Meteor.user().isAdmin) {
Users.find({
teams: {
$elemMatch: {teamId: teamId}
}
}).forEach(user => {
Users.update({
_id: user._id,
teams: {
$elemMatch: {teamId: teamId}
}
}, {
$set: {
'teams.$.teamDisplayName': teamDisplayName
}
});
$elemMatch: { teamId: teamId },
},
}).forEach((user) => {
Users.update(
{
_id: user._id,
teams: {
$elemMatch: { teamId: teamId },
},
},
{
$set: {
'teams.$.teamDisplayName': teamDisplayName,
},
},
);
});
}
},
@ -1524,19 +1571,22 @@ if (Meteor.isServer) {
if (Meteor.user() && Meteor.user().isAdmin) {
Users.find({
orgs: {
$elemMatch: {orgId: orgId}
}
}).forEach(user => {
Users.update({
_id: user._id,
orgs: {
$elemMatch: {orgId: orgId}
}
}, {
$set: {
'orgs.$.orgDisplayName': orgDisplayName
}
});
$elemMatch: { orgId: orgId },
},
}).forEach((user) => {
Users.update(
{
_id: user._id,
orgs: {
$elemMatch: { orgId: orgId },
},
},
{
$set: {
'orgs.$.orgDisplayName': orgDisplayName,
},
},
);
});
}
},
@ -1699,7 +1749,7 @@ if (Meteor.isServer) {
Users._collection.createIndex({
modifiedAt: -1,
});
/* Commented out extra index because of IndexOptionsConflict.
/* Commented out extra index because of IndexOptionsConflict.
Users._collection.createIndex(
{
username: 1,
@ -1918,14 +1968,13 @@ if (Meteor.isServer) {
// TODO : pay attention if ldap field in the user model change to another content ex : ldap field to connection_type
if (doc.authenticationMethod !== 'ldap' && disableRegistration) {
let invitationCode = null;
if(doc.authenticationMethod.toLowerCase() == 'oauth2')
{ // OIDC authentication mode
if (doc.authenticationMethod.toLowerCase() == 'oauth2') {
// OIDC authentication mode
invitationCode = InvitationCodes.findOne({
email: doc.emails[0].address.toLowerCase(),
valid: true,
});
}
else{
} else {
invitationCode = InvitationCodes.findOne({
code: doc.profile.icode,
valid: true,