Hello,
With the help of the documentation and some shopkit code, I try to create a page for the registration of a user.
My controller works well!
I would like your opinion on the code …
Is it correct?
(The code contains explanations in French.)
Controller:
<?php
return function ($site, $pages, $page) {
// Ne pas afficher l'écran de connexion aux utilisateurs déjà connectés
if($site->user()) go('/');
$error = null;
if(r::is('post') && get('register')) {
// Disons au robot que tout va bien
if(!empty(get('subject'))) {
go($page->url());
exit;
}
// Le nom d'utilisateur sera l'adresse courriel avec la ponctuation supprimée.
// Les utilisateurs finaux ne l'utiliseront pas, nous avons juste besoin d'un ID unique pour le compte.
$username = str::slug(get('email'),'');
// Vérifie les doublons de comptes
$duplicateEmail = $site->users()->findBy('email',trim(get('email')));
$duplicateUsername = $site->users()->findBy('username',$username);
if(count($duplicateEmail) === 0 and count($duplicateUsername) === 0) {
try {
// Mot de passe aléatoire pour la configuration initiale.
// L'utilisateur va créer son propre mot de passe après la vérification par adresse courriel.
$password = bin2hex(openssl_random_pseudo_bytes(16));
// Créer un compte
$user = $site->users()->create(array(
'username' => $username,
'firstname' => trim(get('firstname')),
'lastname' => trim(get('lastname')),
'email' => trim(get('email')),
'password' => $password,
'language' => 'en'
));
// Envoyer un email de réinitialisation
if(resetPassword($user->email(),true)) {
$success = 'Votre compte vient d\'être créé! Vous allez recevoir un courriel afin de l\'activer.';
} else {
$error = 'Nous n\'avons pas réussi à envoyer votre courriel de vérification de compte. Contactez directement le propriétaire du magasin afin d\'activer votre compte.';
}
} catch(Exception $e) {
$error = 'Assurez-vous d\'avoir inscrit toute les infos correctement, y compris votre courriel.';
}
} else {
$error = 'Un compte a déjà été créé avec cette adresse email.';
}
}
// Passer les variables au modèle
return compact('error', 'success');
};
Template:
<?php snippet('header') ?>
<main class="main" role="main">
<?php if(isset($success)): ?>
<div class="alert success">
<?= $success ?>
</div>
<?php endif ?>
<?php if($error): ?>
<div class="alert error">
<p><?= $error ?></p>
</div>
<?php endif ?>
<h1 class="title center"><?= $page->subtitle()->or($page->title()) ?></h1>
<?php if(!isset($success)): ?>
<form method="post" class="burger">
<div class="field">
<label for="firstname">Prénom</label>
<input type="text" id="firstname" name="firstname" value="<?= get('firstname') ?>">
</div>
<div class="field">
<label for="lastname">Nom</label>
<input type="text" id="lastname" name="lastname" value="<?= get('lastname') ?>">
</div>
<div class="field">
<label for="email">Adresse email</label>
<input type="text" id="email" name="email" value="<?= get('email') ?>">
</div>
<div class="field honeypot">
<label for="subject">Honeypot</label>
<input type="text" id="subject" name="subject">
<small class="help">For Robots.</small>
</div>
<div class="field">
<input class="btn" type="submit" name="register" value="Inscription">
<a class="link" href="<?= url('login') ?>">Se connecter</a>
</div>
</form>
<?php endif ?>
</main>
<?php snippet('footer') ?>