Ajout champ email doublon pour bot dans formulaire inscription + formulaire inscription sur la page d'accueil

This commit is contained in:
Fabrice PENHOËT 2020-11-30 16:10:53 +01:00
parent a6b80cb2fc
commit 391f5240d4
8 changed files with 57 additions and 21 deletions

View File

@ -796,6 +796,7 @@ const creaNewQuestionnairesHTML = async (Questionnaires) =>
// On regénère la page d'accueil avec le(s) dernier(s) questionnaire(s) mis en avant : // On regénère la page d'accueil avec le(s) dernier(s) questionnaire(s) mis en avant :
let compiledFunction = pug.compileFile("./views/"+config.theme+"/home.pug"); let compiledFunction = pug.compileFile("./views/"+config.theme+"/home.pug");
const configTpl = require("../views/"+config.theme+"/config/"+config.availableLangs[0]+".js"); const configTpl = require("../views/"+config.theme+"/config/"+config.availableLangs[0]+".js");
const txtUser = require("../lang/"+config.adminLang+"/user");
let questionnaires=[]; let questionnaires=[];
for(let i in Questionnaires) for(let i in Questionnaires)
questionnaires.push(await searchQuestionnaireById(Questionnaires[i].id)); questionnaires.push(await searchQuestionnaireById(Questionnaires[i].id));
@ -808,6 +809,7 @@ const creaNewQuestionnairesHTML = async (Questionnaires) =>
txtGeneral : txtGeneral, txtGeneral : txtGeneral,
txtQuestionnaire: txtQuestionnaire, txtQuestionnaire: txtQuestionnaire,
txtIllustration: txtIllustration, txtIllustration: txtIllustration,
txtUser: txtUser,
pageLang: config.adminLang, pageLang: config.adminLang,
metaDescription: txtGeneral.siteMetaDescription, metaDescription: txtGeneral.siteMetaDescription,
pageTitle: txtGeneral.siteHTMLTitle, pageTitle: txtGeneral.siteHTMLTitle,

View File

@ -63,6 +63,7 @@ exports.getGodfatherId = async (req, res, next) =>
// Contrôleur traitant les données envoyées pour une inscription // Contrôleur traitant les données envoyées pour une inscription
// Les CGU doivent être acceptées et une adresse e-mail envoyée. // Les CGU doivent être acceptées et une adresse e-mail envoyée.
// Un champ email2 invisible ne devrait être envoyé que par des bots
// Le reste peut être adapté sur la page de validation de l'inscription. // Le reste peut être adapté sur la page de validation de l'inscription.
exports.signup = async (req, res, next) => exports.signup = async (req, res, next) =>
{ {
@ -73,6 +74,11 @@ exports.signup = async (req, res, next) =>
res.status(400).json({ errors: [txt.needUGCOk] }); res.status(400).json({ errors: [txt.needUGCOk] });
else if(tool.isEmpty(req.body.email)) else if(tool.isEmpty(req.body.email))
res.status(400).json({ errors: [txt.needEmail] }); res.status(400).json({ errors: [txt.needEmail] });
else if(!tool.isEmpty(req.body.email2))
{
res.status(400).json({ errors: [txt.failBotTest] });
console.log(txt.failBotTestLog+req.body.email2);
}
else else
{ {
// Un mot de passe temporaire et non communiqué est généré : // Un mot de passe temporaire et non communiqué est généré :
@ -91,7 +97,7 @@ exports.signup = async (req, res, next) =>
else if(req.body.GroupId) else if(req.body.GroupId)
await answerCtrl.saveAnswerToGroup(req.body); await answerCtrl.saveAnswerToGroup(req.body);
await sendValidationLink(user); await sendValidationLink(user);
res.status(201).json({ message: txt.mailValidationMessage }); res.status(201).json({ message: txt.mailValidationMessage.replace("#EMAIL", req.body.email) });
next(); next();
} }
} }

View File

@ -39,6 +39,7 @@
<form class="needJS" id="subscription" method="POST"> <form class="needJS" id="subscription" method="POST">
<fieldset> <fieldset>
<label for="email">E-mail: </label><input id="email" type="email" name="email" placeholder="Adresse e-mail" class="cardboard"> <label for="email">E-mail: </label><input id="email" type="email" name="email" placeholder="Adresse e-mail" class="cardboard">
<input id="email2" type="email" name="email2" placeholder="Si vous voyez ce champ, laissez-le vide" class="needJS">
<div id="emailMessage"></div> <div id="emailMessage"></div>
</fieldset> </fieldset>
<ul class="checkbox_li"> <ul class="checkbox_li">
@ -54,11 +55,10 @@
<div id="explanations" class="framed engraved"> <div id="explanations" class="framed engraved">
<h2>Besoin daide?</h2> <h2>Besoin daide?</h2>
<p>Votre compte vous permettra de <b>recevoir régulièrement de nouvelles «graines de culture» directement sur votre adresse e-mail</b>. Vous pourrez aussi sauvegarder vos résultats aux quizs.</p> <p>Votre compte WikiLerni va vous permettre de <b>recevoir régulièrement par e-mail des suggestions darticles lisibles en quelques minutes sur des thèmes variés: arts, cinéma, littérature, musique, mythologie, sciences, etc.</b> Ces lectures sont suivies de <b>quizs vous permettant de tester ce que vous en avez retenu</b>.</p>
<p>La saisie dune adresse e-mail <b>est obligatoire</b> et <b>vous devez accepter les Conditions Générales dUtilisation</b>.</p> <p>La création de votre compte est <b>gratuite et sans engagement</b> et vous pouvez ensuite <b>stopper les envois en un clic</b>. Elle vous permet de tester WikiLerni durant une période de 15 jours. Libre à vous ensuite de vous abonner ou pas.</p>
<p><b>Vous recevrez un lien sur ladresse e-mail saisie</b> sur lequel vous devrez cliquer pour valider la création de votre compte.</p> <p>Pour créer votre compte, saisissez juste votre adresse e-mail et acceptez les Conditions Générales dUtilisation. <b>Vous recevrez un lien de validation sur ladresse e-mail saisie, qui doit donc être valide</b>.</p>
<p>Une fois cliqué sur ce lien, <b>vous serez invité à compléter vos informations (pseudo, mot de passe…) ou encore à désigner votre «parrain»</b> (si cest le cas).</p> <p>Une fois cliqué sur ce lien, <b>vous serez invité à compléter vos informations (choix dun pseudo, mot de passe…) ou encore à désigner votre «parrain»</b> (facultatif).</p>
<p>La création de votre compte est <b>gratuite et sans engagement</b>. Elle vous permet de tester WikiLerni durant une période de 15 jours. Libre à vous ensuite de vous abonner ou pas.</p>
</div> </div>
</div> </div>

View File

@ -878,6 +878,7 @@ margin-top: -1em;
padding-top:1.5em; padding-top:1.5em;
border-bottom: 1px solid rgba(0,0,0,0.8); border-bottom: 1px solid rgba(0,0,0,0.8);
box-shadow: 0px 0px 5px rgba(0,0,0,0.75); box-shadow: 0px 0px 5px rgba(0,0,0,0.75);
} }
#home img #home img
{ {
@ -914,6 +915,7 @@ line-height: 1.5em;
font-size: 1.1em; font-size: 1.1em;
padding: 0.2em; padding: 0.2em;
} }
/*
#home input[type="text"] #home input[type="text"]
{ {
width:90%; width:90%;
@ -923,7 +925,7 @@ margin-bottom:1em;
{ {
margin-top:1em; margin-top:1em;
font-size: 1em; font-size: 1em;
} }*/
/* /*
#home a.button #home a.button
{ {
@ -949,10 +951,11 @@ font-family: inherit;
font-size: 1.2em; font-size: 1.2em;
padding: 0 0.3em; padding: 0 0.3em;
} }
/*
#home input[type="text"] #home input[type="text"]
{ {
width:75%; width:75%;
} }*/
} }
/*-----------------Propriétés spécifiques à la page d'accueil sur grands écrans --------------*/ /*-----------------Propriétés spécifiques à la page d'accueil sur grands écrans --------------*/
@media screen and (min-width: 800px) @media screen and (min-width: 800px)

View File

@ -11,8 +11,11 @@ module.exports =
deleteInactiveUsersMessage: " comptes utilisateurs inactifs ont été supprimés.", deleteInactiveUsersMessage: " comptes utilisateurs inactifs ont été supprimés.",
deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteOkMessage: "L'utilisateur a bien été supprimé.",
emailNotFound: "Aucun compte utilisateur n'a été trouvé pour cette adresse e-mail.", emailNotFound: "Aucun compte utilisateur n'a été trouvé pour cette adresse e-mail.",
failBotTest: "Un problème a été rencontré durant votre inscription. En cas de difficulté, n'hésitez pas contacter l'administrateur du site.",
failBotTestLog: "Une inscription a été bloquée, parce que le champ email2 était renseigné avec : ",
formsEmailLabel: "E-mail :", formsEmailLabel: "E-mail :",
formsEmailPlaceholder: "Votre adresse e-mail", formsEmailPlaceholder: "Votre adresse e-mail",
formsEmail2Placeholder: "Si vous voyez ce champ, laissez-le vide",//champ qui ne devrait pas être visible par des humains
formsCGUOkLabel: "J'accepte <a href=#link target=\"_blank\" rel=\"noopener\" title=\"À lire :)\">les Conditions Générale d'Utilisation</a> du site (requis).", formsCGUOkLabel: "J'accepte <a href=#link target=\"_blank\" rel=\"noopener\" title=\"À lire :)\">les Conditions Générale d'Utilisation</a> du site (requis).",
formsSubmitTxt: "Je m'abonne !", formsSubmitTxt: "Je m'abonne !",
godfatherFound: "Votre \"parrain\" a bien été trouvé. Cette personne sera avertie que vous l'avez désignée.", godfatherFound: "Votre \"parrain\" a bien été trouvé. Cette personne sera avertie que vous l'avez désignée.",
@ -49,7 +52,7 @@ module.exports =
mailValidationLinkSBodyTxt : "Bonjour USER_NAME,\n\nPour valider et compléter votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", mailValidationLinkSBodyTxt : "Bonjour USER_NAME,\n\nPour valider et compléter votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL",
mailValidationLinkSubject : "Merci de valider votre inscription", mailValidationLinkSubject : "Merci de valider votre inscription",
mailValidationLinkTxt : "Valider mon compte.", mailValidationLinkTxt : "Valider mon compte.",
mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24 H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24 H sur le lien de confirmation qui vient d'être envoyé à votre adresse e-mail (#EMAIL).",
mailWelcomeBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !<br><br>Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à <b>EMAIL</b>.<br><br>Je vous conseille d'ailleurs d'ajouter <b>EMAIL</b> à votre carnet d'adresses <b>pour éviter que les prochains envois de NOM_SITE n'arrivent en <i>spam</i></b>.<br><br>Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi le contenu du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.<br><br>Pour ce faire, utilisez le lien ci-dessous.<br><br>À bientôt sur NOM_SITE.", mailWelcomeBodyHTML : "<h3>Bonjour USER_NAME,</h3><p>Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !<br><br>Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à <b>EMAIL</b>.<br><br>Je vous conseille d'ailleurs d'ajouter <b>EMAIL</b> à votre carnet d'adresses <b>pour éviter que les prochains envois de NOM_SITE n'arrivent en <i>spam</i></b>.<br><br>Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi le contenu du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.<br><br>Pour ce faire, utilisez le lien ci-dessous.<br><br>À bientôt sur NOM_SITE.",
mailWelcomeBodyTxt : "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois de NOM_SITE n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi le contenu du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nÀ bientôt sur NOM_SITE.", mailWelcomeBodyTxt : "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois de NOM_SITE n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi le contenu du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nÀ bientôt sur NOM_SITE.",
mailWelcomeLinkTxt : "Me connecter à mon compte.", mailWelcomeLinkTxt : "Me connecter à mon compte.",

View File

@ -42,11 +42,11 @@ module.exports =
/* Page d'accueil */ /* Page d'accueil */
homePageTxt: "Page d'accueil", homePageTxt: "Page d'accueil",
homeTitle1: "De nature curieuse ?", homeTitle1: "De nature curieuse ?",
homeP1: "<b>Avec WikiLerni, vous allez apprendre chaque jour de nouvelles choses</b>.<br>Vous recevrez de courts articles, lisibles en quelques minutes.<br>Des quizs vous permettront ensuite de tester ce que vous aurez retenu.<br>De jour en jour <b>de nouvelles graines de culture sont ainsi semées dans votre jardin</b>.", homeP1: "<b>Avec WikiLerni, vous apprenez chaque jour de nouvelles choses</b>.<br>Vous recevez de courts articles, lisibles en quelques minutes.<br>Des quizs vous permettent ensuite de tester ce que vous avez retenu.<br>De jour en jour <b>de nouvelles graines de culture sont ainsi semées dans votre jardin</b>.",
homeTitle2: "La culture générale en liberté", homeTitle2: "La culture générale en liberté",
homeP2: "Sur WikiLerni <b>pas de faits alternatifs</b>, tous les contenus sont <b>sourcés par des articles Wikipédia</b>.<br>Et tout comme sur Wikipédia, le logiciel et le contenu publié sur WikiLerni <a href=\"/credits.html\" title=\"En savoir plus sur ce sujet\">sont partagés sous licences libres</a>.<br>Le tout sans publicité, ni commercialisation de vos données.<br><b>Sur WikiLerni vous cultivez votre jardin en toute tranquillité.</b>", homeP2: "<b>Pas de faits alternatifs</b>, tous les contenus sont <b>sourcés par des articles Wikipédia</b>.<br>Et tout comme sur Wikipédia, le logiciel et le contenu publié sur WikiLerni <a href=\"/credits.html\" title=\"En savoir plus sur ce sujet\">sont partagés sous licences libres</a>.<br>Le tout sans publicité, ni commercialisation de vos données.<br><b>Sur WikiLerni, vous cultivez votre jardin en toute tranquillité.</b>",
homeBtnAboutTxt: "En savoir plus sur WikiLerni ?", homeBtnAboutTxt: "En savoir plus sur WikiLerni ?",
homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", homeSubcriptionFormTitle: "Tester WikiLerni gratuitement",
/* Page dernières publications... */ /* Page dernières publications... */
newQuestionnairesTitle: "Culture générale - apprenez de nouvelles choses avec WikiLerni", newQuestionnairesTitle: "Culture générale - apprenez de nouvelles choses avec WikiLerni",
newQuestionnairesIntro: "WikiLerni : testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", newQuestionnairesIntro: "WikiLerni : testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.",

View File

@ -2,7 +2,7 @@ extends layout.pug
block append scripts block append scripts
script(src="/JS/polyfill.app.js" defer) script(src="/JS/polyfill.app.js" defer)
script(src="/JS/index.app.js" defer) script(src="/JS/subscribe.app.js" defer)
block content block content
@ -15,11 +15,32 @@ block content
h3 #{configTpl.homeTitle1} h3 #{configTpl.homeTitle1}
p !{configTpl.homeP1} p !{configTpl.homeP1}
h3 #{configTpl.homeTitle2} h3 #{configTpl.homeTitle2}
p !{configTpl.homeP2} p !{configTpl.homeP2}
p //p
a(href="/"+configTpl.subscribePage class="button cardboard" title=configTpl.homeBtnSubscribeTxt) #{configTpl.homeBtnSubscribeTxt} // a(href="/"+configTpl.aboutPage class="button cardboard" title=configTpl.homeBtnAboutTxt) #{configTpl.homeBtnAboutTxt}
p
a(href="/"+configTpl.aboutPage class="button cardboard" title=configTpl.homeBtnAboutTxt) #{configTpl.homeBtnAboutTxt} div(class="engraved framed")
// Formulaire d'inscription :
noscript
div
strong #{configTpl.noJSNotification}
- const cguOkLabel = txtUser.formsCGUOkLabel.replace("#link", "/"+configTpl.cguPage);
form(id="subscription" method="POST" class="needJS")
h3 #{configTpl.homeSubcriptionFormTitle}
fieldset
label(for="email") #{txtUser.formsEmailLabel}
input(id="email" type="email" name="email" placeholder=txtUser.formsEmailPlaceholder class="cardboard")
input(id="email2" type="email" name="email2" placeholder=txtUser.formsEmail2Placeholder class="needJS")
div#emailMessage
ul(class="checkbox_li")
li(class="checkbox_li")
label(for="cguOk" class="check")
input(type="checkbox" id="cguOk" name="cguOk" value="true")
div(class="checkbox_override")
span !{cguOkLabel}
div(class="input_wrapper")
input(id="submitDatas" type="submit" value=txtUser.formsSubmitTxt class="cardboard")
div(id="response")
- nbQuestionnairesList=configTpl.maxQuestionnairesSiteHomePage; - nbQuestionnairesList=configTpl.maxQuestionnairesSiteHomePage;
include includes/listing-questionnaires.pug include includes/listing-questionnaires.pug

View File

@ -93,7 +93,8 @@ block content
fieldset fieldset
label(for="email") #{txtUser.formsEmailLabel} label(for="email") #{txtUser.formsEmailLabel}
input(id="email" type="email" name="email" placeholder=txtUser.formsEmailPlaceholder class="cardboard") input(id="email" type="email" name="email" placeholder=txtUser.formsEmailPlaceholder class="cardboard")
div#emailMessage input(id="email2" type="email" name="email2" placeholder=txtUser.formsEmail2Placeholder class="needJS")
div#emailMessage
ul(class="checkbox_li") ul(class="checkbox_li")
li(class="checkbox_li") li(class="checkbox_li")
label(for="cguOk" class="check") label(for="cguOk" class="check")
@ -102,7 +103,7 @@ block content
span !{cguOkLabel} span !{cguOkLabel}
div(class="input_wrapper") div(class="input_wrapper")
input(id="submitDatas" type="submit" value=txtUser.formsSubmitTxt class="cardboard") input(id="submitDatas" type="submit" value=txtUser.formsSubmitTxt class="cardboard")
div(id="response") div(id="response")
div#zerozozio div#zerozozio
a(href="mailto:?to=&amp;subject="+questionnaire.Questionnaire.title+"&amp;body="+txtQuestionnaire.btnShareQuizMailBody+linkCanonical rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"e-mail* ("+txtGeneral.alertNewWindow+")" target="_blank") a(href="mailto:?to=&amp;subject="+questionnaire.Questionnaire.title+"&amp;body="+txtQuestionnaire.btnShareQuizMailBody+linkCanonical rel="nofollow noopener" title=txtQuestionnaire.btnShareQuizTxt+"e-mail* ("+txtGeneral.alertNewWindow+")" target="_blank")