2022-02-12 22:12:49 +01:00
const os = require ( 'os' ) ;
const fs = require ( 'fs' ) ;
const path = require ( 'path' ) ;
require ( '../config/config' ) ;
require ( '../models/subscribers' ) ;
2024-12-17 17:55:47 +01:00
const { ObjectId } = require ( 'mongodb' ) ;
2022-12-23 17:06:54 +01:00
2025-01-11 12:07:58 +01:00
const mongoose = require ( 'mongoose' ) ;
2022-12-23 17:06:54 +01:00
const { User } = require ( '../models/user' ) ;
const { MyGroup } = require ( '../models/mygroup' ) ;
const { Booking } = require ( '../models/booking' ) ;
const { Operator } = require ( '../models/operator' ) ;
const { Where } = require ( '../models/where' ) ;
const { MyEvent } = require ( '../models/myevent' ) ;
2023-09-27 18:38:57 +02:00
const { Reaction } = require ( '../models/reaction' ) ;
2022-12-23 17:06:54 +01:00
const { Contribtype } = require ( '../models/contribtype' ) ;
const { PaymentType } = require ( '../models/paymenttype' ) ;
const { Discipline } = require ( '../models/discipline' ) ;
const { Skill } = require ( '../models/skill' ) ;
const { Good } = require ( '../models/good' ) ;
const { SubSkill } = require ( '../models/subskill' ) ;
const { MySkill } = require ( '../models/myskill' ) ;
2024-06-19 00:21:39 +02:00
const { Attivita } = require ( '../models/attivita' ) ;
2022-12-23 17:06:54 +01:00
const { MyGood } = require ( '../models/mygood' ) ;
const { MyBacheca } = require ( '../models/mybacheca' ) ;
const { MyHosp } = require ( '../models/myhosp' ) ;
const { StatusSkill } = require ( '../models/statusSkill' ) ;
const { City } = require ( '../models/city' ) ;
const { Province } = require ( '../models/province' ) ;
const { Sector } = require ( '../models/sector' ) ;
const { SectorGood } = require ( '../models/sectorgood' ) ;
const { CatGrp } = require ( '../models/catgrp' ) ;
const { Level } = require ( '../models/level' ) ;
const { AdType } = require ( '../models/adtype' ) ;
const { AdTypeGood } = require ( '../models/adtypegood' ) ;
const { Circuit } = require ( '../models/circuit' ) ;
const { Account } = require ( '../models/account' ) ;
const { Movement } = require ( '../models/movement' ) ;
2022-02-12 22:12:49 +01:00
const Pickup = require ( '../models/pickup' ) ;
2022-12-23 17:06:54 +01:00
const { Newstosent } = require ( '../models/newstosent' ) ;
const { MyPage } = require ( '../models/mypage' ) ;
const { MyElem } = require ( '../models/myelem' ) ;
2024-10-31 23:22:46 +01:00
const { MyScheda } = require ( '../models/myscheda' ) ;
2022-12-23 17:06:54 +01:00
const { MyBot } = require ( '../models/bot' ) ;
const { CfgServer } = require ( '../models/cfgserver' ) ;
const { CalZoom } = require ( '../models/calzoom' ) ;
const { Gallery } = require ( '../models/gallery' ) ;
const { TemplEmail } = require ( '../models/templemail' ) ;
const { OpzEmail } = require ( '../models/opzemail' ) ;
const { MailingList } = require ( '../models/mailinglist' ) ;
const { Settings } = require ( '../models/settings' ) ;
const { SendMsg } = require ( '../models/sendmsg' ) ;
const { Permission } = require ( '../models/permission' ) ;
const { MsgTemplate } = require ( '../models/msg_template' ) ;
const { Graduatoria } = require ( '../models/graduatoria' ) ;
2025-01-11 12:07:58 +01:00
2022-02-12 22:12:49 +01:00
const Product = require ( '../models/product' ) ;
2023-12-28 23:48:03 +01:00
const ProductInfo = require ( '../models/productInfo' ) ;
2022-02-12 22:12:49 +01:00
const Producer = require ( '../models/producer' ) ;
const Cart = require ( '../models/cart' ) ;
const OrdersCart = require ( '../models/orderscart' ) ;
const Storehouse = require ( '../models/storehouse' ) ;
2023-12-15 00:57:14 +01:00
const Provider = require ( '../models/provider' ) ;
2023-12-21 02:23:52 +01:00
const Gasordine = require ( '../models/gasordine' ) ;
2023-12-16 00:51:03 +01:00
const Scontistica = require ( '../models/scontistica' ) ;
2022-02-12 22:12:49 +01:00
const Department = require ( '../models/department' ) ;
2023-12-27 02:58:15 +01:00
const CatProd = require ( '../models/catprod' ) ;
2025-01-07 16:50:55 +01:00
const Collana = require ( '../models/collana' ) ;
2024-01-30 14:00:37 +01:00
const CatAI = require ( '../models/catai' ) ;
const QueryAI = require ( '../models/queryai' ) ;
2024-01-12 13:02:59 +01:00
const SubCatProd = require ( '../models/subcatprod' ) ;
2023-11-28 14:20:22 +01:00
const { Category } = require ( '../models/category' ) ;
2022-02-12 22:12:49 +01:00
const ShareWithUs = require ( '../models/sharewithus' ) ;
const Site = require ( '../models/site' ) ;
const IscrittiConacreis = require ( '../models/iscrittiConacreis' ) ;
2022-10-29 12:37:50 +02:00
const IscrittiArcadei = require ( '../models/iscrittiArcadei' ) ;
2022-02-12 22:12:49 +01:00
const Group = require ( '../models/group' ) ;
2022-12-23 17:06:54 +01:00
const { Todo } = require ( '../models/todo' ) ;
2022-02-12 22:12:49 +01:00
const Hours = require ( '../models/hours' ) ;
const Order = require ( '../models/order' ) ;
const CashCategory = require ( '../models/cashCategory' ) ;
const CashSubCategory = require ( '../models/cashSubCategory' ) ;
const tools = require ( './general' ) ;
2022-02-16 19:21:12 +01:00
const shared _consts = require ( './shared_nodejs' ) ;
2024-01-17 21:49:59 +01:00
const server _constants = require ( '../tools/server_constants' ) ;
2022-07-21 00:21:03 +02:00
2022-02-12 22:12:49 +01:00
module . exports = {
2023-09-27 18:38:57 +02:00
isTableReaction ( tablename ) {
return shared _consts . TABLES _REACTIONS . includes ( tablename ) ;
} ,
2022-02-12 22:12:49 +01:00
getTableByTableName ( tablename ) {
let mytable = '' ;
if ( tablename === 'users' )
mytable = User ;
2022-02-28 17:20:47 +01:00
else if ( tablename === shared _consts . TAB _MYGROUPS )
2022-02-12 22:12:49 +01:00
mytable = MyGroup ;
else if ( tablename === 'tessitura' )
mytable = Tessitura ;
2022-12-23 17:06:54 +01:00
// else if (tablename === 'extralist')
2022-02-12 22:12:49 +01:00
// mytable = ExtraList;
else if ( tablename === 'bookings' )
mytable = Booking ;
else if ( tablename === 'operators' )
mytable = Operator ;
else if ( tablename === 'products' )
mytable = Product ;
2024-12-09 12:32:09 +01:00
else if ( tablename === 'arrvariazioni' )
mytable = Product ;
2023-12-27 02:58:15 +01:00
else if ( tablename === 'productinfos' )
mytable = ProductInfo ;
2022-02-12 22:12:49 +01:00
else if ( tablename === 'storehouses' )
mytable = Storehouse ;
2023-12-15 00:57:14 +01:00
else if ( tablename === 'providers' )
mytable = Provider ;
2023-12-21 02:23:52 +01:00
else if ( tablename === 'gasordines' )
mytable = Gasordine ;
2023-12-16 00:51:03 +01:00
else if ( tablename === 'scontisticas' )
mytable = Scontistica ;
2022-02-12 22:12:49 +01:00
else if ( tablename === 'departments' )
mytable = Department ;
2023-11-28 14:20:22 +01:00
else if ( tablename === 'categorys' )
mytable = Category ;
2023-12-27 02:58:15 +01:00
else if ( tablename === 'catprods' )
mytable = CatProd ;
2025-01-07 16:50:55 +01:00
else if ( tablename === 'collanas' )
mytable = Collana ;
2024-01-30 14:00:37 +01:00
else if ( tablename === 'catais' )
mytable = CatAI ;
else if ( tablename === 'queryais' )
mytable = QueryAI ;
2024-01-12 13:02:59 +01:00
else if ( tablename === 'subcatprods' )
mytable = SubCatProd ;
2022-02-12 22:12:49 +01:00
else if ( tablename === 'sharewithus' )
mytable = ShareWithUs ;
else if ( tablename === 'sites' )
mytable = Site ;
else if ( tablename === 'iscritticonacreis' )
mytable = IscrittiConacreis ;
2022-10-29 12:37:50 +02:00
else if ( tablename === 'iscrittiarcadei' )
mytable = IscrittiArcadei ;
2022-02-12 22:12:49 +01:00
else if ( tablename === 'groups' )
mytable = Group ;
else if ( tablename === 'todos' )
mytable = Todo ;
else if ( tablename === 'hours' )
mytable = Hours ;
else if ( tablename === 'orders' )
mytable = Order ;
else if ( tablename === 'cashs' )
mytable = Cash ;
else if ( tablename === 'cashCategorys' )
mytable = CashCategory ;
else if ( tablename === 'cashSubCategorys' )
mytable = CashSubCategory ;
else if ( tablename === 'producers' )
mytable = Producer ;
else if ( tablename === 'carts' )
mytable = Cart ;
2024-01-09 15:31:59 +01:00
else if ( tablename === 'orderscarts' )
2022-02-12 22:12:49 +01:00
mytable = OrdersCart ;
else if ( tablename === 'sendmsgs' )
mytable = SendMsg ;
else if ( tablename === 'wheres' )
mytable = Where ;
else if ( tablename === 'myevents' )
mytable = MyEvent ;
else if ( tablename === 'contribtypes' )
mytable = Contribtype ;
else if ( tablename === 'paymenttypes' )
mytable = PaymentType ;
else if ( tablename === 'disciplines' )
mytable = Discipline ;
else if ( tablename === 'newstosent' )
mytable = Newstosent ;
else if ( tablename === 'gallery' )
mytable = Gallery ;
2024-09-26 02:14:33 +02:00
else if ( ( tablename === 'mypages' ) || ( tablename === 'mypage' ) )
2022-02-12 22:12:49 +01:00
mytable = MyPage ;
2022-10-27 11:22:58 +02:00
else if ( tablename === 'myelems' )
mytable = MyElem ;
2024-10-31 23:22:46 +01:00
else if ( tablename === 'myschedas' )
mytable = MyScheda ;
2022-05-14 00:31:53 +02:00
else if ( tablename === 'bots' )
2022-02-12 22:12:49 +01:00
mytable = MyBot ;
2022-05-14 00:31:53 +02:00
else if ( tablename === 'cfgservers' )
mytable = CfgServer ;
2022-02-12 22:12:49 +01:00
else if ( tablename === 'calzoom' )
mytable = CalZoom ;
else if ( tablename === 'templemail' )
mytable = TemplEmail ;
else if ( tablename === 'opzemail' )
mytable = OpzEmail ;
else if ( tablename === 'settings' )
mytable = Settings ;
else if ( tablename === 'permissions' )
mytable = Permission ;
else if ( tablename === 'mailinglist' )
mytable = MailingList ;
else if ( tablename === 'msg_templates' )
mytable = MsgTemplate ;
else if ( tablename === 'navepersistente' )
mytable = NavePersistente ;
2022-12-23 17:06:54 +01:00
// else if (tablename === 'listaingressos')
2022-02-12 22:12:49 +01:00
// mytable = ListaIngresso;
else if ( tablename === 'graduatorias' )
mytable = Graduatoria ;
else if ( tablename === 'skills' )
mytable = Skill ;
2022-02-21 13:12:27 +01:00
else if ( tablename === 'goods' )
mytable = Good ;
2022-02-12 22:12:49 +01:00
else if ( tablename === 'subskills' )
mytable = SubSkill ;
2022-02-16 19:21:12 +01:00
else if ( tablename === shared _consts . TABLES _MYSKILLS )
2022-02-12 22:12:49 +01:00
mytable = MySkill ;
2024-06-19 00:21:39 +02:00
else if ( tablename === shared _consts . TABLES _ATTIVITAS )
mytable = Attivita ;
2022-02-16 19:21:12 +01:00
else if ( tablename === shared _consts . TABLES _MYBACHECAS )
mytable = MyBacheca ;
2022-05-04 00:26:12 +02:00
else if ( tablename === shared _consts . TABLES _MYHOSPS )
mytable = MyHosp ;
2022-02-21 13:12:27 +01:00
else if ( tablename === shared _consts . TABLES _MYGOODS )
mytable = MyGood ;
2022-02-12 22:12:49 +01:00
else if ( tablename === 'statusSkills' )
mytable = StatusSkill ;
else if ( tablename === 'cities' )
mytable = City ;
else if ( tablename === 'provinces' )
mytable = Province ;
else if ( tablename === 'sectors' )
mytable = Sector ;
2022-02-21 13:12:27 +01:00
else if ( tablename === 'sectorgoods' )
mytable = SectorGood ;
2022-02-12 22:12:49 +01:00
else if ( tablename === 'catgrps' )
mytable = CatGrp ;
else if ( tablename === 'levels' )
mytable = Level ;
2022-02-21 13:12:27 +01:00
else if ( tablename === 'adtypes' )
mytable = AdType ;
else if ( tablename === 'adtypegoods' )
mytable = AdTypeGood ;
2022-05-08 00:09:59 +02:00
else if ( tablename === 'circuits' )
mytable = Circuit ;
else if ( tablename === 'accounts' )
mytable = Account ;
else if ( tablename === 'movements' )
mytable = Movement ;
2023-09-27 18:38:57 +02:00
else if ( tablename === 'reactions' )
mytable = Reaction ;
2022-02-12 22:12:49 +01:00
else if ( shared _consts . TablePickup . includes ( tablename ) )
mytable = Pickup ;
//else if (shared_consts.TableCities.includes(tablename))
// mytable = City;
return mytable ;
} ,
2022-03-06 00:48:33 +01:00
2022-07-21 00:21:03 +02:00
checkifSendPushNotification ( ) {
return process . env . ENABLE _PUSHNOTIFICATION === '1' ;
} ,
2025-01-11 12:07:58 +01:00
async sendNotifCmd ( typenotif , idnotif , res , idapp , user , recnotif , cmd ) {
2022-07-21 00:21:03 +02:00
// Controlla nelle impostazioni che tipo di Notifica visualizzare
2022-07-23 17:48:33 +02:00
const sendemail = require ( '../sendemail' ) ;
2023-04-12 15:37:54 +02:00
const { User } = require ( '../models/user' ) ;
2022-08-07 02:01:35 +02:00
/// ... rivedere il crea gruppo... notifiche...
2022-07-23 17:48:33 +02:00
try {
2022-08-07 02:01:35 +02:00
if ( ! recnotif . typesend ) {
recnotif . typesend = shared _consts . MessageOptions . Notify _ByPushNotification + shared _consts . MessageOptions . Notify _ByBotTelegram ;
2022-07-23 17:48:33 +02:00
}
2022-07-26 15:46:39 +02:00
let invia = false ;
let params = {
idapp ,
sendreally : true ,
typesend : 0 ,
title : tools . getNomeAppByIdApp ( idapp ) ,
content : recnotif . descr ? recnotif . descr : tools . getContentByTypeMsg ( recnotif . typemsg ) ,
openUrl : tools . updateQueryStringParameter ( recnotif . openUrl , 'idnotif' , recnotif . _id ) ,
typemsg : recnotif . typemsg ? recnotif . typemsg : shared _consts . TypeMsg . SEND _TO _USER ,
typenotif ,
idnotif ,
2024-10-29 02:33:29 +01:00
img : recnotif . img ,
2022-07-26 15:46:39 +02:00
usernameDest : recnotif . usernameDest ? recnotif . usernameDest : recnotif . dest ,
2022-08-07 02:01:35 +02:00
tag : recnotif . tag ? recnotif . tag : '' ,
actions : recnotif . actions ? recnotif . actions : [ ] ,
2023-04-12 15:37:54 +02:00
id : recnotif . _id ,
textaddTelegram : recnotif . textaddTelegram ? recnotif . textaddTelegram : '' ,
2023-10-01 01:24:47 +02:00
textcontent _Telegram : recnotif . textcontent _Telegram ? recnotif . textcontent _Telegram : '' ,
2023-08-27 23:55:31 +02:00
linkaddTelegram : recnotif . linkaddTelegram ? recnotif . linkaddTelegram : '' ,
2022-07-26 15:46:39 +02:00
} ;
2024-09-26 02:14:33 +02:00
2022-08-07 02:01:35 +02:00
if ( tools . isBitActive ( recnotif . typesend , shared _consts . MessageOptions . Notify _ByPushNotification ) && this . checkifSendPushNotification ) {
2022-07-26 15:46:39 +02:00
params . typesend = params . typesend + shared _consts . TypeSend . PUSH _NOTIFICATION ;
invia = true ;
}
2022-08-07 02:01:35 +02:00
if ( tools . isBitActive ( recnotif . typesend , shared _consts . MessageOptions . Notify _ByBotTelegram ) ) {
2022-07-26 15:46:39 +02:00
params . typesend = params . typesend + shared _consts . TypeSend . TELEGRAM ;
invia = true ;
}
2022-07-21 00:21:03 +02:00
2022-07-26 15:46:39 +02:00
if ( invia ) {
ris = await this . SendMsgToParam ( idapp , params ) ;
2022-07-21 00:21:03 +02:00
}
2022-07-23 17:48:33 +02:00
// Send Msg by EMAIL
2022-08-07 02:01:35 +02:00
if ( tools . isBitActive ( recnotif . typesend , shared _consts . MessageOptions . Notify _ByEmail ) ) {
2022-07-23 17:48:33 +02:00
// Read from the operator table first
let emaildest = await Operator . getEmailByUsername ( recnotif . dest . idapp , recnotif . dest . username ) ;
if ( ! emaildest )
emaildest = await User . getEmailByUsername ( recnotif . dest . idapp , recnotif . dest . username ) ;
2022-07-21 00:21:03 +02:00
2022-07-26 15:46:39 +02:00
await sendemail . sendEmail _ByNotif ( res , user . lang , emaildest , user , idapp , recnotif ) ;
2022-07-23 17:48:33 +02:00
}
2022-07-21 00:21:03 +02:00
2022-08-07 02:01:35 +02:00
return recnotif ;
2022-07-23 17:48:33 +02:00
} catch ( e ) {
console . error ( 'sendNotif' , e , typenotif , recnotif ) ;
2022-08-07 02:01:35 +02:00
return recnotif ;
2022-07-23 17:48:33 +02:00
}
2022-07-21 00:21:03 +02:00
} ,
2022-12-23 17:06:54 +01:00
SendMsgToParam : async function ( idapp , params ) {
2022-03-06 00:48:33 +01:00
try {
2023-06-18 22:29:06 +02:00
// console.log('SendMsgToParam', params.typesend, params.typemsg);
2022-07-23 17:48:33 +02:00
2023-04-12 15:37:54 +02:00
const { User } = require ( '../models/user' ) ;
2022-12-02 13:31:57 +01:00
let textsent = '' ;
2022-03-06 00:48:33 +01:00
const telegrambot = require ( '../telegram/telegrambot' ) ;
2022-07-21 00:21:03 +02:00
if ( params . typesend === 0 )
params . typesend = shared _consts . TypeSend . PUSH _NOTIFICATION ;
2022-12-23 17:06:54 +01:00
let query = { idapp } ;
2022-03-06 00:48:33 +01:00
let addquery = { } ;
let invia = true ;
if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _ALL ) {
addquery = { } ;
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _SOCI ) {
2022-12-23 17:06:54 +01:00
addquery = { 'profile.socio' : true } ;
2022-03-06 00:48:33 +01:00
} else if ( params . typemsg ===
2022-12-23 17:06:54 +01:00
shared _consts . TypeMsg . SEND _TO _SOCIO _RESIDENTE ) {
addquery = { 'profile.socioresidente' : true } ;
2022-03-06 00:48:33 +01:00
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _CONSIGLIO ) {
2022-12-23 17:06:54 +01:00
addquery = { 'profile.consiglio' : true } ;
2022-03-06 00:48:33 +01:00
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _NON _SOCI ) {
2022-12-23 17:06:54 +01:00
addquery = { 'profile.socio' : false } ;
2022-03-06 00:48:33 +01:00
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _PAOLO ) {
2025-01-12 21:29:05 +01:00
addquery = { username : shared _consts . ADMIN _USER _SERVER } ;
2022-03-06 00:48:33 +01:00
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _USER ) {
2022-12-23 17:06:54 +01:00
addquery = { username : params . usernameDest } ;
2022-03-06 00:48:33 +01:00
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _MYSELF ) {
2022-12-23 17:06:54 +01:00
addquery = { username : params . usernameDest } ;
2022-03-09 14:53:09 +01:00
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _TELEG _NO _USERNAME _TELEG ) {
addquery = {
2022-12-23 17:06:54 +01:00
'profile.teleg_id' : { $gt : 1 } ,
2022-03-09 14:53:09 +01:00
$or : [
2022-12-23 17:06:54 +01:00
{ 'profile.username_telegram' : { $exists : false } } ,
{ 'profile.username_telegram' : { $exists : true , $eq : '' } } ] ,
2022-03-09 14:53:09 +01:00
} ;
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _TELEG _NO _VERIF _BY _APORTADOR ) {
addquery = {
2022-12-23 17:06:54 +01:00
'profile.teleg_id' : { $gt : 1 } ,
'profile.username_telegram' : { $exists : true } ,
$expr : { $gt : [ { $strLenCP : '$profile.username_telegram' } , 3 ] } ,
'verified_by_aportador' : { $exists : false } ,
2022-03-09 14:53:09 +01:00
} ;
2022-03-06 00:48:33 +01:00
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _GROUP ) {
if ( params . groupnameDest ) {
addquery = {
'profile.mygroups' : {
2022-12-23 17:06:54 +01:00
$elemMatch : { groupname : { $eq : params . groupnameDest } } ,
2022-03-06 00:48:33 +01:00
} ,
} ;
} else {
invia = false ;
}
2022-09-02 02:25:38 +02:00
} else if ( params . typemsg === shared _consts . TypeMsg . SEND _TO _CIRCUIT ) {
if ( params . circuitnameDest ) {
addquery = {
'profile.mycircuits' : {
2022-12-23 17:06:54 +01:00
$elemMatch : { circuitname : { $eq : params . circuitnameDest } } ,
2022-09-02 02:25:38 +02:00
} ,
} ;
} else {
invia = false ;
}
2022-03-06 00:48:33 +01:00
}
let numrec = 0 ;
let nummsgsent = 0 ;
2022-12-09 03:09:08 +01:00
let text = '' ;
2022-03-06 00:48:33 +01:00
if ( invia ) {
2022-12-23 17:06:54 +01:00
const allquery = { ... query , ... addquery } ;
2022-03-06 00:48:33 +01:00
2024-11-03 19:15:35 +01:00
let arrusers = await User . find (
2022-12-23 17:06:54 +01:00
allquery ,
{
username : 1 ,
'profile.teleg_id' : 1 ,
2023-04-12 16:29:22 +02:00
'profile.notifs' : 1 ,
2022-12-23 17:06:54 +01:00
} ,
2022-03-06 00:48:33 +01:00
) . lean ( ) ;
2024-11-03 19:15:35 +01:00
if ( ! tools . sulServer ( ) ) {
2025-01-12 21:29:05 +01:00
arrusers = await User . find ( { idapp , username : shared _consts . ADMIN _USER _SERVER } ) ;
2024-11-03 19:15:35 +01:00
}
2022-12-09 03:09:08 +01:00
2022-03-06 00:48:33 +01:00
for ( const user of arrusers ) {
2022-11-02 22:32:54 +01:00
const mytitle = await tools . convertSpecialTags ( user , params . title ) ;
2023-10-01 01:24:47 +02:00
const mycontent = await tools . convertSpecialTags ( user , params . textcontent _Telegram ? params . textcontent _Telegram : params . content ) ;
2022-03-06 00:48:33 +01:00
2023-08-27 23:55:31 +02:00
let usernotifprofile = null ;
if ( user . profile . notifs )
usernotifprofile = user . profile . notifs . find ( ( notif ) => notif . dir === params . typenotif ) ;
2023-04-12 16:29:22 +02:00
2022-03-08 01:01:20 +01:00
let risult = null ;
2023-04-12 16:29:22 +02:00
let sendmsg = false ;
2022-03-06 00:48:33 +01:00
2023-04-12 16:29:22 +02:00
if ( params . typenotif === shared _consts . TypeNotifs . TYPEDIR _FAVORITE ) {
2023-04-17 00:11:36 +02:00
if ( ! usernotifprofile || ( usernotifprofile && tools . isBitActive ( usernotifprofile . value , shared _consts . TypeNotifs . ID _FAVORITE _ADDED ) ) ) {
sendmsg = true ;
}
2023-04-12 16:29:22 +02:00
} else {
sendmsg = true ;
}
2022-03-06 00:48:33 +01:00
2023-04-12 16:29:22 +02:00
if ( sendmsg ) {
if ( params . sendreally ) {
if ( tools . isBitActive ( params . typesend , shared _consts . TypeSend . PUSH _NOTIFICATION ) ) {
const myparam = { ... params } ;
risult = await tools . sendNotificationToUser ( user . _id , mytitle , mycontent , myparam . openUrl , myparam . openUrl2 , myparam . tag ,
myparam . actions , myparam . id ) .
then ( ris => {
2022-03-06 00:48:33 +01:00
2023-04-12 16:29:22 +02:00
} ) .
catch ( e => {
console . error ( e . message ) ;
} ) ;
2022-12-02 13:31:57 +01:00
2023-04-12 16:29:22 +02:00
}
if ( tools . isBitActive ( params . typesend , shared _consts . TypeSend . TELEGRAM ) ) {
const telegid = user . profile . teleg _id ;
text = tools . getContentNotifByParams ( params , mycontent , shared _consts . TypeSend . TELEGRAM ) ;
if ( telegid > 0 ) {
2024-09-29 16:58:14 +02:00
risult = await telegrambot . local _sendMsgTelegramByIdTelegram ( idapp , telegid , text , undefined , undefined , undefined , undefined , params . img ) ;
2023-06-18 22:29:06 +02:00
await tools . snooze ( 25 ) ;
2023-04-12 16:29:22 +02:00
2024-11-03 19:15:35 +01:00
try {
if ( risult && ( risult . text || risult . caption ) )
textsent = ( risult . text || risult . caption ) ;
} catch ( e ) {
2025-01-11 12:07:58 +01:00
2024-11-03 19:15:35 +01:00
}
2025-01-11 12:07:58 +01:00
2023-04-12 16:29:22 +02:00
}
2022-03-06 00:48:33 +01:00
}
}
2023-04-12 16:29:22 +02:00
numrec ++ ;
if ( params . sendreally && risult ) {
nummsgsent ++ ;
}
2022-03-08 01:01:20 +01:00
2023-04-12 16:29:22 +02:00
if ( nummsgsent > 0 && ( nummsgsent % 100 ) === 0 ) {
console . log ( 'Inviati ' , nummsgsent , 'messaggi...' ) ;
}
2022-03-08 01:01:20 +01:00
}
2022-03-06 00:48:33 +01:00
}
}
2022-03-08 01:01:20 +01:00
if ( nummsgsent > 0 ) {
2023-06-18 22:29:06 +02:00
if ( nummsgsent != numrec && ( numrec !== 1 ) )
console . log ( 'FINE Invio Messaggi ! Inviati Totali: ' , nummsgsent , 'su' , numrec ) ;
2022-03-08 01:01:20 +01:00
}
2022-03-06 00:48:33 +01:00
return {
numrec ,
nummsgsent ,
2022-12-02 13:31:57 +01:00
textsent ,
2022-12-09 03:09:08 +01:00
text ,
2022-03-06 00:48:33 +01:00
} ;
} catch ( e ) {
console . error ( 'SendMsgToParam' , e ) ;
}
} ,
2022-12-23 17:06:54 +01:00
SendMsgToAll : async function ( idapp , params ) {
2022-03-06 00:48:33 +01:00
params . typemsg = shared _consts . TypeMsg . SEND _TO _ALL ;
params . sendreally = true ;
params . typesend = shared _consts . TypeSend . PUSH _NOTIFICATION ;
2022-09-11 11:45:33 +02:00
return await this . SendMsgToParam ( idapp , params ) ;
2022-03-06 00:48:33 +01:00
} ,
2025-01-11 12:07:58 +01:00
SearchString : async function ( idapp , searchString ) {
const db = mongoose . connection . db ;
let result = '' ;
let resultPrima = '' ;
if ( ! searchString )
return '' ;
try {
// Ottieni tutte le collezioni del database
const collections = await db . listCollections ( ) . toArray ( ) ;
const collectionNames = collections . map ( collection => collection . name ) ;
for ( const collectionName of collectionNames ) {
// Crea l'indice di testo per la collezione
await db . collection ( collectionName ) . createIndex ( { "$**" : "text" } ) ;
if ( collectionName !== 'sendnotifs' ) {
// Cerca nella collezione
const found = await db . collection ( collectionName ) . find ( {
$and : [
{ idapp : idapp } ,
{ $text : { $search : searchString } } ,
{ 'profile.username_telegram' : { $exists : false } }
]
} ) . toArray ( ) ;
if ( found . length > 0 ) {
resultPrima += ` Risultati trovati nella collezione: ${ collectionName } ( ${ found . length } record) \n ` ;
result += ` Risultati trovati nella collezione: ${ collectionName } \n ` ;
for ( const record of found ) {
result += JSON . stringify ( record ) + '\n' ;
}
result += '\n' ;
}
}
}
if ( result === '' ) {
result = 'La stringa non è stata trovata in nessuna collezione.' ;
}
} catch ( error ) {
result = ` Errore durante la ricerca: ${ error . message } ` ;
} finally {
}
return resultPrima + '\n\n' + result ;
} ,
replaceAportadorSolidario : async function ( idapp , search _username , replace _username ) {
console . log ( 'INIZIO replaceAportadorSolidario' )
if ( ! search _username || ! replace _username ) {
return false ;
}
ris = await User . updateMany ( { idapp , aportador _iniziale : search _username } ,
{
$set :
{ aportador _iniziale : replace _username }
} ) ;
console . log ( 'aportador_iniziale result = ' , ris ) ;
ris = await User . updateMany ( { idapp , aportador _solidario : search _username } ,
{
$set :
{ aportador _solidario : replace _username }
} ) ;
console . log ( 'aportador_solidario result = ' , ris ) ;
} ,
2024-09-26 02:14:33 +02:00
replaceUsername : async function ( idapp , search _username , replace _username ) {
2022-12-23 17:06:54 +01:00
2023-01-03 16:51:32 +01:00
if ( ! search _username || ! replace _username ) {
return false ;
}
2025-01-11 12:07:58 +01:00
const test = false ;
2024-01-17 21:49:59 +01:00
console . log ( 'INIZIO replaceUsername' )
2022-12-23 00:36:35 +01:00
try {
let ris = null ;
console . log ( 'replaceUsername = ' , search _username , replace _username ) ;
2025-01-11 12:07:58 +01:00
const dir = tools . getdirByIdApp ( idapp , true ) ;
2022-12-23 17:06:54 +01:00
2025-01-11 12:07:58 +01:00
tools . move ( dir + server _constants . DIR _UPLOAD + '/profile/' + search _username , dir + server _constants . DIR _UPLOAD + '/profile/' + replace _username , function callback ( ) {
console . log ( ' ... moved dir' , dir + server _constants . DIR _UPLOAD + '/profile/' + search _username , dir + server _constants . DIR _UPLOAD + '/profile/' + replace _username ) ;
2023-01-03 16:51:32 +01:00
} ) ;
2025-01-11 12:07:58 +01:00
if ( test ) {
// esco...
2022-12-23 17:06:54 +01:00
2025-01-11 12:07:58 +01:00
} else {
2022-12-23 17:06:54 +01:00
2025-01-11 12:07:58 +01:00
ris = await User . findOneAndUpdate ( { idapp , username : search _username } , { $set : { username : replace _username } } ) ;
console . log ( 'username result = ' , ris ) ;
2022-12-23 17:06:54 +01:00
2025-01-11 12:07:58 +01:00
ris = await User . findOneAndUpdate ( { idapp , username : search _username } , { $set : { username : replace _username } } ) ;
console . log ( 'username result = ' , ris ) ;
2022-12-23 17:06:54 +01:00
2025-01-11 12:07:58 +01:00
ris = await User . findOneAndUpdate ( { idapp , 'profile.username_telegram' : search _username } , { $set : { 'profile.username_telegram' : replace _username } } ) ;
console . log ( 'profile.username_telegram result = ' , ris ) ;
2022-12-23 17:06:54 +01:00
2025-01-11 12:07:58 +01:00
ris = await User . updateMany ( { idapp , aportador _iniziale : search _username } ,
{
$set :
{ aportador _iniziale : replace _username }
} ) ;
console . log ( 'aportador_iniziale result = ' , ris ) ;
ris = await User . updateMany ( { idapp , username _who _report : search _username } ,
{
$set :
{ username _who _report : replace _username }
} ) ;
console . log ( 'username_who_report result = ' , ris ) ;
ris = await User . updateMany ( { idapp , aportador _solidario : search _username } ,
{
$set :
{ aportador _solidario : replace _username }
} ) ;
console . log ( 'aportador_solidario result = ' , ris ) ;
ris = await User . updateMany ( { idapp , 'profile.friends.username' : search _username } ,
{
$set :
{ 'profile.friends.$.username' : replace _username }
} ) ;
console . log ( 'friends.username result = ' , ris ) ;
ris = await User . updateMany ( { idapp , 'profile.req_friends.username' : search _username } ,
{
$set :
{ 'profile.req_friends.$.username' : replace _username }
} ) ;
console . log ( 'req_friends.username result = ' , ris ) ;
ris = await User . updateMany ( { idapp , 'profile.handshake.username' : search _username } ,
{
$set :
{ 'profile.handshake.$.username' : replace _username }
} ) ;
console . log ( 'handshake.username result = ' , ris ) ;
ris = await Circuit . updateMany ( { idapp , 'admins.username' : search _username } ,
{ $set : { 'admins.$.username' : replace _username } } ) ;
console . log ( 'Circuit.admins.username result = ' , ris ) ;
ris = await Circuit . updateMany ( { idapp , 'createdBy' : search _username } ,
{ $set : { 'createdBy' : replace _username } } ) ;
console . log ( 'Circuit.createdBy result = ' , ris ) ;
ris = await MyGroup . updateMany ( { idapp , 'createdBy' : search _username } ,
{ $set : { 'createdBy' : replace _username } } ) ;
console . log ( 'MyGroup.createdBy result = ' , ris ) ;
ris = await MyElem . updateMany (
{
idapp ,
$or : [
{ 'containerHtml' : { $regex : search _username , $options : 'i' } } ,
{ 'link' : { $regex : search _username , $options : 'i' } }
]
} ,
[
{
$set : {
containerHtml : {
$replaceAll : {
input : "$containerHtml" ,
find : search _username ,
replacement : replace _username
}
} ,
link : {
$replaceAll : {
input : "$link" ,
find : search _username ,
replacement : replace _username
}
}
}
}
]
) ;
console . log ( 'MyElem.containerHtml result = ' , ris ) ;
ris = await Circuit . updateMany ( { idapp , 'req_users.username' : search _username } ,
{ $set : { 'req_users.$.username' : replace _username } } ) ;
console . log ( 'Circuit.req_users.username result = ' , ris ) ;
ris = await Circuit . updateMany ( { idapp , 'refused_users.username' : search _username } ,
{ $set : { 'refused_users.$.username' : replace _username } } ) ;
console . log ( 'Circuit.refused_users.username result = ' , ris ) ;
ris = await Account . updateMany ( { idapp , 'username' : search _username } ,
{ $set : { 'username' : replace _username } } ) ;
console . log ( 'Account.username result = ' , ris ) ;
ris = await MyGroup . updateMany ( { idapp , 'admins.username' : search _username } ,
{ $set : { 'admins.$.username' : replace _username } } ) ;
console . log ( 'MyGroup.refused_users.username result = ' , ris ) ;
ris = await MyGroup . updateMany ( { idapp , 'req_users.username' : search _username } ,
{ $set : { 'req_users.$.username' : replace _username } } ) ;
console . log ( 'MyGroup.req_users.username result = ' , ris ) ;
// MyGroup.refused_users.username
ris = await MyGroup . updateMany ( { idapp , 'refused_users.username' : search _username } ,
{ $set : { 'refused_users.$.username' : replace _username } } ) ;
console . log ( 'MyGroup.refused_users.username result = ' , ris ) ;
const { SendNotif } = require ( '../models/sendnotif' ) ;
ris = await SendNotif . updateMany ( { idapp , 'sender' : search _username } ,
{ $set : { 'sender' : replace _username } } ) ;
console . log ( 'SendNotif.sender result = ' , ris ) ;
try {
ris = await SendNotif . updateMany ( { idapp , 'dest' : search _username } ,
{ $set : { 'dest' : replace _username } } ) ;
console . log ( 'SendNotif.dest result = ' , ris ) ;
} catch ( e ) {
console . error ( e ) ;
}
ris = await Reaction . updateMany ( { idapp , 'username' : search _username } ,
{ $set : { 'username' : replace _username } } ) ;
console . log ( 'Reaction.dest result = ' , ris ) ;
ris = await SendMsg . updateMany ( { idapp , 'dest' : search _username } ,
{ $set : { 'dest' : replace _username } } ) ;
console . log ( 'SendMsg.dest result = ' , ris ) ;
ris = await SendMsg . updateMany ( { idapp , 'origin' : search _username } ,
{ $set : { 'origin' : replace _username } } ) ;
console . log ( 'SendMsg.origin result = ' , ris ) ;
ris = await Booking . updateMany ( { idapp , 'username' : search _username } ,
{ $set : { 'username' : replace _username } } ) ;
console . log ( 'Booking.username result = ' , ris ) ;
}
2022-12-23 17:06:54 +01:00
2022-12-23 00:36:35 +01:00
} catch ( e ) {
console . error ( e ) ;
}
2022-12-23 17:06:54 +01:00
2022-12-23 00:36:35 +01:00
} ,
2022-12-23 17:06:54 +01:00
2023-04-12 15:37:54 +02:00
getNumFavoriteByIdObj : async function ( idapp , numtab , id ) {
2023-09-27 18:38:57 +02:00
const { Reaction } = require ( '../models/reaction' ) ;
2023-04-12 15:37:54 +02:00
let query = [
{
$match : {
idapp ,
2023-09-27 18:38:57 +02:00
idrec : id ,
} ,
} ,
{
$group :
{
_id : null ,
count : {
$sum : {
$cond : {
if : { $ifNull : [ "$fav" , false ] } , // Check if the field exists and is not null
then : 1 , // Increment count by 1 if the field exists
else : 0 , // Otherwise, keep the count unchanged
}
}
} ,
}
} ,
{ $project : { _id : 0 } }
] ;
try {
const [ result ] = await Reaction . aggregate ( query ) ;
return result ? result . count : 0 ;
} catch ( err ) {
return 0 ;
}
return 0 ;
} ,
getNumBookByIdObj : async function ( idapp , numtab , id ) {
const { Reaction } = require ( '../models/reaction' ) ;
let query = [
{
$match : {
idapp ,
idrec : id ,
2023-04-12 15:37:54 +02:00
} ,
} ,
{
$group :
{
_id : null ,
2023-09-27 18:38:57 +02:00
count : {
$sum : {
$cond : {
if : { $ifNull : [ "$book" , false ] } , // Check if the field exists and is not null
then : 1 , // Increment count by 1 if the field exists
else : 0 , // Otherwise, keep the count unchanged
}
}
} ,
2023-04-12 15:37:54 +02:00
}
} ,
{ $project : { _id : 0 } }
] ;
try {
2023-09-27 18:38:57 +02:00
const [ result ] = await Reaction . aggregate ( query ) ;
2023-04-12 15:37:54 +02:00
return result ? result . count : 0 ;
} catch ( err ) {
return 0 ;
}
return 0 ;
} ,
2023-04-17 00:11:36 +02:00
getNumAttendByIdObj : async function ( idapp , numtab , id ) {
2023-09-27 18:38:57 +02:00
const { Reaction } = require ( '../models/reaction' ) ;
2023-04-17 00:11:36 +02:00
let query = [
{
$match : {
idapp ,
2023-09-27 18:38:57 +02:00
idrec : id ,
2023-04-17 00:11:36 +02:00
} ,
} ,
{
$group :
{
_id : null ,
count : {
2023-09-27 18:38:57 +02:00
$sum : {
$cond : {
if : { $ifNull : [ "$attent" , false ] } , // Check if the field exists and is not null
then : 1 , // Increment count by 1 if the field exists
else : 0 , // Otherwise, keep the count unchanged
}
} ,
/ * $ s u m :
2023-04-17 00:11:36 +02:00
{
$reduce : {
input : "$profile.attend" ,
initialValue : 0 ,
in : {
$add : [ "$$value" , "$$this.num" ]
}
}
2023-09-27 18:38:57 +02:00
} * /
2023-04-17 00:11:36 +02:00
} ,
}
} ,
{ $project : { _id : 0 } }
] ;
try {
2023-09-27 18:38:57 +02:00
const [ result ] = await Reaction . aggregate ( query ) ;
2023-04-17 00:11:36 +02:00
return result ? result . count : 0 ;
} catch ( err ) {
return 0 ;
}
} ,
2023-04-12 15:37:54 +02:00
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 ) ;
2023-04-17 00:11:36 +02:00
let numattend = await this . getNumAttendByIdObj ( idapp , numtab , id ) ;
2023-04-12 15:37:54 +02:00
let numfav = await this . getNumFavoriteByIdObj ( idapp , numtab , id ) ;
2023-09-27 18:38:57 +02:00
let numbook = await this . getNumBookByIdObj ( idapp , numtab , id ) ;
2023-04-17 00:11:36 +02:00
let exist = false ;
if ( table === shared _consts . TABLES _MYBACHECAS )
exist = numattend > 1 ;
else
exist = numfav > 1 ;
2023-04-12 15:37:54 +02:00
if ( recuser )
2023-09-27 18:38:57 +02:00
return { userId : rec . userId , username : recuser . username , descr : rec . descr , id : rec . _id , table , exist , numfav , numattend , numbook } ;
2023-04-12 15:37:54 +02:00
}
}
} catch ( e ) {
console . error ( 'Err:' , e ) ;
}
return null ;
} ,
2025-01-07 16:50:55 +01:00
checkIfTokenExpired ( req , res ) {
let ret = null ;
if ( true ) {
res . status ( 408 ) . send ( { } ) ;
}
2025-01-15 16:48:31 +01:00
} ,
async removeAdminIfZeroBalance ( idapp , username ) {
try {
// Trova l'account con saldo_pend a zero
const accountarr = await Account . find ( { idapp , username : username , saldo _pend : 0 } ) . lean ( ) ;
if ( accountarr ) {
for ( const recaccount of accountarr ) {
// Rimuovi l'username dalla lista degli admins nel Circuit
const ris = await Circuit . findOneAndUpdate (
{ _id : recaccount . circuitId } ,
{ $pull : { admins : { username : username } } } , // Rimuove l'username dalla lista degli admins
{ new : true } // Opzione per restituire il documento aggiornato
) ;
const nomecircuito = ris . name ;
// Esco anche dal Circuito personale:
await User . findOneAndUpdate (
{ idapp , username } ,
{ $pull : { 'profile.mycircuits' : { circuitname : nomecircuito } } }
) ;
if ( ris )
console . log ( ` L'username ${ username } è stato rimosso dagli admins di ` + nomecircuito ) ;
}
} else {
console . log ( ` Nessun account trovato con saldo_pend a zero per l'username: ${ username } . ` ) ;
}
} catch ( error ) {
console . error ( 'Errore durante l\'operazione:' , error ) ;
}
} ,
async ExitFromAllCircuitWithZero ( idapp , username ) {
return await this . removeAdminIfZeroBalance ( idapp , username ) ;
} ,
2025-01-07 16:50:55 +01:00
2022-12-23 00:36:35 +01:00
2022-02-12 22:12:49 +01:00
} ;