MonVinDirect Posted November 26, 2013 Share Posted November 26, 2013 (edited) Concerne la version 1.5 de prestashop Voilà, après avoir pas mal cherché, je poste la solution que j'ai trouvée. l'enregistrement d'un client se fait dans function processSubmitAccount() de la class AuthControllerCore Dans cette fonction, la validité de la date de naissance est testée avec la fonction isBirthday() de la class Validate. Le retour de cette fonction conditionne l'enregistrement du client. Le principe consiste donc à influer sur le résultat de cette fonction isBirthday(). Par défaut, cette fonction retourne true si la date soumise est vide ou 0000-00-00 if (empty($date) || $date == '0000-00-00') return true; j'ai donc surchargé cette classe en ajoutant ce fichier: /override/classes/Validate.php <?php class Validate extends ValidateCore { /** * Check for birthDate validity * * @param string $date birthdate to validate * @return boolean Validity is ok or not */ public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') return false; if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d')) return false; return true; } return false; } } comme souvent, c'est pas mal de recherches pour une solution qui tient en quelques ligne (5 lettres en l’occurrence... ). j'espère que ça vous servira pour vos développements. Edited November 26, 2013 by MonVinDirect (see edit history) Link to comment Share on other sites More sharing options...
MonVinDirect Posted November 26, 2013 Author Share Posted November 26, 2013 Il n'y a plus qu'à indiquer au client que le champs est requis en modifiant les templates. Ajouter le code suivant : <sup>*</sup> à toutes les déclarations : <label>{l s='Date of Birth'}<sup>*</sup></label> Link to comment Share on other sites More sharing options...
MonVinDirect Posted November 26, 2013 Author Share Posted November 26, 2013 Je me suis rendu compte que le client peut modifier sa date de naissance une fois inscrit car, de base, le contrôle s'effectue à la création mais plus par la suite. Nous allons donc surcharger IdentityController.php (copie de controller/front/IdentityController.php vers override/controller/front/IdentityController.php) en ajoutant ces 2 lignes : elseif (!Validate::isBirthDate($this->customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth.'); Link to comment Share on other sites More sharing options...
MonVinDirect Posted November 27, 2013 Author Share Posted November 27, 2013 Je viens de me rendre compte d'un problème lié cette modif (celle de isBirthDate). J'avais passé le champ birthday de la base de données (table customer) à NOT NULL pour voir si ça empêchait l'enregistrement, les clients n'ayant pas rempli de date de naissance sont passés avec une date 0000-00-00. Vu que isBirthDate ne valide plus ce format de date à cause de if (empty($date) || $date == '0000-00-00') return false; le client ne peu plus accéder à sa page "infos perso" en raison d'une erreur de validation de cette date. Link to comment Share on other sites More sharing options...
MonVinDirect Posted November 27, 2013 Author Share Posted November 27, 2013 j'ai donc modifié à nouveau la fonction isBirthDate(): <?php class Validate extends ValidateCore { /** * Check for birthDate validity * * @param string $date birthdate to validate * @return boolean Validity is ok or not */ public static function isBirthDate($date) { if (empty($date) ) return false; if ($date == '0000-00-00') return true; if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d')) return false; return true; } return false; } } Link to comment Share on other sites More sharing options...
lordbdp Posted December 11, 2014 Share Posted December 11, 2014 (edited) Je me suis rendu compte que le client peut modifier sa date de naissance une fois inscrit car, de base, le contrôle s'effectue à la création mais plus par la suite. Nous allons donc surcharger IdentityController.php (copie de controller/front/IdentityController.php vers override/controller/front/IdentityController.php) en ajoutant ces 2 lignes : elseif (!Validate::isBirthDate($this->customer->birthday)) $this->errors[] = Tools::displayError('Invalid date of birth.'); 1) Tu intègres ces lignes après laquelle dans le fichier stp ? 2) Comment cela se passera pour un client déjà inscrit sans date de naissance précisée puisqu'il ne pourra plus la modifier ? Edited December 11, 2014 by lordbdp (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now