From f13786fca12a8bc799c4f2d81ad5b35d1688acba Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Wed, 12 Apr 2023 15:37:54 +0200 Subject: [PATCH] fix: ordinamento membri (namecomplete (concat: name, surname, username) --- mongodb/Members.mongodb | 203 ++++++++++++++++++++++++++++++ mongodb/favorite.mongodb.js | 23 ++++ src/server/locales/it.json | 3 +- src/server/models/sendnotif.js | 124 +++++++++++------- src/server/models/user.js | 60 +++++++-- src/server/router/index_router.js | 5 +- src/server/router/users_router.js | 2 +- src/server/tools/general.js | 61 +++++---- src/server/tools/globalTables.js | 68 +++++++++- src/server/tools/shared_nodejs.js | 37 +++++- 10 files changed, 500 insertions(+), 86 deletions(-) create mode 100644 mongodb/Members.mongodb create mode 100644 mongodb/favorite.mongodb.js diff --git a/mongodb/Members.mongodb b/mongodb/Members.mongodb new file mode 100644 index 0000000..a444715 --- /dev/null +++ b/mongodb/Members.mongodb @@ -0,0 +1,203 @@ +use('test_FreePlanet'); + +let aggregation = [ + { + $match: { + idapp: "13", + "profile.mycircuits": { + $elemMatch: { + circuitname: { + $eq: "Circuito RIS Bologna", + }, + }, + }, + }, + }, + { + $lookup: { + from: "circuits", + as: "circuit", + let: { + circuitname: "Circuito RIS Bologna", + idapp: "$idapp", + }, + pipeline: [ + { + $match: { + $expr: { + $and: [ + { + $eq: [ + "$name", + "$$circuitname", + ], + }, + { + $eq: [ + "$idapp", + "$$idapp", + ], + }, + ], + }, + }, + }, + ], + }, + }, + { + $unwind: "$circuit", + }, + { + $project: { + username: 1, + name: 1, + surname: 1, + date_reg: 1, + profile: 1, + idapp: 1, + "circuit.name": 1, + "circuit._id": 1, + }, + }, + { + $lookup: { + from: "accounts", + as: "account", + let: { + username: "$username", + idapp: "$idapp", + circuitId: "$circuit._id", + }, + pipeline: [ + { + $match: { + $expr: { + $and: [ + { + $eq: [ + "$$username", + "$username", + ], + }, + { + $eq: [ + "$$idapp", + "$idapp", + ], + }, + { + $eq: [ + "$$circuitId", + "$circuitId", + ], + }, + ], + }, + }, + }, + ], + }, + }, + { + $unwind: "$account", + }, + { + $match: { + idapp: "13", + }, + }, + { + $addFields: { + myId1: { + $toObjectId: "$userId", + }, + namecomplete: { + $concat: [ + { + $toLower: "$name", + }, + { + $toLower: "$surname", + }, + { $toLower: "$username" }, + ], + }, + }, + }, + { + $lookup: { + from: "users", + localField: "myId1", + foreignField: "_id", + as: "user", + }, + }, + { + $replaceRoot: { + newRoot: { + $mergeObjects: [ + { + $arrayElemAt: [ + "$user", + 0, + ], + }, + "$$ROOT", + ], + }, + }, + }, + { + $project: { + username: 1, + name: 1, + surname: 1, + "profile.img": 1, + "profile.mycircuits": 1, + "profile.qualifica": 1, + "profile.resid_province": 1, + "account._id": 1, + "account.saldo": 1, + "account.fidoConcesso": 1, + "account.qta_maxConcessa": 1, + "account.totTransato": 1, + reported: 1, + date_report: 1, + username_who_report: 1, + namecomplete: 1, + date_reg: 1, + }, + }, + { + $sort: { + date_reg: 1, + }, + }, + { + $group: { + _id: null, + count: { + $sum: 1, + }, + results: { + $push: "$$ROOT", + }, + }, + }, + { + $project: { + count: 1, + rows: { + $slice: [ + "$results", + 1, + 15, + ], + }, + }, + }, +]; + +db.users.aggregate(aggregation); + diff --git a/mongodb/favorite.mongodb.js b/mongodb/favorite.mongodb.js new file mode 100644 index 0000000..a37211e --- /dev/null +++ b/mongodb/favorite.mongodb.js @@ -0,0 +1,23 @@ +use('test_FreePlanet'); + +let aggregation = [ + { + $match: { + idapp: "13", + "profile.favorite": { + $elemMatch: + { id: '10256', tab: 4 } + } + }, + }, + { + $group: + { + _id: null, + count: { $sum: 1 }, + } + }, + { $project: { _id: 0 } } +]; + +db.users.aggregate(aggregation); \ No newline at end of file diff --git a/src/server/locales/it.json b/src/server/locales/it.json index fc84609..a6cb5aa 100644 --- a/src/server/locales/it.json +++ b/src/server/locales/it.json @@ -86,5 +86,6 @@ "SALDO_VARIATO": "[Circuito %s] l'utente %s ha variato il Saldo di %s da %s a %s %s", "FIDOCONCESSO_VARIATO": "[Circuito %s] l'utente %s ha variato il Fido Concesso di %s da %s a %s %s", "QTAMAX_VARIATO": "[Circuito %s] l'utente %s ha variato la quantità massima concessa di %s da %s a %s %s", - "CLICCA_QUI": "CLICCA QUI" + "SET_FAVORITE": "%s ha messo 'Mi Piace' al tuo post: %s", + "SET_FAVORITE_OTHERS": "%s e altre %s persone hanno messo 'Mi Piace' al tuo post: %s" } \ No newline at end of file diff --git a/src/server/models/sendnotif.js b/src/server/models/sendnotif.js index 0ecd094..cd2479a 100755 --- a/src/server/models/sendnotif.js +++ b/src/server/models/sendnotif.js @@ -96,6 +96,9 @@ const sendNotifSchema = new Schema({ options: { type: Array, }, + textaddTelegram: { + type: String, + } }); sendNotifSchema.statics.setNotifAsRead = function (idapp, username, idnotif) { @@ -180,11 +183,11 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us if (recnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_BACHECA) { if (recnotif.typeid === shared_consts.TypeNotifs.ID_BACHECA_NEW_GOOD) { newdescr = i18n.__('%s new Good: %s', userorig, mydescr); - recnotif.openUrl = '/mygood/' + myidrec; + recnotif.openUrl = shared_consts.getDirectoryByTable(shared_consts.TABLES_MYGOODS, true) + myidrec; tag = 'newgood'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_BACHECA_NEW_SERVICE) { newdescr = i18n.__('%s new Service: %s', userorig, mydescr); - recnotif.openUrl = '/myservice/' + myidrec; + recnotif.openUrl = shared_consts.getDirectoryByTable(shared_consts.TABLES_MYSKILLS, true) + myidrec; tag = 'newservice'; } } else if (recnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_FRIENDS) { @@ -222,7 +225,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us } } else if (recnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) { tag = 'group'; - recnotif.openUrl = '/grp/' + recnotif.paramsObj.groupnameDest; + recnotif.openUrl = shared_consts.getDirectoryByTable('mygroups', true) + recnotif.paramsObj.groupnameDest; if (recnotif.typeid === shared_consts.TypeNotifs.ID_GROUP_NEW_REC) { newdescr = i18n.__('GROUP_CREATED', sender, recnotif.paramsObj.groupnameDest); } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_GROUP_ACCEPTED) { @@ -280,7 +283,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us } } else if (recnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) { tag = 'circuit'; - recnotif.openUrl = '/circuit/' + recnotif.paramsObj.path; + recnotif.openUrl = shared_consts.getDirectoryByTable(shared_consts.TAB_MYCIRCUITS, true) + recnotif.paramsObj.path; strtipocontoOrig = recnotif.paramsObj.extrarec.contoComOrig ? i18n.__('COMUNITARIO') : i18n.__('COLLETTIVO'); strtipocontoDest = recnotif.paramsObj.extrarec.contoComDest ? i18n.__('COMUNITARIO') : i18n.__('COLLETTIVO'); let groupOComorig = recnotif.paramsObj.extrarec.contoComOrig ? recnotif.paramsObj.extrarec.contoComOrig : recnotif.paramsObj.extrarec.grouporig; @@ -393,7 +396,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us } tag = 'sendcoin'; - recnotif.openUrl = '/circuit/' + recnotif.paramsObj.path; //++Todo: dove lo mando ? + recnotif.openUrl = shared_consts.getDirectoryByTable(shared_consts.TAB_MYCIRCUITS, true) + recnotif.paramsObj.path; //++Todo: dove lo mando ? } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ_SENT) { if (myorig) { @@ -411,7 +414,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us } tag = 'sendcoin'; - recnotif.openUrl = '/circuit/' + recnotif.paramsObj.path; //++Todo: dove lo mando ? + recnotif.openUrl = shared_consts.getDirectoryByTable(shared_consts.TAB_MYCIRCUITS, true) + recnotif.paramsObj.path; //++Todo: dove lo mando ? } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_COINS_ACCEPTED) { newdescr = i18n.__('ID_CIRCUIT_COINS_ACCEPTED', qty, symbol, username_action) + `\n` + i18n.__('SALDO_UPDATE', recnotif.paramsObj.extrarec.saldoDest, symbol); @@ -456,6 +459,19 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us newdescr = i18n.__('ID_CIRCUIT_COINS_REFUSED_TO_ME', qty, symbol, destinatario); tag = 'sendcoin'; } + } else if (recnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_FAVORITE) { + // ++ Controlla se esiste già + let esitegia = recnotif.paramsObj.recObjCreator.exist; // ++ + + if (esitegia) + newdescr = i18n.__('SET_FAVORITE_OTHERS', recnotif.paramsObj.username_action, recnotif.paramsObj.recObjCreator.numfav - 1, recnotif.paramsObj.recObjCreator.descr); + else + newdescr = i18n.__('SET_FAVORITE', recnotif.paramsObj.username_action, recnotif.paramsObj.recObjCreator.descr); + + tag = 'favorite'; + + recnotif.openUrl = shared_consts.getDirectoryByTable(recnotif.paramsObj.recObjCreator.table, true) + recnotif.paramsObj.recObjCreator.id; + recnotif.textaddTelegram = 'Vedi post'; } recnotif.tag = recnotif.tag ? recnotif.tag : tag; @@ -645,6 +661,8 @@ sendNotifSchema.statics.updateStatusAndDescr = async function (myrecnotif, onlys newstatus = shared_consts.CircuitsNotif.STATUS_COINS_REFUSED_SENT; } + } else if (myrecnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_FAVORITE) { + // typeidsearch = shared_consts.TypeNotifs.ID_FAVORITE_ADDED; } if (newstatus) { @@ -877,24 +895,26 @@ sendNotifSchema.statics.sendToTheDestinations = async function (myrecnotifpass, const mytable = globalTables.getTableByTableName(myrecnotifpass.tablerec); - if (shared_consts.TABLES_ADV_NOTIFICATION.includes(myrecnotifpass.tablerec) || - shared_consts.TABLES_EVENTS_NOTIFICATION.includes(myrecnotifpass.tablerec)) { + if (myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_BACHECA || myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_EVENTS) { + if (shared_consts.TABLES_ADV_NOTIFICATION.includes(myrecnotifpass.tablerec) || + shared_consts.TABLES_EVENTS_NOTIFICATION.includes(myrecnotifpass.tablerec)) { + + const myrectableorig = await mytable.findOne({ _id: myrecnotifpass.idrec }).lean(); + if (myrectableorig) { + for (const city of myrectableorig.idCity) { + arrprovinces.push(await City.getProvinceByIdCity(city)); + arrregions.push(await City.getRegionByIdCity(city)); + } + + if (myrecnotifpass.tablerec === shared_consts.TABLES_MYGOODS) { + idSector = myrectableorig.idSectorGood; + } else { + idSector = myrectableorig.idSector; + } - const myrectableorig = await mytable.findOne({ _id: myrecnotifpass.idrec }).lean(); - if (myrectableorig) { - for (const city of myrectableorig.idCity) { - arrprovinces.push(await City.getProvinceByIdCity(city)); - arrregions.push(await City.getRegionByIdCity(city)); } - - if (myrecnotifpass.tablerec === shared_consts.TABLES_MYGOODS) { - idSector = myrectableorig.idSectorGood; - } else { - idSector = myrectableorig.idSector; - } - + myrecnotifpass.myrectableorig = myrectableorig; } - myrecnotifpass.myrectableorig = myrectableorig; } myrecnotifpass = await this.getDescrAndLinkByRecNotif(myrecnotifpass, req.user.username); @@ -907,36 +927,45 @@ sendNotifSchema.statics.sendToTheDestinations = async function (myrecnotifpass, let send = false; - if (shared_consts.TABLES_ADV_NOTIFICATION.includes(myrecnotifpass.tablerec) || - shared_consts.TABLES_EVENTS_NOTIFICATION.includes(myrecnotifpass.tablerec)) { - // Estrai la Città, la Provincia e la regione. - if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.UsersNotif.NEW_ADV_PROVINCE) && - user.profile.notif_provinces && user.profile.notif_provinces.some(r => arrprovinces.indexOf(r) >= 0)) { - send = true; - } - - if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.UsersNotif.NEW_ADV_REGION) && - user.profile.notif_regions && user.profile.notif_regions.some(r => arrregions.indexOf(r) >= 0)) { - send = true; - } - - if (idSector && usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.UsersNotif.NEW_ADV_SECTOR)) { - // Controlla se è del settore selezionato - if (myrecnotifpass.tablerec === shared_consts.TABLES_MYGOODS) { - if (user.profile.notif_sector_goods) { - send = send && (user.profile.notif_sector_goods.includes(idSector)); - } - } else if (user.profile.notif_sectors) { - send = send && (user.profile.notif_sectors.includes(idSector)); + if (myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_FAVORITE) { + if (shared_consts.TABLES_FAVORITE_BOOKMARK.includes(myrecnotifpass.tablerec)) { + if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.TypeNotifs.ID_FAVORITE_ADDED)) { + send = true; } } + } else if (myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_BACHECA || myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_EVENTS) { + if (shared_consts.TABLES_ADV_NOTIFICATION.includes(myrecnotifpass.tablerec) || + shared_consts.TABLES_EVENTS_NOTIFICATION.includes(myrecnotifpass.tablerec)) { + // Estrai la Città, la Provincia e la regione. - } + if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.UsersNotif.NEW_ADV_PROVINCE) && + user.profile.notif_provinces && user.profile.notif_provinces.some(r => arrprovinces.indexOf(r) >= 0)) { + send = true; + } - if (shared_consts.TABLES_GROUPS_NOTIFICATION.includes(myrecnotifpass.tablerec)) { - if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.GroupsNotifs.STATUS_GROUPS_NEW)) { - send = true; + if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.UsersNotif.NEW_ADV_REGION) && + user.profile.notif_regions && user.profile.notif_regions.some(r => arrregions.indexOf(r) >= 0)) { + send = true; + } + + if (idSector && usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.UsersNotif.NEW_ADV_SECTOR)) { + // Controlla se è del settore selezionato + if (myrecnotifpass.tablerec === shared_consts.TABLES_MYGOODS) { + if (user.profile.notif_sector_goods) { + send = send && (user.profile.notif_sector_goods.includes(idSector)); + } + } else if (user.profile.notif_sectors) { + send = send && (user.profile.notif_sectors.includes(idSector)); + } + } + + } + } else if (myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) { + if (shared_consts.TABLES_GROUPS_NOTIFICATION.includes(myrecnotifpass.tablerec)) { + if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.GroupsNotifs.STATUS_GROUPS_NEW)) { + send = true; + } } } @@ -999,6 +1028,9 @@ sendNotifSchema.statics.getSumPendingTransactions = async function (idapp, usern }; +sendNotifSchema.statics.checkIfAlreadyExist = async function (idapp, tag, idpost, numtab) { + +}; const SendNotif = mongoose.model('SendNotif', sendNotifSchema); module.exports = { SendNotif: SendNotif }; diff --git a/src/server/models/user.js b/src/server/models/user.js index c07add0..5e4cce8 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -13,6 +13,8 @@ const { Graduatoria } = require('../models/graduatoria'); // const {NavePersistente} = require('../models/navepersistente'); // const { ExtraList } = require('../models/extralist'); + + const { MyGroup } = require('../models/mygroup'); const { Circuit } = require('../models/circuit'); @@ -464,6 +466,7 @@ const UserSchema = new mongoose.Schema({ tab: { type: Number }, }, ], + version: { type: Number }, }, }); @@ -1911,9 +1914,24 @@ UserSchema.statics.removeFavorite = async function ( // Aggiungo il Favorite UserSchema.statics.addFavorite = async function ( - idapp, username, id, tab) { - return await User.updateOne({ idapp, username }, + req, idapp, username, id, tab) { + const ris = await User.updateOne({ idapp, username }, { $push: { 'profile.favorite': { id, tab } } }); + + const { SendNotif } = require('../models/sendnotif'); + + const globalTables = require('../tools/globalTables'); + + // Invia una Notifica al Destinatario + const recObjCreator = await globalTables.getUserCreatorByNumTabAndId(idapp, id, tab); + + if (recObjCreator) { + await SendNotif.createNewNotifToSingleUser(req, null, { usernameDest: recObjCreator.username, recObjCreator, username_action: req.user.username }, false, shared_consts.TypeNotifs.TYPEDIR_FAVORITE, + shared_consts.TypeNotifs.ID_FAVORITE_ADDED); + + } + + return ris; }; // Rimuovo il Bookmark UserSchema.statics.removeBookmark = async function ( @@ -2782,7 +2800,7 @@ function getWhatToShow(idapp, username) { 'profile.handshake': 1, 'profile.favorite': 1, 'profile.bookmark': 1, -}; + }; } @@ -2807,7 +2825,7 @@ function getWhatToShow_Unknown(idapp, username) { 'profile.friends': 1, 'profile.favorite': 1, 'profile.bookmark': 1, -} + } } UserSchema.statics.getWhatToShow_IfFriends = async function (idapp, username) { @@ -2835,7 +2853,7 @@ UserSchema.statics.getWhatToShow_IfFriends = async function (idapp, username) { 'profile.friends': 1, 'profile.favorite': 1, 'profile.bookmark': 1, -}; + }; }; @@ -3946,6 +3964,7 @@ UserSchema.statics.calculateStat = async function (idapp, username) { const { MyGood } = require('../models/mygood'); const { MyBacheca } = require('../models/mybacheca'); const { MyGroup } = require('../models/mygroup'); + const globalTables = require('../tools/globalTables'); const numUsersReg = await User.countDocuments( { @@ -3957,8 +3976,6 @@ UserSchema.statics.calculateStat = async function (idapp, username) { let numByTab = {}; - const globalTables = require('../tools/globalTables'); - for (let table of shared_consts.TABLES_VISU_STAT_IN_HOME) { let mytable = globalTables.getTableByTableName(table); if (mytable) { @@ -4675,7 +4692,7 @@ UserSchema.statics.getExtraInfoByUsername = async function (idapp, username) { return myuser.profile; }; -UserSchema.statics.addExtraInfo = async function (idapp, recUser, recUserSave) { +UserSchema.statics.addExtraInfo = async function (idapp, recUser, recUserSave, version) { try { @@ -4764,6 +4781,22 @@ UserSchema.statics.addExtraInfo = async function (idapp, recUser, recUserSave) { recUser.profile.calc = await User.calcOtherByUser(idapp, recUser._id); + if (version) { + let versattualeuser = 0; + if (!recUser.profile.version) { + recUser.version = 0; + versattualeuser = 0; + } else { + versattualeuser = recUser.profile.version; + } + + if (versattualeuser < version) { + // Aggiornamento versione + recUser = await User.updateVersion(versattualeuser, recUser); + + await User.findOneAndUpdate({_id: recUser._id}, {$set: { 'profile.version' : version }}); + } + } return recUser; @@ -4774,6 +4807,17 @@ UserSchema.statics.addExtraInfo = async function (idapp, recUser, recUserSave) { return recUser; }; +UserSchema.statics.updateVersion = async function (userversion, recUser) { + + if (userversion < 063) { + recUser.profile.notifs.push( { dir: 11, value: 1 }) + + await User.findOneAndUpdate({_id: recUser._id}, {$set: { 'profile.notifs': recUser.profile.notifs }}); + } + + return recUser; +}; + UserSchema.statics.calcOtherByUser = async function (idapp, userId) { const { MySkill } = require('../models/myskill'); diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index d9c1f42..cf081d7 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -1346,6 +1346,9 @@ function load(req, res, version) { const permissions = Permission.findAllIdApp(); + // const versionstr = User.... + // let version = tools.getVersionint(versionstr); + let newstosent = Promise.resolve([]); let mailinglist = Promise.resolve([]); let mypage; @@ -1406,7 +1409,7 @@ function load(req, res, version) { let myuserextra = null; if (req.user) { // askedfriends = User.getAskedFriendsByUsername(idapp, req.user.username); - myuserextra = User.addExtraInfo(idapp, req.user._doc, req.user); + myuserextra = User.addExtraInfo(idapp, req.user._doc, req.user, version); } return Promise.all([ diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index 8f8426b..debfb34 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -1557,7 +1557,7 @@ router.post('/cmd', authenticate, async (req, res) => { if (cmd === shared_consts.CMD_USER.SET_FAVORITE) { if (tab) { if (value) - ris = await User.addFavorite(idapp, username, id, tab); + ris = await User.addFavorite(req, idapp, username, id, tab); else ris = await User.removeFavorite(idapp, username, id, tab); } diff --git a/src/server/tools/general.js b/src/server/tools/general.js index dc17a7d..c13b2b7 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -132,6 +132,7 @@ const textlang = { 'CREATO_NUOVO_GRUPPO': '✅ Hai appena creato un nuovo Gruppo chiamato %s', 'ACCETTATO_NOTIFICA_ADMINS': '✅ l\'utente %s è stato accettato a far parte del Gruppo %s (da parte di %s)', 'GROUP_REQUEST': 'Richiesta di entrare nel Gruppo %s da parte di %s', + "CLICCA_QUI": "CLICCA QUI", }, si: {}, es: { @@ -883,7 +884,7 @@ module.exports = { }; }, - sendNotificationByUsername: async function (idapp, username, cmd, telegram, usernameOrig) { + sendNotificationByUsername: async function (idapp, username, cmd, telegram, usernameOrig, recObjCreator) { var { User } = require('../models/user'); const { SendNotif } = require('../models/sendnotif'); @@ -919,22 +920,7 @@ module.exports = { } } else if (cmd === shared_consts.FRIENDSCMD.SETHANDSHAKE) { - descr = printf(this.get__('RICHIESTA_HANDSHAKE', lang), usernameOrig); - openUrl = '/my/' + usernameOrig; - tag = 'reqhandshake'; - - const userrecDest = await User.getUserShortDataByUsername(idapp, usernameOrig); - - const foundIfAlreadyHandShake = await User.isMyHandShake(idapp, username, usernameOrig); - - if (userrecDest) { - sendmynotif = false; // non lo rimandare 2 volte ! - if (!foundIfAlreadyHandShake) { - // SEND TELEGRAM NOTIFICATION - telegrambot.askConfirmationUserFriend(idapp, shared_consts.CallFunz.RICHIESTA_HANDSHAKE, userrecDest, username, usernameOrig); - } - } - + // const foundIfAlready = await User.isMyHandShake(idapp, username, usernameOrig); } } @@ -1770,6 +1756,11 @@ module.exports = { return myrec ? myrec.id : -1 }, + getTableByNumTab(numtab) { + const myrec = shared_consts.MYTABS.find((rec) => rec.id === numtab) + return myrec ? myrec.table : '' + }, + getGroupnameLookupPipeLine(params, proj) { let myquery = [ @@ -1811,6 +1802,17 @@ module.exports = { if (params.af_objId_tab) { const myobj = {}; myobj['myId' + num] = { '$toObjectId': '$' + params.lk_LF }; + + if (params.lk_tab === 'users') { + myobj.namecomplete = { + $concat: [ + { $toLower: "$name" }, + { $toLower: "$surname" }, + { $toLower: "$username" }, + ], + }; + } + query.push( { '$addFields': myobj }, ); @@ -1971,7 +1973,7 @@ module.exports = { { $project: { username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, - 'profile.qualifica': 1, + 'profile.qualifica': 1, } }, ], @@ -2202,14 +2204,6 @@ module.exports = { // console.log('QUERYMATCH', query[0].$match.or); // console.log('filter', params.filter); - if (params.sortBy) { - // maybe we want to sort by blog title or something - const mysort = { $sort: params.sortBy }; - // console.log('sortBy', params.sortBy); - // console.table(mysort); - query.push(mysort); - } - let numrowend = params.endRow - params.startRow; if (numrowend < 0) numrowend = 1; @@ -2611,6 +2605,14 @@ module.exports = { if (q1) query = [...query, ...q1]; } + if (params.sortBy) { + // maybe we want to sort by blog title or something + const mysort = { $sort: params.sortBy }; + // console.log('sortBy', params.sortBy); + // console.table(mysort); + query.push(mysort); + } + query.push( { $group: { @@ -3854,6 +3856,11 @@ module.exports = { let myhost = this.getHostByIdApp(params.idapp); + if (params.textaddTelegram) { + if (params.openUrl) + content = content + '\n' + '' + params.textaddTelegram + ''; + } + /*if (params.openUrl) content = content + '\n' + '' + i18n.__('OPEN PAGE') + ''; @@ -3867,5 +3874,5 @@ module.exports = { return `${username}`; }, - + }; diff --git a/src/server/tools/globalTables.js b/src/server/tools/globalTables.js index 7277aff..6a5a2d6 100755 --- a/src/server/tools/globalTables.js +++ b/src/server/tools/globalTables.js @@ -227,6 +227,8 @@ module.exports = { const sendemail = require('../sendemail'); + const { User } = require('../models/user'); + /// ... rivedere il crea gruppo... notifiche... try { if (!recnotif.typesend) { @@ -248,7 +250,8 @@ module.exports = { usernameDest: recnotif.usernameDest ? recnotif.usernameDest : recnotif.dest, tag: recnotif.tag ? recnotif.tag : '', actions: recnotif.actions ? recnotif.actions : [], - id: recnotif._id + id: recnotif._id, + textaddTelegram: recnotif.textaddTelegram ? recnotif.textaddTelegram : '', }; if (tools.isBitActive(recnotif.typesend, shared_consts.MessageOptions.Notify_ByPushNotification) && this.checkifSendPushNotification) { @@ -287,6 +290,8 @@ module.exports = { try { console.log('SendMsgToParam', params.typesend); + const { User } = require('../models/user'); + let textsent = ''; const telegrambot = require('../telegram/telegrambot'); @@ -536,5 +541,66 @@ module.exports = { }, + getNumFavoriteByIdObj: async function (idapp, numtab, id) { + + const { User } = require('../models/user'); + + let query = [ + { + $match: { + idapp, + "profile.favorite": { + $elemMatch: + { id, tab: numtab } + } + }, + }, + { + $group: + { + _id: null, + count: { $sum: 1 }, + } + }, + { $project: { _id: 0 } } + ]; + + try { + const [result] = await User.aggregate(query); + + return result ? result.count : 0; + } catch (err) { + return 0; + } + + return 0; + + }, + + getUserCreatorByNumTabAndId: async function (idapp, id, numtab) { + try { + const table = tools.getTableByNumTab(numtab); + const mytable = this.getTableByTableName(table); + + const { User } = require('../models/user'); + + if (mytable) { + const rec = await mytable.findOne({ _id: id, idapp }, { username: 1, lang: 1, userId: 1, descr: 1 }); + if (rec) { + const recuser = await User.getUserById(idapp, rec.userId); + + let numfav = await this.getNumFavoriteByIdObj(idapp, numtab, id); + let exist = numfav > 1; + if (recuser) + return { userId: rec.userId, username: recuser.username, descr: rec.descr, id: rec._id, table, exist, numfav }; + } + } + } catch (e) { + console.error('Err:', e); + } + + return null; + }, + }; diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 8266e12..a7ae73e 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -95,6 +95,10 @@ module.exports = { SENDCOINS_REFUSE_SENT: 2222, }, + USERCMD: { + FAVORITE: 3001, + }, + REPORT_FILT_RESP: 1, REPORT_FILT_ATTIVITA: 2, @@ -449,6 +453,9 @@ module.exports = { TYPEDIR_HANDSHAKE: 10, ID_HANDSHAKE_ACCEPTED: 2, + TYPEDIR_FAVORITE: 11, + ID_FAVORITE_ADDED: 1, + TYPEDIR_TEST: 444, ID_TEST_NEW_REC: 1, }, @@ -523,7 +530,11 @@ module.exports = { { 'dir': 5, 'value': 1 - } + }, + { + 'dir': 11, + 'value': 1 + }, ], CIRCUIT_STATUS: { @@ -569,6 +580,8 @@ module.exports = { reported: 1, date_report: 1, username_who_report: 1, + namecomplete: 1, + date_reg: 1, }; if (proj_add) @@ -577,4 +590,26 @@ module.exports = { return proj; }, + getDirectoryByTable(table, barre = false) { + let add = ''; + if (barre) + add = '/'; + + if (table === 'myskills') { + return add + 'myservice' + add + } else if (table === 'mybachecas') { + return add + 'mypage' + add + } else if (table === 'myhosps') { + return add + 'myhosps' + add + } else if (table === 'mygoods') { + return add + 'mygood' + add + } else if (table === 'mygroups') { + return add + 'grp' + add + } else if (table === 'circuits') { + return add + 'circuit' + add + } + + return '' + }, + };