- aggiornati form registrazione
- Login - Password dimenticata - Aggiorna password. - Email registrazione - Ammetti Utente
This commit is contained in:
371
emails/RISO/reg_chiedi_ammettere_all_invitante/it/html.pug
Executable file
371
emails/RISO/reg_chiedi_ammettere_all_invitante/it/html.pug
Executable file
@@ -0,0 +1,371 @@
|
|||||||
|
doctype html
|
||||||
|
html(lang="it")
|
||||||
|
head
|
||||||
|
meta(charset="UTF-8")
|
||||||
|
meta(name="viewport" content="width=device-width, initial-scale=1.0")
|
||||||
|
style(type="text/css").
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
padding: 20px;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-logo {
|
||||||
|
width: 120px;
|
||||||
|
height: auto;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-container {
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: white;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header {
|
||||||
|
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||||
|
color: white;
|
||||||
|
padding: 40px 24px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header h1 {
|
||||||
|
margin: 0 0 8px 0;
|
||||||
|
font-size: 26px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header .subtitle {
|
||||||
|
margin: 8px 0 0 0;
|
||||||
|
font-size: 17px;
|
||||||
|
opacity: 0.95;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert-icon {
|
||||||
|
font-size: 56px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-body {
|
||||||
|
padding: 32px 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.intro-text {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card {
|
||||||
|
background: linear-gradient(135deg, #fff8dc 0%, #fef9f3 100%);
|
||||||
|
border: 2px solid #f0ad4e;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 24px;
|
||||||
|
margin: 20px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card h3 {
|
||||||
|
font-size: 14px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #f0ad4e;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card .member-name {
|
||||||
|
font-size: 28px;
|
||||||
|
color: #1a1a1a;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card .member-detail {
|
||||||
|
font-size: 15px;
|
||||||
|
color: #555;
|
||||||
|
margin: 6px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card .member-detail strong {
|
||||||
|
color: #f0ad4e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question-box {
|
||||||
|
background: #fff3cd;
|
||||||
|
border-left: 4px solid #f0ad4e;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 20px;
|
||||||
|
margin: 24px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question-box p {
|
||||||
|
font-size: 20px;
|
||||||
|
color: #1a1a1a;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-section {
|
||||||
|
text-align: center;
|
||||||
|
margin: 32px 0;
|
||||||
|
padding: 24px 0;
|
||||||
|
border-top: 2px solid #e0e0e0;
|
||||||
|
border-bottom: 2px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-title {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #1a1a1a;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-button {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 18px 56px;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: white;
|
||||||
|
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||||
|
border-radius: 50px;
|
||||||
|
text-decoration: none;
|
||||||
|
box-shadow: 0 6px 20px rgba(124, 179, 66, 0.4);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-icon {
|
||||||
|
font-size: 20px;
|
||||||
|
margin-right: 10px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box {
|
||||||
|
background: #e8f5e9;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 16px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box p {
|
||||||
|
margin: 0 0 8px 0;
|
||||||
|
color: #2e7d32;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-box {
|
||||||
|
background: #f8d7da;
|
||||||
|
border-left: 4px solid #dc3545;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 16px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-box p {
|
||||||
|
margin: 0;
|
||||||
|
color: #721c24;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-box strong {
|
||||||
|
color: #dc3545;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-box {
|
||||||
|
background: #f8f9fa;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 20px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-box h3 {
|
||||||
|
font-size: 17px;
|
||||||
|
color: #1a1a1a;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 6px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-icon {
|
||||||
|
font-size: 20px;
|
||||||
|
margin-right: 10px;
|
||||||
|
min-width: 24px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-text {
|
||||||
|
font-size: 15px;
|
||||||
|
color: #555;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-footer {
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
background: #f8f9fa;
|
||||||
|
color: #777;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-footer p {
|
||||||
|
margin: 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider {
|
||||||
|
height: 1px;
|
||||||
|
background: linear-gradient(to right, transparent, #e0e0e0, transparent);
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
body {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header {
|
||||||
|
padding: 24px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header h1 {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert-icon {
|
||||||
|
font-size: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-body {
|
||||||
|
padding: 20px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card .member-name {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question-box p {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-button {
|
||||||
|
padding: 16px 40px;
|
||||||
|
font-size: 18px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-item {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body
|
||||||
|
.email-container
|
||||||
|
//- Header
|
||||||
|
.email-header
|
||||||
|
img.header-logo(src=baseurl+'/images/logo.png' alt='RISO - Rete Italiana Scambio Orizzontale')
|
||||||
|
h1 🔔 Richiesta di Ammissione
|
||||||
|
p.subtitle Nuovo membro in attesa
|
||||||
|
|
||||||
|
//- Body
|
||||||
|
.email-body
|
||||||
|
//- Intro
|
||||||
|
.intro-text
|
||||||
|
| Ciao <strong>#{nomeInvitante}</strong>,<br>
|
||||||
|
| hai una nuova richiesta di ammissione da confermare!
|
||||||
|
|
||||||
|
//- Card richiesta
|
||||||
|
.request-card
|
||||||
|
h3 👤 Richiesta di Ingresso
|
||||||
|
.member-name #{usernameInvitato}
|
||||||
|
if nomeInvitato
|
||||||
|
.member-detail
|
||||||
|
strong Nome:
|
||||||
|
| #{nomeInvitato}
|
||||||
|
if emailInvitato
|
||||||
|
.member-detail
|
||||||
|
strong Email:
|
||||||
|
| #{emailInvitato}
|
||||||
|
|
||||||
|
//- Domanda di conferma
|
||||||
|
.question-box
|
||||||
|
p 🤔 Confermi di conoscere #{nomeInvitato}?
|
||||||
|
|
||||||
|
//- CTA principale
|
||||||
|
.cta-section
|
||||||
|
.cta-title Ammetti #{usernameInvitato} alla comunità RISO
|
||||||
|
a.cta-button(href=linkAmmissione target="_blank")
|
||||||
|
span.button-icon ✓
|
||||||
|
| Sì, Confermo
|
||||||
|
|
||||||
|
//- Responsabilità
|
||||||
|
.responsibility-box
|
||||||
|
h3 📋 La tua responsabilità come invitante
|
||||||
|
.responsibility-item
|
||||||
|
span.responsibility-icon 🤝
|
||||||
|
span.responsibility-text
|
||||||
|
strong Conoscenza diretta:
|
||||||
|
| Dovresti ammettere solo persone che conosci personalmente e di cui ti fidi
|
||||||
|
.responsibility-item
|
||||||
|
span.responsibility-icon 🛡️
|
||||||
|
span.responsibility-text
|
||||||
|
strong Fiducia:
|
||||||
|
| L'ammissione si basa sulla fiducia reciproca nella comunità RISO
|
||||||
|
.responsibility-item
|
||||||
|
span.responsibility-icon 👥
|
||||||
|
span.responsibility-text
|
||||||
|
strong Supporto:
|
||||||
|
| Come invitante, aiuterai il nuovo membro a integrarsi nella comunità
|
||||||
|
|
||||||
|
//- Info box
|
||||||
|
.info-box
|
||||||
|
p
|
||||||
|
| ✓ Dopo l'ammissione, #{usernameInvitato} potrà completare il profilo
|
||||||
|
p
|
||||||
|
| ✓ Il facilitatore locale valuterà l'abilitazione all'uso dei RIS
|
||||||
|
|
||||||
|
//- Warning box
|
||||||
|
.warning-box
|
||||||
|
p
|
||||||
|
strong ⚠️ Importante:
|
||||||
|
| Se non conosci questa persona o hai dubbi sull'ammissione, ti consigliamo di non procedere. Puoi contattare il facilitatore locale per ulteriori informazioni o semplicemente non cliccare sul pulsante di conferma.
|
||||||
|
|
||||||
|
//- Footer
|
||||||
|
.email-footer
|
||||||
|
.divider
|
||||||
|
p Hai ricevuto questa email perché #{usernameInvitato} ha indicato te come invitante su #{nomeapp}
|
||||||
|
p(style="margin-top: 12px; font-size: 12px;")
|
||||||
|
| #{new Date().getFullYear()} #{nomeapp} - Rete Italiana Scambi Orizzontali
|
||||||
|
p(style="margin-top: 12px; font-size: 12px;")
|
||||||
|
| 🍚 Comunità · Fiducia · Scambi Solidali · Sostenibilità
|
||||||
1
emails/RISO/reg_chiedi_ammettere_all_invitante/it/subject.pug
Executable file
1
emails/RISO/reg_chiedi_ammettere_all_invitante/it/subject.pug
Executable file
@@ -0,0 +1 @@
|
|||||||
|
=`🎉 ${name ? ', ' + name : username} chiede di essere ammesso su ${nomeapp} !`
|
||||||
371
emails/defaultSite/reg_chiedi_ammettere_all_invitante/it/html.pug
Executable file
371
emails/defaultSite/reg_chiedi_ammettere_all_invitante/it/html.pug
Executable file
@@ -0,0 +1,371 @@
|
|||||||
|
doctype html
|
||||||
|
html(lang="it")
|
||||||
|
head
|
||||||
|
meta(charset="UTF-8")
|
||||||
|
meta(name="viewport" content="width=device-width, initial-scale=1.0")
|
||||||
|
style(type="text/css").
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
padding: 20px;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-logo {
|
||||||
|
width: 120px;
|
||||||
|
height: auto;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-container {
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background: white;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header {
|
||||||
|
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||||
|
color: white;
|
||||||
|
padding: 40px 24px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header h1 {
|
||||||
|
margin: 0 0 8px 0;
|
||||||
|
font-size: 26px;
|
||||||
|
font-weight: 600;
|
||||||
|
line-height: 1.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header .subtitle {
|
||||||
|
margin: 8px 0 0 0;
|
||||||
|
font-size: 17px;
|
||||||
|
opacity: 0.95;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert-icon {
|
||||||
|
font-size: 56px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-body {
|
||||||
|
padding: 32px 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.intro-text {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 1.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card {
|
||||||
|
background: linear-gradient(135deg, #fff8dc 0%, #fef9f3 100%);
|
||||||
|
border: 2px solid #f0ad4e;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 24px;
|
||||||
|
margin: 20px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card h3 {
|
||||||
|
font-size: 14px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #f0ad4e;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card .member-name {
|
||||||
|
font-size: 28px;
|
||||||
|
color: #1a1a1a;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card .member-detail {
|
||||||
|
font-size: 15px;
|
||||||
|
color: #555;
|
||||||
|
margin: 6px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card .member-detail strong {
|
||||||
|
color: #f0ad4e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question-box {
|
||||||
|
background: #fff3cd;
|
||||||
|
border-left: 4px solid #f0ad4e;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 20px;
|
||||||
|
margin: 24px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question-box p {
|
||||||
|
font-size: 20px;
|
||||||
|
color: #1a1a1a;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-section {
|
||||||
|
text-align: center;
|
||||||
|
margin: 32px 0;
|
||||||
|
padding: 24px 0;
|
||||||
|
border-top: 2px solid #e0e0e0;
|
||||||
|
border-bottom: 2px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-title {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #1a1a1a;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-button {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 18px 56px;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: white;
|
||||||
|
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||||
|
border-radius: 50px;
|
||||||
|
text-decoration: none;
|
||||||
|
box-shadow: 0 6px 20px rgba(124, 179, 66, 0.4);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-icon {
|
||||||
|
font-size: 20px;
|
||||||
|
margin-right: 10px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box {
|
||||||
|
background: #e8f5e9;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 16px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box p {
|
||||||
|
margin: 0 0 8px 0;
|
||||||
|
color: #2e7d32;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-box {
|
||||||
|
background: #f8d7da;
|
||||||
|
border-left: 4px solid #dc3545;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 16px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-box p {
|
||||||
|
margin: 0;
|
||||||
|
color: #721c24;
|
||||||
|
font-size: 15px;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-box strong {
|
||||||
|
color: #dc3545;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-box {
|
||||||
|
background: #f8f9fa;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 20px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-box h3 {
|
||||||
|
font-size: 17px;
|
||||||
|
color: #1a1a1a;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 6px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-icon {
|
||||||
|
font-size: 20px;
|
||||||
|
margin-right: 10px;
|
||||||
|
min-width: 24px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-text {
|
||||||
|
font-size: 15px;
|
||||||
|
color: #555;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-footer {
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
background: #f8f9fa;
|
||||||
|
color: #777;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-footer p {
|
||||||
|
margin: 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider {
|
||||||
|
height: 1px;
|
||||||
|
background: linear-gradient(to right, transparent, #e0e0e0, transparent);
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
body {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header {
|
||||||
|
padding: 24px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-header h1 {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert-icon {
|
||||||
|
font-size: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.email-body {
|
||||||
|
padding: 20px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.request-card .member-name {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question-box p {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-button {
|
||||||
|
padding: 16px 40px;
|
||||||
|
font-size: 18px;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.responsibility-item {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body
|
||||||
|
.email-container
|
||||||
|
//- Header
|
||||||
|
.email-header
|
||||||
|
img.header-logo(src=baseurl+'/images/logo.png' alt=nomeapp)
|
||||||
|
h1 🔔 Richiesta di Ammissione
|
||||||
|
p.subtitle Nuovo membro in attesa
|
||||||
|
|
||||||
|
//- Body
|
||||||
|
.email-body
|
||||||
|
//- Intro
|
||||||
|
.intro-text
|
||||||
|
| Ciao <strong>#{nomeInvitante}</strong>,<br>
|
||||||
|
| hai una nuova richiesta di ammissione da confermare!
|
||||||
|
|
||||||
|
//- Card richiesta
|
||||||
|
.request-card
|
||||||
|
h3 👤 Richiesta di Ingresso
|
||||||
|
.member-name #{usernameInvitato}
|
||||||
|
if nomeInvitato
|
||||||
|
.member-detail
|
||||||
|
strong Nome:
|
||||||
|
| #{nomeInvitato}
|
||||||
|
if emailInvitato
|
||||||
|
.member-detail
|
||||||
|
strong Email:
|
||||||
|
| #{emailInvitato}
|
||||||
|
|
||||||
|
//- Domanda di conferma
|
||||||
|
.question-box
|
||||||
|
p 🤔 Confermi di conoscere #{nomeInvitato}?
|
||||||
|
|
||||||
|
//- CTA principale
|
||||||
|
.cta-section
|
||||||
|
.cta-title Ammetti #{usernameInvitato} su #{nomeapp}
|
||||||
|
a.cta-button(href=linkAmmissione target="_blank")
|
||||||
|
span.button-icon ✓
|
||||||
|
| Sì, Confermo
|
||||||
|
|
||||||
|
//- Responsabilità
|
||||||
|
.responsibility-box
|
||||||
|
h3 📋 La tua responsabilità come invitante
|
||||||
|
.responsibility-item
|
||||||
|
span.responsibility-icon 🤝
|
||||||
|
span.responsibility-text
|
||||||
|
strong Conoscenza diretta:
|
||||||
|
| Dovresti ammettere solo persone che conosci personalmente e di cui ti fidi
|
||||||
|
.responsibility-item
|
||||||
|
span.responsibility-icon 🛡️
|
||||||
|
span.responsibility-text
|
||||||
|
strong Fiducia:
|
||||||
|
| L'ammissione si basa sulla fiducia reciproca nella piattaforma su #{nomeapp}
|
||||||
|
.responsibility-item
|
||||||
|
span.responsibility-icon 👥
|
||||||
|
span.responsibility-text
|
||||||
|
strong Supporto:
|
||||||
|
| Come invitante, aiuterai il nuovo membro a integrarsi nella comunità
|
||||||
|
|
||||||
|
//- Info box
|
||||||
|
.info-box
|
||||||
|
p
|
||||||
|
| ✓ Dopo l'ammissione, #{usernameInvitato} potrà completare il profilo
|
||||||
|
p
|
||||||
|
| ✓ Il facilitatore locale valuterà l'abilitazione all'uso dei RIS
|
||||||
|
|
||||||
|
//- Warning box
|
||||||
|
.warning-box
|
||||||
|
p
|
||||||
|
strong ⚠️ Importante:
|
||||||
|
| Se non conosci questa persona o hai dubbi sull'ammissione, ti consigliamo di non procedere. Puoi contattare il facilitatore locale per ulteriori informazioni o semplicemente non cliccare sul pulsante di conferma.
|
||||||
|
|
||||||
|
//- Footer
|
||||||
|
.email-footer
|
||||||
|
.divider
|
||||||
|
p Hai ricevuto questa email perché #{usernameInvitato} ha indicato te come invitante su #{nomeapp}
|
||||||
|
p(style="margin-top: 12px; font-size: 12px;")
|
||||||
|
| #{new Date().getFullYear()} #{nomeapp} - Rete Italiana Scambi Orizzontali
|
||||||
|
p(style="margin-top: 12px; font-size: 12px;")
|
||||||
|
| 🍚 Comunità · Fiducia · Scambi Solidali · Sostenibilità
|
||||||
1
emails/defaultSite/reg_chiedi_ammettere_all_invitante/it/subject.pug
Executable file
1
emails/defaultSite/reg_chiedi_ammettere_all_invitante/it/subject.pug
Executable file
@@ -0,0 +1 @@
|
|||||||
|
=`🎉 ${name ? ', ' + name : username} chiede di essere ammesso su ${nomeapp} !`
|
||||||
@@ -331,7 +331,7 @@ html(lang="it")
|
|||||||
.riso-info
|
.riso-info
|
||||||
h3 🍚 Cos'è il Progetto RISO?
|
h3 🍚 Cos'è il Progetto RISO?
|
||||||
p
|
p
|
||||||
| RISO è una <strong>rete di comunità territoriali</strong> in tutta Italia dove puoi scambiare beni, servizi e ospitalità con altre persone, usando il <strong>baratto, il dono</strong>, oppure la moneta complementare <strong>RIS</strong>.
|
| RISO è una <strong>rete di comunità territoriali</strong> in tutta Italia dove puoi scambiare beni, servizi e ospitalità con altre persone, usando il <strong>baratto, il dono</strong>, oppure in <strong>RIS</strong>.
|
||||||
p
|
p
|
||||||
| Non è un marketplace commerciale: è una <strong>comunità basata su fiducia e relazioni</strong> reali tra persone che si conoscono e si incontrano.
|
| Non è un marketplace commerciale: è una <strong>comunità basata su fiducia e relazioni</strong> reali tra persone che si conoscono e si incontrano.
|
||||||
|
|
||||||
@@ -368,7 +368,7 @@ html(lang="it")
|
|||||||
| <strong>Fiducia:</strong> Base del nostro sistema di scambio
|
| <strong>Fiducia:</strong> Base del nostro sistema di scambio
|
||||||
.value-item
|
.value-item
|
||||||
span.benefit-icon 🚫
|
span.benefit-icon 🚫
|
||||||
| <strong>Non speculativo:</strong> I RIS non hanno valore in sé, ma solo come <strong>unità di misura</strong> degli scambi
|
| <strong>Non speculativo:</strong> il RIS non è una moneta complementare, è un Sistema di Credito Naturale. Non serve a 'comprare' cose, ma a <strong>misurare e scambiare l'energia umana</strong>.
|
||||||
.value-item
|
.value-item
|
||||||
span.benefit-icon 🌍
|
span.benefit-icon 🌍
|
||||||
| <strong>Sostenibilità:</strong> Promuoviamo stili di vita sani e naturali
|
| <strong>Sostenibilità:</strong> Promuoviamo stili di vita sani e naturali
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ html(lang="it")
|
|||||||
padding: 20px;
|
padding: 20px;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-logo {
|
.header-logo {
|
||||||
width: 80px;
|
width: 120px;
|
||||||
height: auto;
|
height: auto;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
display: block;
|
display: block;
|
||||||
@@ -35,7 +36,7 @@ html(lang="it")
|
|||||||
}
|
}
|
||||||
|
|
||||||
.email-header {
|
.email-header {
|
||||||
background: linear-gradient(135deg, #027be3 0%, #0056b3 100%);
|
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||||
color: white;
|
color: white;
|
||||||
padding: 40px 24px;
|
padding: 40px 24px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
@@ -43,90 +44,39 @@ html(lang="it")
|
|||||||
|
|
||||||
.email-header h1 {
|
.email-header h1 {
|
||||||
margin: 0 0 8px 0;
|
margin: 0 0 8px 0;
|
||||||
font-size: 28px;
|
font-size: 26px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
line-height: 1.3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.email-header p {
|
.email-header .subtitle {
|
||||||
margin: 0;
|
margin: 8px 0 0 0;
|
||||||
font-size: 16px;
|
font-size: 17px;
|
||||||
opacity: 0.95;
|
opacity: 0.95;
|
||||||
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.welcome-icon {
|
.welcome-icon {
|
||||||
font-size: 48px;
|
font-size: 56px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.email-body {
|
.email-body {
|
||||||
padding: 20px 16px;
|
padding: 32px 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.intro-text {
|
.intro-text {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #333;
|
color: #333;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 20px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 1.7;
|
line-height: 1.7;
|
||||||
}
|
}
|
||||||
|
|
||||||
.credentials-box {
|
|
||||||
background: #f8f9fa;
|
|
||||||
border-left: 4px solid #027be3;
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 12px;
|
|
||||||
margin-bottom: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credentials-title {
|
|
||||||
font-size: 15px;
|
|
||||||
font-weight: 600;
|
|
||||||
color: #555;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credential-row {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
padding: 6px 0;
|
|
||||||
border-bottom: 1px solid #e0e0e0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credential-row:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
padding-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credential-label {
|
|
||||||
font-weight: 600;
|
|
||||||
color: #666;
|
|
||||||
min-width: 120px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credential-value {
|
|
||||||
color: #1a1a1a;
|
|
||||||
font-size: 15px;
|
|
||||||
font-weight: 500;
|
|
||||||
flex: 1;
|
|
||||||
word-break: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credential-value a {
|
|
||||||
color: #027be3;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credential-value a:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-section {
|
.cta-section {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 16px 0;
|
margin: 24px 0;
|
||||||
padding: 16px 0;
|
padding: 20px 0;
|
||||||
border-top: 1px solid #e0e0e0;
|
border-top: 1px solid #e0e0e0;
|
||||||
border-bottom: 1px solid #e0e0e0;
|
border-bottom: 1px solid #e0e0e0;
|
||||||
}
|
}
|
||||||
@@ -138,57 +88,22 @@ html(lang="it")
|
|||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cta-buttons-wrapper {
|
|
||||||
display: flex;
|
|
||||||
gap: 12px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: stretch;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
margin-top: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-button {
|
.cta-button {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 16px 32px;
|
padding: 16px 48px;
|
||||||
font-size: 16px;
|
font-size: 18px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: white;
|
color: white;
|
||||||
background: linear-gradient(135deg, #027be3 0%, #0056b3 100%);
|
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
box-shadow: 0 4px 12px rgba(2, 123, 227, 0.3);
|
box-shadow: 0 4px 12px rgba(124, 179, 66, 0.3);
|
||||||
transition: transform 0.2s, box-shadow 0.2s;
|
transition: all 0.3s ease;
|
||||||
flex: 1;
|
|
||||||
min-width: 180px;
|
|
||||||
max-width: 220px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-button:hover {
|
|
||||||
transform: translateY(-2px);
|
|
||||||
box-shadow: 0 6px 16px rgba(2, 123, 227, 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-button-secondary {
|
|
||||||
background: linear-gradient(135deg, #28a745 0%, #1e7e34 100%);
|
|
||||||
box-shadow: 0 4px 12px rgba(40, 167, 69, 0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-button-secondary:hover {
|
|
||||||
box-shadow: 0 6px 16px rgba(40, 167, 69, 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-button-tertiary {
|
|
||||||
background: linear-gradient(135deg, #ff9800 0%, #f57c00 100%);
|
|
||||||
box-shadow: 0 4px 12px rgba(255, 152, 0, 0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-button-tertiary:hover {
|
|
||||||
box-shadow: 0 6px 16px rgba(255, 152, 0, 0.4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-icon {
|
.button-icon {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
margin-right: 6px;
|
margin-right: 8px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,31 +111,114 @@ html(lang="it")
|
|||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
color: #777;
|
color: #777;
|
||||||
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.alternative-link a {
|
.alternative-link a {
|
||||||
color: #027be3;
|
color: #558b2f;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-box {
|
.verification-process {
|
||||||
background: #e3f2fd;
|
background: #f8f9fa;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 10px;
|
padding: 24px 20px;
|
||||||
margin-top: 12px;
|
margin: 24px 0;
|
||||||
text-align: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-box p {
|
.process-title {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #1a1a1a;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.process-title .icon {
|
||||||
|
font-size: 24px;
|
||||||
|
margin-right: 8px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.process-steps {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.process-step {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
padding: 16px;
|
||||||
|
background: white;
|
||||||
|
border-radius: 8px;
|
||||||
|
border-left: 4px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.process-step.active {
|
||||||
|
border-left-color: #7cb342;
|
||||||
|
background: linear-gradient(135deg, #f8fdf8 0%, #e8f5e9 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-badge {
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #e0e0e0;
|
||||||
|
color: #666;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 18px;
|
||||||
|
margin-right: 16px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.process-step.active .step-badge {
|
||||||
|
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-content {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-content h4 {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #1a1a1a;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-content p {
|
||||||
|
font-size: 15px;
|
||||||
|
color: #555;
|
||||||
|
line-height: 1.5;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: #1565c0;
|
}
|
||||||
font-size: 14px;
|
|
||||||
|
.info-note {
|
||||||
|
background: #fff8dc;
|
||||||
|
border-left: 4px solid #7cb342;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 14px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-note p {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #1a1a1a;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.info-note strong {
|
||||||
|
color: #558b2f;
|
||||||
|
}
|
||||||
|
|
||||||
.email-footer {
|
.email-footer {
|
||||||
padding: 16px 12px;
|
padding: 20px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background: #f8f9fa;
|
background: #f8f9fa;
|
||||||
color: #777;
|
color: #777;
|
||||||
@@ -234,115 +232,132 @@ html(lang="it")
|
|||||||
.divider {
|
.divider {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background: linear-gradient(to right, transparent, #e0e0e0, transparent);
|
background: linear-gradient(to right, transparent, #e0e0e0, transparent);
|
||||||
margin: 24px 0;
|
margin: 20px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 600px) {
|
@media only screen and (max-width: 600px) {
|
||||||
body {
|
body {
|
||||||
padding: 5px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.email-header {
|
.email-header {
|
||||||
padding: 16px 10px;
|
padding: 24px 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.email-header h1 {
|
.email-header h1 {
|
||||||
font-size: 24px;
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.welcome-icon {
|
||||||
|
font-size: 48px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.email-body {
|
.email-body {
|
||||||
padding: 16px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credentials-box {
|
|
||||||
padding: 20px 16px;
|
padding: 20px 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.credential-row {
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credential-label {
|
|
||||||
margin-bottom: 4px;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.credential-value {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-buttons-wrapper {
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cta-button {
|
.cta-button {
|
||||||
padding: 14px 24px;
|
padding: 14px 32px;
|
||||||
font-size: 15px;
|
font-size: 16px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 100%;
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.verification-process {
|
||||||
|
padding: 20px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.process-step {
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-badge {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-content h4 {
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-content p {
|
||||||
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
body
|
body
|
||||||
.email-container
|
.email-container
|
||||||
|
//- Header
|
||||||
.email-header
|
.email-header
|
||||||
- var baseimg = baseurl + '/';
|
- var baseimg = baseurl + '/';
|
||||||
img.header-logo(src=baseimg+"images/logo.png" alt=nomeapp || 'Logo')
|
img.header-logo(src=baseimg+"images/logo.png" alt=nomeapp || 'RISO')
|
||||||
h1 Benvenuto #{name ? ', ' + name : username}
|
h1 Benvenuto/a #{name ? name : username} su #{nomeapp}!
|
||||||
| su #{nomeapp || 'la nostra piattaforma'}!
|
p.subtitle Rete Italiana Scambio Orizzontale
|
||||||
|
|
||||||
|
//- Body
|
||||||
.email-body
|
.email-body
|
||||||
if !verified_email
|
if !verified_email
|
||||||
.intro-text
|
.intro-text
|
||||||
| Verifica il tuo indirizzo email cliccando sul pulsante qui sotto.
|
| Per iniziare il tuo percorso in RISO, verifica il tuo indirizzo email cliccando sul pulsante qui sotto.
|
||||||
|
|
||||||
.cta-section
|
.cta-section
|
||||||
.cta-title 🔐 1. Verifica il tuo account
|
.cta-title 🔐 Verifica il tuo account
|
||||||
|
|
||||||
if strlinkreg
|
if strlinkreg
|
||||||
a.cta-button(href=strlinkreg target="_blank")
|
a.cta-button(href=strlinkreg target="_blank")
|
||||||
span.button-icon ✓
|
span.button-icon ✓
|
||||||
| Verifica Registrazione
|
| Verifica Email
|
||||||
|
|
||||||
.alternative-link
|
.alternative-link
|
||||||
| Oppure copia e incolla questo link nel tuo browser:
|
| Oppure copia e incolla questo link nel tuo browser:
|
||||||
br
|
br
|
||||||
a(href=strlinkreg target="_blank") #{strlinkreg}
|
a(href=strlinkreg target="_blank") #{strlinkreg}
|
||||||
|
|
||||||
|
//- Processo di verifica
|
||||||
.verification-process
|
.verification-process
|
||||||
.process-title
|
.process-title
|
||||||
span.icon 📋
|
span.icon 🌱
|
||||||
| Il tuo percorso di ingresso in RISO
|
| Il tuo percorso di ingresso in RISO
|
||||||
|
|
||||||
.process-steps
|
.process-steps
|
||||||
.process-step
|
.process-step
|
||||||
.step-badge 1
|
.step-badge 1
|
||||||
.step-content
|
.step-content
|
||||||
h4 ✓ Verifica la tua email:
|
h4 ✓ Verifica la tua email
|
||||||
p Cliccando sul bottone qui sopra.
|
p Clicca sul pulsante sopra per confermare il tuo indirizzo email.
|
||||||
|
|
||||||
.process-step.active
|
.process-step.active
|
||||||
.step-badge 2
|
.step-badge 2
|
||||||
.step-content
|
.step-content
|
||||||
h4 ⏳ In attesa di ammissione
|
h4 ⏳ In attesa di ammissione
|
||||||
p Il tuo invitante vedrà la tua richiesta. Riceverai un'email appena sarai ammesso !
|
p Il tuo invitante vedrà la tua richiesta. Riceverai un'email appena sarai ammesso!
|
||||||
|
|
||||||
.process-step
|
.process-step
|
||||||
.step-badge 3
|
.step-badge 3
|
||||||
.step-content
|
.step-content
|
||||||
h4 🎉 Accesso alla piattaforma
|
h4 🎯 Completa il tuo profilo
|
||||||
p Potrai così accedere e completare il tuo profilo per iniziare a fare parte della comunità RISO.
|
p Una volta ammesso, potrai completare il tuo profilo e iniziare a fare parte della comunità RISO.
|
||||||
|
|
||||||
|
.process-step
|
||||||
|
.step-badge 4
|
||||||
|
.step-content
|
||||||
|
h4 🍚 Inizia a scambiare
|
||||||
|
p Crea annunci, scambia beni e servizi, e partecipa agli eventi della tua comunità locale!
|
||||||
|
|
||||||
.info-note
|
.info-note
|
||||||
p
|
p
|
||||||
strong 💡 Suggerimento:
|
strong 💡 Suggerimento:
|
||||||
| Se dovesse passare più di 24 ore, contatta il tuo invitante per ricordargli di ammetterti.
|
| Se dovessero passare più di 24 ore senza ammissione, contatta il tuo invitante per ricordargli di approvarti.
|
||||||
|
|
||||||
|
//- Footer
|
||||||
.email-footer
|
.email-footer
|
||||||
.divider
|
.divider
|
||||||
p Hai ricevuto questa email perché ti sei registrato su #{nomeapp || 'la nostra piattaforma'}
|
p Hai ricevuto questa email perché ti sei registrato su #{nomeapp || 'RISO'}
|
||||||
p(style="margin-top: 12px; font-size: 12px;")
|
p(style="margin-top: 12px; font-size: 12px;")
|
||||||
| © #{new Date().getFullYear()} #{nomeapp || ''}.
|
| #{new Date().getFullYear()} #{nomeapp || 'RISO'} - Rete Italiana Scambi Orizzontali
|
||||||
p(style="margin-top: 8px; font-size: 11px; color: #999;")
|
p(style="margin-top: 8px; font-size: 11px; color: #999;")
|
||||||
| Se non hai richiesto questa registrazione, ignora questa email.
|
| Se non hai richiesto questa registrazione, puoi semplicemente ignorare questa email.
|
||||||
|
p(style="margin-top: 12px; font-size: 12px;")
|
||||||
|
| 🍚 Comunità · Fiducia · Scambi Solidali · Sostenibilità
|
||||||
@@ -1,26 +1,128 @@
|
|||||||
p Ciao #{name},
|
doctype html
|
||||||
p #{nomeapp} recentemente ha ricevuto una richiesta per una password dimenticata.
|
html(lang="it")
|
||||||
|
head
|
||||||
|
meta(charset="UTF-8")
|
||||||
|
meta(name="viewport" content="width=device-width, initial-scale=1.0")
|
||||||
|
title Recupera Password - #{nomeapp}
|
||||||
|
|
||||||
p Per cambiare la tua password di #{nomeapp}
|
body(style="margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); background-color: #f5f7fa;")
|
||||||
p <a href=#{strlinksetpassword} target="_blank">Clicca QUI</a>
|
|
||||||
span Oppure inserisci il codice
|
|
||||||
span.grande #{tokenforgot_code}
|
|
||||||
span sulla APP
|
|
||||||
p
|
|
||||||
p P.S: Se non sei stato tu a richiedere questo cambiamento, non hai bisogno di fare niente.
|
|
||||||
p Questo link scadrà tra 4 ore.<br>
|
|
||||||
|
|
||||||
p Cordiali Saluti
|
// Container Principale
|
||||||
p Supporto #{nomeapp}
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 40px 20px;")
|
||||||
|
tr
|
||||||
|
td(align="center")
|
||||||
|
|
||||||
style(type="text/css").
|
// Card Email
|
||||||
html, body {
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="max-width: 600px; background: #ffffff; border-radius: 24px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.16); overflow: hidden;")
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.grande {
|
// Header con Icona
|
||||||
font-size: 1.25rem;
|
tr
|
||||||
font-weight: bold;
|
td(style="background: linear-gradient(to bottom, rgba(103, 126, 234, 0.08), transparent); padding: 40px 32px 32px; text-align: center; border-bottom: 1px solid rgba(0, 0, 0, 0.06);")
|
||||||
}
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%")
|
||||||
|
tr
|
||||||
|
td(align="center")
|
||||||
|
// Icona
|
||||||
|
div(style="width: 100px; height: 100px; margin: 0 auto 20px; background: linear-gradient(135deg, rgba(25, 118, 210, 0.15), rgba(38, 166, 154, 0.15)); border-radius: 50%; display: flex; align-items: center; justify-content: center;")
|
||||||
|
span(style="font-size: 48px; color: #1976d2;") 🔐
|
||||||
|
|
||||||
|
// Titolo
|
||||||
|
h1(style="margin: 0 0 12px; font-size: 28px; font-weight: 600; color: #1a1a1a; line-height: 1.3;") Recupera la tua Password
|
||||||
|
p(style="margin: 0; font-size: 16px; color: #666; line-height: 1.5;")
|
||||||
|
| Ciao
|
||||||
|
strong(style="color: #333;") #{name}
|
||||||
|
| , abbiamo ricevuto una richiesta per reimpostare la tua password
|
||||||
|
|
||||||
|
// Contenuto Principale
|
||||||
|
tr
|
||||||
|
td(style="padding: 32px;")
|
||||||
|
|
||||||
|
// Messaggio
|
||||||
|
p(style="margin: 0 0 24px; font-size: 16px; color: #333; line-height: 1.6;")
|
||||||
|
| Per cambiare la tua password di
|
||||||
|
strong #{nomeapp}
|
||||||
|
| , puoi utilizzare uno dei seguenti metodi:
|
||||||
|
|
||||||
|
// Metodo 1: Bottone Link
|
||||||
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin-bottom: 32px;")
|
||||||
|
tr
|
||||||
|
td(style="background: linear-gradient(to right, rgba(25, 118, 210, 0.08), transparent); padding: 24px; border-radius: 16px; border: 1px solid rgba(25, 118, 210, 0.15);")
|
||||||
|
p(style="margin: 0 0 16px; font-size: 14px; font-weight: 600; color: #1976d2; text-transform: uppercase; letter-spacing: 0.5px;") ✨ Metodo 1: Link Diretto
|
||||||
|
|
||||||
|
// Bottone CTA
|
||||||
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%")
|
||||||
|
tr
|
||||||
|
td(align="center" style="padding: 8px 0;")
|
||||||
|
a(href=strlinksetpassword target="_blank" style="display: inline-block; padding: 16px 48px; background: linear-gradient(135deg, #1976d2, #42a5f5); color: #ffffff; text-decoration: none; border-radius: 12px; font-size: 16px; font-weight: 600; box-shadow: 0 4px 16px rgba(25, 118, 210, 0.3);")
|
||||||
|
| 🔓 Reimposta Password
|
||||||
|
|
||||||
|
p(style="margin: 16px 0 0; font-size: 13px; color: #666; text-align: center;")
|
||||||
|
| Il link è valido per
|
||||||
|
strong(style="color: #f2c037;") 4 ore
|
||||||
|
|
||||||
|
// Divisore
|
||||||
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: 24px 0;")
|
||||||
|
tr
|
||||||
|
td(style="position: relative; text-align: center;")
|
||||||
|
div(style="position: relative; height: 1px; background: linear-gradient(to right, transparent, rgba(0, 0, 0, 0.12), transparent);")
|
||||||
|
span(style="position: relative; top: -12px; display: inline-block; padding: 4px 16px; background: #ffffff; color: #666; font-size: 14px; font-weight: 500; border-radius: 12px; border: 1px solid rgba(0, 0, 0, 0.08);") oppure
|
||||||
|
|
||||||
|
// Metodo 2: Codice
|
||||||
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin-bottom: 24px;")
|
||||||
|
tr
|
||||||
|
td(style="background: linear-gradient(to right, rgba(33, 186, 69, 0.08), transparent); padding: 24px; border-radius: 16px; border: 1px solid rgba(33, 186, 69, 0.15);")
|
||||||
|
p(style="margin: 0 0 16px; font-size: 14px; font-weight: 600; color: #21ba45; text-transform: uppercase; letter-spacing: 0.5px;") 🔢 Metodo 2: Codice di Verifica
|
||||||
|
|
||||||
|
p(style="margin: 0 0 12px; font-size: 15px; color: #333;") Inserisci questo codice nell'app:
|
||||||
|
|
||||||
|
// Codice Box
|
||||||
|
div(style="background: #ffffff; border: 2px dashed #21ba45; border-radius: 12px; padding: 20px; text-align: center; margin: 16px 0;")
|
||||||
|
div(style="font-size: 36px; font-weight: 700; color: #1976d2; letter-spacing: 8px; font-family: 'Courier New', monospace;") #{tokenforgot_code}
|
||||||
|
|
||||||
|
p(style="margin: 12px 0 0; font-size: 13px; color: #666; text-align: center;")
|
||||||
|
| Copia e incolla il codice nell'app per confermare
|
||||||
|
|
||||||
|
// Warning Box
|
||||||
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%")
|
||||||
|
tr
|
||||||
|
td(style="background: rgba(242, 192, 55, 0.1); padding: 16px; border-radius: 12px; border-left: 4px solid #f2c037;")
|
||||||
|
p(style="margin: 0; font-size: 14px; color: #666; line-height: 1.6;")
|
||||||
|
strong(style="color: #333;") ⚠️ Importante:
|
||||||
|
br
|
||||||
|
| Se non sei stato tu a richiedere questo cambiamento, ignora questa email. La tua password rimarrà invariata.
|
||||||
|
|
||||||
|
// Footer
|
||||||
|
tr
|
||||||
|
td(style="background: linear-gradient(to top, rgba(0, 0, 0, 0.02), transparent); padding: 32px; text-align: center; border-top: 1px solid rgba(0, 0, 0, 0.06);")
|
||||||
|
p(style="margin: 0 0 8px; font-size: 15px; color: #333; font-weight: 600;") Cordiali Saluti
|
||||||
|
p(style="margin: 0 0 20px; font-size: 15px; color: #1976d2; font-weight: 600;")
|
||||||
|
| Supporto #{nomeapp}
|
||||||
|
|
||||||
|
// Info Footer
|
||||||
|
p(style="margin: 0; font-size: 13px; color: #999; line-height: 1.6;")
|
||||||
|
| Questa è una email automatica, per favore non rispondere.
|
||||||
|
br
|
||||||
|
| © #{new Date().getFullYear()} #{nomeapp}. Tutti i diritti riservati.
|
||||||
|
|
||||||
|
// Versione Mobile (per client email che non supportano media queries)
|
||||||
|
table(role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="max-width: 600px; margin: 0 auto; display: none;")
|
||||||
|
tr
|
||||||
|
td
|
||||||
|
style(type="text/css").
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
table[class="mobile-responsive"] {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
td[class="mobile-padding"] {
|
||||||
|
padding: 20px 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 24px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-box {
|
||||||
|
font-size: 28px !important;
|
||||||
|
letter-spacing: 4px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -78,3 +78,7 @@ Sab 22/11 ORE 23:30: USER [surya1977]: ciao
|
|||||||
Dom 23/11 ORE 00:02: USER [perseo5]: ciao
|
Dom 23/11 ORE 00:02: USER [perseo5]: ciao
|
||||||
|
|
||||||
Dom 23/11 ORE 00:22: USER [perseo7]: ciao
|
Dom 23/11 ORE 00:22: USER [perseo7]: ciao
|
||||||
|
|
||||||
|
Lun 24/11 ORE 13:56: USER [perseo7]: ciao
|
||||||
|
|
||||||
|
Lun 24/11 ORE 13:57: USER [perseo7]: chi sono
|
||||||
|
|||||||
@@ -5,4 +5,7 @@
|
|||||||
"Nuova Registrazione": "Nuova Registrazione",
|
"Nuova Registrazione": "Nuova Registrazione",
|
||||||
"Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione",
|
"Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione",
|
||||||
"partecipanti": "partecipanti",
|
"partecipanti": "partecipanti",
|
||||||
|
"Il membro ": "Il membro ",
|
||||||
|
" è stato già Ammesso!": " è stato già Ammesso!",
|
||||||
|
"Ottimo! Hai ammesso ": "Ottimo! Hai ammesso "
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -202,6 +202,12 @@ const UserSchema = new mongoose.Schema({
|
|||||||
verified_by_aportador: {
|
verified_by_aportador: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
},
|
},
|
||||||
|
token_da_ammettere: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
date_token_ammettere: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
notask_verif: {
|
notask_verif: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
},
|
},
|
||||||
@@ -1624,6 +1630,57 @@ UserSchema.statics.setUserQualified = async function (idapp, username) {
|
|||||||
return !!myrec;
|
return !!myrec;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
UserSchema.statics.setAmmissioneByTokenAndUsername = async function (idapp, username) {
|
||||||
|
const User = this;
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
if (username === undefined) return false;
|
||||||
|
|
||||||
|
const myquery = {
|
||||||
|
idapp: idapp,
|
||||||
|
username: username,
|
||||||
|
};
|
||||||
|
|
||||||
|
let creatoken = true;
|
||||||
|
let token = '';
|
||||||
|
|
||||||
|
const recfound = await User.findOne(myquery, { verified_by_aportador: 1, username: 1, token_da_ammettere: 1 });
|
||||||
|
if (recfound) {
|
||||||
|
if (recfound.token_da_ammettere) {
|
||||||
|
// token già creato
|
||||||
|
creatoken = false;
|
||||||
|
token = recfound.token_da_ammettere;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (creatoken) {
|
||||||
|
token = tools.getTokenRandom();
|
||||||
|
} else {
|
||||||
|
return recfound;
|
||||||
|
}
|
||||||
|
|
||||||
|
const rec = await User.findOneAndUpdate(myquery, { $set: { token_da_ammettere: token, date_token_ammettere: new Date(), } }, { new: true });
|
||||||
|
return rec;
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error setAmmissione', e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
UserSchema.statics.findAmmissioneByTokenAndUsername = async function (idapp, token, username) {
|
||||||
|
const User = this;
|
||||||
|
|
||||||
|
if (username === undefined) return false;
|
||||||
|
|
||||||
|
const myquery = {
|
||||||
|
idapp: idapp,
|
||||||
|
token_da_ammettere: token,
|
||||||
|
};
|
||||||
|
|
||||||
|
const rec = await User.findOne(myquery, { verified_by_aportador: 1, username: 1, aportador_solidario: 1, idapp: 1, lang: 1 });
|
||||||
|
return rec && username.toLowerCase() === rec.username.toLowerCase() ? rec : null;
|
||||||
|
};
|
||||||
|
|
||||||
UserSchema.statics.setVerifiedByAportador = async function (idapp, username, valuebool) {
|
UserSchema.statics.setVerifiedByAportador = async function (idapp, username, valuebool) {
|
||||||
const User = this;
|
const User = this;
|
||||||
|
|
||||||
|
|||||||
@@ -178,29 +178,6 @@ class CronMod {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ris = { num };
|
ris = { num };
|
||||||
/*} else if (mydata.dbop === 'visuPlacca') {
|
|
||||||
|
|
||||||
mystr = '✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨\n' +
|
|
||||||
'NAVI CHE SALPANO DALLA ' + mydata.riga + '.' + mydata.col + ' ALLA ' + mydata.riga + '.' + (parseInt(mydata.col) + 7) + '\n' +
|
|
||||||
'AUGURI ALLA NUOVA SOGNATRICE !!!\n' +
|
|
||||||
'✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨';
|
|
||||||
|
|
||||||
const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT');
|
|
||||||
|
|
||||||
for (let ind = 0; ind < 8; ind++) {
|
|
||||||
mystr += await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col) + ind, false);
|
|
||||||
mystr += tools.ACAPO;
|
|
||||||
if (visu_nave_Bot && ind === 3) {
|
|
||||||
await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true);
|
|
||||||
mystr = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (visu_nave_Bot)
|
|
||||||
await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true);
|
|
||||||
|
|
||||||
ris = { mystr };
|
|
||||||
*/
|
|
||||||
} else if (mydata.dbop === 'CorreggiTabHours') {
|
} else if (mydata.dbop === 'CorreggiTabHours') {
|
||||||
ris = await Hours.correggiHours(idapp);
|
ris = await Hours.correggiHours(idapp);
|
||||||
} else if (mydata.dbop === 'setVerifiedByAportadorToALL') {
|
} else if (mydata.dbop === 'setVerifiedByAportadorToALL') {
|
||||||
|
|||||||
19
src/modules/dist/CronMod.dev.js
vendored
19
src/modules/dist/CronMod.dev.js
vendored
@@ -293,25 +293,6 @@ function () {
|
|||||||
ris = {
|
ris = {
|
||||||
num: num
|
num: num
|
||||||
};
|
};
|
||||||
/*} else if (mydata.dbop === 'visuPlacca') {
|
|
||||||
mystr = '✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨\n' +
|
|
||||||
'NAVI CHE SALPANO DALLA ' + mydata.riga + '.' + mydata.col + ' ALLA ' + mydata.riga + '.' + (parseInt(mydata.col) + 7) + '\n' +
|
|
||||||
'AUGURI ALLA NUOVA SOGNATRICE !!!\n' +
|
|
||||||
'✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨';
|
|
||||||
const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT');
|
|
||||||
for (let ind = 0; ind < 8; ind++) {
|
|
||||||
mystr += await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col) + ind, false);
|
|
||||||
mystr += tools.ACAPO;
|
|
||||||
if (visu_nave_Bot && ind === 3) {
|
|
||||||
await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true);
|
|
||||||
mystr = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (visu_nave_Bot)
|
|
||||||
await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true);
|
|
||||||
ris = { mystr };
|
|
||||||
*/
|
|
||||||
|
|
||||||
_context.next = 682;
|
_context.next = 682;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,13 @@ const router = express.Router(),
|
|||||||
|
|
||||||
const telegrambot = require('../telegram/telegrambot');
|
const telegrambot = require('../telegram/telegrambot');
|
||||||
|
|
||||||
|
|
||||||
const i18n = require('i18n');
|
const i18n = require('i18n');
|
||||||
|
|
||||||
const sharp = require('sharp');
|
const sharp = require('sharp');
|
||||||
|
|
||||||
|
const printf = require('util').format;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
authenticate,
|
authenticate,
|
||||||
authenticate_noerror,
|
authenticate_noerror,
|
||||||
@@ -124,6 +127,78 @@ const UserCost = {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
router.post('/ammetti', (req, res) => {
|
||||||
|
const body = _.pick(req.body, ['idapp', 'token', 'username']);
|
||||||
|
const idapp = body.idapp;
|
||||||
|
const token = body.token;
|
||||||
|
const username = body.username;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Cerco il token se è ancora da ammettere
|
||||||
|
|
||||||
|
User.findAmmissioneByTokenAndUsername(idapp, token, username)
|
||||||
|
.then(async (user) => {
|
||||||
|
if (!user) {
|
||||||
|
return res.status(404).send();
|
||||||
|
} else {
|
||||||
|
const lang = user.lang;
|
||||||
|
console.log('user', user);
|
||||||
|
user.verified_by_aportador = false;
|
||||||
|
if (user.verified_by_aportador) {
|
||||||
|
res.send({
|
||||||
|
code: server_constants.RIS_CODE_GIA_AMMESSO,
|
||||||
|
msg: 'Il membro ' + user.username + ' è stato già Ammesso!',
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
user.verified_by_aportador = true;
|
||||||
|
|
||||||
|
const userDest = await User.getUserShortDataByUsername(user.idapp, user.aportador_solidario);
|
||||||
|
const myuser = user;
|
||||||
|
const dati = {
|
||||||
|
token,
|
||||||
|
}
|
||||||
|
|
||||||
|
const msgOrig = i18n.__(
|
||||||
|
{ phrase: '✅ Sei stato Ammesso correttamente da %s!', locale: lang },
|
||||||
|
userDest.username
|
||||||
|
);
|
||||||
|
const msgDest = i18n.__(
|
||||||
|
{ phrase: '✅ %s è stato Ammesso correttamente (da %s)!', locale: lang },
|
||||||
|
myuser.username,
|
||||||
|
userDest.username
|
||||||
|
);
|
||||||
|
|
||||||
|
const sendemail = require('../sendemail');
|
||||||
|
|
||||||
|
// Invia una email alla persona che è stata ammessa
|
||||||
|
const ris = await sendemail.sendEmail_Utente_Ammesso(user.lang, userDest.email, userDest, user.idapp, dati);
|
||||||
|
|
||||||
|
await telegrambot.sendMsgTelegram(user.idapp, myuser.username, msgOrig);
|
||||||
|
await telegrambot.sendMsgTelegram(user.idapp, userDest.username, msgDest);
|
||||||
|
// Invia questo msg anche all'Admin
|
||||||
|
await telegrambot.sendMsgTelegramToTheAdmin(user.idapp, msgDest, userDest.username);
|
||||||
|
|
||||||
|
// user.token_da_ammettere = 'OK';
|
||||||
|
user.save().then(() => {
|
||||||
|
res.send({
|
||||||
|
code: server_constants.RIS_CODE_AMMESSO,
|
||||||
|
msg: 'Ottimo! Hai ammesso ' + user.username + '!',
|
||||||
|
//msg: tools.getres__('Ottimo! Hai ammesso', res) + ' ' + user.username + '!',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
console.log('Errore Ammissione:', e.message);
|
||||||
|
res.status(400).send();
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Errore: ', e);
|
||||||
|
res.status(400).send();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
router.post(process.env.LINKVERIF_REG, (req, res) => {
|
router.post(process.env.LINKVERIF_REG, (req, res) => {
|
||||||
const body = _.pick(req.body, ['idapp', 'idlink']);
|
const body = _.pick(req.body, ['idapp', 'idlink']);
|
||||||
const idapp = body.idapp;
|
const idapp = body.idapp;
|
||||||
@@ -335,7 +410,9 @@ router.post('/sendmailreg', authenticate, async (req, res) => {
|
|||||||
const diffMinutes = Math.ceil(diffTime / (1000 * 60));
|
const diffMinutes = Math.ceil(diffTime / (1000 * 60));
|
||||||
|
|
||||||
if (diffMinutes < 5) {
|
if (diffMinutes < 5) {
|
||||||
return res.status(200).send({ email_inviata: false, error: 'Attendi qualche minuto prima di reinviare nuovamente.' });
|
return res
|
||||||
|
.status(200)
|
||||||
|
.send({ email_inviata: false, error: 'Attendi qualche minuto prima di reinviare nuovamente.' });
|
||||||
}
|
}
|
||||||
ris = await sendemail.sendEmail_Registration(user.lang, user.email, user, user.idapp, user.linkreg);
|
ris = await sendemail.sendEmail_Registration(user.lang, user.email, user, user.idapp, user.linkreg);
|
||||||
user.lasttime_email_sent_verify = now;
|
user.lasttime_email_sent_verify = now;
|
||||||
@@ -396,7 +473,9 @@ router.post('/settable', authenticate, async (req, res) => {
|
|||||||
(await !tools.ModificheConsentite(req, params.table, fieldsvalue, mydata ? mydata._id : ''))
|
(await !tools.ModificheConsentite(req, params.table, fieldsvalue, mydata ? mydata._id : ''))
|
||||||
) {
|
) {
|
||||||
// If without permissions, exit
|
// If without permissions, exit
|
||||||
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
return res
|
||||||
|
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
|
||||||
|
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shared_consts.TABLES_USER_ID.includes(params.table)) {
|
if (shared_consts.TABLES_USER_ID.includes(params.table)) {
|
||||||
@@ -533,7 +612,6 @@ router.post('/settable', authenticate, async (req, res) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return await myPromise
|
return await myPromise
|
||||||
.then(async (doupdate) => {
|
.then(async (doupdate) => {
|
||||||
if (false) {
|
if (false) {
|
||||||
@@ -827,7 +905,9 @@ router.post('/getexp', authenticate, (req, res) => {
|
|||||||
|
|
||||||
if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm) && !User.isFacilitatore(req.user.perm)) {
|
if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm) && !User.isFacilitatore(req.user.perm)) {
|
||||||
// If without permissions, exit
|
// If without permissions, exit
|
||||||
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
return res
|
||||||
|
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
|
||||||
|
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -1334,7 +1414,9 @@ router.patch('/chval', authenticate, async (req, res) => {
|
|||||||
!(mydata.table === 'accounts' && (await Account.canEditAccountAdmins(req.user.username, mydata.id)))
|
!(mydata.table === 'accounts' && (await Account.canEditAccountAdmins(req.user.username, mydata.id)))
|
||||||
) {
|
) {
|
||||||
// If without permissions, exit
|
// If without permissions, exit
|
||||||
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
return res
|
||||||
|
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
|
||||||
|
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
||||||
}
|
}
|
||||||
|
|
||||||
const camporequisiti = UserCost.FIELDS_REQUISITI.includes(Object.keys(fieldsvalue)[0]);
|
const camporequisiti = UserCost.FIELDS_REQUISITI.includes(Object.keys(fieldsvalue)[0]);
|
||||||
@@ -1617,7 +1699,9 @@ router.patch('/askfunz', authenticate, async (req, res) => {
|
|||||||
req.user._id.toString() !== id
|
req.user._id.toString() !== id
|
||||||
) {
|
) {
|
||||||
// If without permissions, exit
|
// If without permissions, exit
|
||||||
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
return res
|
||||||
|
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
|
||||||
|
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1676,7 +1760,9 @@ router.patch('/callfunz', authenticate, async (req, res) => {
|
|||||||
req.user._id.toString() !== id
|
req.user._id.toString() !== id
|
||||||
) {
|
) {
|
||||||
// If without permissions, exit
|
// If without permissions, exit
|
||||||
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
return res
|
||||||
|
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
|
||||||
|
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1755,7 +1841,9 @@ router.delete('/delrec/:table/:id', authenticate, async (req, res) => {
|
|||||||
(await !tools.ModificheConsentite(req, tablename, fields, id, req.user))
|
(await !tools.ModificheConsentite(req, tablename, fields, id, req.user))
|
||||||
) {
|
) {
|
||||||
// If without permissions, exit
|
// If without permissions, exit
|
||||||
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
return res
|
||||||
|
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
|
||||||
|
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
||||||
}
|
}
|
||||||
|
|
||||||
let cancellato = false;
|
let cancellato = false;
|
||||||
@@ -1863,7 +1951,9 @@ router.post('/duprec/:table/:id', authenticate, async (req, res) => {
|
|||||||
const mytable = globalTables.getTableByTableName(tablename);
|
const mytable = globalTables.getTableByTableName(tablename);
|
||||||
|
|
||||||
if (!req.user) {
|
if (!req.user) {
|
||||||
return res.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
return res
|
||||||
|
.status(server_constants.RIS_CODE_ERR_UNAUTHORIZED)
|
||||||
|
.send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) {
|
/* if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) {
|
||||||
|
|||||||
@@ -498,9 +498,16 @@ module.exports = {
|
|||||||
const strlinkreg = tools.getHostByIdApp(idapp) + `/invitetoreg/${dati.token}`;
|
const strlinkreg = tools.getHostByIdApp(idapp) + `/invitetoreg/${dati.token}`;
|
||||||
return strlinkreg;
|
return strlinkreg;
|
||||||
},
|
},
|
||||||
|
getLinkAmmissione: function (idapp, user) {
|
||||||
|
if (user.token_da_ammettere) {
|
||||||
|
const strlink = tools.getHostByIdApp(idapp) + `/ammetti/${user.token_da_ammettere}/${user.username}`;
|
||||||
|
return strlink;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
},
|
||||||
|
|
||||||
getPathEmail(idapp, email_template) {
|
getPathEmail(idapp, email_template) {
|
||||||
const RISO_TEMPLATES = ['reg_notifica_all_invitante', 'reg_email_benvenuto_ammesso'];
|
const RISO_TEMPLATES = ['reg_notifica_all_invitante', 'reg_email_benvenuto_ammesso', 'reg_chiedi_ammettere_all_invitante'];
|
||||||
|
|
||||||
if (idapp === '13') {
|
if (idapp === '13') {
|
||||||
if (RISO_TEMPLATES.includes(email_template)) {
|
if (RISO_TEMPLATES.includes(email_template)) {
|
||||||
@@ -513,6 +520,14 @@ module.exports = {
|
|||||||
try {
|
try {
|
||||||
const nomecognomeInvitante = await User.getNameSurnameByUsername(idapp, user.aportador_solidario, true);
|
const nomecognomeInvitante = await User.getNameSurnameByUsername(idapp, user.aportador_solidario, true);
|
||||||
|
|
||||||
|
if (!user.verified_by_aportador) {
|
||||||
|
// Genera Token per Ammettere l'Utente
|
||||||
|
const r1 = await User.setAmmissioneByTokenAndUsername(idapp, user.username);
|
||||||
|
if (r1 && r1.token_da_ammettere) {
|
||||||
|
user.token_da_ammettere = r1.token_da_ammettere;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mylocalsconf = {
|
let mylocalsconf = {
|
||||||
idapp,
|
idapp,
|
||||||
dataemail: await this.getdataemail(idapp),
|
dataemail: await this.getdataemail(idapp),
|
||||||
@@ -522,6 +537,7 @@ module.exports = {
|
|||||||
strlinksito: tools.getHostByIdApp(idapp),
|
strlinksito: tools.getHostByIdApp(idapp),
|
||||||
strlinkreg: this.getlinkReg(idapp, idreg),
|
strlinkreg: this.getlinkReg(idapp, idreg),
|
||||||
forgetpwd: tools.getHostByIdApp(idapp) + '/requestresetpwd',
|
forgetpwd: tools.getHostByIdApp(idapp) + '/requestresetpwd',
|
||||||
|
linkAmmissione: this.getLinkAmmissione(idapp, user),
|
||||||
emailto: emailto,
|
emailto: emailto,
|
||||||
verified_email: user.verified_email,
|
verified_email: user.verified_email,
|
||||||
usernameInvitante: user.aportador_solidario,
|
usernameInvitante: user.aportador_solidario,
|
||||||
@@ -547,7 +563,7 @@ module.exports = {
|
|||||||
//Invia una email al nuovo utente
|
//Invia una email al nuovo utente
|
||||||
await this.sendEmail_base(quale_email_inviare, emailto, mylocalsconf, tools.getreplyToEmailByIdApp(idapp));
|
await this.sendEmail_base(quale_email_inviare, emailto, mylocalsconf, tools.getreplyToEmailByIdApp(idapp));
|
||||||
|
|
||||||
if (user.verified_email && user.aportador_solidario) {
|
if (user.verified_email && user.aportador_solidario && user.verified_by_aportador) {
|
||||||
const pathemail = this.getPathEmail(idapp, 'reg_notifica_all_invitante');
|
const pathemail = this.getPathEmail(idapp, 'reg_notifica_all_invitante');
|
||||||
|
|
||||||
// Manda anche una email al suo Invitante
|
// Manda anche una email al suo Invitante
|
||||||
@@ -558,6 +574,17 @@ module.exports = {
|
|||||||
mylocalsconf,
|
mylocalsconf,
|
||||||
''
|
''
|
||||||
);
|
);
|
||||||
|
} else if (user.aportador_solidario && !user.verified_by_aportador) {
|
||||||
|
const pathemail = this.getPathEmail(idapp, 'reg_chiedi_ammettere_all_invitante');
|
||||||
|
|
||||||
|
// Manda una email al suo Invitante per chiedere di essere ammesso
|
||||||
|
const recaportador = await User.getUserShortDataByUsername(idapp, user.aportador_solidario);
|
||||||
|
const ris = await this.sendEmail_base(
|
||||||
|
pathemail + '/' + tools.LANGADMIN,
|
||||||
|
recaportador.email,
|
||||||
|
mylocalsconf,
|
||||||
|
''
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send to the Admin an Email
|
// Send to the Admin an Email
|
||||||
@@ -626,15 +653,18 @@ module.exports = {
|
|||||||
emailto: emailto,
|
emailto: emailto,
|
||||||
usernameInvitante: dati.usernameInvitante,
|
usernameInvitante: dati.usernameInvitante,
|
||||||
ammessoUtente: true,
|
ammessoUtente: true,
|
||||||
|
user,
|
||||||
};
|
};
|
||||||
|
|
||||||
const ris = await this.sendEmail_base('reg_email_benvenuto_ammesso/' + lang, emailto, mylocalsconf, '');
|
const quale_email_inviare = this.getPathEmail(idapp, 'reg_email_benvenuto_ammesso') + '/' + lang;
|
||||||
|
|
||||||
|
const ris = await this.sendEmail_base(quale_email_inviare, emailto, mylocalsconf, '');
|
||||||
|
|
||||||
await telegrambot.notifyToTelegram(telegrambot.phase.AMMETTI_UTENTE, mylocalsconf);
|
await telegrambot.notifyToTelegram(telegrambot.phase.AMMETTI_UTENTE, mylocalsconf);
|
||||||
|
|
||||||
return ris;
|
return ris;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Err sendEmail_InvitaAmico', e);
|
console.error('Err sendEmail_Utente_Ammesso', e);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ const { MsgTemplate } = require('../models/msg_template');
|
|||||||
|
|
||||||
const i18n = require('i18n');
|
const i18n = require('i18n');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let url = process.env.URL || 'https://<PUBLIC-URL>';
|
let url = process.env.URL || 'https://<PUBLIC-URL>';
|
||||||
|
|
||||||
const Benvenuto = '💓💓💓 Benvenuto/a!';
|
const Benvenuto = '💓💓💓 Benvenuto/a!';
|
||||||
@@ -916,6 +918,7 @@ const MyTelegramBot = {
|
|||||||
callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + userDest,
|
callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + userDest,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
}
|
}
|
||||||
/*{
|
/*{
|
||||||
text: '🚫 Rifiuta ' + myuser.username,
|
text: '🚫 Rifiuta ' + myuser.username,
|
||||||
@@ -927,7 +930,6 @@ const MyTelegramBot = {
|
|||||||
if (telegid > 0) {
|
if (telegid > 0) {
|
||||||
cl.setPhotoProfile(myuser, telegid, false);
|
cl.setPhotoProfile(myuser, telegid, false);
|
||||||
|
|
||||||
|
|
||||||
const rismsg = await MsgTemplate.getMsgByLang(
|
const rismsg = await MsgTemplate.getMsgByLang(
|
||||||
idapp,
|
idapp,
|
||||||
myuser,
|
myuser,
|
||||||
@@ -941,7 +943,6 @@ const MyTelegramBot = {
|
|||||||
userDest = myuser.aportador_solidario;
|
userDest = myuser.aportador_solidario;
|
||||||
let useraportador = await User.getUserShortDataByUsername(idapp, userDest);
|
let useraportador = await User.getUserShortDataByUsername(idapp, userDest);
|
||||||
|
|
||||||
|
|
||||||
const rismsg2 = await MsgTemplate.getMsgByLang(
|
const rismsg2 = await MsgTemplate.getMsgByLang(
|
||||||
idapp,
|
idapp,
|
||||||
myuser,
|
myuser,
|
||||||
@@ -949,7 +950,6 @@ const MyTelegramBot = {
|
|||||||
myuser.lang
|
myuser.lang
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
const telegidInvitante = useraportador.profile.teleg_id;
|
const telegidInvitante = useraportador.profile.teleg_id;
|
||||||
|
|
||||||
await cl.sendMsgLog(telegidInvitante, rismsg2.body);
|
await cl.sendMsgLog(telegidInvitante, rismsg2.body);
|
||||||
@@ -1114,7 +1114,6 @@ const MyTelegramBot = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
askConfirmationUserFriend: async function (idapp, myfunc, myuser, userDest = '', username = '') {
|
askConfirmationUserFriend: async function (idapp, myfunc, myuser, userDest = '', username = '') {
|
||||||
try {
|
try {
|
||||||
const cl = getclTelegByidapp(idapp);
|
const cl = getclTelegByidapp(idapp);
|
||||||
@@ -2986,13 +2985,6 @@ class Telegram {
|
|||||||
if (recuser) {
|
if (recuser) {
|
||||||
rec.user = recuser;
|
rec.user = recuser;
|
||||||
console.log(recuser.username, " SI E' VERIFICATO CON TELEGRAM !");
|
console.log(recuser.username, " SI E' VERIFICATO CON TELEGRAM !");
|
||||||
// let username = recuser.name;
|
|
||||||
|
|
||||||
/*if (!!msg.from.username) {
|
|
||||||
await MyTelegramBot.askConfirmationUser(this.idapp, shared_consts.CallFunz.REGISTRATION, recuser);
|
|
||||||
} else {
|
|
||||||
console.log(' ... MA GLI MANCA L\'USERNAME TELEGRAM !! ');
|
|
||||||
} */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3318,7 +3310,6 @@ class Telegram {
|
|||||||
await this.verificaTelegramCompleted(msg, recuser);
|
await this.verificaTelegramCompleted(msg, recuser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3335,7 +3326,6 @@ class Telegram {
|
|||||||
msg.from.last_name || ''
|
msg.from.last_name || ''
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
rec.status = Status.VERIFIED;
|
rec.status = Status.VERIFIED;
|
||||||
rec.datemenu_updated = null;
|
rec.datemenu_updated = null;
|
||||||
rec.menuDb = null;
|
rec.menuDb = null;
|
||||||
@@ -4486,6 +4476,8 @@ if (true) {
|
|||||||
|
|
||||||
// RISPOSTE ALLE CALLBACK (Bottoni)
|
// RISPOSTE ALLE CALLBACK (Bottoni)
|
||||||
|
|
||||||
|
const sendemail = require('../sendemail');
|
||||||
|
|
||||||
let testo_notifica_di_risposta = '';
|
let testo_notifica_di_risposta = '';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -4578,6 +4570,7 @@ if (true) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Invia una email alla persona che è stata ammessa
|
// Invia una email alla persona che è stata ammessa
|
||||||
|
const ris = await sendemail.sendEmail_Utente_Ammesso(user.lang, userDest, null, user.idapp, null);
|
||||||
|
|
||||||
await local_sendMsgTelegram(user.idapp, data.username, msgOrig);
|
await local_sendMsgTelegram(user.idapp, data.username, msgOrig);
|
||||||
await local_sendMsgTelegram(user.idapp, data.userDest, msgDest);
|
await local_sendMsgTelegram(user.idapp, data.userDest, msgDest);
|
||||||
|
|||||||
@@ -96,6 +96,8 @@ const textlang = {
|
|||||||
NON_VERIF: 'Non Verificata',
|
NON_VERIF: 'Non Verificata',
|
||||||
VERIF: 'Verificata',
|
VERIF: 'Verificata',
|
||||||
EMAIL: 'Email',
|
EMAIL: 'Email',
|
||||||
|
MEMBRO_AMMESSO: 'Ottimo! Hai ammesso %s!',
|
||||||
|
MEMBRO_GIA_AMMESSO: 'Il membro %s è stato già Ammesso!',
|
||||||
BOT: 'BOT',
|
BOT: 'BOT',
|
||||||
EMAIL_NON_VERIF:
|
EMAIL_NON_VERIF:
|
||||||
'Email Non Verificata\nleggi la tua casella email e trova **"Confermare la Registrazione"**\ne clicca sul bottone **"Verifica Registrazione"**',
|
'Email Non Verificata\nleggi la tua casella email e trova **"Confermare la Registrazione"**\ne clicca sul bottone **"Verifica Registrazione"**',
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ module.exports = Object.freeze({
|
|||||||
RIS_CODE_EMAIL_ALREADY_VERIFIED: -5,
|
RIS_CODE_EMAIL_ALREADY_VERIFIED: -5,
|
||||||
RIS_CODE_EMAIL_VERIFIED: 1,
|
RIS_CODE_EMAIL_VERIFIED: 1,
|
||||||
|
|
||||||
|
RIS_CODE_AMMESSO: 1,
|
||||||
|
RIS_CODE_GIA_AMMESSO: -5,
|
||||||
|
|
||||||
RIS_CODE_REC_DUPLICATED_DESCR_CITY_USER: -110,
|
RIS_CODE_REC_DUPLICATED_DESCR_CITY_USER: -110,
|
||||||
RIS_CODE_REC_ALREADY_EXIST_SYMBOL: -102,
|
RIS_CODE_REC_ALREADY_EXIST_SYMBOL: -102,
|
||||||
RIS_CODE_REC_ALREADY_EXIST_CODE: -101,
|
RIS_CODE_REC_ALREADY_EXIST_CODE: -101,
|
||||||
@@ -53,30 +56,30 @@ module.exports = Object.freeze({
|
|||||||
es: 'Suscripción al boletín confirmado!',
|
es: 'Suscripción al boletín confirmado!',
|
||||||
it: 'Sottoscrizione alla Newsletter Confermata!',
|
it: 'Sottoscrizione alla Newsletter Confermata!',
|
||||||
fr: 'Inscription à la newsletter confirmée!',
|
fr: 'Inscription à la newsletter confirmée!',
|
||||||
de: 'Anmeldung zum Newsletter bestätigt!'
|
de: 'Anmeldung zum Newsletter bestätigt!',
|
||||||
} ,
|
},
|
||||||
RIS_SUBSCRIBED_MSG_ALREADYEXIST: {
|
RIS_SUBSCRIBED_MSG_ALREADYEXIST: {
|
||||||
enUs: 'Subscription already made!',
|
enUs: 'Subscription already made!',
|
||||||
es: 'Suscripción ya realizada!',
|
es: 'Suscripción ya realizada!',
|
||||||
it: 'Sottoscrizione già effettuata!',
|
it: 'Sottoscrizione già effettuata!',
|
||||||
fr: 'Abonnement déjà fait!',
|
fr: 'Abonnement déjà fait!',
|
||||||
de: 'Abonnement bereits gemacht!'
|
de: 'Abonnement bereits gemacht!',
|
||||||
} ,
|
},
|
||||||
RIS_SUBSCRIBED_MSG_FAILED: {
|
RIS_SUBSCRIBED_MSG_FAILED: {
|
||||||
enUs: 'Sign Up Failed :(',
|
enUs: 'Sign Up Failed :(',
|
||||||
es: 'Suscripción al boletín fallido',
|
es: 'Suscripción al boletín fallido',
|
||||||
it: 'Sottoscrizione alla Newsletter Fallita',
|
it: 'Sottoscrizione alla Newsletter Fallita',
|
||||||
fr: 'Abonnement à la newsletter en échec',
|
fr: 'Abonnement à la newsletter en échec',
|
||||||
de: 'Abonnement des fehlgeschlagenen Newsletters',
|
de: 'Abonnement des fehlgeschlagenen Newsletters',
|
||||||
} ,
|
},
|
||||||
|
|
||||||
RIS_UNSUBSTR_NOT_EXIST: {
|
RIS_UNSUBSTR_NOT_EXIST: {
|
||||||
enUs: 'Subscription email not found!',
|
enUs: 'Subscription email not found!',
|
||||||
es: 'Suscripción email no encontrada!',
|
es: 'Suscripción email no encontrada!',
|
||||||
it: 'Sottoscrizione Email non trovata!',
|
it: 'Sottoscrizione Email non trovata!',
|
||||||
fr: 'Abonnement courriel introuvable!',
|
fr: 'Abonnement courriel introuvable!',
|
||||||
de: 'E-Mail-Abonnement nicht gefunden!'
|
de: 'E-Mail-Abonnement nicht gefunden!',
|
||||||
} ,
|
},
|
||||||
|
|
||||||
RIS_UNSUB_ERROR_FAILED: {
|
RIS_UNSUB_ERROR_FAILED: {
|
||||||
enUs: 'Unsubscribed Failed :(',
|
enUs: 'Unsubscribed Failed :(',
|
||||||
@@ -84,16 +87,15 @@ module.exports = Object.freeze({
|
|||||||
it: 'Desottoscrizione alla Newsletter Fallita',
|
it: 'Desottoscrizione alla Newsletter Fallita',
|
||||||
fr: 'Désabonnement à la newsletter en échec',
|
fr: 'Désabonnement à la newsletter en échec',
|
||||||
de: 'Abmeldung des fehlgeschlagenen Newsletters',
|
de: 'Abmeldung des fehlgeschlagenen Newsletters',
|
||||||
} ,
|
},
|
||||||
|
|
||||||
RIS_UNSUBSCRIBED_MSG_ALREADY_DONE: {
|
RIS_UNSUBSCRIBED_MSG_ALREADY_DONE: {
|
||||||
enUs: 'Unsubscription already made!',
|
enUs: 'Unsubscription already made!',
|
||||||
es: 'Unsuscripción ya realizada!',
|
es: 'Unsuscripción ya realizada!',
|
||||||
it: 'Desottoscrizione già effettuata!',
|
it: 'Desottoscrizione già effettuata!',
|
||||||
fr: 'Désabonnement déjà fait!',
|
fr: 'Désabonnement déjà fait!',
|
||||||
de: 'Abmeldung bereits gemacht!'
|
de: 'Abmeldung bereits gemacht!',
|
||||||
} ,
|
},
|
||||||
|
|
||||||
|
|
||||||
LIST_END: '10000000',
|
LIST_END: '10000000',
|
||||||
LIST_START: null,
|
LIST_START: null,
|
||||||
@@ -101,7 +103,7 @@ module.exports = Object.freeze({
|
|||||||
PREFIX_IMG: 'm_',
|
PREFIX_IMG: 'm_',
|
||||||
PREFIX_IMG_SMALL: 'sm_',
|
PREFIX_IMG_SMALL: 'sm_',
|
||||||
|
|
||||||
DIR_UPLOAD: '/upload', //'/upload'
|
DIR_UPLOAD: '/upload', //'/upload'
|
||||||
DIR_PUBLIC_LOCALE: '/public',
|
DIR_PUBLIC_LOCALE: '/public',
|
||||||
|
|
||||||
Privacy: {
|
Privacy: {
|
||||||
@@ -109,7 +111,7 @@ module.exports = Object.freeze({
|
|||||||
friends: 'friends',
|
friends: 'friends',
|
||||||
mygroup: 'mygroup',
|
mygroup: 'mygroup',
|
||||||
onlyme: 'onlyme',
|
onlyme: 'onlyme',
|
||||||
inherited: 'inherited'
|
inherited: 'inherited',
|
||||||
},
|
},
|
||||||
|
|
||||||
TypeProj: {
|
TypeProj: {
|
||||||
@@ -117,13 +119,7 @@ module.exports = Object.freeze({
|
|||||||
TYPE_SUBDIR: 2,
|
TYPE_SUBDIR: 2,
|
||||||
},
|
},
|
||||||
|
|
||||||
User_Fields: [
|
User_Fields: ['name', 'surname', 'news_on', 'profile'],
|
||||||
'name',
|
|
||||||
'surname',
|
|
||||||
'news_on',
|
|
||||||
'profile',
|
|
||||||
],
|
|
||||||
|
|
||||||
FILECONFIG_SERVER: 'lists_serverconfig.txt',
|
FILECONFIG_SERVER: 'lists_serverconfig.txt',
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user