2.2 register

This commit is contained in:
Fred Tempez 2024-09-19 10:41:32 +02:00
parent c38bd7d12f
commit 6128d0778d
20 changed files with 1097 additions and 1076 deletions

View File

@ -0,0 +1,7 @@
# Version 2.2
- Ajoute la gestion des profils
# Version 2.1
- N'envoie pas d'email lorsque le domaine est invalide.
- Corrige la validation de domaines multiples séparés par des points virgules.
# Version 2.0
- trop de corrections.

View File

@ -1 +1 @@
{"name":"suscribe","realName":"Auto inscription","version":"2.00","update":"0.0","delete":true,"dataDirectory":""} {"name":"suscribe","realName":"Auto Inscription","version":"2.1","update":"0.0","delete":true,"dataDirectory":""}

View File

@ -15,7 +15,7 @@
class suscribe extends common class suscribe extends common
{ {
const VERSION = '2.0'; const VERSION = '2.2';
const REALNAME = 'Auto Inscription'; const REALNAME = 'Auto Inscription';
const DELETE = true; const DELETE = true;
const UPDATE = '0.0'; const UPDATE = '0.0';
@ -249,107 +249,121 @@ class suscribe extends common
) { ) {
// Contrôler la validité du domaine saisi parmi les domaines valides // Contrôler la validité du domaine saisi parmi les domaines valides
$email_to_check = $this->getInput('registrationAddMail', helper::FILTER_MAIL, true); $email_to_check = $this->getInput('registrationAddMail', helper::FILTER_MAIL, true);
$valid_domains[] = strpos($this->getData(['module', $this->getUrl(0), 'config', 'filter']), ';') === false
? $this->getData(['module', $this->getUrl(0), 'config', 'filter']) // Récupérer la liste des domaines valides depuis la configuration et supprimer les espaces autour
: explode(';', $this->getData(['module', $this->getUrl(0), 'config', 'filter'])); $filter = trim($this->getData(['module', $this->getUrl(0), 'config', 'filter']));
if (in_array(explode('@', $email_to_check)[1], $valid_domains) === false) {
// Vérifier si la liste contient plusieurs domaines ou un seul, puis supprimer les espaces pour chaque domaine
$valid_domains = strpos($filter, ';') === false
? [trim($filter)] // Si un seul domaine, on supprime les espaces et on le met dans un tableau
: array_map('trim', explode(';', $filter)); // Si plusieurs domaines, on les explose en tableau et supprime les espaces
// Extraire le domaine de l'adresse email à vérifier
$email_domain = explode('@', $email_to_check)[1];
// Vérifier si le domaine de l'email est dans la liste des domaines valides
if (!in_array($email_domain, $valid_domains)) {
self::$inputNotices['registrationAddMail'] = 'Ce domaine n\'est pas autorisé'; self::$inputNotices['registrationAddMail'] = 'Ce domaine n\'est pas autorisé';
} }
} }
// Drapeau de contrôle des données saisies. // Email valide, on continue le traitement
$check = true; if (self::$inputNotices === []) {
$sentMailtoUser = false; // Drapeau de contrôle des données saisies.
// L'identifiant d'utilisateur est indisponible $check = true;
$userId = $this->getInput('registrationAddId', helper::FILTER_ID, true); $sentMailtoUser = false;
if (is_array($this->getData(['user', $userId]))) { // L'identifiant d'utilisateur est indisponible
self::$inputNotices['registrationAddId'] = 'Identifiant invalide'; $userId = $this->getInput('registrationAddId', helper::FILTER_ID, true);
$check = false; if (is_array($this->getData(['user', $userId]))) {
} self::$inputNotices['registrationAddId'] = 'Identifiant invalide';
// Le compte existe déjà
foreach ($this->getData(['user']) as $usersId => $user) {
if ($user['mail'] === $this->getInput('registrationAddMail', helper::FILTER_MAIL, true)) {
self::$inputNotices['registrationAddMail'] = 'Vous ne pouvez pas utilisez cette boite mail';
$check = false; $check = false;
break;
} }
} // Le compte existe déjà
// Données de l'utilisateur foreach ($this->getData(['user']) as $usersId => $user) {
$userFirstname = $this->getInput('registrationAddFirstname', helper::FILTER_STRING_SHORT, true); if ($user['mail'] === $this->getInput('registrationAddMail', helper::FILTER_MAIL, true)) {
$userLastname = $this->getInput('registrationAddLastname', helper::FILTER_STRING_SHORT, true); self::$inputNotices['registrationAddMail'] = 'Vous ne pouvez pas utilisez cette boite mail';
$userMail = $this->getInput('registrationAddMail', helper::FILTER_MAIL, true); $check = false;
// Pas de nom saisi break;
if (
empty($userFirstname) ||
empty($userLastname)
) {
$check = false;
}
// Si tout est ok
if ($check === true) {
// Enregistrement du compte dans les données du module
$auth = uniqid('', true);
$this->setData([
'module',
$this->getUrl(0),
'users',
$userId,
[
'firstname' => $userFirstname,
'lastname' => $userLastname,
'mail' => $userMail,
'password' => '',
// pas de groupe afin de le différencier dans la liste des users
'timer' => time(),
'auth' => $auth,
'status' => self::STATUS_EMAIL_AWAITING
]
]);
// Mail d'avertissement aux administrateurs
// Utilisateurs dans le groupe admin
$to = [];
foreach ($this->getData(['user']) as $key => $user) {
if ($user['group'] == self::GROUP_ADMIN) {
$to[] = $user['mail'];
} }
} }
// Envoi du mail à l'administrateur // Données de l'utilisateur
if ($check && is_array($to)) { $userFirstname = $this->getInput('registrationAddFirstname', helper::FILTER_STRING_SHORT, true);
$this->sendMail( $userLastname = $this->getInput('registrationAddLastname', helper::FILTER_STRING_SHORT, true);
$to, $userMail = $this->getInput('registrationAddMail', helper::FILTER_MAIL, true);
'Auto-inscription sur le site ' . $this->getData(['config', 'title']), // Pas de nom saisi
'<p>Un nouveau membre s\'est inscrit, son email est en attente de validation</p>' . if (
'<p><strong>Identifiant du compte :</strong> ' . $userId . ' (' . $userFirstname . ' ' . $userLastname . ')<br>' . empty($userFirstname) ||
'<strong>Email :</strong> ' . $userMail . '</p>' . empty($userLastname)
'<a href="' . helper::baseUrl() . 'user/login/' . strip_tags(str_replace('/', '_', $this->getUrl(0) . '/users')) . '">Validation de l\'inscription</a>', ) {
null, $check = false;
$this->getData(['config', 'smtp', 'from'])
);
} }
// Si tout est ok
if ($check === true) {
// Enregistrement du compte dans les données du module
$auth = uniqid('', true);
$this->setData([
'module',
$this->getUrl(0),
'users',
$userId,
[
'firstname' => $userFirstname,
'lastname' => $userLastname,
'mail' => $userMail,
'password' => '',
// pas de groupe afin de le différencier dans la liste des users
'timer' => time(),
'auth' => $auth,
'status' => self::STATUS_EMAIL_AWAITING
]
]);
// Mail d'avertissement aux administrateurs
// Utilisateurs dans le groupe admin
$to = [];
foreach ($this->getData(['user']) as $key => $user) {
if ($user['group'] == self::GROUP_ADMIN) {
$to[] = $user['mail'];
}
}
// Envoi du mail à l'administrateur
if ($check && is_array($to)) {
$this->sendMail(
$to,
'Auto-inscription sur le site ' . $this->getData(['config', 'title']),
'<p>Un nouveau membre s\'est inscrit, son email est en attente de validation</p>' .
'<p><strong>Identifiant du compte :</strong> ' . $userId . ' (' . $userFirstname . ' ' . $userLastname . ')<br>' .
'<strong>Email :</strong> ' . $userMail . '</p>' .
'<a href="' . helper::baseUrl() . 'user/login/' . strip_tags(str_replace('/', '_', $this->getUrl(0) . '/users')) . '">Validation de l\'inscription</a>',
null,
$this->getData(['config', 'smtp', 'from'])
);
}
// Mail de confirmation à l'utilisateur // Mail de confirmation à l'utilisateur
// forger le lien de vérification // forger le lien de vérification
$validateLink = helper::baseUrl(true) . $this->getUrl() . '/validate/' . $userId . '/' . $auth; $validateLink = helper::baseUrl(true) . $this->getUrl() . '/validate/' . $userId . '/' . $auth;
// Envoi // Envoi
if ($check) { if ($check) {
$sentMailtoUser = $this->sendMail( $sentMailtoUser = $this->sendMail(
$userMail, $userMail,
'Confirmation de votre inscription', 'Confirmation de votre inscription',
'<p>' . $this->getdata(['module', $this->getUrl(0), 'config', 'mailRegisterContent']) . '</p>' . '<p>' . $this->getdata(['module', $this->getUrl(0), 'config', 'mailRegisterContent']) . '</p>' .
'<p><a href="' . $validateLink . '">Activer votre compte<a/>' . '</p>' . '<p><a href="' . $validateLink . '">Activer votre compte<a/>' . '</p>' .
'<p>ou copiez collez le lien suivant dans un navigateur : ' . $validateLink . '</p>' '<p>ou copiez collez le lien suivant dans un navigateur : ' . $validateLink . '</p>'
, ,
null, null,
$this->getData(['config', 'smtp', 'from']) $this->getData(['config', 'smtp', 'from'])
); );
}
} }
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl(),
//'redirect' => $validateLink,
'notification' => $sentMailtoUser ? "Un mail vous a été envoyé." : 'Quelque chose n\'a pas fonctionné !',
'state' => $sentMailtoUser ? true : false
]);
} }
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl(),
//'redirect' => $validateLink,
'notification' => $sentMailtoUser ? "Un mail vous a été envoyé." : 'Quelque chose n\'a pas fonctionné !',
'state' => $sentMailtoUser ? true : false
]);
} }
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([