+
diff --git a/src/layouts/toolbar/messagePopover/messagePopover.vue b/src/layouts/toolbar/messagePopover/messagePopover.vue
index 3efcc93..6a3e658 100644
--- a/src/layouts/toolbar/messagePopover/messagePopover.vue
+++ b/src/layouts/toolbar/messagePopover/messagePopover.vue
@@ -19,7 +19,7 @@
-
+
diff --git a/src/mixins/mixin-base.ts b/src/mixins/mixin-base.ts
index 72975e3..93f728e 100644
--- a/src/mixins/mixin-base.ts
+++ b/src/mixins/mixin-base.ts
@@ -5,6 +5,8 @@ import { func_tools } from '../store/Modules/toolsext'
import { tools } from '../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { GlobalStore } from '../store/Modules'
+import { fieldsTable } from '@src/store/Modules/fieldsTable'
+import { CalendarStore } from '@store'
// You can declare a mixin as the same style as components.
@Component
@@ -17,6 +19,10 @@ export default class MixinBase extends Vue {
return toolsext
}
+ get db_fieldsTable() {
+ return fieldsTable
+ }
+
get func_tools() {
return func_tools
}
@@ -25,19 +31,87 @@ export default class MixinBase extends Vue {
return tools
}
- public getValDb(keystr) {
- return GlobalStore.getters.getValueSettingsByKey(keystr)
+ public getValDb(keystr, serv, def?) {
+ const ris = GlobalStore.getters.getValueSettingsByKey(keystr, serv)
+ if (ris === '')
+ if (def !== undefined)
+ return def
+ else
+ return ''
+ else
+ return ris
}
- public getarrValDb(keystr) {
- const myval = GlobalStore.getters.getValueSettingsByKey(keystr)
+
+ public async setValDb(key, value, type, serv: boolean) {
+
+ console.log('setValDb', key, value, serv)
+ GlobalStore.mutations.setValueSettingsByKey({ key, value, serv })
+
+ let myrec = GlobalStore.getters.getrecSettingsByKey(key, serv)
+ if (myrec === undefined) {
+ myrec = {
+ idapp: process.env.APP_ID,
+ key,
+ type
+ }
+ myrec.serv = serv
+ if (myrec.type === tools.FieldType.date)
+ myrec.value_date = value
+ else if (myrec.type === tools.FieldType.number)
+ myrec.value_num = value
+ else if (myrec.type === tools.FieldType.boolean)
+ myrec.value_bool = value
+ else
+ myrec.value_str = value
+
+ myrec = await tools.createNewRecord(this, 'settings', myrec).then((myrecris) => {
+ // console.log('myrec')
+ let recsett = null
+ if (serv)
+ recsett = GlobalStore.state.serv_settings
+ else
+ recsett = GlobalStore.state.settings
+
+ recsett.push(myrecris)
+ return recsett.find((rec) => rec.key === key)
+ })
+ }
+ console.log('myrec', myrec)
+
+ const mydatatosave = {
+ id: myrec._id,
+ table: 'settings',
+ fieldsvalue: myrec
+ }
+
+ console.log('mydatatosave', mydatatosave)
+
+ GlobalStore.actions.saveFieldValue(mydatatosave).then((esito) => {
+ if (esito) {
+ tools.showPositiveNotif(this.$q, this.$t('db.recupdated'))
+ } else {
+ tools.showNegativeNotif(this.$q, this.$t('db.recfailed'))
+ // Undo...
+ }
+ })
+
+ }
+
+ public getarrValDb(keystr, serv) {
+ const myval = GlobalStore.getters.getValueSettingsByKey(keystr, serv)
// console.log('myval', myval)
- if (myval) {
- const myrec = JSON.parse(myval)
- // console.log('*************** getarrValDb')
- // console.table(myrec)
- return myrec
- } else {
+ try {
+ if (myval) {
+ const myrec = JSON.parse(myval)
+ // console.log('*************** getarrValDb')
+ // console.table(myrec)
+ return myrec
+ } else {
+ return []
+ }
+ } catch (e) {
return []
}
}
+
}
diff --git a/src/mixins/mixin-events.ts b/src/mixins/mixin-events.ts
new file mode 100644
index 0000000..e24b2d4
--- /dev/null
+++ b/src/mixins/mixin-events.ts
@@ -0,0 +1,119 @@
+import Vue from 'vue'
+
+import Component from 'vue-class-component'
+import { func_tools } from '../store/Modules/toolsext'
+import { tools } from '../store/Modules/tools'
+import { IMessage } from '@src/model'
+import { IEvents } from '../model'
+import { CalendarStore, GlobalStore } from '@store'
+import translate from '@src/globalroutines/util'
+
+// You can declare a mixin as the same style as components.
+@Component
+export default class MixinEvents extends Vue {
+
+ public getImgEvent(event: IEvents) {
+ if (!!event.img)
+ return 'statics/' + event.img
+ else
+ return 'statics/images/noimg.png'
+ }
+
+
+ public getStyleByEvent(event: IEvents, visu: boolean) {
+ let myst = 'border: inset; border-color: darkblue; border-width: 3px; padding: 5px !important; '
+
+ if (!this.isEventEnabled(event)) {
+ myst += ' opacity: 0.5'
+ }
+
+ return myst
+ }
+
+ public isAlreadyBooked(eventparam: IEvents) {
+ return CalendarStore.getters.findEventBooked(eventparam, true)
+ }
+
+ public getWhereIcon(where) {
+ const whererec = CalendarStore.getters.getWhereRec(where)
+ return (whererec) ? whererec.whereicon : ''
+ }
+
+ public getWhereName(where) {
+ const whererec = CalendarStore.getters.getWhereRec(where)
+ return (whererec) ? whererec.placename : ''
+ }
+
+ get editable() {
+ return CalendarStore.state.editable
+ }
+
+ public getContribtypeById(id) {
+ return CalendarStore.getters.getContribtypeById(id)
+ }
+
+ public getPrice(event: IEvents) {
+ let myprice = (event.price > 0) ? event.price + ' €' : ''
+ myprice = (event.price === -1) ? translate('event.askinfo') : myprice
+
+ if (event.infoafterprice)
+ myprice += ' ' + event.infoafterprice
+
+ return myprice
+ }
+
+ public isShowPrice(event: IEvents) {
+ const rec = CalendarStore.getters.getContribtypeRec(event.contribtype)
+ return (rec) ? rec.showprice : true
+ }
+
+ public isEventEnabled(myevent) {
+ // check if event is in the past
+ const datenow = tools.addDays(tools.getDateNow(), -1)
+
+ // console.log('datenow', datenow, 'end', myevent.dateTimeEnd)
+
+ return (new Date(myevent.dateTimeEnd) >= datenow)
+ }
+
+ public findEventIndex(eventparam) {
+ for (let i = 0; i < CalendarStore.state.eventlist.length; ++i) {
+ if (eventparam) {
+ if (eventparam.title === CalendarStore.state.eventlist[i].title &&
+ eventparam.details === CalendarStore.state.eventlist[i].details &&
+ eventparam.dateTimeStart === CalendarStore.state.eventlist[i].dateTimeStart &&
+ eventparam.dateTimeEnd === CalendarStore.state.eventlist[i].dateTimeEnd) {
+ return i
+ }
+ }
+ }
+ }
+
+ public UpdateDbByFields(self, myrec, undo?) {
+
+ const mydatatosave = {
+ id: myrec._id,
+ table: tools.TABEVENTS,
+ fieldsvalue: myrec
+ }
+
+ GlobalStore.actions.saveFieldValue(mydatatosave).then((esito) => {
+ if (esito) {
+ tools.showPositiveNotif(this.$q, this.$t('db.recupdated'))
+ } else {
+ tools.showNegativeNotif(this.$q, this.$t('db.recfailed'))
+ // Undo...
+ if (undo) {
+ const index = self.findEventIndex(self.contextDay)
+ if (index >= 0) {
+ // @ts-ignore
+ CalendarStore.state.eventlist.splice(index, 1, { ...self.contextDay })
+ }
+ }
+ }
+ })
+
+ }
+
+
+}
diff --git a/src/mixins/mixin-metatags.ts b/src/mixins/mixin-metatags.ts
new file mode 100644
index 0000000..484904c
--- /dev/null
+++ b/src/mixins/mixin-metatags.ts
@@ -0,0 +1,22 @@
+import Vue from 'vue'
+import Component from 'vue-class-component'
+import { IMetaTags } from '@src/model'
+import { tools } from '@src/store/Modules/tools'
+
+// You can declare a mixin as the same style as components.
+@Component
+export default class MixinMetaTags extends Vue {
+ public mymeta: IMetaTags = {title: '', description: '', keywords: ''}
+
+ public setmeta(mymeta: IMetaTags) {
+ this.mymeta = mymeta
+ }
+
+ public getsrcbyimg(myimg) {
+ // return this.src
+ const filefull = tools.getimgFullpathbysize(myimg)
+
+ return tools.getimgbysize(filefull.path, filefull.file)
+ }
+
+}
diff --git a/src/model/Calendar.ts b/src/model/Calendar.ts
index a20aae8..32ac880 100644
--- a/src/model/Calendar.ts
+++ b/src/model/Calendar.ts
@@ -6,6 +6,7 @@ export interface IEvents {
short_tit?: string
title?: string
details?: string
+ bodytext?: string
dateTimeStart?: Date
dateTimeEnd?: Date
side?: string
diff --git a/src/model/GlobalStore.ts b/src/model/GlobalStore.ts
index 8d3bee1..8c53ccd 100644
--- a/src/model/GlobalStore.ts
+++ b/src/model/GlobalStore.ts
@@ -26,12 +26,82 @@ export interface ICfgData {
userId?: string
}
+export interface ITemplEmail {
+ _id?: string
+ subject?: string
+ content?: string
+ options?: ISettings[]
+}
+
export interface ISettings {
+ _id?: string
+ idapp?: string
key?: string
type?: number
value_str?: string
value_date?: Date,
value_num?: number
+ value_bool?: boolean
+ serv?: boolean
+}
+
+export interface ITeachUname {
+ username?: string
+}
+
+export interface IMyPage {
+ _id?: string
+ author_username?: string
+ title?: string
+ icon?: string
+ path?: string
+ keywords?: string
+ description?: string
+ content?: string
+ active?: boolean
+ inmenu?: boolean
+ submenu?: boolean
+ l_par?: number,
+ l_child?: number,
+ infooter?: boolean
+}
+
+export interface INewsToSent {
+ _id: string
+ idapp?: string
+ label?: string
+ templemail_str?: string
+ numemail_tot?: number
+ numemail_sent?: number
+ datetoSent?: Date
+ datestartJob?: Date
+ datefinishJob?: Date
+ lastemailsent_Job?: Date
+ starting_job?: boolean
+ finish_job?: boolean
+ error_job?: string
+}
+
+export interface IMailinglist {
+ name?: string
+ surname?: string
+ email: string
+ lastid_newstosent?: string
+}
+
+export interface IDiscipline {
+ typol_code?: string
+ order?: number
+ label?: string
+ description?: string
+ linkpage?: string
+ color?: string
+ icon?: string
+ img_small?: string
+ showinhome?: boolean
+ showinnewsletter?: boolean
+ img?: string
+ teachers?: ITeachUname[]
}
export interface ITestp1 {
@@ -47,6 +117,12 @@ export interface IConfig {
value: string
}
+export interface IMetaTags {
+ title?: string
+ keywords?: string
+ description?: string
+}
+
export interface IGlobalState {
finishLoading: boolean
conta: number
@@ -69,7 +145,15 @@ export interface IGlobalState {
listatodo: IMenuList[]
arrConfig: IConfig[]
lastaction: IAction
+ serv_settings: ISettings[],
settings: ISettings[],
+ disciplines: IDiscipline[],
+ newstosent: INewsToSent[],
+ mypage: IMyPage[],
+ templemail: ITemplEmail[],
+ opzemail: ISettings[],
+ mailinglist: IMailinglist[],
+ autoplaydisc: number
}
export interface IMenuList {
@@ -96,6 +180,7 @@ export interface IListRoutes {
submenu?: boolean
onlyAdmin?: boolean
onlyManager?: boolean
+ extraclass?: string
meta?: any
idelem?: string
urlroute?: string
@@ -118,6 +203,7 @@ export interface IOperators {
certifications?: string
img?: string
cell?: string
+ usertelegram?: string
paginaweb?: string
paginafb?: string
intro?: string
@@ -128,6 +214,7 @@ export interface IOperators {
export interface IPreloadImages {
imgname: string
+ alt: string
mobile: boolean
}
@@ -254,6 +341,8 @@ export interface ITableRec {
colkey: string
collabel: string
colicon?: string
+ onlyAdmin?: boolean
+ noshow: boolean
}
export interface IDataPass {
@@ -261,3 +350,21 @@ export interface IDataPass {
table: string
fieldsvalue: object
}
+
+export interface INewsState {
+ lastnewstosent: INewsToSent
+ nextnewstosent: INewsToSent
+ totemail: number
+ totsubscribed: number
+ totunsubscribed: number
+ totsentlastid: number
+}
+
+export const DefaultNewsState: INewsState = {
+ lastnewstosent: null,
+ nextnewstosent: null,
+ totemail: 0,
+ totsubscribed: 0,
+ totunsubscribed: 0,
+ totsentlastid: 0,
+}
diff --git a/src/statics/i18n.js b/src/statics/i18n.js
index d1d71b6..2b949aa 100644
--- a/src/statics/i18n.js
+++ b/src/statics/i18n.js
@@ -10,12 +10,17 @@ const msgglobal = {
tableslist: 'Tabelle',
},
otherpages: {
+ error404: 'error404',
+ error404def: 'error404def',
admin : {
menu: 'Amministrazione',
eventlist: 'Le tue Prenotazioni',
usereventlist: 'Prenotazioni Utenti',
userlist: 'Lista Utenti',
tableslist: 'Lista Tabelle',
+ newsletter: 'Newsletter',
+ pages: 'Pagine',
+ media: 'Media',
},
manage: {
menu: 'Gestione',
@@ -30,6 +35,7 @@ const msgglobal = {
write: 'scrive'
},
dialog: {
+ close: 'Chiudi',
ok: 'Ok',
yes: 'Si',
no: 'No',
@@ -73,7 +79,9 @@ const msgglobal = {
verify_email: 'Verifica la tua email',
go_login: 'Torna al Login',
incorrect_input: 'Inserimento incorretto.',
- link_sent: 'Ora leggi la tua email e conferma la registrazione'
+ link_sent: 'Ora leggi la tua email e conferma la registrazione',
+ title_unsubscribe: 'Disiscrizione alla newsletter',
+ title_unsubscribe_done: 'Disiscrizione completata correttamente',
}
}
},
@@ -86,6 +94,15 @@ const msgglobal = {
notregistered: 'Devi registrarti al servizio prima di porter memorizzare i dati',
loggati: 'Utente non loggato'
},
+ templemail: {
+ subject: 'Oggetto Email',
+ testoheadermail: 'Intestazione Email',
+ content: 'Contenuto',
+ img: 'Immagine 1',
+ img2: 'Immagine 2',
+ content2: 'Contenuto 2',
+ options: 'Opzioni',
+ },
reg: {
page_title: 'Registrazione',
incorso: 'Registrazione in corso...',
@@ -130,6 +147,7 @@ const msgglobal = {
},
op: {
qualification: 'Qualifica',
+ usertelegram: 'Username Telegram',
disciplines: 'Discipline',
certifications: 'Certificazioni',
intro: 'Introduzione',
@@ -163,6 +181,7 @@ const msgglobal = {
undefined: 'non definito'
}
},
+ showbigmap: 'Mostra la mappa più grande',
todo: {
titleprioritymenu: 'Priorità:',
inserttop: 'Inserisci il Task in cima',
@@ -214,7 +233,13 @@ const msgglobal = {
code: 'Id',
whereicon: 'Icona',
},
+ col: {
+ label: 'Etichetta',
+ value: 'Valore',
+ type: 'Tipo'
+ },
cal: {
+ num: 'Numero',
booked: 'Prenotato',
booked_error: 'Prenotazione non avvenuta. Riprovare più tardi',
sendmsg_error: 'Messaggio non inviato. Riprovare più tardi',
@@ -230,6 +255,8 @@ const msgglobal = {
cancelederrorevent: 'Cancellazione Evento non effettuata, Riprovare',
event: 'Evento',
starttime: 'Dalle',
+ nextevent: 'Prossimo Evento',
+ readall: 'Leggi tutto',
enddate: 'al',
endtime: 'alle',
duration: 'Durata',
@@ -246,12 +273,13 @@ const msgglobal = {
selnumpeople: 'Partecipanti',
selnumpeople_short: 'Num',
msgbooking: 'Messaggio da inviare',
- showinfo: 'Vedi Info',
- bookingtextdefault: 'Mi prenoto all\'evento',
+ showpdf: 'Vedi PDF',
+ bookingtextdefault: 'Prenoto per',
bookingtextdefault_of: 'di',
data: 'Data',
teachertitle: 'Insegnante',
peoplebooked: 'Prenotaz.',
+ showlastschedule: 'Vedi tutto il Calendario',
},
msgs: {
message: 'Messaggio',
@@ -264,6 +292,7 @@ const msgglobal = {
short_tit: 'Titolo Breve',
title: 'Titolo',
details: 'Dettagli',
+ bodytext: 'Testo Evento',
dateTimeStart: 'Data Inizio',
dateTimeEnd: 'Data Fine',
bgcolor: 'Colore Sfondo',
@@ -275,6 +304,7 @@ const msgglobal = {
contribtype: 'Tipo Contributo',
price: 'Contributo',
askinfo: 'Chiedi Info',
+ showpage: 'Vedi Pagina',
infoafterprice: 'Note dopo la Quota',
teacher: 'Insegnante', // teacherid
teacher2: 'Insegnante2', // teacherid2
@@ -288,7 +318,14 @@ const msgglobal = {
deleted: 'Eliminato',
duplicate: 'Duplica',
notempty: 'Il campo non può essere vuoto',
- modified: 'Modificato'
+ modified: 'Modificato',
+ showinhome: 'Mostra nella Home',
+ showinnewsletter: 'Mostra nella Newsletter',
+ color: 'Colore del titolo',
+ },
+ disc: {
+ typol_code: 'Codice Tipologia',
+ order: 'Ordinamento',
},
newsletter: {
title: 'Desideri ricevere la nostra Newsletter?',
@@ -303,6 +340,27 @@ const msgglobal = {
acceptlicense: 'Accetto la licenza e i termini',
license: 'Devi prima accettare la licenza e i termini',
submitted: 'Iscritto',
+ menu: 'Newsletter1',
+ template: 'Modelli Email',
+ sendemail: 'Invia',
+ check: 'Controlla',
+ sent: 'Già Inviate',
+ mailinglist: 'Lista Contatti',
+ settings: 'Impostazioni',
+ serversettings: 'Server',
+ others: 'Altro',
+ templemail: 'Modello Email',
+ datetoSent: 'DataOra Invio',
+ activate: 'Attivato',
+ numemail_tot: 'Email Totali',
+ numemail_sent: 'Email Inviate',
+ datestartJob: 'Inizio Invio',
+ datefinishJob: 'Fine Invio',
+ lastemailsent_Job: 'Ultima Inviata',
+ starting_job: 'Invio Iniziato',
+ finish_job: 'Invio Terminato',
+ error_job: 'Info Errori',
+ statesub: 'Sottoscritto',
},
privacy_policy:'Privacy Policy',
cookies: 'Usiamo i Cookie per una migliore prestazione web.'
@@ -322,6 +380,9 @@ const msgglobal = {
usereventlist: 'Reserva Usuarios',
userlist: 'Lista de usuarios',
tableslist: 'Listado de tablas',
+ newsletter: 'Newsletter',
+ pages: 'Páginas',
+ media: 'Medios',
},
manage: {
menu: 'Gestionar',
@@ -336,6 +397,7 @@ const msgglobal = {
write: 'escribe'
},
dialog: {
+ close: 'Cerrar',
ok: 'Vale',
yes: 'Sí',
no: 'No',
@@ -379,7 +441,9 @@ const msgglobal = {
verify_email: 'Revisa tu email',
go_login: 'Vuelve al Login',
incorrect_input: 'Entrada correcta.',
- link_sent: 'Ahora lea su correo electrónico y confirme el registro'
+ link_sent: 'Ahora lea su correo electrónico y confirme el registro',
+ title_unsubscribe: 'Anular suscripción al boletín',
+ title_unsubscribe_done: 'Suscripción completada con éxito',
}
}
},
@@ -392,6 +456,15 @@ const msgglobal = {
notregistered: 'Debe registrarse en el servicio antes de poder almacenar los datos',
loggati: 'Usuario no ha iniciado sesión'
},
+ templemail: {
+ subject: 'Objecto Email',
+ testoheadermail: 'Encabezamiento Email',
+ content: 'Contenido',
+ img: 'Imagen 1',
+ img2: 'Imagen 2',
+ content2: 'Contenuto 2',
+ options: 'Opciones',
+ },
reg: {
page_title: 'Registro',
incorso: 'Registro en curso...',
@@ -429,6 +502,7 @@ const msgglobal = {
},
op: {
qualification: 'Calificación',
+ usertelegram: 'Username Telegram',
disciplines: 'Disciplinas',
certifications: 'Certificaciones',
intro: 'Introducción',
@@ -462,6 +536,7 @@ const msgglobal = {
undefined: 'no definido'
}
},
+ showbigmap: 'Mostrar el mapa más grande',
todo: {
titleprioritymenu: 'Prioridad:',
inserttop: 'Ingrese una nueva Tarea arriba',
@@ -514,7 +589,13 @@ const msgglobal = {
code: 'Id',
whereicon: 'Icono',
},
+ col: {
+ label: 'Etichetta',
+ value: 'Valore',
+ type: 'Tipo'
+ },
cal: {
+ num: 'Número',
booked: 'Reservado',
booked_error: 'Reserva fallida. Intenta nuevamente más tarde',
sendmsg_error: 'Mensaje no enviado Intenta nuevamente más tarde',
@@ -527,6 +608,8 @@ const msgglobal = {
cancelederrorbooking: 'Cancelación no realizada, intente nuevamente más tarde',
event: 'Evento',
starttime: 'Inicio',
+ nextevent: 'Próximo evento',
+ readall: 'Lee todo',
enddate: 'a',
endtime: 'fin',
duration: 'Duración',
@@ -543,12 +626,13 @@ const msgglobal = {
selnumpeople: 'Partecipantes',
selnumpeople_short: 'Num',
msgbooking: 'Mensaje para enviar',
- showinfo: 'Ver Info',
- bookingtextdefault: 'Reservo el evento',
+ showpdf: 'Ver PDF',
+ bookingtextdefault: 'Reservo para',
bookingtextdefault_of: 'de',
data: 'Fecha',
teachertitle: 'Maestro',
peoplebooked: 'Reserv.',
+ showlastschedule: 'Ver todo el calendario',
},
msgs: {
message: 'Mensaje',
@@ -561,6 +645,7 @@ const msgglobal = {
short_tit: 'Título Corto',
title: 'Título',
details: 'Detalles',
+ bodytext: 'Texto del evento',
dateTimeStart: 'Fecha de Inicio',
dateTimeEnd: 'Fecha Final',
bgcolor: 'Color de fondo',
@@ -572,6 +657,7 @@ const msgglobal = {
contribtype: 'Tipo de Contribución',
price: 'Precio',
askinfo: 'Solicitar información',
+ showpage: 'Ver página',
infoafterprice: 'notas después del precio',
teacher: 'Profesor', // teacherid
teacher2: 'Profesor2', // teacherid2
@@ -585,7 +671,14 @@ const msgglobal = {
deleted: 'Eliminado',
duplicate: 'Duplica',
notempty: 'El campo no puede estar vacío.',
- modified: 'Modificado'
+ modified: 'Modificado',
+ showinhome: 'Mostrar en la Home',
+ showinnewsletter: 'Mostrar en el boletín',
+ color: 'Titulo Color',
+ },
+ disc: {
+ typol_code: 'Código Tipologìa',
+ order: 'Clasificación',
},
newsletter: {
title: '¿Desea recibir nuestro boletín informativo?',
@@ -599,7 +692,28 @@ const msgglobal = {
typesomething: 'Llenar el campo',
acceptlicense: 'Acepto la licencia y los términos',
license: 'Necesitas aceptar la licencia y los términos primero',
- submitted: 'Subscrito'
+ submitted: 'Subscrito',
+ menu: 'Newsletter1',
+ template: 'Plantillas de Email',
+ sendemail: 'Enviar',
+ check: 'Verificar',
+ sent: 'Ya eniado',
+ mailinglist: 'Lista de contactos',
+ settings: 'Configuración',
+ serversettings: 'Servidor',
+ others: 'Otro',
+ templemail: 'Plantilla de Email',
+ datetoSent: 'Fecha y Ora de Envio',
+ activate: 'Activado',
+ numemail_tot: 'Email Total',
+ numemail_sent: 'Email Enviados',
+ datestartJob: 'Inicio Envio',
+ datefinishJob: 'Fin Envio',
+ lastemailsent_Job: 'Ùltimo enviado',
+ starting_job: 'Comenzó a enviar',
+ finish_job: 'Envio terminado',
+ error_job: 'Info Error',
+ statesub: 'Subscribir',
},
privacy_policy:'Política de privacidad',
cookies: 'Utilizamos cookies para un mejor rendimiento web.'
@@ -619,6 +733,9 @@ const msgglobal = {
usereventlist: 'Réservation Utilisateur',
userlist: 'Liste d\'utilisateurs',
tableslist: 'Liste des tables',
+ newsletter: 'Newsletter',
+ pages: 'Pages',
+ media: 'Médias',
},
manage: {
menu: 'Gérer',
@@ -633,6 +750,7 @@ const msgglobal = {
write: 'écrit'
},
dialog: {
+ close: 'Fermer',
ok: 'Bien',
yes: 'Oui',
no: 'Non',
@@ -676,7 +794,9 @@ const msgglobal = {
verify_email: 'Vérifiez votre email',
go_login: 'Retour à la connexion',
incorrect_input: 'Entrée correcte.',
- link_sent: 'Maintenant, lisez votre email et confirmez votre inscription'
+ link_sent: 'Maintenant, lisez votre email et confirmez votre inscription',
+ title_unsubscribe: 'Se désabonner de la newsletter',
+ title_unsubscribe_done: 'Abonnement terminé avec succès',
}
}
},
@@ -689,6 +809,15 @@ const msgglobal = {
notregistered: 'Vous devez vous inscrire auprès du service avant de pouvoir stocker les données.',
loggati: 'L\'utilisateur n\'est pas connecté'
},
+ templemail: {
+ subject: 'Objet Email',
+ testoheadermail: 'en-tête de courrier électronique',
+ content: 'Contenu',
+ img: 'Image 1',
+ img2: 'Image 2',
+ content2: 'Contenu 2',
+ options: 'Options',
+ },
reg: {
incorso: 'Inscription en cours...',
richiesto: 'Champ obligatoire',
@@ -725,6 +854,7 @@ const msgglobal = {
},
op: {
qualification: 'Qualification',
+ usertelegram: 'Username Telegram',
disciplines: 'Disciplines',
certifications: 'Certifications',
intro: 'Introduction',
@@ -758,6 +888,7 @@ const msgglobal = {
undefined: 'non défini'
}
},
+ showbigmap: 'Montrer la plus grande carte',
todo: {
titleprioritymenu: 'Prioridad:',
inserttop: 'Ingrese una nueva Tarea arriba',
@@ -810,7 +941,13 @@ const msgglobal = {
code: 'Id',
whereicon: 'icône',
},
+ col: {
+ label: 'Etichetta',
+ value: 'Valore',
+ type: 'Tipo'
+ },
cal: {
+ num: 'Nombre',
booked: 'Réservé',
booked_error: 'La réservation a échoué. Réessayez plus tard',
sendmsg_error: 'Message non envoyé. Réessayez plus tard',
@@ -823,6 +960,8 @@ const msgglobal = {
cancelederrorbooking: 'Annulation non effectuée, réessayez plus tard',
event: 'événement',
starttime: 'Accueil',
+ nextevent: 'Prochain événement',
+ readall: 'Tout lire',
enddate: 'au',
endtime: 'fin',
duration: 'Durée',
@@ -839,12 +978,13 @@ const msgglobal = {
selnumpeople: 'Participants',
selnumpeople_short: 'Num',
msgbooking: 'Message à envoyer',
- showinfo: 'Voir Info',
- bookingtextdefault: 'Je réserve l\'événement',
+ showpdf: 'Voir PDF',
+ bookingtextdefault: 'Je réserve',
bookingtextdefault_of: 'du',
data: 'Date',
teachertitle: 'Professeur',
peoplebooked: 'Réserv.',
+ showlastschedule: 'Voir tout le calendrier',
},
msgs: {
message: 'Message',
@@ -857,6 +997,7 @@ const msgglobal = {
short_tit: 'Titre abrégé\'',
title: 'Titre',
details: 'Détails',
+ bodytext: 'texte de l\'événement',
dateTimeStart: 'Data Initiale',
dateTimeEnd: 'Date de fin',
bgcolor: 'Couleur de fond',
@@ -868,6 +1009,7 @@ const msgglobal = {
contribtype: 'Type de contribution',
price: 'Prix',
askinfo: 'Demander des infos',
+ showpage: 'Voir la page',
infoafterprice: 'Notes après le prix',
teacher: 'Enseignant', // teacherid
teacher2: 'Enseignant2', // teacherid2
@@ -881,7 +1023,14 @@ const msgglobal = {
deleted: 'Supprimé',
duplicate: 'Duplique',
notempty: 'Le champ ne peut pas être vide',
- modified: 'modifié'
+ modified: 'modifié',
+ showinhome: 'Montrer à la Home',
+ showinnewsletter: 'Afficher dans la Newsletter',
+ color: 'Couleur du titre',
+ },
+ disc: {
+ typol_code: 'Type de code',
+ order: 'Ordre',
},
newsletter: {
title: 'Souhaitez-vous recevoir notre newsletter?',
@@ -895,7 +1044,28 @@ const msgglobal = {
typesomething: 'Remplir le champ',
acceptlicense: 'J\'accepte la licence et les termes',
license: 'Vous devez d\'abord accepter la licence et les termes',
- submitted: 'Abonné'
+ submitted: 'Abonné',
+ menu: 'Newsletter1',
+ template: 'Modeles Email',
+ sendemail: 'Envoyer',
+ check: 'Chèque',
+ sent: 'Dèjà envoyé',
+ mailinglist: 'Leste de contacts',
+ settings: 'Paramèters',
+ serversettings: 'Serveur',
+ others: 'Autres',
+ templemail: 'Model Email',
+ datetoSent: 'Date et heure d\'envoi',
+ activate: 'Activé',
+ numemail_tot: 'Total Email',
+ numemail_sent: 'Emails envoyés',
+ datestartJob: 'Inizio Invio',
+ datefinishJob: 'Fin envoi',
+ lastemailsent_Job: 'Dernier envoyé',
+ starting_job: 'Envoyé',
+ finish_job: 'Envoy Terminé',
+ error_job: 'info d\'erreur',
+ statesub: 'Abonné',
},
privacy_policy:'Politique de confidentialité',
cookies: 'Nous utilisons des cookies pour améliorer les performances Web.'
@@ -915,6 +1085,9 @@ const msgglobal = {
usereventlist: 'Users Booking',
userlist: 'Users List',
tableslist: 'List of tables',
+ newsletter: 'Newsletter',
+ pages: 'Pages',
+ media: 'Medias',
},
manage: {
menu: 'Manage',
@@ -929,6 +1102,7 @@ const msgglobal = {
write: 'write'
},
dialog: {
+ close: 'Close',
ok: 'Ok',
yes: 'Yes',
no: 'No',
@@ -972,7 +1146,9 @@ const msgglobal = {
verify_email: 'Verify your email',
go_login: 'Back to Login',
incorrect_input: 'Incorrect input.',
- link_sent: 'Now read your email and confirm registration'
+ link_sent: 'Now read your email and confirm registration',
+ title_unsubscribe: 'Unsubscribe to the newsletter',
+ title_unsubscribe_done: 'Subscription completed successfully',
}
}
},
@@ -985,6 +1161,15 @@ const msgglobal = {
notregistered: 'You need first to SignUp before storing data',
loggati: 'User not logged in'
},
+ templemail: {
+ subject: 'Subject Email',
+ testoheadermail: 'Header Email',
+ content: 'Content',
+ img: 'Image 1',
+ img2: 'Image 2',
+ content2: 'Content 2',
+ options: 'Options',
+ },
reg: {
incorso: 'Registration please wait...',
richiesto: 'Field Required',
@@ -1021,6 +1206,7 @@ const msgglobal = {
},
op: {
qualification: 'Qualification',
+ usertelegram: 'Username Telegram',
disciplines: 'Disciplines',
certifications: 'Certifications',
intro: 'Introduction',
@@ -1053,6 +1239,7 @@ const msgglobal = {
undefined: 'undefined'
}
},
+ showbigmap: 'Show the largest map',
todo: {
titleprioritymenu: 'Priority:',
inserttop: 'Insert Task at the top',
@@ -1105,7 +1292,13 @@ const msgglobal = {
code: 'Id',
whereicon: 'Icon',
},
+ col: {
+ label: 'Etichetta',
+ value: 'Valore',
+ type: 'Tipo'
+ },
cal: {
+ num: 'Number',
booked: 'Booked',
booked_error: 'Reservation failed. Try again later',
sendmsg_error: 'Message not sent. Try again later',
@@ -1118,6 +1311,8 @@ const msgglobal = {
cancelederrorbooking: 'Cancellation unsuccessfully, try again later',
event: 'Event',
starttime: 'From',
+ nextevent: 'Next Event',
+ readall: 'Read All',
enddate: 'to',
endtime: 'to',
duration: 'Duration',
@@ -1134,12 +1329,13 @@ const msgglobal = {
selnumpeople: 'Participants',
selnumpeople_short: 'Num',
msgbooking: 'Message to send',
- showinfo: 'Show Info',
- bookingtextdefault: 'I book the event',
+ showpdf: 'Show PDF',
+ bookingtextdefault: 'I book for',
bookingtextdefault_of: 'of',
data: 'Date',
teachertitle: 'Teacher',
peoplebooked: 'Booked',
+ showlastschedule: 'See Full Schedule',
},
msgs: {
message: 'Messaggio',
@@ -1152,6 +1348,7 @@ const msgglobal = {
short_tit: 'Short Title',
title: 'Title',
details: 'Details',
+ bodytext: 'Event Text',
dateTimeStart: 'Date Start',
dateTimeEnd: 'Date End',
bgcolor: 'Background color',
@@ -1163,6 +1360,7 @@ const msgglobal = {
contribtype: 'Contribute Type',
price: 'Price',
askinfo: 'Ask for Info',
+ showpage: 'Show Page',
infoafterprice: 'Info after Price',
teacher: 'Teacher', // teacherid
teacher2: 'Teacher2', // teacherid2
@@ -1176,7 +1374,14 @@ const msgglobal = {
deleted: 'Deleted',
duplicate: 'Duplicate',
notempty: 'Field cannot be empty',
- modified: 'Modified'
+ modified: 'Modified',
+ showinhome: 'Show in Home',
+ showinnewsletter: 'Show in the Newsletter',
+ color: 'Title Color',
+ },
+ disc: {
+ typol_code: 'Tipology Code',
+ order: 'Order',
},
newsletter: {
title: 'Would you like to receive our Newsletter?',
@@ -1190,7 +1395,28 @@ const msgglobal = {
typesomething: 'Please type something',
acceptlicense: 'I accept the license and terms',
license: 'You need to accept the license and terms first',
- submitted: 'Subscribed'
+ submitted: 'Subscribed',
+ menu: 'Newsletter1',
+ template: 'Template Email',
+ sendemail: 'Send',
+ check: 'Check',
+ sent: 'Already Sent',
+ mailinglist: 'Mailing List',
+ settings: 'Settings',
+ serversettings: 'Server',
+ others: 'Others',
+ templemail: 'Templates Email',
+ datetoSent: 'DateTime Send',
+ activate: 'Activate',
+ numemail_tot: 'Email Total',
+ numemail_sent: 'Email Sent',
+ datestartJob: 'Start Job',
+ datefinishJob: 'End Job',
+ lastemailsent_Job: 'Last Sent',
+ starting_job: 'Job started',
+ finish_job: 'Sent terminated',
+ error_job: 'Info Error',
+ statesub: 'Subscribed',
},
privacy_policy:'Privacy Policy',
cookies: 'We use cookies for better web performance.'
@@ -1210,6 +1436,9 @@ const msgglobal = {
usereventlist: 'Users Booking',
userlist: 'Users List',
tableslist: 'List of tables',
+ newsletter: 'Newsletter',
+ pages: 'Pages',
+ media: 'Medias',
},
manage: {
menu: 'Manage',
@@ -1224,6 +1453,7 @@ const msgglobal = {
write: 'write'
},
dialog: {
+ close: 'Close',
ok: 'Ok',
yes: 'Yes',
no: 'No',
@@ -1267,7 +1497,9 @@ const msgglobal = {
verify_email: 'Verify your email',
go_login: 'Back to Login',
incorrect_input: 'Incorrect input.',
- link_sent: 'Now read your email and confirm registration'
+ link_sent: 'Now read your email and confirm registration',
+ title_unsubscribe: 'Disiscrizione alla newsletter',
+ title_unsubscribe_done: 'Disiscrizione completata correttamente',
}
}
},
@@ -1280,6 +1512,15 @@ const msgglobal = {
notregistered: 'You need first to SignUp before storing data',
loggati: 'User not logged in'
},
+ templemail: {
+ subject: 'Subject Email',
+ testoheadermail: 'Header Email',
+ content: 'Content',
+ img: 'Image 1',
+ img2: 'Image 2',
+ content2: 'Content 2',
+ options: 'Options',
+ },
reg: {
page_title: 'Registration',
incorso: 'Registration please wait...',
@@ -1317,6 +1558,7 @@ const msgglobal = {
},
op: {
qualification: 'Qualification',
+ usertelegram: 'Username Telegram',
disciplines: 'Disciplines',
certifications: 'Certifications',
intro: 'Introduction',
@@ -1350,6 +1592,7 @@ const msgglobal = {
undefined: 'undefined'
}
},
+ showbigmap: 'Show the largest map',
todo: {
titleprioritymenu: 'Priority:',
inserttop: 'Insert Task at the top',
@@ -1402,7 +1645,13 @@ const msgglobal = {
code: 'Id',
whereicon: 'Icon',
},
+ col: {
+ label: 'Etichetta',
+ value: 'Valore',
+ type: 'Tipo'
+ },
cal: {
+ num: 'Number',
booked: 'Booked',
booked_error: 'Reservation failed. Try again later',
sendmsg_error: 'Message not sent. Try again later',
@@ -1415,6 +1664,8 @@ const msgglobal = {
cancelederrorbooking: 'Cancellation unsuccessfully, try again later',
event: 'Event',
starttime: 'From',
+ nextevent: 'Next Event',
+ readall: 'Read All',
enddate: 'to',
endtime: 'to',
duration: 'Duration',
@@ -1431,12 +1682,13 @@ const msgglobal = {
selnumpeople: 'Participants',
selnumpeople_short: 'Num',
msgbooking: 'Message to send',
- showinfo: 'Show Info',
- bookingtextdefault: 'I book the event',
+ showpdf: 'Show PDF',
+ bookingtextdefault: 'I book for',
bookingtextdefault_of: 'of',
data: 'Date',
teachertitle: 'Teacher',
peoplebooked: 'Booked',
+ showlastschedule: 'See Full Schedule',
},
msgs: {
message: 'Messaggio',
@@ -1449,6 +1701,7 @@ const msgglobal = {
short_tit: 'Short Title',
title: 'Title',
details: 'Details',
+ bodytext: 'Event Text',
dateTimeStart: 'Date Start',
dateTimeEnd: 'Date End',
bgcolor: 'Background color',
@@ -1460,6 +1713,7 @@ const msgglobal = {
contribtype: 'Contribute Type',
price: 'Price',
askinfo: 'Ask for Info',
+ showpage: 'Show Page',
infoafterprice: 'Info after Price',
teacher: 'Teacher', // teacherid
teacher2: 'Teacher2', // teacherid2
@@ -1473,7 +1727,14 @@ const msgglobal = {
deleted: 'Deleted',
duplicate: 'Duplicate',
notempty: 'Field cannot be empty',
- modified: 'Modified'
+ modified: 'Modified',
+ showinhome: 'Show in Home',
+ showinnewsletter: 'Show in the Newsletter',
+ color: 'Title Color',
+ },
+ disc: {
+ typol_code: 'Tipology Code',
+ order: 'Order',
},
newsletter: {
title: 'Would you like to receive our Newsletter?',
@@ -1487,7 +1748,28 @@ const msgglobal = {
typesomething: 'Please type something',
acceptlicense: 'I accept the license and terms',
license: 'You need to accept the license and terms first',
- submitted: 'Subscribed'
+ submitted: 'Subscribed',
+ menu: 'Newsletter1',
+ template: 'Template Email',
+ sendemail: 'Send',
+ check: 'Check',
+ sent: 'Already Sent',
+ mailinglist: 'Mailing List',
+ settings: 'Settings',
+ serversettings: 'Server',
+ others: 'Others',
+ templemail: 'Templates Email',
+ datetoSent: 'DateTime Send',
+ activate: 'Activate',
+ numemail_tot: 'Email Total',
+ numemail_sent: 'Email Sent',
+ datestartJob: 'Start Job',
+ datefinishJob: 'End Job',
+ lastemailsent_Job: 'Last Sent',
+ starting_job: 'Job started',
+ finish_job: 'Sent terminated',
+ error_job: 'Info Error',
+ statesub: 'Subscribed',
},
privacy_policy:'Privacy Policy',
cookies: 'Wir verwenden Cookies für eine bessere Webleistung.'
diff --git a/src/statics/js/track.js b/src/statics/js/track.js
index 7f5bd2c..f2ebec2 100644
--- a/src/statics/js/track.js
+++ b/src/statics/js/track.js
@@ -2,12 +2,12 @@ function geturl() {
const miaurl = document.location.href
if (miaurl.includes('test.')) {
- return 'https://test.freeplanet.app/'
+ return 'https://test.associazioneshen.it/'
} else {
if (miaurl.includes('localhost')) {
return 'http://localhost:8080/'
} else {
- return 'https://freeplanet.app/'
+ return 'https://associazioneshen.it/'
}
}
}
@@ -18,12 +18,12 @@ function getidtrack() {
if (miaurl.includes('test.') || miaurl.includes('localhost')) {
return '4c40a07bc88a9c50c9b70dc9c5cd8e2e'
} else {
- return '9853abef079fc8330ab188a9cbf07a0c'
+ return 'ccfd6c90e17b6809f9717675764c3f5d' // Associazione Shen
}
}
-var owa_baseUrl = geturl() + 'owa/';
+let owa_baseUrl = geturl() + 'owa/';
if (owa_cmds)
var owa_cmds = [];
else
@@ -33,11 +33,11 @@ owa_cmds.push(['trackPageView']);
// owa_cmds.push(['trackClicks']);
(function () {
- var _owa = document.createElement('script');
+ const _owa = document.createElement('script');
_owa.type = 'text/javascript';
_owa.async = true;
owa_baseUrl = ('https:' == document.location.protocol ? window.owa_baseSecUrl || owa_baseUrl.replace(/http:/, 'https:') : owa_baseUrl);
_owa.src = owa_baseUrl + 'modules/base/js/owa.tracker-combined-min.js';
- var _owa_s = document.getElementsByTagName('script')[0];
+ const _owa_s = document.getElementsByTagName('script')[0];
_owa_s.parentNode.insertBefore(_owa, _owa_s);
}());
diff --git a/src/store/Api/Instance.ts b/src/store/Api/Instance.ts
index cec05e5..9a77ba0 100644
--- a/src/store/Api/Instance.ts
+++ b/src/store/Api/Instance.ts
@@ -51,7 +51,8 @@ export const removeAuthHeaders = () => {
async function Request(type: string, path: string, payload: any): Promise
{
let ricevuto = false
try {
- console.log('Axios Request', path, type, tools.notshowPwd(payload))
+ if (tools.isDebug())
+ console.log('Axios Request', path, type, tools.notshowPwd(payload))
let response: AxiosResponse
if (type === 'post' || type === 'put' || type === 'patch') {
response = await axiosInstance[type](path, payload, {
diff --git a/src/store/Modules/GlobalStore.ts b/src/store/Modules/GlobalStore.ts
index 1bafb88..761782b 100644
--- a/src/store/Modules/GlobalStore.ts
+++ b/src/store/Modules/GlobalStore.ts
@@ -1,4 +1,4 @@
-import { ICfgServer, IConfig, IGlobalState, IListRoutes, IMenuList, StateConnection } from 'model'
+import { ICfgServer, IConfig, IGlobalState, IListRoutes, IMenuList, ISettings, StateConnection } from 'model'
import { storeBuilder } from './Store/Store'
import Vue from 'vue'
@@ -24,6 +24,7 @@ import { serv_constants } from '@src/store/Modules/serv_constants'
import { IUserState } from '@src/model'
import { Calendar } from 'element-ui'
import { fieldsTable } from '@src/store/Modules/fieldsTable'
+import router from '@router'
// import { static_data } from '@src/db/static_data'
let stateConnDefault = 'online'
@@ -68,7 +69,15 @@ const state: IGlobalState = {
type: 0,
_id: 0
},
- settings: []
+ serv_settings: [],
+ templemail: [],
+ opzemail: [],
+ settings: [],
+ disciplines: [],
+ autoplaydisc: 8000,
+ newstosent: [],
+ mailinglist: [],
+ mypage: []
}
async function getConfig(id) {
@@ -124,6 +133,12 @@ namespace Getters {
}, 'showtype')
+ const getPage = b.read((mystate: IGlobalState) => (path) => {
+ // const config = state.arrConfig.find(item => item._id === cat + costanti.CONFIG_ID_SHOW_TYPE_TODOS)
+ return mystate.mypage.find((page) => (`/` + page.path) === path)
+
+ }, 'getPage')
+
const getmenu = b.read((state) => {
// console.log('getmenu', cfgrouter.getmenu())
@@ -163,6 +178,18 @@ namespace Getters {
return CalendarStore.state.wheres
else if (table === 'contribtype')
return CalendarStore.state.contribtype
+ else if (table === 'disciplines')
+ return GlobalStore.state.disciplines
+ else if (table === tools.TABNEWSLETTER)
+ return GlobalStore.state.newstosent
+ else if (table === tools.TABTEMPLEMAIL)
+ return GlobalStore.state.templemail
+ else if (table === tools.TABOPZEMAIL)
+ return GlobalStore.state.opzemail
+ else if (table === tools.TABMAILINGLIST)
+ return GlobalStore.state.mailinglist
+ else if (table === tools.TABMYPAGE)
+ return GlobalStore.state.mypage
else if (table === 'bookings')
return CalendarStore.state.bookedevent
else if (table === 'users')
@@ -178,13 +205,24 @@ namespace Getters {
}, 'getListByTable')
- const getValueSettingsByKey = b.read((mystate: IGlobalState) => (key): any => {
- const myrec = mystate.settings.find((rec) => rec.key === key)
+ const getrecSettingsByKey = b.read((mystate: IGlobalState) => (key, serv): ISettings => {
+ if (serv)
+ return mystate.serv_settings.find((rec) => rec.key === key)
+ else
+ return mystate.settings.find((rec) => rec.key === key)
+ }, 'getrecSettingsByKey')
+
+ const getValueSettingsByKey = b.read((mystate: IGlobalState) => (key, serv): any => {
+
+ const myrec = getters.getrecSettingsByKey(key, serv)
+
if (!!myrec) {
if (myrec.type === tools.FieldType.date)
return myrec.value_date
- if (myrec.type === tools.FieldType.number)
+ else if (myrec.type === tools.FieldType.number)
return myrec.value_num
+ else if (myrec.type === tools.FieldType.boolean)
+ return myrec.value_bool
else
return myrec.value_str
} else {
@@ -193,6 +231,11 @@ namespace Getters {
}, 'getValueSettingsByKey')
+ const gettemplemailbyId = b.read((mystate: IGlobalState) => (templid): string => {
+ const myrec = mystate.templemail.find((rec) => rec._id === templid)
+ return (!!myrec) ? myrec.subject : ''
+ }, 'gettemplemailbyId')
+
export const getters = {
get testpao1_getter_contatore() {
return testpao1_getter_contatore()
@@ -236,6 +279,18 @@ namespace Getters {
return getValueSettingsByKey()
},
+ get getrecSettingsByKey() {
+ return getrecSettingsByKey()
+ },
+
+ get gettemplemailbyId() {
+ return gettemplemailbyId()
+ },
+
+ get getPage() {
+ return getPage()
+ },
+
get t() {
return t()
},
@@ -343,6 +398,31 @@ namespace Mutations {
}
}
+ function setValueSettingsByKey(mystate: IGlobalState, { key, value, serv }) {
+ // Update the Server
+
+ // Update in Memory
+ let myrec = null
+ if (serv)
+ myrec = mystate.serv_settings.find((rec) => rec.key === key)
+ else
+ myrec = mystate.settings.find((rec) => rec.key === key)
+
+ if (!!myrec) {
+ if (myrec.type === tools.FieldType.date)
+ myrec.value_date = value
+ else if (myrec.type === tools.FieldType.number)
+ myrec.value_num = value
+ else if (myrec.type === tools.FieldType.boolean)
+ myrec.value_bool = value
+ else
+ myrec.value_str = value
+
+ console.log('setValueSettingsByKey value', value, 'myrec', myrec)
+ }
+
+ }
+
export const mutations = {
setConta: b.commit(setConta),
setleftDrawerOpen: b.commit(setleftDrawerOpen),
@@ -354,7 +434,8 @@ namespace Mutations {
setPaoArray_Delete: b.commit(setPaoArray_Delete),
NewArray: b.commit(NewArray),
setShowType: b.commit(setShowType),
- UpdateValuesInMemory: b.commit(UpdateValuesInMemory)
+ UpdateValuesInMemory: b.commit(UpdateValuesInMemory),
+ setValueSettingsByKey: b.commit(setValueSettingsByKey)
}
}
@@ -365,7 +446,6 @@ namespace Actions {
}
function createPushSubscription(context) {
- console.log('createPushSubscription')
// If Already subscribed, don't send to the Server DB
// if (state.wasAlreadySubOnDb) {
@@ -384,7 +464,7 @@ namespace Actions {
return
}
- // console.log('createPushSubscription')
+ console.log('createPushSubscription')
let reg
const mykey = process.env.PUBLICKEY_PUSH
@@ -676,12 +756,12 @@ namespace Actions {
async function loadSite(context) {
// console.log('CalendarStore: loadAfterLogin')
// Load local data
- CalendarStore.state.editable = UserStore.state.isAdmin || UserStore.state.isManager
-
const showall = UserStore.state.isAdmin || UserStore.state.isManager ? '1' : '0'
const myuserid = (UserStore.state.my._id) ? UserStore.state.my._id : '0'
+ CalendarStore.state.editable = false
+
return await Api.SendReq('/loadsite/' + myuserid + '/' + process.env.APP_ID + '/' + showall, 'GET', null)
.then((res) => {
CalendarStore.state.bookedevent = (res.data.bookedevent) ? res.data.bookedevent : []
@@ -690,6 +770,15 @@ namespace Actions {
CalendarStore.state.wheres = (res.data.wheres) ? res.data.wheres : []
CalendarStore.state.contribtype = (res.data.contribtype) ? res.data.contribtype : []
GlobalStore.state.settings = (res.data.settings) ? [...res.data.settings] : []
+ GlobalStore.state.disciplines = (res.data.disciplines) ? [...res.data.disciplines] : []
+
+ if (showall) {
+ GlobalStore.state.newstosent = (res.data.newstosent) ? [...res.data.newstosent] : []
+ GlobalStore.state.mailinglist = (res.data.mailinglist) ? [...res.data.mailinglist] : []
+ GlobalStore.state.mypage = (res.data.mypage) ? [...res.data.mypage] : []
+ }
+
+ CalendarStore.state.editable = UserStore.state.isAdmin || UserStore.state.isManager
})
.catch((error) => {
@@ -700,6 +789,60 @@ namespace Actions {
}
+ async function sendEmailTest(context, { previewonly }) {
+ const usertosend = {
+ locale: tools.getLocale(),
+ previewonly
+ }
+ console.log(usertosend)
+
+ return await Api.SendReq('/news/testemail', 'POST', usertosend)
+ .then((res) => {
+ return res
+ })
+ }
+
+ async function addDynamicPages(context) {
+
+ const arrpagesroute: IListRoutes[] = []
+ for (const page of state.mypage) {
+ arrpagesroute.push({
+ path: '/' + page.path,
+ name: undefined,
+ text: page.title,
+ materialIcon: page.icon,
+ component: () => import('@/root/mypage/mypage.vue'),
+ inmenu: page.inmenu,
+ infooter: page.infooter,
+ level_child: page.l_child,
+ level_parent: page.l_par,
+ })
+ }
+
+ const last = {
+ path: '*',
+ materialIcon: 'fas fa-calendar-plus',
+ name: 'otherpages.error404def',
+ component: () => import('@/root/My404page/My404page.vue'),
+ inmenu: false,
+ infooter: false
+ }
+
+ static_data.routes = [...static_data.routes, ...arrpagesroute, last]
+
+ router.addRoutes([...arrpagesroute, last])
+ }
+
+ async function sendFile(context, formdata) {
+ try {
+ const { data } = await Api.postFormData('/upload', formdata)
+ console.log(data)
+
+ } catch (e) {
+ console.log('Error sendFile: ', e)
+ }
+ }
+
export const actions = {
setConta: b.dispatch(setConta),
createPushSubscription: b.dispatch(createPushSubscription),
@@ -714,7 +857,9 @@ namespace Actions {
loadTable: b.dispatch(loadTable),
saveTable: b.dispatch(saveTable),
DeleteRec: b.dispatch(DeleteRec),
- DuplicateRec: b.dispatch(DuplicateRec)
+ sendEmailTest: b.dispatch(sendEmailTest),
+ DuplicateRec: b.dispatch(DuplicateRec),
+ addDynamicPages: b.dispatch(addDynamicPages)
}
}
diff --git a/src/store/Modules/UserStore.ts b/src/store/Modules/UserStore.ts
index 6280707..526b8b1 100644
--- a/src/store/Modules/UserStore.ts
+++ b/src/store/Modules/UserStore.ts
@@ -419,6 +419,57 @@ namespace Actions {
})
}
+ async function unsubscribe(context, paramquery) {
+
+ return await Api.SendReq('/news/unsubscribe', 'POST', paramquery)
+ .then((res) => {
+ // console.log("RITORNO 2 ");
+ // mutations.setServerCode(myres);
+ if (res.data.code === serv_constants.RIS_UNSUBSCRIBED_OK) {
+ console.log('DESOTTOSCRITTO ALLA NEWSLETTER !!')
+ } else {
+ console.log('Risultato di unsubscribe: ', res.data.code)
+ }
+ return { code: res.data.code, msg: res.data.msg }
+ }).catch((error) => {
+ return UserStore.getters.getServerCode
+ })
+ }
+
+ async function importemail(context, paramquery) {
+
+ return await Api.SendReq('/news/import', 'POST', paramquery)
+ .then((res) => {
+ // console.log("RITORNO 2 ");
+ // mutations.setServerCode(myres);
+ return res
+ }).catch((error) => {
+ return { numtot: 0, numadded: 0, numalreadyexisted: 0}
+ })
+ }
+
+ async function newsletterload(context, paramquery) {
+
+ return await Api.SendReq('/news/load', 'POST', paramquery)
+ .then((res) => {
+ console.log('res', res)
+ return res.data
+ }).catch((error) => {
+ return null
+ })
+ }
+
+ async function newsletter_setactivate(context, paramquery) {
+
+ return await Api.SendReq('/news/setactivate', 'POST', paramquery)
+ .then((res) => {
+ console.log('res', res)
+ return res.data
+ }).catch((error) => {
+ return null
+ })
+ }
+
async function signup(context, authData: ISignupOptions) {
console.log('SIGNUP')
@@ -637,28 +688,42 @@ namespace Actions {
async function setGlobal(isLogged: boolean) {
console.log('setGlobal')
- // state.isLogged = true
- if (isLogged) {
- // console.log('state.isLogged', state.isLogged)
+ try {
+ // state.isLogged = true
+ if (isLogged) {
+ // console.log('state.isLogged', state.isLogged)
- GlobalStore.mutations.setleftDrawerOpen(localStorage.getItem(tools.localStorage.leftDrawerOpen) === 'true')
- GlobalStore.mutations.setCategorySel(localStorage.getItem(tools.localStorage.categorySel))
+ GlobalStore.mutations.setleftDrawerOpen(localStorage.getItem(tools.localStorage.leftDrawerOpen) === 'true')
+ GlobalStore.mutations.setCategorySel(localStorage.getItem(tools.localStorage.categorySel))
- GlobalStore.actions.checkUpdates()
+ GlobalStore.actions.checkUpdates()
+ }
+
+ const p3 = await GlobalStore.actions.loadAfterLogin()
+
+ state.isLogged = isLogged
+
+ if (static_data.functionality.ENABLE_TODOS_LOADING)
+ await Todos.actions.dbLoad({ checkPending: true })
+
+ if (static_data.functionality.ENABLE_PROJECTS_LOADING)
+ await Projects.actions.dbLoad({ checkPending: true, onlyiffirsttime: true })
+
+ console.log('add routes')
+
+ GlobalStore.actions.addDynamicPages()
+
+ GlobalStore.state.finishLoading = true
+ if (tools.isDebug())
+ console.log('finishLoading', GlobalStore.state.finishLoading)
+
+ // document.dispatchEvent(new Event('custom-post-render-event'))
+
+ } catch (e) {
+ console.error('Error', e)
+ GlobalStore.state.finishLoading = true
}
- const p3 = await GlobalStore.actions.loadAfterLogin()
-
- state.isLogged = isLogged
-
- if (static_data.functionality.ENABLE_TODOS_LOADING)
- await Todos.actions.dbLoad({ checkPending: true })
-
- if (static_data.functionality.ENABLE_PROJECTS_LOADING)
- await Projects.actions.dbLoad({ checkPending: true, onlyiffirsttime: true })
-
- GlobalStore.state.finishLoading = true
-
return true
// console.log('setGlobal: END')
}
@@ -740,7 +805,11 @@ namespace Actions {
resetpwd: b.dispatch(resetpwd),
signin: b.dispatch(signin),
signup: b.dispatch(signup),
- vreg: b.dispatch(vreg)
+ vreg: b.dispatch(vreg),
+ unsubscribe: b.dispatch(unsubscribe),
+ importemail: b.dispatch(importemail),
+ newsletterload: b.dispatch(newsletterload),
+ newsletter_setactivate: b.dispatch(newsletter_setactivate),
}
}
diff --git a/src/store/Modules/fieldsTable.ts b/src/store/Modules/fieldsTable.ts
index c5c6105..6c4fc45 100644
--- a/src/store/Modules/fieldsTable.ts
+++ b/src/store/Modules/fieldsTable.ts
@@ -2,7 +2,7 @@ import { IColGridTable } from '../../model'
import { lists } from './lists'
import { tools } from '@src/store/Modules/tools'
import { shared_consts } from '@src/common/shared_vuejs'
-import { GlobalStore } from '@store'
+import { GlobalStore, UserStore } from '@store'
const DeleteRec = {
name: 'deleterec',
@@ -17,6 +17,19 @@ const DeleteRec = {
visuonlyEditVal: true
}
+const DuplicateRec = {
+ name: 'copyrec',
+ label_trans: 'event.duplicate',
+ align: 'right',
+ field: tools.NOFIELD,
+ sortable: false,
+ icon: 'fas fa-copy',
+ action: lists.MenuAction.DUPLICATE_RECTABLE,
+ askaction: 'db.duplicatedrecord',
+ visuonlyEditVal: true,
+ visible: true
+}
+
function AddCol(params: IColGridTable) {
return {
name: params.name,
@@ -40,9 +53,78 @@ function AddCol(params: IColGridTable) {
}
}
+export const colmailinglist = [
+ AddCol({ name: 'name', label_trans: 'reg.name' }),
+ AddCol({ name: 'surname', label_trans: 'reg.surname' }),
+ AddCol({ name: 'email', label_trans: 'reg.email' }),
+ AddCol({ name: 'statesub', label_trans: 'newsletter.statesub', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'lastid_newstosent', label_trans: 'reg.lastid_newstosent', fieldtype: tools.FieldType.string }),
+ AddCol(DeleteRec)
+]
+
+export const colmypage = [
+ AddCol({ name: 'title', label_trans: 'pages.title' }),
+ AddCol({ name: 'path', label_trans: 'pages.path' }),
+ AddCol({ name: 'icon', label_trans: 'pages.icon' }),
+ AddCol({ name: 'keywords', label_trans: 'pages.keywords' }),
+ AddCol({ name: 'description', label_trans: 'pages.description' }),
+ AddCol({ name: 'heightimg', label_trans: 'pages.heightimg', fieldtype: tools.FieldType.number }),
+ AddCol({ name: 'imgback', label_trans: 'pages.imgback', fieldtype: tools.FieldType.string }),
+ AddCol({ name: 'content', label_trans: 'pages.content', fieldtype: tools.FieldType.html }),
+ AddCol({ name: 'active', label_trans: 'pages.active', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'inmenu', label_trans: 'pages.inmenu', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'submenu', label_trans: 'pages.submenu', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'l_par', label_trans: 'pages.l_par', fieldtype: tools.FieldType.number }),
+ AddCol({ name: 'l_child', label_trans: 'pages.l_child', fieldtype: tools.FieldType.number }),
+ AddCol({ name: 'infooter', label_trans: 'pages.infooter', fieldtype: tools.FieldType.boolean }),
+ AddCol(DeleteRec),
+ AddCol(DuplicateRec)
+]
+
+export const colopzemail = [
+ AddCol({ name: 'key', label_trans: 'col.key' }),
+ AddCol({ name: 'label_it', label_trans: 'col.label' }),
+ AddCol(DeleteRec),
+ AddCol(DuplicateRec)
+]
+
+export const coltemplemail = [
+ AddCol({ name: 'subject', label_trans: 'templemail.subject' }),
+ AddCol({ name: 'testoheadermail', label_trans: 'templemail.testoheadermail', fieldtype: tools.FieldType.html }),
+ AddCol({ name: 'content', label_trans: 'templemail.content', fieldtype: tools.FieldType.html }),
+ AddCol({ name: 'img', label_trans: 'templemail.img' }),
+ AddCol({ name: 'content2', label_trans: 'templemail.content2', fieldtype: tools.FieldType.html }),
+ AddCol({ name: 'img2', label_trans: 'templemail.img2' }),
+ AddCol({
+ name: 'options',
+ label_trans: 'templemail.options',
+ fieldtype: tools.FieldType.multiselect,
+ jointable: 'opzemail'
+ }),
+ AddCol(DeleteRec),
+ AddCol(DuplicateRec)
+]
+// SHOW_LAST_N_EV
+export const colnewstosent = [
+ AddCol({ name: 'label', label_trans: 'event.title' }),
+ AddCol({ name: 'templemail_str', label_trans: 'newsletter.templemail' }),
+ AddCol({ name: 'datetoSent', label_trans: 'newsletter.datetoSent', fieldtype: tools.FieldType.date }),
+ AddCol({ name: 'activate', label_trans: 'newsletter.activate', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'numemail_tot', label_trans: 'newsletter.numemail_tot', fieldtype: tools.FieldType.number }),
+ AddCol({ name: 'numemail_sent', label_trans: 'newsletter.numemail_sent', fieldtype: tools.FieldType.number }),
+ AddCol({ name: 'datestartJob', label_trans: 'newsletter.datestartJob', fieldtype: tools.FieldType.date }),
+ AddCol({ name: 'datefinishJob', label_trans: 'newsletter.datefinishJob', fieldtype: tools.FieldType.date }),
+ AddCol({ name: 'lastemailsent_Job', label_trans: 'newsletter.lastemailsent_Job', fieldtype: tools.FieldType.date }),
+ AddCol({ name: 'starting_job', label_trans: 'newsletter.starting_job', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'finish_job', label_trans: 'newsletter.finish_job', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'error_job', label_trans: 'newsletter.error_job', fieldtype: tools.FieldType.string }),
+ AddCol(DeleteRec),
+ AddCol(DuplicateRec)
+]
+
const colTableWhere = [
AddCol({ name: 'code', label_trans: 'where.code' }),
- AddCol({ name: 'placename', label_trans: 'cal.where'} ),
+ AddCol({ name: 'placename', label_trans: 'cal.where' }),
AddCol({ name: 'whereicon', label_trans: 'where.whereicon' }),
AddCol(DeleteRec)
]
@@ -53,13 +135,26 @@ const colcontribtype = [
AddCol(DeleteRec)
]
-const colsettings = [
- AddCol({ name: 'key', label_trans: 'col.label' }),
- AddCol({ name: 'type', label_trans: 'col.type', fieldtype: tools.FieldType.select, jointable: 'fieldstype' }),
- AddCol({ name: 'value_str', label_trans: 'col.value', fieldtype: tools.FieldType.string }),
- AddCol({ name: 'value_date', label_trans: 'cal.data', fieldtype: tools.FieldType.date }),
- AddCol({ name: 'value_num', label_trans: 'cal.num', fieldtype: tools.FieldType.number }),
- AddCol(DeleteRec)
+const coldisciplines = [
+ AddCol({ name: 'typol_code', label_trans: 'disc.typol_code' }),
+ AddCol({ name: 'order', label_trans: 'disc.order', fieldtype: tools.FieldType.number }),
+ AddCol({ name: 'label', label_trans: 'event.title' }),
+ AddCol({ name: 'description', label_trans: 'proj.longdescr' }),
+ AddCol({ name: 'linkpage', label_trans: 'event.linkpage' }),
+ AddCol({ name: 'color', label_trans: 'event.color' }),
+ AddCol({ name: 'icon', label_trans: 'event.icon' }),
+ AddCol({ name: 'img', label_trans: 'event.img' }),
+ AddCol({ name: 'img_small', label_trans: 'event.img_small' }),
+ AddCol({ name: 'showinhome', label_trans: 'event.showinhome', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'showinnewsletter', label_trans: 'event.showinnewsletter', fieldtype: tools.FieldType.boolean }),
+ AddCol({
+ name: 'teachers',
+ label_trans: 'event.teacher',
+ fieldtype: tools.FieldType.multiselect,
+ jointable: 'operators'
+ }),
+ AddCol(DeleteRec),
+ AddCol(DuplicateRec)
]
const colTablePermission = [
@@ -68,6 +163,7 @@ const colTablePermission = [
AddCol(DeleteRec)
]
+
const colTableOperator = [
AddCol({ name: 'username', label_trans: 'reg.username' }),
AddCol({ name: 'name', label_trans: 'reg.name' }),
@@ -75,22 +171,26 @@ const colTableOperator = [
AddCol({ name: 'email', label_trans: 'reg.email' }),
AddCol({ name: 'img', label_trans: 'event.img' }),
AddCol({ name: 'cell', label_trans: 'reg.cell' }),
+ AddCol({ name: 'usertelegram', label_trans: 'op.usertelegram' }),
AddCol({ name: 'qualification', label_trans: 'op.qualification' }),
AddCol({ name: 'disciplines', label_trans: 'op.disciplines' }),
AddCol({ name: 'certifications', label_trans: 'op.certifications' }),
- AddCol({ name: 'intro', label_trans: 'op.intro' , fieldtype: tools.FieldType.html }),
+ AddCol({ name: 'intro', label_trans: 'op.intro', fieldtype: tools.FieldType.html }),
AddCol({ name: 'info', label_trans: 'op.info', fieldtype: tools.FieldType.html }),
AddCol({ name: 'webpage', label_trans: 'op.webpage' }),
AddCol({ name: 'days_working', label_trans: 'op.days_working' }),
AddCol({ name: 'facebook', label_trans: 'op.facebook' }),
- AddCol(DeleteRec)]
+ AddCol(DeleteRec),
+ AddCol(DuplicateRec)
+]
const colTableEvents = [
AddCol({ name: '_id', label_trans: 'event._id' }),
- AddCol({ name: 'typol', label_trans: 'event.typol' }),
+ AddCol({ name: 'typol', label_trans: 'event.typol', fieldtype: tools.FieldType.select, jointable: 'disciplines' }),
AddCol({ name: 'short_tit', label_trans: 'event.short_tit' }),
AddCol({ name: 'title', label_trans: 'event.title' }),
- AddCol({ name: 'details', label_trans: 'event.details' }),
+ AddCol({ name: 'details', label_trans: 'event.details', fieldtype: tools.FieldType.html }),
+ AddCol({ name: 'bodytext', label_trans: 'event.bodytext', fieldtype: tools.FieldType.html }),
AddCol({ name: 'dateTimeStart', label_trans: 'event.dateTimeStart', fieldtype: tools.FieldType.date }),
AddCol({ name: 'dateTimeEnd', label_trans: 'event.dateTimeEnd', fieldtype: tools.FieldType.date }),
AddCol({ name: 'bgcolor', label_trans: 'event.bgcolor' }),
@@ -98,11 +198,21 @@ const colTableEvents = [
AddCol({ name: 'img_small', label_trans: 'event.img_small' }),
AddCol({ name: 'img', label_trans: 'event.img' }),
AddCol({ name: 'wherecode', label_trans: 'event.where', fieldtype: tools.FieldType.select, jointable: 'wheres' }),
- AddCol({ name: 'contribtype', label_trans: 'event.contribtype', fieldtype: tools.FieldType.select, jointable: 'contribtype' }),
+ AddCol({
+ name: 'contribtype',
+ label_trans: 'event.contribtype',
+ fieldtype: tools.FieldType.select,
+ jointable: 'contribtype'
+ }),
AddCol({ name: 'price', label_trans: 'event.price' }),
AddCol({ name: 'infoafterprice', label_trans: 'event.infoafterprice' }),
AddCol({ name: 'teacher', label_trans: 'event.teacher', fieldtype: tools.FieldType.select, jointable: 'operators' }),
- AddCol({ name: 'teacher2', label_trans: 'event.teacher2', fieldtype: tools.FieldType.select, jointable: 'operators' }),
+ AddCol({
+ name: 'teacher2',
+ label_trans: 'event.teacher2',
+ fieldtype: tools.FieldType.select,
+ jointable: 'operators'
+ }),
AddCol({ name: 'infoextra', label_trans: 'event.infoextra' }),
AddCol({ name: 'linkpage', label_trans: 'event.linkpage' }),
AddCol({ name: 'linkpdf', label_trans: 'event.linkpdf' }),
@@ -113,21 +223,24 @@ const colTableEvents = [
AddCol({ name: 'dupId', label_trans: 'event.dupId' }),
AddCol({ name: 'modified', label_trans: 'event.modified', fieldtype: tools.FieldType.boolean }),
AddCol(DeleteRec),
- AddCol({
- name: 'copyrec',
- label_trans: 'event.duplicate',
- align: 'right',
- field: tools.NOFIELD,
- sortable: false,
- icon: 'fas fa-copy',
- action: lists.MenuAction.DUPLICATE_RECTABLE,
- askaction: 'db.duplicatedrecord',
- visuonlyEditVal: true,
- required: true,
- visible: true
- })
+ AddCol(DuplicateRec)
]
+export const fields = {
+ colSettings: [
+ AddCol({ name: 'key', label_trans: 'col.label' }),
+ AddCol({ name: 'type', label_trans: 'col.type', fieldtype: tools.FieldType.select, jointable: 'fieldstype' }),
+ AddCol({ name: 'value_str', label_trans: 'col.value', fieldtype: tools.FieldType.string }),
+ AddCol({ name: 'value_date', label_trans: 'cal.data', fieldtype: tools.FieldType.date }),
+ AddCol({ name: 'value_num', label_trans: 'cal.num', fieldtype: tools.FieldType.number }),
+ AddCol({ name: 'value_bool', label_trans: 'cal.bool', fieldtype: tools.FieldType.boolean }),
+ AddCol({ name: 'serv', label_trans: 'cal.serv', fieldtype: tools.FieldType.boolean }),
+ AddCol(DeleteRec),
+ AddCol(DuplicateRec)
+ ]
+
+}
+
export const fieldsTable = {
getArrStrByValueBinary(mythis, col: IColGridTable, val) {
const arr = this.getArrByValueBinary(mythis, col, val)
@@ -175,6 +288,32 @@ export const fieldsTable = {
}
},
+ getMultiValueByTable(col: IColGridTable, arrval) {
+ if (col.jointable) {
+ const mylist = this.getTableJoinByName(col.jointable)
+ const key = this.getKeyByTable(col.jointable)
+ const collab = this.getLabelByTable(col.jointable)
+
+ // console.table(mylist)
+ // console.log('key=', key, 'collab', collab, 'val', val)
+
+ const myris = mylist.filter((myrec) => arrval.includes(myrec[key]))
+ // console.log('myris', myris)
+ if (myris) {
+ console.log('collab', collab)
+ if (tools.isObject(collab))
+ return myris.map(collab)
+ else
+ return myris.map((rec) => rec[collab])
+ } else {
+ return ''
+ }
+
+ } else {
+ return ''
+ }
+ },
+
getColByTable(table) {
if (table === 'permissions') {
return ['value', 'label']
@@ -206,6 +345,10 @@ export const fieldsTable = {
else
return 'label'
},
+ getTitleByTable(mytable): string {
+ const myrec = this.getrecTableList(mytable)
+ return myrec.label
+ },
getIconByTable(mytable): string {
const myrec = this.getrecTableList(mytable)
if (myrec)
@@ -213,13 +356,30 @@ export const fieldsTable = {
else
return ''
},
+
+
+
+
+ // IColGridTable
+ colTableUsers: [
+ AddCol({ name: 'username', label_trans: 'reg.username' }),
+ AddCol({ name: 'name', label_trans: 'reg.name' }),
+ AddCol({ name: 'surname', label_trans: 'reg.surname' }),
+ AddCol({ name: 'email', label_trans: 'reg.email' }),
+ AddCol({ name: 'cell', label_trans: 'reg.cell' }),
+ AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }),
+ AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
+ AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
+ AddCol(DeleteRec)
+ ],
+
tablesList: [
{
value: 'operators',
label: 'Insegnanti',
columns: colTableOperator,
colkey: 'username',
- collabel: 'username'
+ collabel: (rec) => rec.name + ' ' + rec.surname
},
{
value: 'wheres',
@@ -242,51 +402,73 @@ export const fieldsTable = {
colkey: '_id',
collabel: 'label'
},
+ {
+ value: 'disciplines',
+ label: 'Discipline',
+ columns: coldisciplines,
+ colkey: 'typol_code',
+ collabel: 'label'
+ },
+
+ {
+ value: 'newstosent',
+ label: 'Newsletter da Inviare',
+ columns: colnewstosent,
+ colkey: '_id',
+ collabel: 'label',
+ onlyAdmin: true
+ },
+ {
+ value: 'templemail',
+ label: 'Template Email',
+ columns: coltemplemail,
+ colkey: '_id',
+ collabel: 'subject',
+ onlyAdmin: true
+ },
+ {
+ value: 'opzemail',
+ label: 'Opzioni Email',
+ columns: colopzemail,
+ colkey: 'key',
+ collabel: (rec) => rec.label_it,
+ onlyAdmin: true
+ },
+ {
+ value: 'mailinglist',
+ label: 'MailingList',
+ columns: colmailinglist,
+ colkey: '_id',
+ collabel: (rec) => rec.name + ' ' + rec.surname
+ },
{
value: 'permissions',
label: 'Permessi',
columns: colTablePermission,
colkey: 'value',
collabel: 'label',
- colicon: 'icon'
+ colicon: 'icon',
+ noshow: true,
},
{
value: 'fieldstype',
label: 'Tipi di Campi',
colkey: 'value',
- collabel: 'label'
+ collabel: 'label',
+ noshow: true,
},
{
value: 'settings',
label: 'Impostazioni',
- columns: colsettings,
+ columns: fields.colSettings,
colkey: 'key',
collabel: 'key'
- },
- ],
-
- // IColGridTable
- colTableUsers: [
- AddCol({ name: 'username', label_trans: 'reg.username' }),
- AddCol({ name: 'name', label_trans: 'reg.name' }),
- AddCol({ name: 'surname', label_trans: 'reg.surname' }),
- AddCol({ name: 'email', label_trans: 'reg.email' }),
- AddCol({ name: 'cell', label_trans: 'reg.cell' }),
- AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }),
- AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
- AddCol({ name: 'perm', label_trans: 'reg.perm', fieldtype: tools.FieldType.binary, jointable: 'permissions' }),
- AddCol(DeleteRec),
- AddCol({
- name: 'copyrec',
- label_trans: 'event.duplicate',
- align: 'right',
- field: tools.NOFIELD,
- sortable: false,
- icon: 'fas fa-copy',
- action: lists.MenuAction.DUPLICATE_RECTABLE,
- askaction: 'db.duplicatedrecord',
- visuonlyEditVal: true,
- visible: true
- })
+ }
]
}
+
+export const func = {
+ gettablesList() {
+ return fieldsTable.tablesList.filter((rec) => (rec.onlyAdmin === UserStore.state.isAdmin) || (!rec.onlyAdmin) && (!rec.noshow))
+ }
+}
diff --git a/src/store/Modules/serv_constants.ts b/src/store/Modules/serv_constants.ts
index 1823665..e1ee7df 100644
--- a/src/store/Modules/serv_constants.ts
+++ b/src/store/Modules/serv_constants.ts
@@ -5,18 +5,22 @@ export const serv_constants = {
RIS_CODE_ERR: -99,
RIS_CODE_EMAIL_ALREADY_VERIFIED: -5,
RIS_CODE_EMAIL_VERIFIED: 1,
-
RIS_CODE_ERR_UNAUTHORIZED: -30,
- RIS_CODE_LOGIN_ERR_GENERIC: -20,
+ RIS_CODE_LOGIN_ERR_GENERIC: -20,
RIS_CODE_LOGIN_ERR: -10,
+
RIS_CODE_OK: 1,
RIS_CODE_LOGIN_OK: 1,
-
RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN: 403,
RIS_SUBSCRIBED_OK: 1,
RIS_SUBSCRIBED_ALREADYEXIST: 2,
- RIS_SUBSCRIBED_ERR: -1
+ RIS_SUBSCRIBED_ERR: -1,
+ RIS_SUBSCRIBED_STR: 'subscribed',
+
+ RIS_UNSUBSCRIBED_OK: 5,
+ RIS_UNSUBSCRIBED_STR: 'unsubscribed',
+ RIS_UNSUBSCRIBED_NOT_EXIST: -5,
}
diff --git a/src/store/Modules/tools.ts b/src/store/Modules/tools.ts
index 3e7e1e7..165cdf6 100644
--- a/src/store/Modules/tools.ts
+++ b/src/store/Modules/tools.ts
@@ -5,6 +5,7 @@ import { toolsext } from './toolsext'
import { translation } from './translation'
import Quasar, { colors, date, Screen } from 'quasar'
import { scroll } from 'quasar'
+
const { getScrollTarget, setScrollPosition } = scroll
import {
@@ -64,6 +65,11 @@ export const tools = {
],
TABEVENTS: 'myevents',
+ TABNEWSLETTER: 'newstosent',
+ TABMAILINGLIST: 'mailinglist',
+ TABMYPAGE: 'mypage',
+ TABTEMPLEMAIL: 'templemail',
+ TABOPZEMAIL: 'opzemail',
MAX_CHARACTERS: 60,
projects: 'projects',
@@ -131,6 +137,8 @@ export const tools = {
select: 32,
number: 64,
typeinrec: 128,
+ multiselect: 256,
+ password: 512,
},
FieldTypeArr: [
@@ -1371,6 +1379,11 @@ export const tools = {
return result
},
+ visumenu(elem) { // : IListRoutes
+ return (elem.onlyAdmin && UserStore.state.isAdmin) || (elem.onlyManager && UserStore.state.isManager)
+ || ((!elem.onlyAdmin) && (!elem.onlyManager))
+ },
+
executefunc(myself: any, table, func: number, par: IParamDialog) {
if (func === lists.MenuAction.DELETE) {
console.log('param1', par.param1)
@@ -1724,6 +1737,62 @@ export const tools = {
return ''
},
+ getstrShortDate(mydate) {
+ const DateFormatter = new Intl.DateTimeFormat(func_tools.getLocale() || void 0, {
+ weekday: 'long',
+ day: 'numeric',
+ month: 'short',
+ year: 'numeric'
+ // timeZone: 'UTC'
+ })
+ try {
+ if (DateFormatter) {
+ const date1 = new Date(mydate)
+ return DateFormatter.format(date1)
+ }
+ return mydate
+ } catch (e) {
+ return ''
+ }
+
+ },
+ getstrVeryShortDate(mydate) {
+ const DateFormatter = new Intl.DateTimeFormat(func_tools.getLocale() || void 0, {
+ weekday: 'short',
+ day: 'numeric',
+ month: 'short',
+ // timeZone: 'UTC'
+ })
+ try {
+ if (DateFormatter) {
+ const date1 = new Date(mydate)
+ return DateFormatter.format(date1)
+ }
+ return mydate
+ } catch (e) {
+ return ''
+ }
+
+ },
+
+ getstrVeryVeryShortDate(mydate) {
+ const DateFormatter = new Intl.DateTimeFormat(func_tools.getLocale() || void 0, {
+ weekday: 'long',
+ day: 'numeric',
+ // timeZone: 'UTC'
+ })
+ try {
+ if (DateFormatter) {
+ const date1 = new Date(mydate)
+ return DateFormatter.format(date1)
+ }
+ return mydate
+ } catch (e) {
+ return ''
+ }
+
+ },
+
getstrDateTimeEvent(mythis, myevent, withhtml) {
let mystr = ''
// is same day?
@@ -1741,7 +1810,7 @@ export const tools = {
mystr = `${tools.getstrDate(myevent.dateTimeStart)}
${mythis.$t('cal.starttime')} ${ tools.getstrTime(myevent.dateTimeStart) }
${ mythis.$t('cal.enddate')} ${tools.getstrDate(myevent.dateTimeEnd)}
- ${ mythis.$t('cal.endtime')}: ${ tools.getstrTime(myevent.dateTimeEnd) } `
+ ${ mythis.$t('cal.endtime')} ${ tools.getstrTime(myevent.dateTimeEnd) } `
}
if (myevent.infoextra) {
@@ -1754,6 +1823,34 @@ export const tools = {
return mystr
},
+ getstrDateTimeEventSimple(mythis, myevent) {
+ let mystr = ''
+ // is same day?
+ if (tools.getstrShortDate(myevent.dateTimeStart) === tools.getstrShortDate(myevent.dateTimeEnd)) {
+ mystr = `${tools.getstrShortDate(myevent.dateTimeStart)}
+ - ${ tools.getstrTime(myevent.dateTimeStart) }`
+ } else {
+ mystr = `${tools.getstrVeryVeryShortDate(myevent.dateTimeStart)} - ${ tools.getstrShortDate(myevent.dateTimeEnd) }`
+
+ }
+
+ return mystr
+ },
+
+ getstrDateTimeEventShort(mythis, myevent) {
+ let mystr = ''
+ // is same day?
+ if (tools.getstrShortDate(myevent.dateTimeStart) === tools.getstrShortDate(myevent.dateTimeEnd)) {
+ mystr = `${tools.getstrVeryShortDate(myevent.dateTimeStart)}
+ h. ${ tools.getstrTime(myevent.dateTimeStart) }`
+ } else {
+ mystr = `${tools.getstrVeryShortDate(myevent.dateTimeStart)} - ${ tools.getstrVeryShortDate(myevent.dateTimeEnd) }`
+
+ }
+
+ return mystr
+ },
+
getstrDateTime(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
@@ -1762,6 +1859,22 @@ export const tools = {
return ''
},
+ getstrDateTimeAll(mytimestamp) {
+ // console.log('getstrDate', mytimestamp)
+ if (!!mytimestamp)
+ return date.formatDate(mytimestamp, 'DD/MM/YYYY HH:mm:ss')
+ else
+ return ''
+ },
+
+ getstrTimeAll(mytimestamp) {
+ // console.log('getstrDate', mytimestamp)
+ if (!!mytimestamp)
+ return date.formatDate(mytimestamp, 'HH:mm:ss')
+ else
+ return ''
+ },
+
getstrDateTimeShort(mytimestamp) {
// console.log('getstrDate', mytimestamp)
if (!!mytimestamp)
@@ -1812,7 +1925,7 @@ export const tools = {
} else {
return null
}
- console.log('mystrdate', mystrdate, strdate, mydate)
+ // console.log('mystrdate', mystrdate, strdate, mydate)
return mydate
}
,
@@ -1844,8 +1957,10 @@ export const tools = {
getDateNow() {
const mydate = new Date()
return mydate
- }
- ,
+ },
+ getDateNowEvent() {
+ return tools.addDays(tools.getDateNow(), -1)
+ },
getDateNull() {
return new Date(0)
}
@@ -2078,8 +2193,7 @@ export const tools = {
} else {
return '500'
}
- }
- ,
+ },
styles_imgtitle(sized ?: string) {
if (!!sized) {
@@ -2277,6 +2391,15 @@ export const tools = {
},
+ getimgev(ev) {
+ if (!!ev.img_small)
+ return `statics/` + ev.img_small
+ else if (!!ev.img)
+ return `statics/` + ev.img
+ else
+ return ''
+ },
+
getimgbysize(dir: string, file: string) {
const myimage = dir + file
// console.log('includes = ', static_data.preLoadImages.map((a) => a.imgname).includes(myimage), myimage)
@@ -2292,6 +2415,15 @@ export const tools = {
return ris
},
+ getaltimg(dir: string, file: string, alt?: string) {
+ const myimage = dir + file
+ const myrec = static_data.preLoadImages.find((rec) => rec.imgname === myimage)
+ if (myrec)
+ return (myrec) ? myrec.alt : 'my image'
+ else
+ return alt
+ },
+
getimgFullpathbysize(fileimg: string) {
const ind = fileimg.lastIndexOf('/')
if (ind > 0) {
@@ -2502,7 +2634,7 @@ export const tools = {
const mydata = {
table,
- data
+ data,
}
return await
@@ -2522,7 +2654,38 @@ export const tools = {
},
getwidth(mythis) {
// return height()
- return mythis.$q.screen.width
+ let myw = mythis.$q.screen.width
+ if (GlobalStore.state.leftDrawerOpen)
+ myw -= 300
+ // if (GlobalStore.state.RightDrawerOpen)
+ // myw -= 300
+ return myw
+
+ },
+
+ getwidthscale(mythis, mywidth, maxwidth) {
+ if (this.isMobile()) {
+ if (mywidth > this.getwidth(mythis) - 20)
+ mywidth = this.getwidth(mythis) - 20
+
+ return mywidth
+ } else {
+ // console.log('this.getwidth(mythis) = ', this.getwidth(mythis))
+ let myw = mywidth + ((this.getwidth(mythis) - mywidth) * 0.6)
+ // console.log('myw1 = ', myw)
+ if (myw > maxwidth)
+ myw = maxwidth
+ if (myw > this.getwidth(mythis) - 20)
+ myw = this.getwidth(mythis) - 20
+
+ // console.log('myw = ', myw)
+ return myw
+ }
+ },
+
+ getheightbywidth(mythis, mywidth, myheight, maxwidth) {
+ const myw = this.getwidthscale(mythis, mywidth, maxwidth)
+ return myw * (myheight / mywidth)
},
isIsoDate(str) {
@@ -2566,13 +2729,13 @@ export const tools = {
else
return 'primary'
},
- getCookie(mytok, oldval?) {
+ getCookie(mytok, def?) {
const ris = Cookies.get(mytok)
console.log('getCookie', ris)
if (!!ris) {
return ris
} else {
- return oldval
+ return def
}
},
@@ -2610,8 +2773,10 @@ export const tools = {
setScrollPosition(target, offset, duration)
},
getCellForWhatsapp(numbercell) {
+ if (!numbercell)
+ return ''
let mynum = numbercell.replace(/\-/g, '')
- const intcode = GlobalStore.getters.getValueSettingsByKey('INT_CODE')
+ const intcode = GlobalStore.getters.getValueSettingsByKey('INT_CODE', false)
if (numbercell.substring(0, 1) !== '+')
mynum = intcode + mynum
else
@@ -2621,12 +2786,46 @@ export const tools = {
},
getHttpForWhatsapp(numbercell) {
+ if (!numbercell)
+ return ''
const mynum = this.getCellForWhatsapp(numbercell)
if (mynum)
return 'https://wa.me/' + mynum
else
return ''
- }
+ },
+
+ getHttpForTelegram(usertelegram) {
+ if (usertelegram)
+ return 'https://t.me/' + usertelegram
+ else
+ return ''
+ },
+ metafunc(mythis) {
+ return {
+ title: mythis.$t('msg.myAppName'),
+ titleTemplate: (title) => `${mythis.mymeta.title} - ${mythis.$t('msg.myAppName')}`,
+ meta: {
+ keywords: {
+ name: 'keywords',
+ content: mythis.mymeta.keywords
+ },
+ description: {
+ name: 'description',
+ content: mythis.mymeta.description
+ },
+ equiv: { 'http-equiv': 'Content-Type', 'content': 'text/html; charset=UTF-8' }
+ }
+ }
+ },
+ isObject(anything) {
+ //Object.create(null) instanceof Object → false
+ return Object(anything) === anything
+ },
+ isDebug() {
+ return process.env.DEV
+ },
+
// getLocale() {
// if (navigator.languages && navigator.languages.length > 0) {
diff --git a/src/typings/libs/axios.d.ts b/src/typings/libs/axios.d.ts
index 006888b..a9404d4 100644
--- a/src/typings/libs/axios.d.ts
+++ b/src/typings/libs/axios.d.ts
@@ -5,4 +5,3 @@ declare module 'vue/types/vue' {
$axios: axios
}
}
-
diff --git a/src/typings/libs/globalroutines.d.ts b/src/typings/libs/globalroutines.d.ts
index 265acb3..447fc1c 100644
--- a/src/typings/libs/globalroutines.d.ts
+++ b/src/typings/libs/globalroutines.d.ts
@@ -5,4 +5,3 @@ declare module 'vue/types/vue' {
$globalroutines: globalroutines
}
}
-
diff --git a/src/views/admin/TableOnlyView/tableOnlyView.ts b/src/views/admin/TableOnlyView/tableOnlyView.ts
index 5fbc8a6..74e9c96 100644
--- a/src/views/admin/TableOnlyView/tableOnlyView.ts
+++ b/src/views/admin/TableOnlyView/tableOnlyView.ts
@@ -3,7 +3,6 @@ import { Component } from 'vue-property-decorator'
import { GlobalStore, UserStore } from '@store'
-
@Component({})
export default class TableOnlyView extends Vue {
public loading: boolean = false
@@ -28,8 +27,7 @@ export default class TableOnlyView extends Vue {
public filter: string = ''
public selected: any[] = []
-
- request(props) {
+ public request(props) {
this.loading = true
setTimeout(() => {
this.serverPagination = props.pagination
@@ -53,7 +51,7 @@ export default class TableOnlyView extends Vue {
}, 1500)
}
- mounted() {
+ public mounted() {
this.request({
pagination: this.serverPagination,
filter: this.filter
diff --git a/src/views/admin/cfgServer/cfgServer.ts b/src/views/admin/cfgServer/cfgServer.ts
index 6b0a6be..ec7dd90 100644
--- a/src/views/admin/cfgServer/cfgServer.ts
+++ b/src/views/admin/cfgServer/cfgServer.ts
@@ -52,7 +52,7 @@ export default class CfgServer extends Vue {
}
public SaveValue(newVal, valinitial) {
- console.log('SaveValue', newVal, 'selected', this.selected)
+ // console.log('SaveValue', newVal, 'selected', this.selected)
const mydata = {
chiave: this.keysel,
diff --git a/src/views/admin/testp1/testp1.ts b/src/views/admin/testp1/testp1.ts
index 8d16fde..8aeab2a 100644
--- a/src/views/admin/testp1/testp1.ts
+++ b/src/views/admin/testp1/testp1.ts
@@ -23,11 +23,12 @@ export default class Testp1 extends Vue {
public testpao1_array: (state: IGlobalState, miorec: ICfgServer) => ICfgServer[]
@Watch('GlobalStore.state.testp1.mioarray', { immediate: true, deep: true })
- array_changed() {
+ public array_changed() {
console.log('*** array_changed *** ', GlobalStore.state.testp1.mioarray[GlobalStore.state.testp1.mioarray.length - 1])
}
- @Watch('$route.params.category') changecat() {
+ @Watch('$route.params.category')
+ public changecat() {
// this.mytypetransgroup = ''
console.log('PRIMA this.paramcategory', this.paramcategory)
this.paramcategory = this.$route.params.category
diff --git a/src/views/messages/messages.vue b/src/views/messages/messages.vue
index d9900c0..cf44daa 100644
--- a/src/views/messages/messages.vue
+++ b/src/views/messages/messages.vue
@@ -36,7 +36,7 @@
-
+
@@ -101,7 +101,7 @@
bg-color="grey-2">
-
+