- 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
|
||||
h3 🍚 Cos'è il Progetto RISO?
|
||||
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
|
||||
| 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
|
||||
.value-item
|
||||
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
|
||||
span.benefit-icon 🌍
|
||||
| <strong>Sostenibilità:</strong> Promuoviamo stili di vita sani e naturali
|
||||
|
||||
@@ -16,8 +16,9 @@ html(lang="it")
|
||||
padding: 20px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.header-logo {
|
||||
width: 80px;
|
||||
width: 120px;
|
||||
height: auto;
|
||||
margin-bottom: 16px;
|
||||
display: block;
|
||||
@@ -35,7 +36,7 @@ html(lang="it")
|
||||
}
|
||||
|
||||
.email-header {
|
||||
background: linear-gradient(135deg, #027be3 0%, #0056b3 100%);
|
||||
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||
color: white;
|
||||
padding: 40px 24px;
|
||||
text-align: center;
|
||||
@@ -43,90 +44,39 @@ html(lang="it")
|
||||
|
||||
.email-header h1 {
|
||||
margin: 0 0 8px 0;
|
||||
font-size: 28px;
|
||||
font-size: 26px;
|
||||
font-weight: 600;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.email-header p {
|
||||
margin: 0;
|
||||
font-size: 16px;
|
||||
.email-header .subtitle {
|
||||
margin: 8px 0 0 0;
|
||||
font-size: 17px;
|
||||
opacity: 0.95;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.welcome-icon {
|
||||
font-size: 48px;
|
||||
margin-bottom: 16px;
|
||||
font-size: 56px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 20px 16px;
|
||||
padding: 32px 24px;
|
||||
}
|
||||
|
||||
.intro-text {
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
margin-bottom: 16px;
|
||||
margin-bottom: 20px;
|
||||
text-align: center;
|
||||
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 {
|
||||
text-align: center;
|
||||
margin: 16px 0;
|
||||
padding: 16px 0;
|
||||
margin: 24px 0;
|
||||
padding: 20px 0;
|
||||
border-top: 1px solid #e0e0e0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
@@ -138,57 +88,22 @@ html(lang="it")
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.cta-buttons-wrapper {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
justify-content: center;
|
||||
align-items: stretch;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
display: inline-block;
|
||||
padding: 16px 32px;
|
||||
font-size: 16px;
|
||||
padding: 16px 48px;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: white;
|
||||
background: linear-gradient(135deg, #027be3 0%, #0056b3 100%);
|
||||
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
|
||||
border-radius: 50px;
|
||||
text-decoration: none;
|
||||
box-shadow: 0 4px 12px rgba(2, 123, 227, 0.3);
|
||||
transition: transform 0.2s, box-shadow 0.2s;
|
||||
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);
|
||||
box-shadow: 0 4px 12px rgba(124, 179, 66, 0.3);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.button-icon {
|
||||
font-size: 18px;
|
||||
margin-right: 6px;
|
||||
margin-right: 8px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
@@ -196,31 +111,114 @@ html(lang="it")
|
||||
margin-top: 16px;
|
||||
font-size: 13px;
|
||||
color: #777;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.alternative-link a {
|
||||
color: #027be3;
|
||||
color: #558b2f;
|
||||
text-decoration: none;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.info-box {
|
||||
background: #e3f2fd;
|
||||
.verification-process {
|
||||
background: #f8f9fa;
|
||||
border-radius: 8px;
|
||||
padding: 10px;
|
||||
margin-top: 12px;
|
||||
text-align: center;
|
||||
padding: 24px 20px;
|
||||
margin: 24px 0;
|
||||
}
|
||||
|
||||
.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;
|
||||
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;
|
||||
}
|
||||
|
||||
.info-note strong {
|
||||
color: #558b2f;
|
||||
}
|
||||
|
||||
.email-footer {
|
||||
padding: 16px 12px;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
background: #f8f9fa;
|
||||
color: #777;
|
||||
@@ -234,115 +232,132 @@ html(lang="it")
|
||||
.divider {
|
||||
height: 1px;
|
||||
background: linear-gradient(to right, transparent, #e0e0e0, transparent);
|
||||
margin: 24px 0;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px) {
|
||||
body {
|
||||
padding: 5px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.email-header {
|
||||
padding: 16px 10px;
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.email-header h1 {
|
||||
font-size: 24px;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.welcome-icon {
|
||||
font-size: 48px;
|
||||
}
|
||||
|
||||
.email-body {
|
||||
padding: 16px 10px;
|
||||
}
|
||||
|
||||
.credentials-box {
|
||||
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 {
|
||||
padding: 14px 24px;
|
||||
font-size: 15px;
|
||||
padding: 14px 32px;
|
||||
font-size: 16px;
|
||||
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
|
||||
.email-container
|
||||
//- Header
|
||||
.email-header
|
||||
- var baseimg = baseurl + '/';
|
||||
img.header-logo(src=baseimg+"images/logo.png" alt=nomeapp || 'Logo')
|
||||
h1 Benvenuto #{name ? ', ' + name : username}
|
||||
| su #{nomeapp || 'la nostra piattaforma'}!
|
||||
img.header-logo(src=baseimg+"images/logo.png" alt=nomeapp || 'RISO')
|
||||
h1 Benvenuto/a #{name ? name : username} su #{nomeapp}!
|
||||
p.subtitle Rete Italiana Scambio Orizzontale
|
||||
|
||||
//- Body
|
||||
.email-body
|
||||
if !verified_email
|
||||
.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-title 🔐 1. Verifica il tuo account
|
||||
.cta-title 🔐 Verifica il tuo account
|
||||
|
||||
if strlinkreg
|
||||
a.cta-button(href=strlinkreg target="_blank")
|
||||
span.button-icon ✓
|
||||
| Verifica Registrazione
|
||||
| Verifica Email
|
||||
|
||||
.alternative-link
|
||||
| Oppure copia e incolla questo link nel tuo browser:
|
||||
br
|
||||
a(href=strlinkreg target="_blank") #{strlinkreg}
|
||||
|
||||
//- Processo di verifica
|
||||
.verification-process
|
||||
.process-title
|
||||
span.icon 📋
|
||||
span.icon 🌱
|
||||
| Il tuo percorso di ingresso in RISO
|
||||
|
||||
.process-steps
|
||||
.process-step
|
||||
.step-badge 1
|
||||
.step-content
|
||||
h4 ✓ Verifica la tua email:
|
||||
p Cliccando sul bottone qui sopra.
|
||||
h4 ✓ Verifica la tua email
|
||||
p Clicca sul pulsante sopra per confermare il tuo indirizzo email.
|
||||
|
||||
.process-step.active
|
||||
.step-badge 2
|
||||
.step-content
|
||||
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
|
||||
.step-badge 3
|
||||
.step-content
|
||||
h4 🎉 Accesso alla piattaforma
|
||||
p Potrai così accedere e completare il tuo profilo per iniziare a fare parte della comunità RISO.
|
||||
h4 🎯 Completa il tuo profilo
|
||||
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
|
||||
p
|
||||
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
|
||||
.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;")
|
||||
| © #{new Date().getFullYear()} #{nomeapp || ''}.
|
||||
| #{new Date().getFullYear()} #{nomeapp || 'RISO'} - Rete Italiana Scambi Orizzontali
|
||||
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},
|
||||
p #{nomeapp} recentemente ha ricevuto una richiesta per una password dimenticata.
|
||||
doctype html
|
||||
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}
|
||||
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>
|
||||
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 Cordiali Saluti
|
||||
p Supporto #{nomeapp}
|
||||
// Container Principale
|
||||
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").
|
||||
html, body {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
// Card Email
|
||||
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;")
|
||||
|
||||
.grande {
|
||||
font-size: 1.25rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
// Header con Icona
|
||||
tr
|
||||
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: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",
|
||||
"Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione",
|
||||
"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: {
|
||||
type: Boolean,
|
||||
},
|
||||
token_da_ammettere: {
|
||||
type: String,
|
||||
},
|
||||
date_token_ammettere: {
|
||||
type: Date,
|
||||
},
|
||||
notask_verif: {
|
||||
type: Boolean,
|
||||
},
|
||||
@@ -1624,6 +1630,57 @@ UserSchema.statics.setUserQualified = async function (idapp, username) {
|
||||
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) {
|
||||
const User = this;
|
||||
|
||||
|
||||
@@ -178,29 +178,6 @@ class CronMod {
|
||||
}
|
||||
|
||||
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') {
|
||||
ris = await Hours.correggiHours(idapp);
|
||||
} 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 = {
|
||||
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;
|
||||
break;
|
||||
|
||||
|
||||
@@ -5,10 +5,13 @@ const router = express.Router(),
|
||||
|
||||
const telegrambot = require('../telegram/telegrambot');
|
||||
|
||||
|
||||
const i18n = require('i18n');
|
||||
|
||||
const sharp = require('sharp');
|
||||
|
||||
const printf = require('util').format;
|
||||
|
||||
const {
|
||||
authenticate,
|
||||
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) => {
|
||||
const body = _.pick(req.body, ['idapp', 'idlink']);
|
||||
const idapp = body.idapp;
|
||||
@@ -335,7 +410,9 @@ router.post('/sendmailreg', authenticate, async (req, res) => {
|
||||
const diffMinutes = Math.ceil(diffTime / (1000 * 60));
|
||||
|
||||
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);
|
||||
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 : ''))
|
||||
) {
|
||||
// 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)) {
|
||||
@@ -533,7 +612,6 @@ router.post('/settable', authenticate, async (req, res) => {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return await myPromise
|
||||
.then(async (doupdate) => {
|
||||
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 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 {
|
||||
@@ -1334,7 +1414,9 @@ router.patch('/chval', authenticate, async (req, res) => {
|
||||
!(mydata.table === 'accounts' && (await Account.canEditAccountAdmins(req.user.username, mydata.id)))
|
||||
) {
|
||||
// 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]);
|
||||
@@ -1617,7 +1699,9 @@ router.patch('/askfunz', authenticate, async (req, res) => {
|
||||
req.user._id.toString() !== id
|
||||
) {
|
||||
// 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
|
||||
) {
|
||||
// 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))
|
||||
) {
|
||||
// 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;
|
||||
@@ -1863,7 +1951,9 @@ router.post('/duprec/:table/:id', authenticate, async (req, res) => {
|
||||
const mytable = globalTables.getTableByTableName(tablename);
|
||||
|
||||
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)) {
|
||||
|
||||
@@ -498,9 +498,16 @@ module.exports = {
|
||||
const strlinkreg = tools.getHostByIdApp(idapp) + `/invitetoreg/${dati.token}`;
|
||||
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) {
|
||||
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 (RISO_TEMPLATES.includes(email_template)) {
|
||||
@@ -513,6 +520,14 @@ module.exports = {
|
||||
try {
|
||||
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 = {
|
||||
idapp,
|
||||
dataemail: await this.getdataemail(idapp),
|
||||
@@ -522,6 +537,7 @@ module.exports = {
|
||||
strlinksito: tools.getHostByIdApp(idapp),
|
||||
strlinkreg: this.getlinkReg(idapp, idreg),
|
||||
forgetpwd: tools.getHostByIdApp(idapp) + '/requestresetpwd',
|
||||
linkAmmissione: this.getLinkAmmissione(idapp, user),
|
||||
emailto: emailto,
|
||||
verified_email: user.verified_email,
|
||||
usernameInvitante: user.aportador_solidario,
|
||||
@@ -547,7 +563,7 @@ module.exports = {
|
||||
//Invia una email al nuovo utente
|
||||
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');
|
||||
|
||||
// Manda anche una email al suo Invitante
|
||||
@@ -558,6 +574,17 @@ module.exports = {
|
||||
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
|
||||
@@ -626,15 +653,18 @@ module.exports = {
|
||||
emailto: emailto,
|
||||
usernameInvitante: dati.usernameInvitante,
|
||||
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);
|
||||
|
||||
return ris;
|
||||
} 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');
|
||||
|
||||
|
||||
|
||||
let url = process.env.URL || 'https://<PUBLIC-URL>';
|
||||
|
||||
const Benvenuto = '💓💓💓 Benvenuto/a!';
|
||||
@@ -916,6 +918,7 @@ const MyTelegramBot = {
|
||||
callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + userDest,
|
||||
},
|
||||
]);
|
||||
|
||||
}
|
||||
/*{
|
||||
text: '🚫 Rifiuta ' + myuser.username,
|
||||
@@ -927,7 +930,6 @@ const MyTelegramBot = {
|
||||
if (telegid > 0) {
|
||||
cl.setPhotoProfile(myuser, telegid, false);
|
||||
|
||||
|
||||
const rismsg = await MsgTemplate.getMsgByLang(
|
||||
idapp,
|
||||
myuser,
|
||||
@@ -941,7 +943,6 @@ const MyTelegramBot = {
|
||||
userDest = myuser.aportador_solidario;
|
||||
let useraportador = await User.getUserShortDataByUsername(idapp, userDest);
|
||||
|
||||
|
||||
const rismsg2 = await MsgTemplate.getMsgByLang(
|
||||
idapp,
|
||||
myuser,
|
||||
@@ -949,7 +950,6 @@ const MyTelegramBot = {
|
||||
myuser.lang
|
||||
);
|
||||
|
||||
|
||||
const telegidInvitante = useraportador.profile.teleg_id;
|
||||
|
||||
await cl.sendMsgLog(telegidInvitante, rismsg2.body);
|
||||
@@ -1114,7 +1114,6 @@ const MyTelegramBot = {
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
askConfirmationUserFriend: async function (idapp, myfunc, myuser, userDest = '', username = '') {
|
||||
try {
|
||||
const cl = getclTelegByidapp(idapp);
|
||||
@@ -2986,13 +2985,6 @@ class Telegram {
|
||||
if (recuser) {
|
||||
rec.user = recuser;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3335,7 +3326,6 @@ class Telegram {
|
||||
msg.from.last_name || ''
|
||||
);
|
||||
|
||||
|
||||
rec.status = Status.VERIFIED;
|
||||
rec.datemenu_updated = null;
|
||||
rec.menuDb = null;
|
||||
@@ -4486,6 +4476,8 @@ if (true) {
|
||||
|
||||
// RISPOSTE ALLE CALLBACK (Bottoni)
|
||||
|
||||
const sendemail = require('../sendemail');
|
||||
|
||||
let testo_notifica_di_risposta = '';
|
||||
|
||||
try {
|
||||
@@ -4578,6 +4570,7 @@ if (true) {
|
||||
);
|
||||
|
||||
// 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.userDest, msgDest);
|
||||
|
||||
@@ -96,6 +96,8 @@ const textlang = {
|
||||
NON_VERIF: 'Non Verificata',
|
||||
VERIF: 'Verificata',
|
||||
EMAIL: 'Email',
|
||||
MEMBRO_AMMESSO: 'Ottimo! Hai ammesso %s!',
|
||||
MEMBRO_GIA_AMMESSO: 'Il membro %s è stato già Ammesso!',
|
||||
BOT: 'BOT',
|
||||
EMAIL_NON_VERIF:
|
||||
'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_VERIFIED: 1,
|
||||
|
||||
RIS_CODE_AMMESSO: 1,
|
||||
RIS_CODE_GIA_AMMESSO: -5,
|
||||
|
||||
RIS_CODE_REC_DUPLICATED_DESCR_CITY_USER: -110,
|
||||
RIS_CODE_REC_ALREADY_EXIST_SYMBOL: -102,
|
||||
RIS_CODE_REC_ALREADY_EXIST_CODE: -101,
|
||||
@@ -53,30 +56,30 @@ module.exports = Object.freeze({
|
||||
es: 'Suscripción al boletín confirmado!',
|
||||
it: 'Sottoscrizione alla Newsletter Confermata!',
|
||||
fr: 'Inscription à la newsletter confirmée!',
|
||||
de: 'Anmeldung zum Newsletter bestätigt!'
|
||||
} ,
|
||||
de: 'Anmeldung zum Newsletter bestätigt!',
|
||||
},
|
||||
RIS_SUBSCRIBED_MSG_ALREADYEXIST: {
|
||||
enUs: 'Subscription already made!',
|
||||
es: 'Suscripción ya realizada!',
|
||||
it: 'Sottoscrizione già effettuata!',
|
||||
fr: 'Abonnement déjà fait!',
|
||||
de: 'Abonnement bereits gemacht!'
|
||||
} ,
|
||||
de: 'Abonnement bereits gemacht!',
|
||||
},
|
||||
RIS_SUBSCRIBED_MSG_FAILED: {
|
||||
enUs: 'Sign Up Failed :(',
|
||||
es: 'Suscripción al boletín fallido',
|
||||
it: 'Sottoscrizione alla Newsletter Fallita',
|
||||
fr: 'Abonnement à la newsletter en échec',
|
||||
de: 'Abonnement des fehlgeschlagenen Newsletters',
|
||||
} ,
|
||||
},
|
||||
|
||||
RIS_UNSUBSTR_NOT_EXIST: {
|
||||
enUs: 'Subscription email not found!',
|
||||
es: 'Suscripción email no encontrada!',
|
||||
it: 'Sottoscrizione Email non trovata!',
|
||||
fr: 'Abonnement courriel introuvable!',
|
||||
de: 'E-Mail-Abonnement nicht gefunden!'
|
||||
} ,
|
||||
de: 'E-Mail-Abonnement nicht gefunden!',
|
||||
},
|
||||
|
||||
RIS_UNSUB_ERROR_FAILED: {
|
||||
enUs: 'Unsubscribed Failed :(',
|
||||
@@ -84,16 +87,15 @@ module.exports = Object.freeze({
|
||||
it: 'Desottoscrizione alla Newsletter Fallita',
|
||||
fr: 'Désabonnement à la newsletter en échec',
|
||||
de: 'Abmeldung des fehlgeschlagenen Newsletters',
|
||||
} ,
|
||||
},
|
||||
|
||||
RIS_UNSUBSCRIBED_MSG_ALREADY_DONE: {
|
||||
enUs: 'Unsubscription already made!',
|
||||
es: 'Unsuscripción ya realizada!',
|
||||
it: 'Desottoscrizione già effettuata!',
|
||||
fr: 'Désabonnement déjà fait!',
|
||||
de: 'Abmeldung bereits gemacht!'
|
||||
} ,
|
||||
|
||||
de: 'Abmeldung bereits gemacht!',
|
||||
},
|
||||
|
||||
LIST_END: '10000000',
|
||||
LIST_START: null,
|
||||
@@ -101,7 +103,7 @@ module.exports = Object.freeze({
|
||||
PREFIX_IMG: 'm_',
|
||||
PREFIX_IMG_SMALL: 'sm_',
|
||||
|
||||
DIR_UPLOAD: '/upload', //'/upload'
|
||||
DIR_UPLOAD: '/upload', //'/upload'
|
||||
DIR_PUBLIC_LOCALE: '/public',
|
||||
|
||||
Privacy: {
|
||||
@@ -109,7 +111,7 @@ module.exports = Object.freeze({
|
||||
friends: 'friends',
|
||||
mygroup: 'mygroup',
|
||||
onlyme: 'onlyme',
|
||||
inherited: 'inherited'
|
||||
inherited: 'inherited',
|
||||
},
|
||||
|
||||
TypeProj: {
|
||||
@@ -117,13 +119,7 @@ module.exports = Object.freeze({
|
||||
TYPE_SUBDIR: 2,
|
||||
},
|
||||
|
||||
User_Fields: [
|
||||
'name',
|
||||
'surname',
|
||||
'news_on',
|
||||
'profile',
|
||||
],
|
||||
User_Fields: ['name', 'surname', 'news_on', 'profile'],
|
||||
|
||||
FILECONFIG_SERVER: 'lists_serverconfig.txt',
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user